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
This commit is contained in:
Vadim Zeitlin
2012-05-09 14:23:57 +00:00
parent 7c9fdebe5f
commit ae4375b878
2 changed files with 12 additions and 8 deletions

View 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; }

View 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