X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0f820c97cacb0a0ba4346531dd8e34d74e1f14a0..c1e5e881345b78de4184f39ed6d115f796ec8a9f:/src/msw/dc.cpp diff --git a/src/msw/dc.cpp b/src/msw/dc.cpp index 8af1f9b506..f339b4dafe 100644 --- a/src/msw/dc.cpp +++ b/src/msw/dc.cpp @@ -48,9 +48,6 @@ #include "wx/msw/private.h" // needs to be before #include #if wxUSE_COMMON_DIALOGS -#if wxUSE_NORLANDER_HEADERS - #include -#endif #include #endif @@ -363,10 +360,8 @@ void wxDC::DoDrawLine(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2) (void)MoveToEx(GetHdc(), XLOG2DEV(x1), YLOG2DEV(y1), NULL); (void)LineTo(GetHdc(), XLOG2DEV(x2), YLOG2DEV(y2)); - /* MATTHEW: [6] New normalization */ -#if WX_STANDARD_GRAPHICS + // Normalization: Windows doesn't draw the last point of the line (void)LineTo(GetHdc(), XLOG2DEV(x2) + 1, YLOG2DEV(y2)); -#endif CalcBoundingBox(x1, y1); CalcBoundingBox(x2, y2); @@ -414,6 +409,41 @@ void wxDC::DoDrawArc(wxCoord x1,wxCoord y1,wxCoord x2,wxCoord y2, wxCoord xc, wx CalcBoundingBox((wxCoord)(xc+radius), (wxCoord)(yc+radius)); } +void wxDC::DoDrawCheckMark(wxCoord x1, wxCoord y1, + wxCoord width, wxCoord height) +{ + wxCoord x2 = x1 + width, + y2 = y1 + height; + +#if defined(__WIN32__) && !defined(__SC__) + RECT rect; + rect.left = x1; + rect.top = y1; + rect.right = x2; + rect.bottom = y2; + + DrawFrameControl(GetHdc(), &rect, DFC_MENU, DFCS_MENUCHECK); +#else // Win16 + // In WIN16, draw a cross + HPEN blackPen = ::CreatePen(PS_SOLID, 1, RGB(0, 0, 0)); + HPEN whiteBrush = (HPEN)::GetStockObject(WHITE_BRUSH); + HPEN hPenOld = (HPEN)::SelectObject(hdcMem, blackPen); + HPEN hBrushOld = (HPEN)::SelectObject(hdcMem, whiteBrush); + ::SetROP2(GetHdc(), R2_COPYPEN); + Rectangle(GetHdc(), x1, y1, x2, y2); + MoveTo(GetHdc(), x1, y1); + LineTo(GetHdc(), x2, y2); + MoveTo(GetHdc(), x2, y1); + LineTo(GetHdc(), x1, y2); + ::SelectObject(GetHdc(), hPenOld); + ::SelectObject(GetHdc(), hBrushOld); + ::DeleteObject(blackPen); +#endif // Win32/16 + + CalcBoundingBox(x1, y1); + CalcBoundingBox(x2, y2); +} + void wxDC::DoDrawPoint(wxCoord x, wxCoord y) { COLORREF color = 0x00ffffff; @@ -550,8 +580,8 @@ void wxDC::DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height) // to have the same size regardless of which pen is used - adjust if ( m_pen.GetStyle() == wxTRANSPARENT ) { -// x2++; -// y2++; + x2++; + y2++; } (void)Rectangle(GetHdc(), XLOG2DEV(x), YLOG2DEV(y), XLOG2DEV(x2), YLOG2DEV(y2)); @@ -586,6 +616,15 @@ void wxDC::DoDrawRoundedRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord h wxCoord x2 = (x+width); wxCoord y2 = (y+height); + // Windows draws the filled rectangles without outline (i.e. drawn with a + // transparent pen) one pixel smaller in both directions and we want them + // to have the same size regardless of which pen is used - adjust + if ( m_pen.GetStyle() == wxTRANSPARENT ) + { + x2++; + y2++; + } + (void)RoundRect(GetHdc(), XLOG2DEV(x), YLOG2DEV(y), XLOG2DEV(x2), YLOG2DEV(y2), (int) (2*XLOG2DEV(radius)), (int)( 2*YLOG2DEV(radius)));