]> git.saurik.com Git - wxWidgets.git/commitdiff
Fix wxStaticBitmap best size calculation in wxMSW.
authorVadim Zeitlin <vadim@wxwidgets.org>
Wed, 9 May 2012 14:23:57 +0000 (14:23 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Wed, 9 May 2012 14:23:57 +0000 (14:23 +0000)
Take the control borders into account by overriding DoGetBestClientSize()
instead of DoGetBestSize().

Also invalidate the default best size computed before we have any valid image
when setting the initial image in Create().

Closes #4099.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@71380 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

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

index 71cffec52beb5e95f152ae61227d1da8f70782ac..9466edf5122f352c3b587efa5bb9d4a2e735f638 100644 (file)
@@ -58,7 +58,7 @@ public:
     virtual bool CanApplyThemeBorder() const { return false; }
 
 protected:
-    virtual wxSize DoGetBestSize() const;
+    virtual wxSize DoGetBestClientSize() const;
 
     // ctor/dtor helpers
     void Init() { m_isIcon = true; m_image = NULL; m_currentHandle = 0; }
index 31c46938b82515edb8dfd91211fc101a5b77dd3b..a41b7e17aa669a51c7f0072bfc5d5f5acd617b63 100644 (file)
@@ -189,17 +189,21 @@ void wxStaticBitmap::Free()
     wxDELETE(m_image);
 }
 
-wxSize wxStaticBitmap::DoGetBestSize() const
+wxSize wxStaticBitmap::DoGetBestClientSize() const
 {
+    wxSize size;
     if ( ImageIsOk() )
     {
-        wxSize best(m_image->GetWidth(), m_image->GetHeight());
-        CacheBestSize(best);
-        return best;
+        size = m_image->GetSize();
+    }
+    else // No image yet
+    {
+        // this is completely arbitrary
+        size.x =
+        size.y = 16;
     }
 
-    // this is completely arbitrary
-    return wxSize(16, 16);
+    return size;
 }
 
 #ifndef __WXWINCE__
@@ -232,12 +236,12 @@ void wxStaticBitmap::SetImage( const wxGDIImage* image )
 {
     wxGDIImage* convertedImage = ConvertImage( *image );
     SetImageNoCopy( convertedImage );
-    InvalidateBestSize();
 }
 
 void wxStaticBitmap::SetImageNoCopy( wxGDIImage* image)
 {
     Free();
+    InvalidateBestSize();
 
     m_isIcon = image->IsKindOf( CLASSINFO(wxIcon) );
     // the image has already been copied