From c6b3a6f2b45a4470d2b161f39ed00053abdcd2e5 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Fri, 7 Feb 2020 18:22:08 +0100 Subject: [PATCH] Handle image lists in wxRibbonButtonBarButtonBase too This makes more sense and also allows SetButtonIcon() to work with them. --- src/ribbon/buttonbar.cpp | 54 +++++++++++++++++++++------------------- 1 file changed, 29 insertions(+), 25 deletions(-) diff --git a/src/ribbon/buttonbar.cpp b/src/ribbon/buttonbar.cpp index e7665295cc..07e5756e45 100644 --- a/src/ribbon/buttonbar.cpp +++ b/src/ribbon/buttonbar.cpp @@ -95,7 +95,8 @@ public: barButtonSmallImageListPos = -1; } - void SetBitmaps(wxSize bitmap_size_large, + void SetBitmaps(wxRibbonBar* ribbon, + wxSize bitmap_size_large, wxSize bitmap_size_small, const wxBitmap& bitmap_large, const wxBitmap& bitmap_large_disabled, @@ -103,16 +104,17 @@ public: const wxBitmap& bitmap_small_disabled) { m_bitmap_large = bitmap_large; - if(!m_bitmap_large.IsOk()) + if(!bitmap_large.IsOk()) { m_bitmap_large = MakeResizedBitmap(m_bitmap_small, bitmap_size_large); } - else if(m_bitmap_large.GetScaledSize() != bitmap_size_large) + else if(bitmap_large.GetScaledSize() != bitmap_size_large) { m_bitmap_large = MakeResizedBitmap(m_bitmap_large, bitmap_size_large); } + m_bitmap_small = bitmap_small; if(!m_bitmap_small.IsOk()) { @@ -134,6 +136,28 @@ public: { m_bitmap_small_disabled = MakeDisabledBitmap(m_bitmap_small); } + + if ( ribbon ) + { + if ( m_bitmap_large.IsOk() ) + { + wxImageList* const + buttonImageList = ribbon->GetButtonImageList(bitmap_size_large); + + barButtonImageListPos = buttonImageList->Add(m_bitmap_large); + m_bitmap_large = wxNullBitmap; + buttonImageList->Add(m_bitmap_large_disabled); + m_bitmap_large_disabled = wxNullBitmap; + } + + wxImageList* const + buttonSmallImageList = ribbon->GetButtonSmallImageList(bitmap_size_small); + + barButtonSmallImageListPos = buttonSmallImageList->Add(m_bitmap_small); + m_bitmap_small = wxNullBitmap; + buttonSmallImageList->Add(m_bitmap_small_disabled); + m_bitmap_small_disabled = wxNullBitmap; + } } wxRibbonButtonBarButtonInstance NewInstance() @@ -412,7 +436,7 @@ wxRibbonButtonBarButtonBase* wxRibbonButtonBar::InsertButton( wxRibbonButtonBarButtonBase* base = new wxRibbonButtonBarButtonBase; base->id = button_id; base->label = label; - base->SetBitmaps(m_bitmap_size_large, m_bitmap_size_small, + base->SetBitmaps(GetAncestorRibbonBar(), m_bitmap_size_large, m_bitmap_size_small, bitmap, bitmap_disabled, bitmap_small, bitmap_small_disabled); base->kind = kind; base->help_string = help_string; @@ -423,26 +447,6 @@ wxRibbonButtonBarButtonBase* wxRibbonButtonBar::InsertButton( base->min_size_class = wxRIBBON_BUTTONBAR_BUTTON_SMALL; base->max_size_class = wxRIBBON_BUTTONBAR_BUTTON_LARGE; - wxImageList* buttonImageList = NULL; - wxImageList* buttonSmallImageList = NULL; - if ( wxRibbonBar* const ribbon = GetAncestorRibbonBar() ) - { - buttonImageList = ribbon->GetButtonImageList(m_bitmap_size_large); - buttonSmallImageList = ribbon->GetButtonSmallImageList(m_bitmap_size_small); - } - if (base->m_bitmap_large.IsOk() && buttonImageList) - { - base->barButtonImageListPos = buttonImageList->Add(base->m_bitmap_large); - base->m_bitmap_large = wxNullBitmap; - buttonImageList->Add(base->m_bitmap_large_disabled); - base->m_bitmap_large_disabled = wxNullBitmap; - - base->barButtonSmallImageListPos = buttonSmallImageList->Add(base->m_bitmap_small); - base->m_bitmap_small = wxNullBitmap; - buttonSmallImageList->Add(base->m_bitmap_small_disabled); - base->m_bitmap_small_disabled = wxNullBitmap; - } - wxClientDC temp_dc(this); FetchButtonSizeInfo(base, wxRIBBON_BUTTONBAR_BUTTON_SMALL, temp_dc); FetchButtonSizeInfo(base, wxRIBBON_BUTTONBAR_BUTTON_MEDIUM, temp_dc); @@ -672,7 +676,7 @@ void wxRibbonButtonBar::SetButtonIcon( wxRibbonButtonBarButtonBase* base = GetItemById(button_id); if(base == NULL) return; - base->SetBitmaps(m_bitmap_size_large, m_bitmap_size_small, + base->SetBitmaps(GetAncestorRibbonBar(), m_bitmap_size_large, m_bitmap_size_small, bitmap, bitmap_disabled, bitmap_small, bitmap_small_disabled); Refresh(); }