X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/696e1ea0b7cee1394693a0e507bbf49c9863952b..cbf97a6cd655d44e6f7b1ffaf35be0c392532ae7:/src/msw/dc.cpp diff --git a/src/msw/dc.cpp b/src/msw/dc.cpp index 9b43f56bb7..45c51e9417 100644 --- a/src/msw/dc.cpp +++ b/src/msw/dc.cpp @@ -58,9 +58,7 @@ #include "wx/msw/private.h" -#if !USE_SHARED_LIBRARY IMPLEMENT_ABSTRACT_CLASS(wxDC, wxObject) -#endif // --------------------------------------------------------------------------- // constants @@ -734,7 +732,6 @@ void wxDC::DoDrawRotatedText(const wxString& text, // "upper left" and "upper right" CalcBoundingBox(x, y); CalcBoundingBox(x + w*cos(rad), y - h*sin(rad)); - CalcBoundingBox(x + h*sin(rad), y + h*cos(rad)); // "bottom left" and "bottom right" x += (wxCoord)(h*sin(rad)); @@ -1233,17 +1230,6 @@ bool wxDC::DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height, else #endif { - // Old code -#if 0 - HDC dc_mask = CreateCompatibleDC((HDC) source->m_hDC); - ::SelectObject(dc_mask, (HBITMAP) source->m_selectedBitmap.GetMask()->GetMaskBitmap()); - success = (BitBlt(GetHdc(), xdest1, ydest1, (int)width, (int)height, - dc_mask, xsrc1, ysrc1, 0x00220326 /* NOTSRCAND */) != 0); - success = (BitBlt(GetHdc(), xdest1, ydest1, (int)width, (int)height, - (HDC) source->m_hDC, xsrc1, ysrc1, SRCPAINT) != 0); - ::SelectObject(dc_mask, 0); - ::DeleteDC(dc_mask); -#endif // New code from Chris Breeze, 15/7/98 // Blit bitmap with mask @@ -1321,11 +1307,37 @@ bool wxDC::DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height, } else { + // If we are printing, source colours are screen colours + // not printer colours and so we need copy the bitmap + // pixel by pixel. if (IsKindOf(CLASSINFO(wxPrinterDC))) { - // If we are printing, source colours are screen colours - // not printer colours and so we need copy the bitmap - // pixel by pixel. + HDC dc_src = (HDC) source->m_hDC; + RECT rect; + for (int y = 0; y < height; y++) + { + // This is Stefan Csomor's optimisation, where + // identical adjacent pixels are drawn together. + // We still need a faster way of drawing bitmaps, + // perhaps converting to a DIB first and using SetDIBitsToDevice. + for (int x = 0; x < width; x++) + { + COLORREF col = ::GetPixel(dc_src, x, y) ; + HBRUSH brush = ::CreateSolidBrush( col ); + + rect.left = xdest1 + x; + rect.top = ydest1 + y; + while( (x + 1 < width) && (::GetPixel(dc_src, x + 1, y) == col ) ) + { + ++x ; + } + rect.right = xdest1 + x + 1; + rect.bottom = rect.top + 1; + ::FillRect((HDC) m_hDC, &rect, brush); + ::DeleteObject(brush); + } + } +/* HDC dc_src = (HDC) source->m_hDC; RECT rect; for (int x = 0; x < width; x++) @@ -1339,7 +1351,8 @@ bool wxDC::DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height, ::DeleteObject(brush); } } - } +*/ + } else { success = (BitBlt(GetHdc(), xdest1, ydest1, (int)width, (int)height, (HDC) source->m_hDC,