X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/26ac77dbe2e99a137619ce316dd5fbaa5bb81093..ce1ecc6d48415cf3b348e42b1e53ae2333d9098a:/src/os2/dc.cpp diff --git a/src/os2/dc.cpp b/src/os2/dc.cpp index 3f0fae3eb1..deb5403652 100644 --- a/src/os2/dc.cpp +++ b/src/os2/dc.cpp @@ -146,13 +146,13 @@ wxDC::wxDC(void) m_nDCCount = 0; m_hOldPS = NULL; m_hPS = NULL; - m_bIsPaintTime = FALSE;// True at Paint Time -}; + m_bIsPaintTime = FALSE; // True at Paint Time + m_brush.GetColour().Set("WHITE"); +} wxDC::~wxDC(void) { - // TODO: -}; +} // This will select current objects out of the DC, // which is what you have to do before deleting the @@ -227,9 +227,9 @@ void wxDC::DoSetClippingRegion( m_clipping = TRUE; vRect.xLeft = XLOG2DEV(x); - vRect.yTop = YLOG2DEV(y + height); + vRect.yTop = YLOG2DEV(m_vRclPaint.yTop - y); vRect.xRight = XLOG2DEV(x + width); - vRect.yBottom = YLOG2DEV(y); + vRect.yBottom = YLOG2DEV(m_vRclPaint.yTop - (y + height)); ::GpiIntersectClipRectangle(m_hPS, &vRect); DO_SET_CLIPPING_BOX() } // end of wxDC::DoSetClippingRegion @@ -361,9 +361,9 @@ void wxDC::DoDrawLine( POINTL vPoint[2]; vPoint[0].x = vX1; - vPoint[0].y = vY1; + vPoint[0].y = m_vRclPaint.yTop - vY1; vPoint[1].x = vX2; - vPoint[1].y = vY2; + vPoint[1].y = m_vRclPaint.yTop - vY2; ::GpiMove(m_hPS, &vPoint[0]); ::GpiLine(m_hPS, &vPoint[1]); } @@ -425,19 +425,13 @@ void wxDC::DoDrawArc( dAnglmid = (dAngl1 + dAngl2)/2. + M_PI; vXm = vXc + dRadius * cos(dAnglmid); vYm = vYc + dRadius * sin(dAnglmid); - DoDrawArc( vX1 - ,vY1 - ,vXm - ,vYm - ,vXc - ,vYc + DoDrawArc( vX1, vY1 + ,vXm, vYm + ,vXc, vYc ); - DoDrawArc( vXm - ,vYm - ,vX2 - ,vY2 - ,vXc - ,vYc + DoDrawArc( vXm, vYm + ,vX2, vY2 + ,vXc, vYc ); return; } @@ -461,8 +455,8 @@ void wxDC::DoDrawArc( vPtlPos.x = vX1; // Loads x-coordinate vPtlPos.y = vY1; // Loads y-coordinate ::GpiMove(m_hPS, &vPtlPos); // Sets current position - vPtlArc[0].x = vXm; - vPtlArc[0].y = vYm; + vPtlArc[0].x = vXm; + vPtlArc[0].y = vYm; vPtlArc[1].x = vX2; vPtlArc[1].y = vY2; ::GpiPointArc(m_hPS, vPtlArc); // Draws the arc @@ -513,7 +507,7 @@ void wxDC::DoDrawPoint( POINTL vPoint; vPoint.x = vX; - vPoint.y = vY; + vPoint.y = m_vRclPaint.yTop - vY; ::GpiSetPel(m_hPS, &vPoint); } @@ -628,9 +622,9 @@ void wxDC::DoDrawRectangle( int nIsTRANSPARENT = 0; vPoint[0].x = vX; - vPoint[0].y = vY; + vPoint[0].y = m_vRclPaint.yTop - (vY + vHeight); vPoint[1].x = vX + vWidth; - vPoint[1].y = vY - vHeight; + vPoint[1].y = m_vRclPaint.yTop - vY; ::GpiMove(m_hPS, &vPoint[0]); lColor = m_brush.GetColour().GetPixel(); lBorderColor = m_pen.GetColour().GetPixel(); @@ -642,7 +636,7 @@ void wxDC::DoDrawRectangle( if(m_brush.GetStyle() == wxTRANSPARENT) lControl = DRO_OUTLINE; - ::GpiSetColor(m_hPS, CLR_GREEN); + ::GpiSetColor(m_hPS, lColor); ::GpiBox( m_hPS // handle to a presentation space ,lControl // draw the box outline ? or ? ,&vPoint[1] // address of the corner @@ -666,6 +660,11 @@ void wxDC::DoDrawRectangle( ::GpiSetColor( m_hPS ,lColor ); + vPoint[0].x = vX + 1; + vPoint[0].y = m_vRclPaint.yTop - (vY + vHeight) + 1; + vPoint[1].x = vX + vWidth - 2; + vPoint[1].y = m_vRclPaint.yTop - (vY + 2); + ::GpiMove(m_hPS, &vPoint[0]); ::GpiBox( m_hPS ,lControl ,&vPoint[1] @@ -687,9 +686,9 @@ void wxDC::DoDrawRoundedRectangle( LONG lControl; vPoint[0].x = vX; - vPoint[0].y = vY; + vPoint[0].y = YLOG2DEV(vY) - vHeight; vPoint[1].x = vX + vWidth; - vPoint[1].y = vY + vHeight; + vPoint[1].y = vY; ::GpiMove(m_hPS, &vPoint[0]); lControl = DRO_OUTLINEFILL; //DRO_FILL; @@ -962,22 +961,19 @@ void wxDC::SetFont( // if (m_hOldFont) { -// ::SelectObject(GetHdc(), (HFONT) m_hOldFont); m_hOldFont = 0; } - m_font = rFont; - if (!rFont.Ok()) { - if (m_hOldFont) -// ::SelectObject(GetHdc(), (HFONT) m_hOldFont); m_hOldFont = 0; } - if (m_font.Ok() && m_font.GetResourceHandle()) + m_font.SetPS(m_hPS); // this will realize the font + + if (m_font.Ok()) { - HFONT hFont = (HFONT)0; //::SelectObject(GetHdc(), (HFONT) m_font.GetResourceHandle()); + HFONT hFont = m_font.GetResourceHandle(); if (hFont == (HFONT) NULL) { wxLogDebug(wxT("::SelectObject failed in wxDC::SetFont.")); @@ -985,7 +981,7 @@ void wxDC::SetFont( if (!m_hOldFont) m_hOldFont = (WXHFONT) hFont; } -} +} // end of wxDC::SetFont void wxDC::SetPen( const wxPen& rPen @@ -1021,15 +1017,43 @@ void wxDC::SetPen( m_hOldPen = m_pen.GetPS(); } } - } void wxDC::SetBrush( const wxBrush& rBrush ) { - // TODO -} + wxCHECK_RET( Ok(), wxT("invalid window dc") ); + + if (m_brush == rBrush) + return; + m_brush = rBrush; + if (!m_brush.Ok()) + return; + + if (m_hOldBrush) + m_hOldBrush = 0L; + m_brush = rBrush; + + if (!m_brush.Ok()) + { + if (m_hOldBrush) + { + m_brush.SetPS((HPS)m_hOldBrush); + } + m_hOldBrush = 0L; + } + + if (m_brush.Ok()) + { + if (m_brush.GetResourceHandle()) + { + m_brush.SetPS(m_hPS); + if (!m_hOldBrush) + m_hOldBrush = m_brush.GetPS(); + } + } +} // end of wxDC::SetBrush void wxDC::SetBackground(const wxBrush& brush) { @@ -1104,14 +1128,24 @@ void wxDC::EndPage() wxCoord wxDC::GetCharHeight() const { - // TODO - return(8); + FONTMETRICS vFM; // metrics structure + + ::GpiQueryFontMetrics( m_hPS + ,sizeof(FONTMETRICS) + ,&vFM + ); + return YDEV2LOGREL(vFM.lXHeight); } wxCoord wxDC::GetCharWidth() const { - // TODO - return(8); + FONTMETRICS vFM; // metrics structure + + ::GpiQueryFontMetrics( m_hPS + ,sizeof(FONTMETRICS) + ,&vFM + ); + return XDEV2LOGREL(vFM.lAveCharWidth); } void wxDC::DoGetTextExtent( @@ -1213,10 +1247,15 @@ void wxDC::SetLogicalOrigin( wxCoord x, wxCoord y ) // TODO: }; -void wxDC::SetDeviceOrigin( wxCoord x, wxCoord y ) +void wxDC::SetDeviceOrigin( + wxCoord x +, wxCoord y +) { RECTL vRect; + m_deviceOriginX = x; + m_deviceOriginY = y; ::GpiQueryPageViewport( m_hPS ,&vRect );