diff --git a/include/wx/msw/toolbar.h b/include/wx/msw/toolbar.h index 5e9c3e32b1..7a689eba01 100644 --- a/include/wx/msw/toolbar.h +++ b/include/wx/msw/toolbar.h @@ -88,9 +88,6 @@ protected: // create the native toolbar control bool MSWCreateToolbar(const wxPoint& pos, const wxSize& size); - // just a wrapper for TB_SETBITMAPSIZE - void MSWSetBitmapSize(const wxSize& size); - // recreate the control completely void Recreate(); diff --git a/interface/wx/toolbar.h b/interface/wx/toolbar.h index a7ccb783a7..958ce46caf 100644 --- a/interface/wx/toolbar.h +++ b/interface/wx/toolbar.h @@ -403,8 +403,15 @@ public: wxSize GetMargins() const; /** - Returns the size of bitmap that the toolbar expects to have. The default - bitmap size is 16 by 15 pixels. + Returns the size of bitmap that the toolbar expects to have. + + The default bitmap size is platform-dependent: for example, it is 16*15 + for MSW and 24*24 for GTK. This size does @em not necessarily indicate + the best size to use for the toolbars on the given platform, for this + you should use @c wxArtProvider::GetNativeSizeHint(wxART_TOOLBAR) but + in any case, as the bitmap size is deduced automatically from the size + of the bitmaps associated with the tools added to the toolbar, it is + usually unnecessary to call SetToolBitmapSize() explicitly. @remarks Note that this is the size of the bitmap you pass to AddTool(), and not the eventual size of the tool button. diff --git a/samples/toolbar/toolbar.cpp b/samples/toolbar/toolbar.cpp index c1c95e469b..3b9d95cac0 100644 --- a/samples/toolbar/toolbar.cpp +++ b/samples/toolbar/toolbar.cpp @@ -424,6 +424,8 @@ void MyFrame::PopulateToolbar(wxToolBarBase* toolBar) } } + // this call is actually unnecessary as the toolbar will adjust its tools + // size to fit the biggest icon used anyhow but it doesn't hurt neither toolBar->SetToolBitmapSize(wxSize(w, h)); toolBar->AddTool(wxID_NEW, _T("New"), diff --git a/src/msw/toolbar.cpp b/src/msw/toolbar.cpp index b5d1b6ef2f..5dcbef4abe 100644 --- a/src/msw/toolbar.cpp +++ b/src/msw/toolbar.cpp @@ -282,9 +282,13 @@ void wxToolBar::Init() m_nButtons = 0; - const wxSize size = wxArtProvider::GetNativeSizeHint(wxART_TOOLBAR); - m_defaultWidth = size.x; - m_defaultHeight = size.y; + // even though modern Windows applications typically use 24*24 (or even + // 32*32) size for their bitmaps, the native control itself still uses the + // old 16*15 default size (see TB_SETBITMAPSIZE documentation in MSDN), so + // default to it so that we don't call SetToolBitmapSize() unnecessarily in + // AdjustToolBitmapSize() + m_defaultWidth = 16; + m_defaultHeight = 15; m_pInTool = NULL; } @@ -630,29 +634,22 @@ void wxToolBar::CreateDisabledImageList() } } -void wxToolBar::MSWSetBitmapSize(const wxSize& size) -{ - ::SendMessage(GetHwnd(), TB_SETBITMAPSIZE, 0, MAKELONG(size.x, size.y)); -} - void wxToolBar::AdjustToolBitmapSize() { - // this is the default bitmap size, we only need to call TB_SETBITMAPSIZE - // if we use something different - static const wxSize sizeStd(16, 15); + const wxSize sizeOrig(m_defaultWidth, m_defaultHeight); - wxSize s(m_defaultWidth, m_defaultHeight); + wxSize sizeActual(sizeOrig); for ( wxToolBarToolsList::const_iterator i = m_tools.begin(); i != m_tools.end(); ++i ) { const wxBitmap& bmp = (*i)->GetNormalBitmap(); - s.IncTo(bmp.GetSize()); + sizeActual.IncTo(bmp.GetSize()); } - if ( s != sizeStd ) - MSWSetBitmapSize(s); + if ( sizeActual != sizeOrig ) + SetToolBitmapSize(sizeActual); } bool wxToolBar::Realize() @@ -1354,7 +1351,7 @@ void wxToolBar::SetToolBitmapSize(const wxSize& size) { wxToolBarBase::SetToolBitmapSize(size); - MSWSetBitmapSize(size); + ::SendMessage(GetHwnd(), TB_SETBITMAPSIZE, 0, MAKELONG(size.x, size.y)); } void wxToolBar::SetRows(int nRows)