]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/dc.cpp
Corrections
[wxWidgets.git] / src / os2 / dc.cpp
index cbfbce0d33059087248a1e5869e3a9d7b875a9fb..c433083e44f6fc8bafa3a38b7d1d95268a162617 100644 (file)
 #include "wx/dcprint.h"
 
 #include <string.h>
-#include <math.h>
 
 #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.
-// 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
 //
-// 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
-// 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))
@@ -68,11 +67,6 @@ static const int VIEWPORT_EXTENT = 1000;
 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
 // ---------------------------------------------------------------------------
@@ -503,7 +497,7 @@ void wxDC::DestroyClippingRegion(void)
 
          ::GpiSetClipRegion(m_hPS, hRgn, &hRgnOld);
      }
-      m_clipping = false;
+    ResetClipping();
 } // end of wxDC::DestroyClippingRegion
 
 // ---------------------------------------------------------------------------
@@ -526,7 +520,7 @@ bool wxDC::CanGetTextExtent() const
 int wxDC::GetDepth() const
 {
     LONG                            lArray[CAPS_COLOR_BITCOUNT];
-    int                             nBitsPerPixel;
+    int                             nBitsPerPixel = 0;
 
     if(::DevQueryCaps( GetHDC()
                       ,CAPS_FAMILY
@@ -584,7 +578,7 @@ bool wxDC::DoFloodFill(
     if ((lHits = ::GpiFloodFill(m_hPS, lOptions, lColor)) != GPI_ERROR)
         bSuccess = true;
 
-    return true;
+    return bSuccess;
 } // end of wxDC::DoFloodFill
 
 bool wxDC::DoGetPixel(
@@ -598,17 +592,7 @@ bool wxDC::DoGetPixel(
 
     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
@@ -618,7 +602,7 @@ bool wxDC::DoGetPixel(
                   ,GetGValue(lColor)
                   ,GetBValue(lColor)
                  );
-    return(lColor == lPencolor);
+    return true;
 } // end of wxDC::DoGetPixel
 
 void wxDC::DoCrossHair(
@@ -718,8 +702,6 @@ void wxDC::DoDrawArc(
 {
      POINTL                         vPtlPos;
      POINTL                         vPtlArc[2]; // Structure for current position
-     int                            nDx;
-     int                            nDy;
      double                         dRadius;
      double                         dAngl1;
      double                         dAngl2;
@@ -756,8 +738,8 @@ void wxDC::DoDrawArc(
         // Medium point
         //
         dAnglmid = (dAngl1 + dAngl2)/2. + M_PI;
-        vXm      = vXc + dRadius * cos(dAnglmid);
-        vYm      = vYc + dRadius * sin(dAnglmid);
+        vXm      = (wxCoord)(vXc + dRadius * cos(dAnglmid));
+        vYm      = (wxCoord)(vYc + dRadius * sin(dAnglmid));
         DoDrawArc( vX1, vY1
                   ,vXm, vYm
                   ,vXc, vYc
@@ -773,8 +755,8 @@ void wxDC::DoDrawArc(
     // Medium point
     //
     dAnglmid = (dAngl1 + dAngl2)/2.;
-    vXm      = vXc + dRadius * cos(dAnglmid);
-    vYm      = vYc + dRadius * sin(dAnglmid);
+    vXm      = (wxCoord)(vXc + dRadius * cos(dAnglmid));
+    vYm      = (wxCoord)(vYc + dRadius * sin(dAnglmid));
 
     //
     // Ellipse main axis (r,q), (p,s) with center at (0,0) */
@@ -793,11 +775,11 @@ void wxDC::DoDrawArc(
     vPtlArc[1].x = vX2;
     vPtlArc[1].y = vY2;
     ::GpiPointArc(m_hPS, vPtlArc); // Draws the arc
-    CalcBoundingBox( (vXc - dRadius)
-                    ,(vYc - dRadius)
+    CalcBoundingBox( (wxCoord)(vXc - dRadius)
+                    ,(wxCoord)(vYc - dRadius)
                    );
-    CalcBoundingBox( (vXc + dRadius)
-                    ,(vYc + dRadius)
+    CalcBoundingBox( (wxCoord)(vXc + dRadius)
+                    ,(wxCoord)(vYc + dRadius)
                    );
 } // end of wxDC::DoDrawArc
 
@@ -974,8 +956,8 @@ void wxDC::DoDrawLines(
     {
         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);
@@ -1234,7 +1216,6 @@ void wxDC::DoDrawEllipticArc(
     FIXED                           vFSweepa; // Start angle, sweep angle
     double                          dIntPart;
     double                          dFractPart;
-    double                          dRadius;
 
     vY = OS2Y(vY,vHeight);
 
@@ -1251,8 +1232,8 @@ void wxDC::DoDrawEllipticArc(
     vArcp.lP = vWidth/2;
     vArcp.lS = 0;
     ::GpiSetArcParams(m_hPS, &vArcp); // Sets parameters to default
-    vPtlPos.x = vX + vWidth/2  * (1. + cos(DegToRad(dSa))); // Loads x-coordinate
-    vPtlPos.y = vY + vHeight/2 * (1. + sin(DegToRad(dSa))); // Loads y-coordinate
+    vPtlPos.x = (wxCoord)(vX + vWidth/2  * (1. + cos(DegToRad(dSa)))); // Loads x-coordinate
+    vPtlPos.y = (wxCoord)(vY + vHeight/2 * (1. + sin(DegToRad(dSa)))); // Loads y-coordinate
     ::GpiMove(m_hPS, &vPtlPos); // Sets current position
 
     //
@@ -1313,7 +1294,7 @@ void wxDC::DoDrawBitmap(
     if (!IsKindOf(CLASSINFO(wxPrinterDC)))
     {
         HBITMAP                         hBitmap =  (HBITMAP)rBmp.GetHBITMAP();
-        HBITMAP                         hBitmapOld;
+        HBITMAP                         hBitmapOld = NULLHANDLE;
         POINTL                          vPoint[4];
 
         vY = OS2Y(vY,rBmp.GetHeight());
@@ -1400,13 +1381,13 @@ void wxDC::DoDrawBitmap(
 
                     lColor = pWindowDC->m_pCanvas->GetBackgroundColour().GetPixel();
                 }
-                else if (GetBrush() != wxNullBrush)
+                else if (GetBrush().Ok())
                     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)
@@ -1564,8 +1545,8 @@ void wxDC::DoDrawBitmap(
         }
         else
         {
-            LONG                        lOldForeGround = ::GpiQueryColor((HPS)GetHPS());
-            LONG                        lOldBackGround = ::GpiQueryBackColor((HPS)GetHPS());
+            ULONG                       lOldForeGround = ::GpiQueryColor((HPS)GetHPS());
+            ULONG                       lOldBackGround = ::GpiQueryBackColor((HPS)GetHPS());
 
             if (m_textForegroundColour.Ok())
             {
@@ -1637,10 +1618,6 @@ void wxDC::DoDrawBitmap(
                 unsigned char           cOldGreenFore = (unsigned char)(lOldForeGround >> 8);
                 unsigned char           cOldBlueFore  = (unsigned char)lOldForeGround;
 
-                unsigned char           cOldRedBack   = (unsigned char)(lOldBackGround >> 16);
-                unsigned char           cOldGreenBack = (unsigned char)(lOldBackGround >> 8);
-                unsigned char           cOldBlueBack  = (unsigned char)lOldBackGround;
-
                 unsigned char           cRedFore   = (unsigned char)(lForeGround >> 16);
                 unsigned char           cGreenFore = (unsigned char)(lForeGround >> 8);
                 unsigned char           cBlueFore  = (unsigned char)lForeGround;
@@ -1780,7 +1757,7 @@ void wxDC::DrawAnyText(
         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
+            vPtlStart.y = (wxCoord)(OS2Y(vY,vTextY/1.5)); // Full extent is a bit much
     }
     else
     {
@@ -1791,7 +1768,7 @@ void wxDC::DrawAnyText(
             if (m_pCanvas && m_pCanvas->IsKindOf(CLASSINFO(wxStatusBar)))
                 vPtlStart.y = OS2Y(vY,vTextY);
             else
-                vPtlStart.y = OS2Y(vY,vTextY/1.5);
+                vPtlStart.y = (LONG)(OS2Y(vY,vTextY/1.5));
         }
         else
             vPtlStart.y = vY;
@@ -2251,24 +2228,22 @@ void wxDC::DoGetTextExtent(
     int                             l;
     FONTMETRICS                     vFM; // metrics structure
     BOOL                            bRc;
-    char*                           pStr;
     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();
-    pStr = (PCH) rsString.c_str();
 
     //
     // In world coordinates.
     //
     bRc = ::GpiQueryTextBox( m_hPS
                             ,l
-                            ,pStr
+                            ,(PCH)rsString.c_str()
                             ,TXTBOX_COUNT // return maximum information
                             ,avPoint      // array of coordinates points
                            );
@@ -2277,8 +2252,8 @@ void wxDC::DoGetTextExtent(
        vErrorCode = ::WinGetLastError(wxGetInstance());
        sError = wxPMErrorToStr(vErrorCode);
        // DEBUG
-       sprintf(zMsg, "GpiQueryTextBox for %s: failed with Error: %x - %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
                          );
@@ -2855,8 +2830,8 @@ void 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
@@ -2873,8 +2848,8 @@ wxSize wxDC::GetPPI() const
         nPelHeight = lArray[CAPS_HEIGHT];
         nHorzRes   = lArray[CAPS_HORIZONTAL_RESOLUTION]; // returns pel/meter
         nVertRes   = lArray[CAPS_VERTICAL_RESOLUTION];   // returns pel/meter
-        nWidth   = (nHorzRes/39.3) * nPelWidth;
-        nHeight  = (nVertRes/39.3) * nPelHeight;
+        nWidth   = (int)((nHorzRes/39.3) * nPelWidth);
+        nHeight  = (int)((nVertRes/39.3) * nPelHeight);
     }
     return (wxSize(nWidth,nHeight));
 } // end of wxDC::GetPPI