From bb2212e6c46d1a661d937450255ede09aff19ede Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Tue, 23 Jun 2009 10:21:18 +0000 Subject: [PATCH] adjust the toolbar tools bitmap size to fit the biggest bitmap used under wxOSX too, not only under MSW (and moved the code doing it to the common base class to avoid duplicating it) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61174 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/tbarbase.h | 7 +++++++ src/common/tbarbase.cpp | 27 +++++++++++++++++++++++++++ src/msw/toolbar.cpp | 30 ++++-------------------------- src/osx/carbon/toolbar.cpp | 34 +++++++++++++++++----------------- src/osx/cocoa/toolbar.mm | 2 +- 5 files changed, 56 insertions(+), 44 deletions(-) diff --git a/include/wx/tbarbase.h b/include/wx/tbarbase.h index d13bf22333..cc367e41bb 100644 --- a/include/wx/tbarbase.h +++ b/include/wx/tbarbase.h @@ -361,6 +361,9 @@ public: // must be called after all buttons have been created to finish toolbar // initialisation + // + // derived class versions should call the base one first, before doing + // platform-specific stuff virtual bool Realize(); // tools state @@ -602,6 +605,10 @@ protected: // un-toggle all buttons in the same radio group void UnToggleRadioGroup(wxToolBarToolBase *tool); + // make the size of the buttons big enough to fit the largest bitmap size + void AdjustToolBitmapSize(); + + // the list of all our tools wxToolBarToolsList m_tools; diff --git a/src/common/tbarbase.cpp b/src/common/tbarbase.cpp index 97fe65f631..a43e8a0b1d 100644 --- a/src/common/tbarbase.cpp +++ b/src/common/tbarbase.cpp @@ -446,8 +446,35 @@ void wxToolBarBase::ClearTools() } } +void wxToolBarBase::AdjustToolBitmapSize() +{ + const wxSize sizeOrig(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(); + if ( bmp.IsOk() ) + sizeActual.IncTo(bmp.GetSize()); + } + + if ( sizeActual != sizeOrig ) + SetToolBitmapSize(sizeActual); +} + bool wxToolBarBase::Realize() { + // check if we have anything to do + if ( m_tools.empty() ) + return false; + + // make sure tool size is larger enough for all all bitmaps to fit in + // (this is consistent with what other ports do): + AdjustToolBitmapSize(); + return true; } diff --git a/src/msw/toolbar.cpp b/src/msw/toolbar.cpp index 75630f870d..24eeac7198 100644 --- a/src/msw/toolbar.cpp +++ b/src/msw/toolbar.cpp @@ -286,7 +286,7 @@ void wxToolBar::Init() // 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() + // wxToolBarBase::AdjustToolBitmapSize() m_defaultWidth = 16; m_defaultHeight = 15; @@ -634,34 +634,12 @@ void wxToolBar::CreateDisabledImageList() } } -void wxToolBar::AdjustToolBitmapSize() -{ - const wxSize sizeOrig(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(); - sizeActual.IncTo(bmp.GetSize()); - } - - if ( sizeActual != sizeOrig ) - SetToolBitmapSize(sizeActual); -} - bool wxToolBar::Realize() { - const size_t nTools = GetToolsCount(); - if ( nTools == 0 ) - // nothing to do - return true; + if ( !wxToolBarBase::Realize() ) + return false; - // make sure tool size is larger enough for all all bitmaps to fit in - // (this is consistent with what other ports do): - AdjustToolBitmapSize(); + const size_t nTools = GetToolsCount(); #ifdef wxREMAP_BUTTON_COLOURS // don't change the values of these constants, they can be set from the diff --git a/src/osx/carbon/toolbar.cpp b/src/osx/carbon/toolbar.cpp index 1a8fe6112e..bccc29b4e7 100644 --- a/src/osx/carbon/toolbar.cpp +++ b/src/osx/carbon/toolbar.cpp @@ -167,14 +167,14 @@ public: { if ( wxToolBarToolBase::Toggle( toggle ) == false ) return false; - + UpdateToggleImage(toggle); return true; } - + void UpdateHelpStrings() { -#if wxOSX_USE_NATIVE_TOOLBAR +#if wxOSX_USE_NATIVE_TOOLBAR if ( m_toolbarItemRef ) { wxFontEncoding enc = GetToolBarFontEncoding(); @@ -186,16 +186,16 @@ public: } #endif } - + virtual bool SetShortHelp(const wxString& help) { if ( wxToolBarToolBase::SetShortHelp( help ) == false ) return false; - - UpdateHelpStrings(); + + UpdateHelpStrings(); return true; } - + virtual bool SetLongHelp(const wxString& help) { if ( wxToolBarToolBase::SetLongHelp( help ) == false ) @@ -205,12 +205,12 @@ public: return true; } - virtual void SetNormalBitmap(const wxBitmap& bmp) + virtual void SetNormalBitmap(const wxBitmap& bmp) { wxToolBarToolBase::SetNormalBitmap(bmp); UpdateToggleImage(CanBeToggled() && IsToggled()); } - + virtual void SetLabel(const wxString& label) { wxToolBarToolBase::SetLabel(label); @@ -429,7 +429,7 @@ bool wxToolBarTool::Enable( bool enable ) { if ( wxToolBarToolBase::Enable( enable ) == false ) return false; - + if ( IsControl() ) { GetControl()->Enable( enable ); @@ -1108,18 +1108,18 @@ bool wxToolBar::MacInstallNativeToolbar(bool usesNative) bResult = true; SetWindowToolbar( tlw, (HIToolbarRef) m_macToolbar ); - + // ShowHideWindowToolbar will make the wxFrame grow // which we don't want in this case wxSize sz = GetParent()->GetSize(); ShowHideWindowToolbar( tlw, true, false ); // Restore the orginal size GetParent()->SetSize( sz ); - + ChangeWindowAttributes( tlw, kWindowToolbarButtonAttribute, 0 ); - + SetAutomaticControlDragTrackingEnabledForWindow( tlw, true ); - + m_peer->Move(0,0,0,0 ); SetSize( wxSIZE_AUTO_WIDTH, 0 ); m_peer->SetVisibility( false ); @@ -1151,9 +1151,9 @@ bool wxToolBar::MacInstallNativeToolbar(bool usesNative) bool wxToolBar::Realize() { - if (m_tools.GetCount() == 0) + if ( !wxToolBarBase::Realize() ) return false; - + wxSize tlw_sz = GetParent()->GetSize(); int maxWidth = 0; @@ -1365,7 +1365,7 @@ bool wxToolBar::Realize() if (m_macUsesNativeToolbar) GetParent()->SetSize( tlw_sz ); - + if ( GetWindowStyleFlag() & (wxTB_TOP|wxTB_BOTTOM) ) { // if not set yet, only one row diff --git a/src/osx/cocoa/toolbar.mm b/src/osx/cocoa/toolbar.mm index f02306785f..8c1c416088 100644 --- a/src/osx/cocoa/toolbar.mm +++ b/src/osx/cocoa/toolbar.mm @@ -839,7 +839,7 @@ bool wxToolBar::MacInstallNativeToolbar(bool usesNative) bool wxToolBar::Realize() { - if (m_tools.GetCount() == 0) + if ( !wxToolBarBase::Realize() ) return false; int maxWidth = 0; -- 2.45.2