]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/dc.cpp
(blind) fixes for Motif compilation
[wxWidgets.git] / src / os2 / dc.cpp
index 2de4ebe67253fd915852dcf918445633458620b2..deb5403652e29d99ae65504ed4ae0d122a7ecb5c 100644 (file)
@@ -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)
 {
@@ -1223,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
                           );