]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/dc.cpp
Remove my binary compatibility stuff from HEAD. Patch #1367014 used for reference.
[wxWidgets.git] / src / os2 / dc.cpp
index 2d3673c4b57f50c37d253e137e1af58f9f05d9d5..c0f2f0b6667e32a7f3b818108fe84e52cf4d1d32 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////
-// Name:        dc.cpp
+// Name:        src/os2/dc.cpp
 // Purpose:     wxDC class
 // Author:      David Webster
 // Modified by:
 // Purpose:     wxDC class
 // Author:      David Webster
 // Modified by:
 #include "wx/dcprint.h"
 
 #include <string.h>
 #include "wx/dcprint.h"
 
 #include <string.h>
-#include <math.h>
 
 #include "wx/os2/private.h"
 
     IMPLEMENT_ABSTRACT_CLASS(wxDC, wxObject)
 
 //
 
 #include "wx/os2/private.h"
 
     IMPLEMENT_ABSTRACT_CLASS(wxDC, wxObject)
 
 //
-// wxWindows uses the Microsoft convention that the origin is the UPPER left.
+// wxWidgets uses the Microsoft convention that the origin is the UPPER left.
 // Native OS/2 however in the GPI and PM define the origin as the LOWER left.
 // Native OS/2 however in the GPI and PM define the origin as the LOWER left.
-// In order to map OS/2 GPI/PM y coordinates to wxWindows coordinates we must
+// In order to map OS/2 GPI/PM y coordinates to wxWidgets coordinates we must
 // perform the following transformation:
 //
 // Parent object height:     POBJHEIGHT
 // Desried origin:           WXORIGINY
 // Object to place's height: OBJHEIGHT
 //
 // perform the following transformation:
 //
 // Parent object height:     POBJHEIGHT
 // Desried origin:           WXORIGINY
 // Object to place's height: OBJHEIGHT
 //
-// To get the OS2 position from the wxWindows one:
+// To get the OS2 position from the wxWidgets one:
 //
 // OS2Y = POBJHEIGHT - (WXORIGINY + OBJHEIGHT)
 //
 // For OS/2 wxDC's we will always determine m_vRclPaint as the size of the
 // OS/2 Presentation Space associated with the device context.  y is the
 //
 // OS2Y = POBJHEIGHT - (WXORIGINY + OBJHEIGHT)
 //
 // For OS/2 wxDC's we will always determine m_vRclPaint as the size of the
 // OS/2 Presentation Space associated with the device context.  y is the
-// desired application's y coordinate of the origin in wxWindows space.
+// desired application's y coordinate of the origin in wxWidgets space.
 // objy is the height of the object we are going to draw.
 //
 #define OS2Y(y, objy) ((m_vRclPaint.yTop - m_vRclPaint.yBottom) - (y + objy))
 // objy is the height of the object we are going to draw.
 //
 #define OS2Y(y, objy) ((m_vRclPaint.yTop - m_vRclPaint.yBottom) - (y + objy))
@@ -68,11 +67,6 @@ static const int VIEWPORT_EXTENT = 1000;
 static const int MM_POINTS = 9;
 static const int MM_METRIC = 10;
 
 static const int MM_POINTS = 9;
 static const int MM_METRIC = 10;
 
-// usually this is defined in math.h
-#ifndef M_PI
-    static const double M_PI = 3.14159265358979323846;
-#endif // M_PI
-
 // ---------------------------------------------------------------------------
 // private functions
 // ---------------------------------------------------------------------------
 // ---------------------------------------------------------------------------
 // private functions
 // ---------------------------------------------------------------------------
@@ -227,7 +221,7 @@ wxDCCacheEntry* wxDC::FindBitmapInCache(
                 vBmpHdr.cx        = nWidth;
                 vBmpHdr.cy        = nHeight;
                 vBmpHdr.cPlanes   = 1;
                 vBmpHdr.cx        = nWidth;
                 vBmpHdr.cy        = nHeight;
                 vBmpHdr.cPlanes   = 1;
-                vBmpHdr.cBitCount = nDepth;
+                vBmpHdr.cBitCount = (USHORT)nDepth;
 
                 pEntry->m_hBitmap = (WXHBITMAP) ::GpiCreateBitmap( hPS
                                                                   ,&vBmpHdr
 
                 pEntry->m_hBitmap = (WXHBITMAP) ::GpiCreateBitmap( hPS
                                                                   ,&vBmpHdr
@@ -250,7 +244,7 @@ wxDCCacheEntry* wxDC::FindBitmapInCache(
     vBmpHdr.cx        = nWidth;
     vBmpHdr.cy        = nHeight;
     vBmpHdr.cPlanes   = 1;
     vBmpHdr.cx        = nWidth;
     vBmpHdr.cy        = nHeight;
     vBmpHdr.cPlanes   = 1;
-    vBmpHdr.cBitCount = nDepth;
+    vBmpHdr.cBitCount = (USHORT)nDepth;
 
     WXHBITMAP                       hBitmap = (WXHBITMAP) ::GpiCreateBitmap( hPS
                                                                             ,&vBmpHdr
 
     WXHBITMAP                       hBitmap = (WXHBITMAP) ::GpiCreateBitmap( hPS
                                                                             ,&vBmpHdr
@@ -503,7 +497,7 @@ void wxDC::DestroyClippingRegion(void)
 
          ::GpiSetClipRegion(m_hPS, hRgn, &hRgnOld);
      }
 
          ::GpiSetClipRegion(m_hPS, hRgn, &hRgnOld);
      }
-      m_clipping = false;
+    ResetClipping();
 } // end of wxDC::DestroyClippingRegion
 
 // ---------------------------------------------------------------------------
 } // end of wxDC::DestroyClippingRegion
 
 // ---------------------------------------------------------------------------
@@ -526,7 +520,7 @@ bool wxDC::CanGetTextExtent() const
 int wxDC::GetDepth() const
 {
     LONG                            lArray[CAPS_COLOR_BITCOUNT];
 int wxDC::GetDepth() const
 {
     LONG                            lArray[CAPS_COLOR_BITCOUNT];
-    int                             nBitsPerPixel;
+    int                             nBitsPerPixel = 0;
 
     if(::DevQueryCaps( GetHDC()
                       ,CAPS_FAMILY
 
     if(::DevQueryCaps( GetHDC()
                       ,CAPS_FAMILY
@@ -584,7 +578,7 @@ bool wxDC::DoFloodFill(
     if ((lHits = ::GpiFloodFill(m_hPS, lOptions, lColor)) != GPI_ERROR)
         bSuccess = true;
 
     if ((lHits = ::GpiFloodFill(m_hPS, lOptions, lColor)) != GPI_ERROR)
         bSuccess = true;
 
-    return true;
+    return bSuccess;
 } // end of wxDC::DoFloodFill
 
 bool wxDC::DoGetPixel(
 } // end of wxDC::DoFloodFill
 
 bool wxDC::DoGetPixel(
@@ -598,17 +592,7 @@ bool wxDC::DoGetPixel(
 
     vPoint.x = vX;
     vPoint.y = OS2Y(vY,0);
 
     vPoint.x = vX;
     vPoint.y = OS2Y(vY,0);
-    lColor = ::GpiSetPel(m_hPS, &vPoint);
-
-    //
-    // Get the color of the pen
-    //
-    LONG                            lPencolor = 0x00ffffff;
-
-    if (m_pen.Ok())
-    {
-        lPencolor = m_pen.GetColour().GetPixel();
-    }
+    lColor = ::GpiQueryPel(m_hPS, &vPoint);
 
     //
     // return the color of the pixel
 
     //
     // return the color of the pixel
@@ -618,7 +602,7 @@ bool wxDC::DoGetPixel(
                   ,GetGValue(lColor)
                   ,GetBValue(lColor)
                  );
                   ,GetGValue(lColor)
                   ,GetBValue(lColor)
                  );
-    return(lColor == lPencolor);
+    return true;
 } // end of wxDC::DoGetPixel
 
 void wxDC::DoCrossHair(
 } // end of wxDC::DoGetPixel
 
 void wxDC::DoCrossHair(
@@ -972,8 +956,8 @@ void wxDC::DoDrawLines(
     {
         int                         i;
 
     {
         int                         i;
 
-        CalcBoundingBox( vPoints[i].x
-                        ,vPoints[i].y
+        CalcBoundingBox( vPoints[0].x
+                        ,vPoints[0].y
                        );
         vPoint.x = vPoints[0].x;
         vPoint.y = OS2Y(vPoints[0].y,0);
                        );
         vPoint.x = vPoints[0].x;
         vPoint.y = OS2Y(vPoints[0].y,0);
@@ -1307,10 +1291,12 @@ void wxDC::DoDrawBitmap(
 , bool                              bUseMask
 )
 {
 , bool                              bUseMask
 )
 {
+#if wxUSE_PRINTING_ARCHITECTURE
     if (!IsKindOf(CLASSINFO(wxPrinterDC)))
     if (!IsKindOf(CLASSINFO(wxPrinterDC)))
+#endif
     {
         HBITMAP                         hBitmap =  (HBITMAP)rBmp.GetHBITMAP();
     {
         HBITMAP                         hBitmap =  (HBITMAP)rBmp.GetHBITMAP();
-        HBITMAP                         hBitmapOld;
+        HBITMAP                         hBitmapOld = NULLHANDLE;
         POINTL                          vPoint[4];
 
         vY = OS2Y(vY,rBmp.GetHeight());
         POINTL                          vPoint[4];
 
         vY = OS2Y(vY,rBmp.GetHeight());
@@ -1397,13 +1383,13 @@ void wxDC::DoDrawBitmap(
 
                     lColor = pWindowDC->m_pCanvas->GetBackgroundColour().GetPixel();
                 }
 
                     lColor = pWindowDC->m_pCanvas->GetBackgroundColour().GetPixel();
                 }
-                else if (GetBrush() != wxNullBrush)
+                else if (GetBrush().Ok())
                     lColor = GetBrush().GetColour().GetPixel();
                 else
                     lColor = m_textBackgroundColour.GetPixel();
 
                 //
                     lColor = GetBrush().GetColour().GetPixel();
                 else
                     lColor = m_textBackgroundColour.GetPixel();
 
                 //
-                // Bitmap must be ina double-word alligned address so we may
+                // Bitmap must be in a double-word aligned address so we may
                 // have some padding to worry about
                 //
                 if (nLineBoundary > 0)
                 // have some padding to worry about
                 //
                 if (nLineBoundary > 0)
@@ -1887,9 +1873,7 @@ void wxDC::DoDrawRotatedText(
 // set GDI objects
 // ---------------------------------------------------------------------------
 
 // set GDI objects
 // ---------------------------------------------------------------------------
 
-void wxDC::DoSelectPalette(
-  bool                              bRealize
-)
+void wxDC::DoSelectPalette( bool WXUNUSED(bRealize) )
 {
     //
     // Set the old object temporarily, in case the assignment deletes an object
 {
     //
     // Set the old object temporarily, in case the assignment deletes an object
@@ -2182,9 +2166,7 @@ void wxDC::SetRop(
     ::GpiSetMix((HPS)hDC, lCRop);
 } // end of wxDC::SetRop
 
     ::GpiSetMix((HPS)hDC, lCRop);
 } // end of wxDC::SetRop
 
-bool wxDC::StartDoc(
-  const wxString&                   rsMessage
-)
+bool wxDC::StartDoc( const wxString& WXUNUSED(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;
@@ -2244,24 +2226,22 @@ void wxDC::DoGetTextExtent(
     int                             l;
     FONTMETRICS                     vFM; // metrics structure
     BOOL                            bRc;
     int                             l;
     FONTMETRICS                     vFM; // metrics structure
     BOOL                            bRc;
-    char*                           pStr;
     ERRORID                         vErrorCode; // last error id code
     wxFont*                         pFontToUse = (wxFont*)pTheFont;
 
     ERRORID                         vErrorCode; // last error id code
     wxFont*                         pFontToUse = (wxFont*)pTheFont;
 
-    char                            zMsg[128]; // DEBUG
+    wxChar                          zMsg[128]; // DEBUG
     wxString                        sError;
 
     if (!pFontToUse)
         pFontToUse = (wxFont*)&m_font;
     l = rsString.length();
     wxString                        sError;
 
     if (!pFontToUse)
         pFontToUse = (wxFont*)&m_font;
     l = rsString.length();
-    pStr = (PCH) rsString.c_str();
 
     //
     // In world coordinates.
     //
     bRc = ::GpiQueryTextBox( m_hPS
                             ,l
 
     //
     // In world coordinates.
     //
     bRc = ::GpiQueryTextBox( m_hPS
                             ,l
-                            ,pStr
+                            ,(PCH)rsString.c_str()
                             ,TXTBOX_COUNT // return maximum information
                             ,avPoint      // array of coordinates points
                            );
                             ,TXTBOX_COUNT // return maximum information
                             ,avPoint      // array of coordinates points
                            );
@@ -2270,8 +2250,8 @@ void wxDC::DoGetTextExtent(
        vErrorCode = ::WinGetLastError(wxGetInstance());
        sError = wxPMErrorToStr(vErrorCode);
        // DEBUG
        vErrorCode = ::WinGetLastError(wxGetInstance());
        sError = wxPMErrorToStr(vErrorCode);
        // DEBUG
-       sprintf(zMsg, "GpiQueryTextBox for %s: failed with Error: %lx - %s", pStr, vErrorCode, sError.c_str());
-       (void)wxMessageBox( "wxWindows Menu sample"
+       wxSprintf(zMsg, _T("GpiQueryTextBox for %s: failed with Error: %lx - %s"), rsString.c_str(), vErrorCode, sError.c_str());
+       (void)wxMessageBox( _T("wxWidgets Menu sample")
                           ,zMsg
                           ,wxICON_INFORMATION
                          );
                           ,zMsg
                           ,wxICON_INFORMATION
                          );
@@ -2381,10 +2361,8 @@ void wxDC::SetMapMode(
     // ????
 }; // end of wxDC::SetMapMode
 
     // ????
 }; // end of wxDC::SetMapMode
 
-void wxDC::SetUserScale(
-  double                            dX
-, double                            dY
-)
+void wxDC::SetUserScale( double dX,
+                         double dY )
 {
     m_userScaleX = dX;
     m_userScaleY = dY;
 {
     m_userScaleX = dX;
     m_userScaleY = dY;
@@ -2392,10 +2370,8 @@ void wxDC::SetUserScale(
     SetMapMode(m_mappingMode);
 } // end of wxDC::SetUserScale
 
     SetMapMode(m_mappingMode);
 } // end of wxDC::SetUserScale
 
-void wxDC::SetAxisOrientation(
-  bool                              bXLeftRight
-, bool                              bYBottomUp
-)
+void wxDC::SetAxisOrientation( bool bXLeftRight,
+                               bool bYBottomUp )
 {
     m_signX = bXLeftRight ? 1 : -1;
     m_signY = bYBottomUp ? -1 : 1;
 {
     m_signX = bXLeftRight ? 1 : -1;
     m_signY = bYBottomUp ? -1 : 1;
@@ -2506,19 +2482,17 @@ wxCoord wxDCBase::LogicalToDeviceYRel(wxCoord y) const
 // bit blit
 // ---------------------------------------------------------------------------
 
 // bit blit
 // ---------------------------------------------------------------------------
 
-bool wxDC::DoBlit(
-  wxCoord                           vXdest
-, wxCoord                           vYdest
-, wxCoord                           vWidth
-, wxCoord                           vHeight
-, wxDC*                             pSource
-, wxCoord                           vXsrc
-, wxCoord                           vYsrc
-, int                               nRop
-, bool                              bUseMask
-, wxCoord                           vXsrcMask
-, wxCoord                           vYsrcMask
-)
+bool wxDC::DoBlit( wxCoord vXdest,
+                   wxCoord vYdest,
+                   wxCoord vWidth,
+                   wxCoord vHeight,
+                   wxDC*   pSource,
+                   wxCoord vXsrc,
+                   wxCoord vYsrc,
+                   int     nRop,
+                   bool    bUseMask,
+                   wxCoord WXUNUSED(vXsrcMask),
+                   wxCoord WXUNUSED(vYsrcMask) )
 {
     wxMask*                         pMask = NULL;
     CHARBUNDLE                      vCbnd;
 {
     wxMask*                         pMask = NULL;
     CHARBUNDLE                      vCbnd;
@@ -2612,7 +2586,6 @@ bool wxDC::DoBlit(
         vBmpHdr.cBitCount = 24;
 
 #if wxUSE_DC_CACHEING
         vBmpHdr.cBitCount = 24;
 
 #if wxUSE_DC_CACHEING
-        if (true)
         {
             //
             // create a temp buffer bitmap and DCs to access it and the mask
         {
             //
             // create a temp buffer bitmap and DCs to access it and the mask
@@ -2631,9 +2604,9 @@ bool wxDC::DoBlit(
             hPSMask = pDCCacheEntry1->m_hPS;
             hDCBuffer = (HDC)pDCCacheEntry2->m_hPS;
             hBufBitmap = (HBITMAP)pBitmapCacheEntry->m_hBitmap;
             hPSMask = pDCCacheEntry1->m_hPS;
             hDCBuffer = (HDC)pDCCacheEntry2->m_hPS;
             hBufBitmap = (HBITMAP)pBitmapCacheEntry->m_hBitmap;
+            wxUnusedVar(hDCMask);
         }
         }
-        else
-#endif
+#else
         {
             hDCMask = ::DevOpenDC(vHabmain, OD_MEMORY, "*", 5L, (PDEVOPENDATA)&vDOP, NULLHANDLE);
             hDCBuffer = ::DevOpenDC(vHabmain, OD_MEMORY, "*", 5L, (PDEVOPENDATA)&vDOP, NULLHANDLE);
         {
             hDCMask = ::DevOpenDC(vHabmain, OD_MEMORY, "*", 5L, (PDEVOPENDATA)&vDOP, NULLHANDLE);
             hDCBuffer = ::DevOpenDC(vHabmain, OD_MEMORY, "*", 5L, (PDEVOPENDATA)&vDOP, NULLHANDLE);
@@ -2641,6 +2614,7 @@ bool wxDC::DoBlit(
             hPSBuffer = ::GpiCreatePS(vHabmain, hDCBuffer, &vSize, PU_PELS | GPIT_MICRO | GPIA_ASSOC);
             hBufBitmap = ::GpiCreateBitmap(GetHPS(), &vBmpHdr, 0L, NULL, NULL);
         }
             hPSBuffer = ::GpiCreatePS(vHabmain, hDCBuffer, &vSize, PU_PELS | GPIT_MICRO | GPIA_ASSOC);
             hBufBitmap = ::GpiCreateBitmap(GetHPS(), &vBmpHdr, 0L, NULL, NULL);
         }
+#endif
 
         POINTL                          aPoint1[4] = { {0, 0}
                               ,{vWidth, vHeight}
 
         POINTL                          aPoint1[4] = { {0, 0}
                               ,{vWidth, vHeight}
@@ -2818,10 +2792,8 @@ void wxDC::DoGetSize(
     }
 }; // end of wxDC::DoGetSize(
 
     }
 }; // end of wxDC::DoGetSize(
 
-void wxDC::DoGetSizeMM(
-  int*                              pnWidth
-, int*                              pnHeight
-) const
+void wxDC::DoGetSizeMM( int* pnWidth,
+                        int* pnHeight ) const
 {
     LONG                            lArray[CAPS_VERTICAL_RESOLUTION];
 
 {
     LONG                            lArray[CAPS_VERTICAL_RESOLUTION];
 
@@ -2831,25 +2803,27 @@ void wxDC::DoGetSizeMM(
                       ,lArray
                      ))
     {
                       ,lArray
                      ))
     {
-        int                         nWidth;
-        int                         nHeight;
-        int                         nHorzRes;
-        int                         nVertRes;
+        if(pnWidth)
+        {
+            int nWidth = lArray[CAPS_WIDTH];
+            int nHorzRes  = lArray[CAPS_HORIZONTAL_RESOLUTION]; // returns pel/meter
+            *pnWidth  = (nHorzRes/1000) * nWidth;
+        }
 
 
-        nWidth    = lArray[CAPS_WIDTH];
-        nHeight   = lArray[CAPS_HEIGHT];
-        nHorzRes  = lArray[CAPS_HORIZONTAL_RESOLUTION]; // returns pel/meter
-        nVertRes  = lArray[CAPS_VERTICAL_RESOLUTION];   // returns pel/meter
-        nWidth  = (nHorzRes/1000) * nWidth;
-        nHeight = (nVertRes/1000) * nHeight;
+        if(pnHeight)
+        {
+            int nHeight   = lArray[CAPS_HEIGHT];
+            int nVertRes = lArray[CAPS_VERTICAL_RESOLUTION];   // returns pel/meter
+            *pnHeight = (nVertRes/1000) * nHeight;
+        }
     }
 }; // end of wxDC::DoGetSizeMM
 
 wxSize wxDC::GetPPI() const
 {
     LONG                            lArray[CAPS_VERTICAL_RESOLUTION];
     }
 }; // end of wxDC::DoGetSizeMM
 
 wxSize wxDC::GetPPI() const
 {
     LONG                            lArray[CAPS_VERTICAL_RESOLUTION];
-    int                             nWidth;
-    int                             nHeight;
+    int                             nWidth = 0;
+    int                             nHeight = 0;
 
     if(::DevQueryCaps( m_hDC
                       ,CAPS_FAMILY
 
     if(::DevQueryCaps( m_hDC
                       ,CAPS_FAMILY
@@ -2869,7 +2843,8 @@ wxSize wxDC::GetPPI() const
         nWidth   = (int)((nHorzRes/39.3) * nPelWidth);
         nHeight  = (int)((nVertRes/39.3) * nPelHeight);
     }
         nWidth   = (int)((nHorzRes/39.3) * nPelWidth);
         nHeight  = (int)((nVertRes/39.3) * nPelHeight);
     }
-    return (wxSize(nWidth,nHeight));
+    wxSize ppisize(nWidth, nHeight);
+    return ppisize;
 } // end of wxDC::GetPPI
 
 void wxDC::SetLogicalScale(
 } // end of wxDC::GetPPI
 
 void wxDC::SetLogicalScale(
@@ -2880,6 +2855,3 @@ void wxDC::SetLogicalScale(
     m_logicalScaleX = dX;
     m_logicalScaleY = dY;
 }; // end of wxDC::SetLogicalScale
     m_logicalScaleX = dX;
     m_logicalScaleY = dY;
 }; // end of wxDC::SetLogicalScale
-
-
-