restore the default bitmap icons size to 16*15, making them larger if necessary is enough and doesn't result in having ugly 16*16 bitmaps in a 24*24 button rectangle

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58646 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2009-02-04 12:19:45 +00:00
parent 5d55031c21
commit 040d3c2ebf
4 changed files with 24 additions and 21 deletions

View File

@@ -88,9 +88,6 @@ protected:
// create the native toolbar control // create the native toolbar control
bool MSWCreateToolbar(const wxPoint& pos, const wxSize& size); bool MSWCreateToolbar(const wxPoint& pos, const wxSize& size);
// just a wrapper for TB_SETBITMAPSIZE
void MSWSetBitmapSize(const wxSize& size);
// recreate the control completely // recreate the control completely
void Recreate(); void Recreate();

View File

@@ -403,8 +403,15 @@ public:
wxSize GetMargins() const; wxSize GetMargins() const;
/** /**
Returns the size of bitmap that the toolbar expects to have. The default Returns the size of bitmap that the toolbar expects to have.
bitmap size is 16 by 15 pixels.
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(), @remarks Note that this is the size of the bitmap you pass to AddTool(),
and not the eventual size of the tool button. and not the eventual size of the tool button.

View File

@@ -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->SetToolBitmapSize(wxSize(w, h));
toolBar->AddTool(wxID_NEW, _T("New"), toolBar->AddTool(wxID_NEW, _T("New"),

View File

@@ -282,9 +282,13 @@ void wxToolBar::Init()
m_nButtons = 0; m_nButtons = 0;
const wxSize size = wxArtProvider::GetNativeSizeHint(wxART_TOOLBAR); // even though modern Windows applications typically use 24*24 (or even
m_defaultWidth = size.x; // 32*32) size for their bitmaps, the native control itself still uses the
m_defaultHeight = size.y; // 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; 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() void wxToolBar::AdjustToolBitmapSize()
{ {
// this is the default bitmap size, we only need to call TB_SETBITMAPSIZE const wxSize sizeOrig(m_defaultWidth, m_defaultHeight);
// if we use something different
static const wxSize sizeStd(16, 15);
wxSize s(m_defaultWidth, m_defaultHeight); wxSize sizeActual(sizeOrig);
for ( wxToolBarToolsList::const_iterator i = m_tools.begin(); for ( wxToolBarToolsList::const_iterator i = m_tools.begin();
i != m_tools.end(); i != m_tools.end();
++i ) ++i )
{ {
const wxBitmap& bmp = (*i)->GetNormalBitmap(); const wxBitmap& bmp = (*i)->GetNormalBitmap();
s.IncTo(bmp.GetSize()); sizeActual.IncTo(bmp.GetSize());
} }
if ( s != sizeStd ) if ( sizeActual != sizeOrig )
MSWSetBitmapSize(s); SetToolBitmapSize(sizeActual);
} }
bool wxToolBar::Realize() bool wxToolBar::Realize()
@@ -1354,7 +1351,7 @@ void wxToolBar::SetToolBitmapSize(const wxSize& size)
{ {
wxToolBarBase::SetToolBitmapSize(size); wxToolBarBase::SetToolBitmapSize(size);
MSWSetBitmapSize(size); ::SendMessage(GetHwnd(), TB_SETBITMAPSIZE, 0, MAKELONG(size.x, size.y));
} }
void wxToolBar::SetRows(int nRows) void wxToolBar::SetRows(int nRows)