]> git.saurik.com Git - wxWidgets.git/commitdiff
More image processing updates
authorDavid Webster <Dave.Webster@bhmi.com>
Tue, 7 May 2002 22:27:10 +0000 (22:27 +0000)
committerDavid Webster <Dave.Webster@bhmi.com>
Tue, 7 May 2002 22:27:10 +0000 (22:27 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@15413 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/os2/bitmap.cpp
src/os2/dc.cpp
src/os2/dcmemory.cpp

index 944dc33188a8a9377d43d6b6d0ba3bfad692f016..bd7ba156d60a7927f1031204b0d9cac221d9c425 100644 (file)
@@ -87,6 +87,10 @@ void wxBitmapRefData::Free()
 void wxBitmap::Init()
 {
     m_bIsMono = FALSE;
+    //
+    // True for all bitmaps created from bits, wxImages, Xpms
+    //
+    m_bFlip = TRUE;
 } // end of wxBitmap::Init
 
 bool wxBitmap::CopyFromIconOrCursor(
@@ -265,7 +269,7 @@ wxBitmap::wxBitmap(
 )
 {
     Init();
-
+    m_bFlip = FALSE;
     (void)Create( nW
                  ,nH
                  ,nD
@@ -296,7 +300,7 @@ wxBitmap::wxBitmap(
 )
 {
     Init();
-
+    m_bFlip = FALSE;
     LoadFile( rFilename
              ,(int)lType
             );
@@ -697,10 +701,6 @@ bool wxBitmap::CreateFromImage (
             vError = ::WinGetLastError(vHabmain);
             sError = wxPMErrorToStr(vError);
         }
-        //
-        // Debug stuff
-        //
-
         hPSScreen = ::GpiCreatePS( vHabmain
                                   ,hDCScreen
                                   ,&vSize
@@ -1127,7 +1127,7 @@ wxBitmap wxBitmap::GetSubBitmap(
         vBmih.cx        = rRect.width;
         vBmih.cy        = rRect.height;
         vBmih.cPlanes   = 1;
-        vBmih.cBitCount = 1;
+        vBmih.cBitCount = 24;
 
         HBITMAP                     hBmpMask = ::GpiCreateBitmap( hPSDst
                                                                  ,&vBmih
@@ -1292,7 +1292,7 @@ bool wxMask::Create(
     vBmih.cx        = rBitmap.GetWidth();
     vBmih.cy        = rBitmap.GetHeight();
     vBmih.cPlanes   = 1;
-    vBmih.cBitCount = 1;
+    vBmih.cBitCount = 24;
 
     m_hMaskBitmap = ::GpiCreateBitmap( hPSDst
                                       ,&vBmih
@@ -1586,12 +1586,12 @@ HBITMAP wxInvertMask(
                                                   0, 0, nWidth, nHeight
                                                 };
 
-    memset(&vBmih, '\0', sizeof(BITMAPINFOHEADER2));
-    vBmih.cbFix     =  sizeof(BITMAPINFOHEADER2);
+    memset(&vBmih, '\0', 16);
+    vBmih.cbFix     = 16;
     vBmih.cx        = nWidth;
     vBmih.cy        = nHeight;
     vBmih.cPlanes   = 1;
-    vBmih.cBitCount = 1;
+    vBmih.cBitCount = 24;
 
     hBmpInvMask = ::GpiCreateBitmap( hPSDst
                                     ,&vBmih
index 0bebb4a064da5fcb68cf2c758c9e9db017e2f75a..e8b4b76ba3690c123490d7ca68c0dac068c04127 100644 (file)
@@ -672,6 +672,16 @@ void wxDC::DoDrawLine(
         vY1 = OS2Y(vY1,0);
         vY2 = OS2Y(vY2,0);
     }
+    else
+    {
+        if (m_vSelectedBitmap != wxNullBitmap)
+        {
+            m_vRclPaint.yTop = m_vSelectedBitmap.GetHeight();
+            m_vRclPaint.xRight = m_vSelectedBitmap.GetWidth();
+            vY1 = OS2Y(vY1,0);
+            vY2 = OS2Y(vY2,0);
+        }
+    }
     vPoint[0].x = vX1;
     vPoint[0].y = vY1;
     vPoint[1].x = vX2;
@@ -1000,6 +1010,15 @@ void wxDC::DoDrawRectangle(
           m_vRclPaint.xRight == 0 &&
           m_vRclPaint.xLeft == 0))
         vY = OS2Y(vY,vHeight);
+    else
+    {
+        if (m_vSelectedBitmap != wxNullBitmap)
+        {
+            m_vRclPaint.yTop = m_vSelectedBitmap.GetHeight();
+            m_vRclPaint.xRight = m_vSelectedBitmap.GetWidth();
+            vY = OS2Y(vY,vHeight);
+        }
+    }
 
     wxCoord                         vX2 = vX + vWidth;
     wxCoord                         vY2 = vY + vHeight;
@@ -1069,6 +1088,9 @@ void wxDC::DoDrawRoundedRectangle(
 {
     POINTL                          vPoint[2];
     LONG                            lControl;
+    LONG                            lColor;
+    LONG                            lBorderColor;
+    int                             nIsTRANSPARENT = 0;
 
     //
     // Might be a memory DC with no Paint rect.
@@ -1078,25 +1100,73 @@ void wxDC::DoDrawRoundedRectangle(
           m_vRclPaint.xRight == 0 &&
           m_vRclPaint.xLeft == 0))
         vY = OS2Y(vY,vHeight);
+    else
+    {
+        if (m_vSelectedBitmap != wxNullBitmap)
+        {
+            m_vRclPaint.yTop = m_vSelectedBitmap.GetHeight();
+            m_vRclPaint.xRight = m_vSelectedBitmap.GetWidth();
+            vY = OS2Y(vY,vHeight);
+        }
+    }
 
     wxCoord                         vX2 = (vX + vWidth);
     wxCoord                         vY2 = (vY + vHeight);
 
     vPoint[0].x = vX;
-    vPoint[0].y = YLOG2DEV(vY) - vHeight;
-    vPoint[1].x = vX + vWidth;
-    vPoint[1].y = vY;
+    vPoint[0].y = vY;
+    vPoint[1].x = vX + vWidth - 1;
+    vPoint[1].y = vY + vHeight - 1;
     ::GpiMove(m_hPS, &vPoint[0]);
 
+    lColor       = m_brush.GetColour().GetPixel();
+    lBorderColor = m_pen.GetColour().GetPixel();
     lControl = DRO_OUTLINEFILL; //DRO_FILL;
     if (m_brush.GetStyle() == wxTRANSPARENT)
+        nIsTRANSPARENT = 1;
+    if(lColor == lBorderColor || nIsTRANSPARENT)
+    {
+        lControl = DRO_OUTLINEFILL; //DRO_FILL;
+        if(m_brush.GetStyle() == wxTRANSPARENT)
+            lControl = DRO_OUTLINE;
+
+        ::GpiSetColor(m_hPS, lColor);
+        ::GpiBox( m_hPS         // handle to a presentation space
+                 ,lControl      // draw the box outline ? or ?
+                 ,&vPoint[1]    // address of the corner
+                 ,(LONG)dRadius // horizontal corner radius
+                 ,(LONG)dRadius // vertical corner radius
+                );
+    }
+    else
+    {
         lControl = DRO_OUTLINE;
-    ::GpiBox( m_hPS         // handle to a presentation space
-             ,DRO_OUTLINE   // draw the box outline ? or ?
-             ,&vPoint[1]    // address of the corner
-             ,(LONG)dRadius // horizontal corner radius
-             ,(LONG)dRadius // vertical corner radius
-            );
+        ::GpiSetColor( m_hPS
+                      ,lBorderColor
+                     );
+        ::GpiBox( m_hPS
+                 ,lControl
+                 ,&vPoint[1]
+                 ,0L
+                 ,0L
+                );
+        lControl = DRO_FILL;
+        ::GpiSetColor( m_hPS
+                      ,lColor
+                     );
+        vPoint[0].x = vX + 1;
+        vPoint[0].y = vY + 1;
+        vPoint[1].x = vX + vWidth - 2;
+        vPoint[1].y = vY + vHeight - 2;
+        ::GpiMove(m_hPS, &vPoint[0]);
+        ::GpiBox( m_hPS
+                 ,lControl
+                 ,&vPoint[1]
+                 ,0L
+                 ,0L
+                );
+    }
+
     CalcBoundingBox(vX, vY);
     CalcBoundingBox(vX2, vY2);
 } // end of wxDC::DoDrawRoundedRectangle
@@ -1240,17 +1310,35 @@ void wxDC::DoDrawBitmap(
     {
         HBITMAP                         hBitmap =  (HBITMAP)rBmp.GetHBITMAP();
         HBITMAP                         hBitmapOld;
+        POINTL                          vPoint[4];
 
         vY = OS2Y(vY,rBmp.GetHeight());
 
         //
         // Flip the picture as OS/2 is upside-down
         //
-        POINTL                      vPoint[4] = { vX, vY + rBmp.GetHeight()
-                                                 ,vX + rBmp.GetWidth(), vY
-                                                 ,0, 0
-                                                 ,rBmp.GetWidth(), rBmp.GetHeight()
-                                                };
+        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();
+        }
         if (bUseMask)
         {
             wxMask*                     pMask = rBmp.GetMask();
@@ -1700,7 +1788,16 @@ void wxDC::DrawAnyText(
           m_vRclPaint.xLeft == 0))
         vPtlStart.y = OS2Y(vY,vTextY);
     else
-        vPtlStart.y = vY;
+    {
+        if (m_vSelectedBitmap != wxNullBitmap)
+        {
+            m_vRclPaint.yTop = m_vSelectedBitmap.GetHeight();
+            m_vRclPaint.xRight = m_vSelectedBitmap.GetWidth();
+            vPtlStart.y = OS2Y(vY,vTextY);
+        }
+        else
+            vPtlStart.y = vY;
+    }
 
     PCH                             pzStr = (PCH)rsText.c_str();
 
index 7977733bb7a6b9c84d3dd49e615c0052cb9983b3..8dc8321f7730d6bca0384b68a6cb143e1ccde68e 100644 (file)
@@ -146,9 +146,14 @@ void wxMemoryDC::SelectObject(
                  (rBitmap.GetSelectedInto() == this),
                  wxT("Bitmap is selected in another wxMemoryDC, delete the first wxMemoryDC or use SelectObject(NULL)") );
 
+    WXHBITMAP                       hBmp = rBitmap.GetHBITMAP();
+
+    if (!hBmp)
+    {
+        m_vSelectedBitmap.SetSelectedInto(NULL);
+    }
     m_vSelectedBitmap = rBitmap;
 
-    WXHBITMAP                       hBmp = rBitmap.GetHBITMAP();
 
     if (!hBmp)
     {