]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/dcmemory.cpp
don't generate an endless stream of asserts for the 0-sized images
[wxWidgets.git] / src / os2 / dcmemory.cpp
index a6af12eb9090e97f42e27fc0da6c0d30bccb2915..71f06468ae3d07fd89a87b3df72248fd35fec295 100644 (file)
@@ -55,6 +55,7 @@ void wxMemoryDC::Init()
         // DrawText() to OPAQUE as required, otherwise always TRANSPARENT
         ::GpiSetBackMix( GetHPS(), BM_LEAVEALONE );
     }
+    memset(&m_vRclPaint, 0, sizeof(m_vRclPaint));
 } // end of wxMemoryDC::Init
 
 bool wxMemoryDC::CreateCompatible(
@@ -147,7 +148,7 @@ void wxMemoryDC::SelectObject(
 
     m_vSelectedBitmap = rBitmap;
 
-    WXHBITMAP                       hBmp = m_vSelectedBitmap.GetHBITMAP();
+    WXHBITMAP                       hBmp = rBitmap.GetHBITMAP();
 
     if (!hBmp)
         return;
@@ -189,4 +190,160 @@ void wxMemoryDC::DoDrawRectangle(
 )
 {
     wxDC::DoDrawRectangle(vX, vY, vWidth, vHeight);
+
+    //
+    // Debug testing:
+    //
+    if (m_vSelectedBitmap.GetHBITMAP() != NULLHANDLE)
+    {
+        BITMAPINFOHEADER2           vHeader;
+        BITMAPINFO2                 vInfo;
+
+        vHeader.cbFix = 16L;
+        if (::GpiQueryBitmapInfoHeader(m_vSelectedBitmap.GetHBITMAP(), &vHeader))
+        {
+            unsigned char*          pucData = NULL;
+            unsigned char*          pucBits;
+            int                     nBytesPerLine = m_vSelectedBitmap.GetWidth() * 3;
+            LONG                    lScans = 0L;
+            POINTL                  vPoint;
+            LONG                    lColor;
+            LONG                    alFormats[24]; // Max formats OS/2 PM supports
+            ULONG                   ulBitcount;
+
+            ::GpiQueryDeviceBitmapFormats(m_hPS, 24, alFormats);
+            ulBitcount = alFormats[1]; // the best one for the device
+            if (ulBitcount > 24)
+                ulBitcount = 24;  // MAX bits supported by PM
+            vInfo.cbFix     = 16;
+            vInfo.cx        = vHeader.cx;
+            vInfo.cy        = vHeader.cy;
+            vInfo.cPlanes   = vHeader.cPlanes;
+            vInfo.cBitCount = ulBitcount;
+            pucData = (unsigned char*)malloc(nBytesPerLine * m_vSelectedBitmap.GetHeight());
+            if ((lScans = ::GpiQueryBitmapBits( m_hPS
+                                               ,0L
+                                               ,(LONG)m_vSelectedBitmap.GetHeight()
+                                               ,(PBYTE)pucData
+                                               ,&vInfo
+                                              )) == GPI_ALTERROR)
+            {
+                ERRORID                     vError;
+                wxString                    sError;
+
+                vError = ::WinGetLastError(vHabmain);
+                sError = wxPMErrorToStr(vError);
+            }
+            pucBits = pucData;
+            for (int i = 0; i < m_vSelectedBitmap.GetHeight(); i++)
+            {
+                for (int j = 0; j < m_vSelectedBitmap.GetWidth(); j++)
+                {
+                    vPoint.x = j; vPoint.y = i;
+                    lColor = ::GpiQueryPel(m_hPS, &vPoint);
+                    *(pucBits++) = (unsigned char)lColor;
+                    *(pucBits++) = (unsigned char)(lColor >> 8);
+                    *(pucBits++) = (unsigned char)(lColor >> 16);
+                }
+            }
+            if ((lScans = ::GpiSetBitmapBits( m_hPS
+                                             ,0
+                                             ,(LONG)m_vSelectedBitmap.GetHeight()
+                                             ,(PBYTE)pucData
+                                             ,&vInfo
+                                            )) == GPI_ALTERROR)
+            {
+                ERRORID             vError;
+                wxString            sError;
+
+                vError = ::WinGetLastError(vHabmain);
+                sError = wxPMErrorToStr(vError);
+            }
+            free(pucData);
+        }
+    }
 } // end of wxMemoryDC::DoDrawRectangle
+
+void wxMemoryDC::DoDrawRoundedRectangle(
+  wxCoord                           vX
+, wxCoord                           vY
+, wxCoord                           vWidth
+, wxCoord                           vHeight
+, double                            dRadius
+)
+{
+    wxDC::DoDrawRoundedRectangle(vX, vY, vWidth, vHeight, dRadius);
+
+    //
+    // Debug testing:
+    //
+    if (m_vSelectedBitmap.GetHBITMAP() != NULLHANDLE)
+    {
+        BITMAPINFOHEADER2           vHeader;
+        BITMAPINFO2                 vInfo;
+
+        vHeader.cbFix = 16L;
+        if (::GpiQueryBitmapInfoHeader(m_vSelectedBitmap.GetHBITMAP(), &vHeader))
+        {
+            unsigned char*          pucData = NULL;
+            unsigned char*          pucBits;
+            int                     nBytesPerLine = m_vSelectedBitmap.GetWidth() * 3;
+            LONG                    lScans = 0L;
+            POINTL                  vPoint;
+            LONG                    lColor;
+            LONG                    alFormats[24]; // Max formats OS/2 PM supports
+            ULONG                   ulBitcount;
+
+            ::GpiQueryDeviceBitmapFormats(m_hPS, 24, alFormats);
+            ulBitcount = alFormats[1]; // the best one for the device
+            if (ulBitcount > 24)
+                ulBitcount = 24;  // MAX bits supported by PM
+            vInfo.cbFix     = 16;
+            vInfo.cx        = vHeader.cx;
+            vInfo.cy        = vHeader.cy;
+            vInfo.cPlanes   = vHeader.cPlanes;
+            vInfo.cBitCount = ulBitcount;
+            pucData = (unsigned char*)malloc(nBytesPerLine * m_vSelectedBitmap.GetHeight());
+            if ((lScans = ::GpiQueryBitmapBits( m_hPS
+                                               ,0L
+                                               ,(LONG)m_vSelectedBitmap.GetHeight()
+                                               ,(PBYTE)pucData
+                                               ,&vInfo
+                                              )) == GPI_ALTERROR)
+            {
+                ERRORID                     vError;
+                wxString                    sError;
+
+                vError = ::WinGetLastError(vHabmain);
+                sError = wxPMErrorToStr(vError);
+            }
+            pucBits = pucData;
+            for (int i = 0; i < m_vSelectedBitmap.GetHeight(); i++)
+            {
+                for (int j = 0; j < m_vSelectedBitmap.GetWidth(); j++)
+                {
+                    vPoint.x = j; vPoint.y = i;
+                    lColor = ::GpiQueryPel(m_hPS, &vPoint);
+                    *(pucBits++) = (unsigned char)lColor;
+                    *(pucBits++) = (unsigned char)(lColor >> 8);
+                    *(pucBits++) = (unsigned char)(lColor >> 16);
+                }
+            }
+            if ((lScans = ::GpiSetBitmapBits( m_hPS
+                                             ,0
+                                             ,(LONG)m_vSelectedBitmap.GetHeight()
+                                             ,(PBYTE)pucData
+                                             ,&vInfo
+                                            )) == GPI_ALTERROR)
+            {
+                ERRORID             vError;
+                wxString            sError;
+
+                vError = ::WinGetLastError(vHabmain);
+                sError = wxPMErrorToStr(vError);
+            }
+            free(pucData);
+        }
+    }
+} // end of wxMemoryDC::DoDrawRectangle
+