X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d6d749aaeb8b68596e64b84882bb51a39086ce3e..9dd96c0f6d5da873324f4013252061c69ed0d61c:/src/os2/dc.cpp diff --git a/src/os2/dc.cpp b/src/os2/dc.cpp index 0bebb4a064..9715d7754c 100644 --- a/src/os2/dc.cpp +++ b/src/os2/dc.cpp @@ -24,6 +24,9 @@ #include "wx/icon.h" #include "wx/msgdlg.h" #include "wx/module.h" +#if wxUSE_STATUSBAR + #include "wx/statusbr.h" +#endif #endif #include "wx/dcprint.h" @@ -672,6 +675,16 @@ void wxDC::DoDrawLine( vY1 = OS2Y(vY1,0); vY2 = OS2Y(vY2,0); } + else + { + if (m_vSelectedBitmap != wxNullBitmap) + { + m_vRclPaint.yTop = m_vSelectedBitmap.GetHeight(); + m_vRclPaint.xRight = m_vSelectedBitmap.GetWidth(); + vY1 = OS2Y(vY1,0); + vY2 = OS2Y(vY2,0); + } + } vPoint[0].x = vX1; vPoint[0].y = vY1; vPoint[1].x = vX2; @@ -1000,6 +1013,15 @@ void wxDC::DoDrawRectangle( m_vRclPaint.xRight == 0 && m_vRclPaint.xLeft == 0)) vY = OS2Y(vY,vHeight); + else + { + if (m_vSelectedBitmap != wxNullBitmap) + { + m_vRclPaint.yTop = m_vSelectedBitmap.GetHeight(); + m_vRclPaint.xRight = m_vSelectedBitmap.GetWidth(); + vY = OS2Y(vY,vHeight); + } + } wxCoord vX2 = vX + vWidth; wxCoord vY2 = vY + vHeight; @@ -1019,7 +1041,7 @@ void wxDC::DoDrawRectangle( if(m_brush.GetStyle() == wxTRANSPARENT) lControl = DRO_OUTLINE; - ::GpiSetColor(m_hPS, lColor); + ::GpiSetColor(m_hPS, lBorderColor); ::GpiBox( m_hPS // handle to a presentation space ,lControl // draw the box outline ? or ? ,&vPoint[1] // address of the corner @@ -1069,6 +1091,9 @@ void wxDC::DoDrawRoundedRectangle( { POINTL vPoint[2]; LONG lControl; + LONG lColor; + LONG lBorderColor; + int nIsTRANSPARENT = 0; // // Might be a memory DC with no Paint rect. @@ -1078,25 +1103,73 @@ void wxDC::DoDrawRoundedRectangle( m_vRclPaint.xRight == 0 && m_vRclPaint.xLeft == 0)) vY = OS2Y(vY,vHeight); + else + { + if (m_vSelectedBitmap != wxNullBitmap) + { + m_vRclPaint.yTop = m_vSelectedBitmap.GetHeight(); + m_vRclPaint.xRight = m_vSelectedBitmap.GetWidth(); + vY = OS2Y(vY,vHeight); + } + } wxCoord vX2 = (vX + vWidth); wxCoord vY2 = (vY + vHeight); vPoint[0].x = vX; - vPoint[0].y = YLOG2DEV(vY) - vHeight; - vPoint[1].x = vX + vWidth; - vPoint[1].y = vY; + vPoint[0].y = vY; + vPoint[1].x = vX + vWidth - 1; + vPoint[1].y = vY + vHeight - 1; ::GpiMove(m_hPS, &vPoint[0]); + lColor = m_brush.GetColour().GetPixel(); + lBorderColor = m_pen.GetColour().GetPixel(); lControl = DRO_OUTLINEFILL; //DRO_FILL; if (m_brush.GetStyle() == wxTRANSPARENT) + nIsTRANSPARENT = 1; + if(lColor == lBorderColor || nIsTRANSPARENT) + { + lControl = DRO_OUTLINEFILL; //DRO_FILL; + if(m_brush.GetStyle() == wxTRANSPARENT) + lControl = DRO_OUTLINE; + + ::GpiSetColor(m_hPS, lColor); + ::GpiBox( m_hPS // handle to a presentation space + ,lControl // draw the box outline ? or ? + ,&vPoint[1] // address of the corner + ,(LONG)dRadius // horizontal corner radius + ,(LONG)dRadius // vertical corner radius + ); + } + else + { lControl = DRO_OUTLINE; - ::GpiBox( m_hPS // handle to a presentation space - ,DRO_OUTLINE // draw the box outline ? or ? - ,&vPoint[1] // address of the corner - ,(LONG)dRadius // horizontal corner radius - ,(LONG)dRadius // vertical corner radius - ); + ::GpiSetColor( m_hPS + ,lBorderColor + ); + ::GpiBox( m_hPS + ,lControl + ,&vPoint[1] + ,(LONG)dRadius + ,(LONG)dRadius + ); + lControl = DRO_FILL; + ::GpiSetColor( m_hPS + ,lColor + ); + vPoint[0].x = vX + 1; + vPoint[0].y = vY + 1; + vPoint[1].x = vX + vWidth - 2; + vPoint[1].y = vY + vHeight - 2; + ::GpiMove(m_hPS, &vPoint[0]); + ::GpiBox( m_hPS + ,lControl + ,&vPoint[1] + ,(LONG)dRadius + ,(LONG)dRadius + ); + } + CalcBoundingBox(vX, vY); CalcBoundingBox(vX2, vY2); } // end of wxDC::DoDrawRoundedRectangle @@ -1240,17 +1313,18 @@ void wxDC::DoDrawBitmap( { HBITMAP hBitmap = (HBITMAP)rBmp.GetHBITMAP(); HBITMAP hBitmapOld; + POINTL vPoint[4]; vY = OS2Y(vY,rBmp.GetHeight()); - // - // Flip the picture as OS/2 is upside-down - // - POINTL vPoint[4] = { vX, vY + rBmp.GetHeight() - ,vX + rBmp.GetWidth(), vY - ,0, 0 - ,rBmp.GetWidth(), rBmp.GetHeight() - }; + vPoint[0].x = vX; + vPoint[0].y = vY + rBmp.GetHeight(); + vPoint[1].x = vX + rBmp.GetWidth(); + vPoint[1].y = vY; + vPoint[2].x = 0; + vPoint[2].y = 0; + vPoint[3].x = rBmp.GetWidth(); + vPoint[3].y = rBmp.GetHeight(); if (bUseMask) { wxMask* pMask = rBmp.GetMask(); @@ -1319,11 +1393,11 @@ void wxDC::DoDrawBitmap( // // Need to get a background color for mask blitting // - if (IsKindOf(CLASSINFO(wxPaintDC))) + if (IsKindOf(CLASSINFO(wxWindowDC))) { - wxPaintDC* pPaintDC = wxDynamicCast(this, wxPaintDC); + wxWindowDC* pWindowDC = wxDynamicCast(this, wxWindowDC); - lColor = pPaintDC->m_pCanvas->GetBackgroundColour().GetPixel(); + lColor = pWindowDC->m_pCanvas->GetBackgroundColour().GetPixel(); } else if (GetBrush() != wxNullBrush) lColor = GetBrush().GetColour().GetPixel(); @@ -1698,9 +1772,29 @@ void wxDC::DrawAnyText( m_vRclPaint.yBottom == 0 && m_vRclPaint.xRight == 0 && m_vRclPaint.xLeft == 0)) - vPtlStart.y = OS2Y(vY,vTextY); + { + // + // Position Text a little differently in the Statusbar from other panels + // + if (m_pCanvas && m_pCanvas->IsKindOf(CLASSINFO(wxStatusBar))) + vPtlStart.y = OS2Y(vY,vTextY); + else + vPtlStart.y = OS2Y(vY,vTextY/1.5); // Full extent is a bit much + } else - vPtlStart.y = vY; + { + if (m_vSelectedBitmap != wxNullBitmap) + { + m_vRclPaint.yTop = m_vSelectedBitmap.GetHeight(); + m_vRclPaint.xRight = m_vSelectedBitmap.GetWidth(); + if (m_pCanvas && m_pCanvas->IsKindOf(CLASSINFO(wxStatusBar))) + vPtlStart.y = OS2Y(vY,vTextY); + else + vPtlStart.y = OS2Y(vY,vTextY/1.5); + } + else + vPtlStart.y = vY; + } PCH pzStr = (PCH)rsText.c_str(); @@ -2793,18 +2887,5 @@ void wxDC::SetLogicalScale( m_logicalScaleY = dY; }; // end of wxDC::SetLogicalScale -#if WXWIN_COMPATIBILITY -void wxDC::DoGetTextExtent(const wxString& string, float *x, float *y, - float *descent, float *externalLeading, - wxFont *theFont, bool use16bit) const -{ - wxCoord x1, y1, descent1, externalLeading1; - GetTextExtent(string, & x1, & y1, & descent1, & externalLeading1, theFont, use16bit); - *x = x1; *y = y1; - if (descent) - *descent = descent1; - if (externalLeading) - *externalLeading = externalLeading1; -} -#endif +