void wxChartPanel::RedrawBackBitmap() { if (m_chart != NULL) { wxMemoryDC mdc; mdc.SelectObject(m_backBitmap); const wxRect &rc = GetClientRect(); // Using graphics context instead of normal DC // allows antialiasing and other features, // i tested it on Linux-wxGTK-2.8.8 and on Windows(tm)-wxWidgets-2.8.8 // there is bug with wxSHORT_DASH pen style, it drawing hungs, // when wxGCDC used #if wxUSE_GRAPHICS_CONTEXT if (m_antialias) { wxGCDC gdc(mdc); m_chart->Draw((wxDC&) gdc, (wxRect&) rc); } else { m_chart->Draw(mdc, (wxRect&) rc); } #else m_chart->Draw(mdc, (wxRect&) rc); #endif } }
void v550_state::v550(machine_config &config) { Z80(config, m_maincpu, 34.846_MHz_XTAL / 16); // NEC D780C (2.177875 MHz verified) m_maincpu->set_addrmap(AS_PROGRAM, &v550_state::mem_map); m_maincpu->set_addrmap(AS_IO, &v550_state::io_map); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // NEC D444C-2 + battery upd7220_device &gdc(UPD7220(config, "gdc", 34.846_MHz_XTAL / 16)); // NEC D7220D (2.177875 MHz verified) gdc.set_screen("screen"); I8255(config, "ppi"); // NEC D8255AC-5 I8251(config, m_usart, 34.846_MHz_XTAL / 16); // NEC D8251AC m_usart->rxrdy_handler().set("mainint", FUNC(input_merger_device::in_w<1>)); upd7201_new_device& mpsc(UPD7201_NEW(config, "mpsc", 34.846_MHz_XTAL / 16)); // NEC D7201C mpsc.out_int_callback().set("mainint", FUNC(input_merger_device::in_w<0>)); INPUT_MERGER_ANY_HIGH(config, "mainint").output_handler().set_inputline(m_maincpu, INPUT_LINE_IRQ0); com8116_device &brg1(COM8116(config, "brg1", 5068800)); // actually SMC COM8116T-020 (unknown clock) brg1.ft_handler().set("mpsc", FUNC(upd7201_new_device::txca_w)); brg1.fr_handler().set("mpsc", FUNC(upd7201_new_device::rxca_w)); com8116_device &brg2(COM8116(config, "brg2", 5068800)); // actually SMC COM8116T-020 brg2.ft_handler().set("mpsc", FUNC(upd7201_new_device::txcb_w)); brg2.ft_handler().append("mpsc", FUNC(upd7201_new_device::rxcb_w)); brg2.fr_handler().set("usart", FUNC(i8251_device::write_txc)); brg2.fr_handler().append("usart", FUNC(i8251_device::write_rxc)); mcs48_cpu_device &kbdmcu(I8035(config, "kbdmcu", 4'608'000)); kbdmcu.set_addrmap(AS_PROGRAM, &v550_state::kbd_map); SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_raw(34.846_MHz_XTAL, 19 * 102, 0, 19 * 80, 295, 0, 272); m_screen->set_screen_update(FUNC(v550_state::screen_update)); scn2672_device &pvtc(SCN2672(config, "pvtc", 34.846_MHz_XTAL / 19)); pvtc.set_addrmap(0, &v550_state::pvtc_char_map); pvtc.set_addrmap(1, &v550_state::pvtc_attr_map); pvtc.set_character_width(19); pvtc.intr_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); pvtc.set_screen("screen"); // SCB2673 clock verified at 17.423 MHz }
void wxGenericColourDialog::DoPreviewBitmap(wxBitmap& bmp, const wxColour& colour) { if ( bmp.HasAlpha() && colour.Alpha() != wxALPHA_OPAQUE ) { // For real ARGB draw a chessboard grid // with actual ARGB fields and reference RGB fields. const int w = bmp.GetWidth(); const int h = bmp.GetHeight(); // Calculate field size: 4 fields per row/column, // with size in range [2..10] int dx = wxMax(wxMin(w / 4, 10), 2); int dy = wxMax(wxMin(h / 4, 10), 2); // We want a square field dx = wxMax(dx, dy); dy = dx; // Prepare opaque colour wxColour colourRGB(colour.Red(), colour.Green(), colour.Blue(), wxALPHA_OPAQUE); { wxBrush brushARGB(colour); wxBrush brushRGB(colourRGB); wxMemoryDC mdc(bmp); { wxGCDC gdc(mdc); gdc.SetPen(*wxTRANSPARENT_PEN); for (int x = 0, ix = 0; x < w; x += dx, ix++) { for (int y = 0, iy = 0; y < h; y += dy, iy++) { if ( (ix+iy) % 2 == 0 ) { gdc.SetBrush(brushARGB); } else { gdc.SetBrush(brushRGB); } gdc.DrawRectangle(x, y, dx, dy); } } // Draw a frame gdc.SetPen(*wxBLACK_PEN); gdc.SetBrush(*wxTRANSPARENT_BRUSH); gdc.DrawRectangle(0, 0, w, h); } } } else { wxMemoryDC mdc(bmp); // Fill with custom colour wxBrush brush(colour); mdc.SetPen(*wxBLACK_PEN); mdc.SetBrush(brush); mdc.DrawRectangle(wxPoint(0, 0), bmp.GetSize()); } }