]> git.saurik.com Git - wxWidgets.git/commitdiff
draw the bitmap manually under Win9x and 2000 because they don't support alpha transp...
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 6 Jan 2008 00:51:38 +0000 (00:51 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 6 Jan 2008 00:51:38 +0000 (00:51 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@51031 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/msw/statbmp.h
src/msw/statbmp.cpp

index ba61d269efb904e74a70fc288780f774bc608b7c..f510de3a3f2f1eec301422a8e5de7f76aba36431 100644 (file)
@@ -70,6 +70,11 @@ protected:
     void SetImage(const wxGDIImage* image);
     void SetImageNoCopy( wxGDIImage* image );
 
+    // draw the bitmap ourselves here if the OS can't do it correctly (if it
+    // can we leave it to it)
+    void DoPaintManually(wxPaintEvent& event);
+
+
     // we can have either an icon or a bitmap
     bool m_isIcon;
     wxGDIImage *m_image;
index 537c193d847663f98ec2b54b57b339194baaff67..511fb26ff7125b554a300d882590edc2e679a49f 100644 (file)
@@ -168,6 +168,14 @@ bool wxStaticBitmap::Create(wxWindow *parent,
     // GetBestSize will work properly now, so set the best size if needed
     SetInitialSize(size);
 
+    // Win9x and 2000 don't draw correctly the images with alpha channel so we
+    // need to draw them ourselves and it's easier to just always do it rather
+    // than check if we have an image with alpha or not
+    if ( wxGetWinVersion() <= wxWinVersion_2000 )
+    {
+        Connect(wxEVT_PAINT, wxPaintEventHandler(wxStaticBitmap::DoPaintManually));
+    }
+
     return true;
 }
 
@@ -240,6 +248,25 @@ wxSize wxStaticBitmap::DoGetBestSize() const
     return wxSize(16, 16);
 }
 
+void wxStaticBitmap::DoPaintManually(wxPaintEvent& WXUNUSED(event))
+{
+    wxPaintDC dc(this);
+
+    const wxSize size(GetSize());
+    const wxBitmap bmp(GetBitmap());
+
+    // Clear the background
+    dc.SetBrush(GetBackgroundColour());
+    dc.SetPen(*wxTRANSPARENT_PEN);
+    dc.DrawRectangle(0, 0, size.GetWidth(), size.GetHeight());
+
+    // Draw the image in the middle
+    dc.DrawBitmap(bmp,
+                  (size.GetWidth() - bmp.GetWidth()) / 2,
+                  (size.GetHeight() - bmp.GetHeight()) / 2,
+                  true /* use mask */);
+}
+
 void wxStaticBitmap::SetImage( const wxGDIImage* image )
 {
     wxGDIImage* convertedImage = ConvertImage( *image );