From ae4375b878f28ba89fd1814740c9293ba367c230 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Wed, 9 May 2012 14:23:57 +0000 Subject: [PATCH] Fix wxStaticBitmap best size calculation in wxMSW. 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 | 2 +- src/msw/statbmp.cpp | 18 +++++++++++------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/include/wx/msw/statbmp.h b/include/wx/msw/statbmp.h index 71cffec52b..9466edf512 100644 --- a/include/wx/msw/statbmp.h +++ b/include/wx/msw/statbmp.h @@ -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; } diff --git a/src/msw/statbmp.cpp b/src/msw/statbmp.cpp index 31c46938b8..a41b7e17aa 100644 --- a/src/msw/statbmp.cpp +++ b/src/msw/statbmp.cpp @@ -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 -- 2.45.2