]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/dc.cpp
Add wxBitmap::GetNSImage() which creates an autoreleased NSImage either
[wxWidgets.git] / src / os2 / dc.cpp
index e8b4b76ba3690c123490d7ca68c0dac068c04127..cbfbce0d33059087248a1e5869e3a9d7b875a9fb 100644 (file)
     #include "wx/log.h"
     #include "wx/icon.h"
     #include "wx/msgdlg.h"
-    #include "wx/module.h"
+#if wxUSE_STATUSBAR
+    #include "wx/statusbr.h"
+#endif
 #endif
 
+#include "wx/module.h"
 #include "wx/dcprint.h"
 
 #include <string.h>
@@ -313,19 +316,19 @@ void wxDC::AddToDCCache(
 
 void wxDC::ClearCache()
 {
-    m_svBitmapCache.DeleteContents(TRUE);
+    m_svBitmapCache.DeleteContents(true);
     m_svBitmapCache.Clear();
-    m_svBitmapCache.DeleteContents(FALSE);
-    m_svDCCache.DeleteContents(TRUE);
+    m_svBitmapCache.DeleteContents(false);
+    m_svDCCache.DeleteContents(true);
     m_svDCCache.Clear();
-    m_svDCCache.DeleteContents(FALSE);
+    m_svDCCache.DeleteContents(false);
 } // end of wxDC::ClearCache
 
 // Clean up cache at app exit
 class wxDCModule : public wxModule
 {
 public:
-    virtual bool OnInit() { return TRUE; }
+    virtual bool OnInit() { return true; }
     virtual void OnExit() { wxDC::ClearCache(); }
 
 private:
@@ -342,8 +345,6 @@ IMPLEMENT_DYNAMIC_CLASS(wxDCModule, wxModule)
 
 wxDC::wxDC(void)
 {
-    wxColour                        vColor;
-
     m_pCanvas      = NULL;
 
     m_hOldBitmap   = 0;
@@ -352,16 +353,18 @@ wxDC::wxDC(void)
     m_hOldFont     = 0;
     m_hOldPalette  = 0;
 
-    m_bOwnsDC      = FALSE;
+    m_bOwnsDC      = false;
     m_hDC          = 0;
     m_hOldPS       = NULL;
     m_hPS          = NULL;
-    m_bIsPaintTime = FALSE; // True at Paint Time
+    m_bIsPaintTime = false; // True at Paint Time
 
-    vColor.InitFromName("BLACK");
+    wxColour vColor( wxT("BLACK") );
     m_pen.SetColour(vColor);
-    vColor.Set("WHITE");
+
+    vColor.Set( wxT("WHITE") );
     m_brush.SetColour(vColor);
+
 } // end of wxDC::wxDC
 
 wxDC::~wxDC(void)
@@ -456,7 +459,7 @@ void wxDC::DoSetClippingRegion(
     RECTL                           vRect;
 
     vY = OS2Y(vY,vHeight);
-    m_clipping    = TRUE;
+    m_clipping    = true;
     vRect.xLeft   = vX;
     vRect.yTop    = vY + vHeight;
     vRect.xRight  = vX + vWidth;
@@ -472,7 +475,7 @@ void wxDC::DoSetClippingRegionAsRegion(
      wxCHECK_RET(rRegion.GetHRGN(), wxT("invalid clipping region"));
      HRGN                           hRgnOld;
 
-     m_clipping = TRUE;
+     m_clipping = true;
      ::GpiSetClipRegion( m_hPS
                         ,(HRGN)rRegion.GetHRGN()
                         ,&hRgnOld
@@ -500,7 +503,7 @@ void wxDC::DestroyClippingRegion(void)
 
          ::GpiSetClipRegion(m_hPS, hRgn, &hRgnOld);
      }
-      m_clipping = FALSE;
+      m_clipping = false;
 } // end of wxDC::DestroyClippingRegion
 
 // ---------------------------------------------------------------------------
@@ -509,7 +512,7 @@ void wxDC::DestroyClippingRegion(void)
 
 bool wxDC::CanDrawBitmap() const
 {
-    return TRUE;
+    return true;
 }
 
 bool wxDC::CanGetTextExtent() const
@@ -568,7 +571,7 @@ bool wxDC::DoFloodFill(
     LONG                            lColor;
     LONG                            lOptions;
     LONG                            lHits;
-    bool                            bSuccess = FALSE;
+    bool                            bSuccess = false;
 
     vPtlPos.x = vX;             // Loads x-coordinate
     vPtlPos.y = OS2Y(vY,0);     // Loads y-coordinate
@@ -579,8 +582,9 @@ bool wxDC::DoFloodFill(
         lOptions = FF_SURFACE;
 
     if ((lHits = ::GpiFloodFill(m_hPS, lOptions, lColor)) != GPI_ERROR)
-        bSuccess = TRUE;
-    return TRUE;
+        bSuccess = true;
+
+    return true;
 } // end of wxDC::DoFloodFill
 
 bool wxDC::DoGetPixel(
@@ -1038,7 +1042,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
@@ -1147,8 +1151,8 @@ void wxDC::DoDrawRoundedRectangle(
         ::GpiBox( m_hPS
                  ,lControl
                  ,&vPoint[1]
-                 ,0L
-                 ,0L
+                 ,(LONG)dRadius
+                 ,(LONG)dRadius
                 );
         lControl = DRO_FILL;
         ::GpiSetColor( m_hPS
@@ -1162,8 +1166,8 @@ void wxDC::DoDrawRoundedRectangle(
         ::GpiBox( m_hPS
                  ,lControl
                  ,&vPoint[1]
-                 ,0L
-                 ,0L
+                 ,(LONG)dRadius
+                 ,(LONG)dRadius
                 );
     }
 
@@ -1287,13 +1291,13 @@ void wxDC::DoDrawIcon(
     //
     if (rIcon.IsXpm())
     {
-        DoDrawBitmap(rIcon.GetXpmSrc(), vX, vY, TRUE);
+        DoDrawBitmap(rIcon.GetXpmSrc(), vX, vY, true);
     }
     else
     {
         wxBitmap                        vBitmap(rIcon);
 
-        DoDrawBitmap(vBitmap, vX, vY, FALSE);
+        DoDrawBitmap(vBitmap, vX, vY, false);
     }
     CalcBoundingBox(vX, vY);
     CalcBoundingBox(vX + rIcon.GetWidth(), vY + rIcon.GetHeight());
@@ -1314,31 +1318,14 @@ void wxDC::DoDrawBitmap(
 
         vY = OS2Y(vY,rBmp.GetHeight());
 
-        //
-        // Flip the picture as OS/2 is upside-down
-        //
-        if (rBmp.Flip())
-        {
-            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();
-        }
-        else
-        {
-            vPoint[0].x = vX;
-            vPoint[0].y = vY;
-            vPoint[1].x = vX + rBmp.GetWidth();
-            vPoint[1].y = vY + rBmp.GetHeight();
-            vPoint[2].x = 0;
-            vPoint[2].y = 0;
-            vPoint[3].x = rBmp.GetWidth();
-            vPoint[3].y = 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();
@@ -1407,11 +1394,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();
@@ -1786,14 +1773,25 @@ 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
     {
         if (m_vSelectedBitmap != wxNullBitmap)
         {
             m_vRclPaint.yTop = m_vSelectedBitmap.GetHeight();
             m_vRclPaint.xRight = m_vSelectedBitmap.GetWidth();
-            vPtlStart.y = OS2Y(vY,vTextY);
+            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;
@@ -2077,7 +2075,7 @@ void wxDC::SetBackground(
         return;
     if (m_pCanvas)
     {
-        bool                        bCustomColours = TRUE;
+        bool                        bCustomColours = true;
 
         //
         // If we haven't specified wxUSER_COLOURS, don't allow the panel/dialog box to
@@ -2085,12 +2083,12 @@ void wxDC::SetBackground(
         //
         if (m_pCanvas->IsKindOf(CLASSINFO(wxWindow)) &&
             ((m_pCanvas->GetWindowStyleFlag() & wxUSER_COLOURS) != wxUSER_COLOURS))
-            bCustomColours = FALSE;
+            bCustomColours = false;
         if (bCustomColours)
         {
             if (m_backgroundBrush.GetStyle()==wxTRANSPARENT)
             {
-                m_pCanvas->SetTransparent(TRUE);
+                m_pCanvas->SetTransparent(true);
             }
             else
             {
@@ -2104,7 +2102,7 @@ void wxDC::SetBackground(
                 // parent?
                 // m_canvas->SetBackgroundColour(m_backgroundBrush.GetColour());
                 //
-                m_pCanvas->SetTransparent(FALSE);
+                m_pCanvas->SetTransparent(false);
             }
         }
     }
@@ -2195,8 +2193,8 @@ bool wxDC::StartDoc(
   const wxString&                   rsMessage
 )
 {
-    // We might be previewing, so return TRUE to let it continue.
-    return TRUE;
+    // We might be previewing, so return true to let it continue.
+    return true;
 } // end of wxDC::StartDoc
 
 void wxDC::EndDoc()
@@ -2474,7 +2472,7 @@ wxCoord wxDCBase::DeviceToLogicalX(wxCoord x) const
 
 wxCoord wxDCBase::DeviceToLogicalXRel(wxCoord x) const
 {
-       // axis orientation is not taken into account for conversion of a distance
+    // axis orientation is not taken into account for conversion of a distance
     return (wxCoord) ((x)/(m_logicalScaleX*m_userScaleX*m_scaleX));
 }
 
@@ -2485,7 +2483,7 @@ wxCoord wxDCBase::DeviceToLogicalY(wxCoord y) const
 
 wxCoord wxDCBase::DeviceToLogicalYRel(wxCoord y) const
 {
-       // axis orientation is not taken into account for conversion of a distance
+    // axis orientation is not taken into account for conversion of a distance
     return (wxCoord) ((y)/(m_logicalScaleY*m_userScaleY*m_scaleY));
 }
 
@@ -2496,7 +2494,7 @@ wxCoord wxDCBase::LogicalToDeviceX(wxCoord x) const
 
 wxCoord wxDCBase::LogicalToDeviceXRel(wxCoord x) const
 {
-       // axis orientation is not taken into account for conversion of a distance
+    // axis orientation is not taken into account for conversion of a distance
     return (wxCoord) (x*m_logicalScaleX*m_userScaleX*m_scaleX);
 }
 
@@ -2507,7 +2505,7 @@ wxCoord wxDCBase::LogicalToDeviceY(wxCoord y) const
 
 wxCoord wxDCBase::LogicalToDeviceYRel(wxCoord y) const
 {
-       // axis orientation is not taken into account for conversion of a distance
+    // axis orientation is not taken into account for conversion of a distance
     return (wxCoord) (y*m_logicalScaleY*m_userScaleY*m_scaleY);
 }
 
@@ -2541,7 +2539,7 @@ bool wxDC::DoBlit(
         pMask = rBmp.GetMask();
         if (!(rBmp.Ok() && pMask && pMask->GetMaskBitmap()))
         {
-            bUseMask = FALSE;
+            bUseMask = false;
         }
     }
 
@@ -2589,7 +2587,7 @@ bool wxDC::DoBlit(
         case wxNOR:          lRop = ROP_NOTSRCCOPY;       break;
         default:
            wxFAIL_MSG( wxT("unsupported logical function") );
-           return FALSE;
+           return false;
     }
 
     bool                            bSuccess;
@@ -2621,7 +2619,7 @@ bool wxDC::DoBlit(
         vBmpHdr.cBitCount = 24;
 
 #if wxUSE_DC_CACHEING
-        if (TRUE)
+        if (true)
         {
             //
             // create a temp buffer bitmap and DCs to access it and the mask
@@ -2651,25 +2649,25 @@ bool wxDC::DoBlit(
             hBufBitmap = ::GpiCreateBitmap(GetHPS(), &vBmpHdr, 0L, NULL, NULL);
         }
 
-        POINTL                          aPoint1[4] = { 0, 0
-                                                      ,vWidth, vHeight
-                                                      ,vXdest, vYdest
-                                                      ,vXdest + vWidth, vYdest + vHeight
+        POINTL                          aPoint1[4] = { {0, 0}
+                              ,{vWidth, vHeight}
+                              ,{vXdest, vYdest}
+                              ,{vXdest + vWidth, vYdest + vHeight}
                                                      };
-        POINTL                          aPoint2[4] = { 0, 0
-                                                      ,vWidth, vHeight
-                                                      ,vXsrc, vYsrc
-                                                      ,vXsrc + vWidth, vYsrc + vHeight
+        POINTL                          aPoint2[4] = { {0, 0}
+                              ,{vWidth, vHeight}
+                              ,{vXsrc, vYsrc}
+                              ,{vXsrc + vWidth, vYsrc + vHeight}
                                                      };
-        POINTL                          aPoint3[4] = { vXdest, vYdest
-                                                      ,vXdest + vWidth, vYdest + vHeight
-                                                      ,vXsrc, vYsrc
-                                                      ,vXsrc + vWidth, vYsrc + vHeight
+        POINTL                          aPoint3[4] = { {vXdest, vYdest}
+                              ,{vXdest + vWidth, vYdest + vHeight}
+                              ,{vXsrc, vYsrc}
+                              ,{vXsrc + vWidth, vYsrc + vHeight}
                                                      };
-        POINTL                          aPoint4[4] = { vXdest, vYdest
-                                                      ,vXdest + vWidth, vYdest + vHeight
-                                                      ,0, 0
-                                                      ,vWidth, vHeight
+        POINTL                          aPoint4[4] = { {vXdest, vYdest}
+                              ,{vXdest + vWidth, vYdest + vHeight}
+                              ,{0, 0}
+                              ,{vWidth, vHeight}
                                                      };
         ::GpiSetBitmap(hPSMask, (HBITMAP) pMask->GetMaskBitmap());
         ::GpiSetBitmap(hPSBuffer, (HBITMAP) hBufBitmap);
@@ -2760,7 +2758,7 @@ bool wxDC::DoBlit(
                         );
         if (rc == GPI_ERROR)
         {
-            bSuccess = FALSE;
+            bSuccess = false;
             wxLogLastError(wxT("BitBlt"));
         }
 
@@ -2776,14 +2774,14 @@ bool wxDC::DoBlit(
         ::DevCloseDC(hDCBuffer);
         ::GpiDeleteBitmap(hBufBitmap);
 #endif
-        bSuccess = TRUE;
+        bSuccess = true;
     }
     else // no mask, just BitBlt() it
     {
-        POINTL                          aPoint[4] = { vXdest, vYdest
-                                                     ,vXdest + vWidth, vYdest + vHeight
-                                                     ,vXsrc, vYsrc
-                                                     ,vXsrc + vWidth, vYsrc + vHeight
+      POINTL                          aPoint[4] = { {vXdest, vYdest}
+                           ,{vXdest + vWidth, vYdest + vHeight}
+                           ,{vXsrc, vYsrc}
+                           ,{vXsrc + vWidth, vYsrc + vHeight}
                                                     };
 
         bSuccess = (::GpiBitBlt( m_hPS
@@ -2890,18 +2888,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
+