mirror of
https://github.com/wxWidgets/wxWidgets.git
synced 2026-08-17 17:02:51 +08:00
Refactor wxRibbon to use wxBitmapBundle for icons and images
- Update wxRibbonPanel to accept wxBitmapBundle for minimised icons. - Modify wxRibbonToolBar to utilize wxBitmapBundle for tool icons. - Change wxRibbonAUIArtProvider and wxRibbonMSWArtProvider to handle wxBitmapBundle for drawing operations. - Adjust wxRibbonGallery to support wxBitmapBundle for gallery items. - Implement DPI change handling in wxRibbonBar, wxRibbonPage, wxRibbonPanel, and wxRibbonToolBar to recalculate sizes and redraw with the correct bitmap for the current DPI. - Ensure all relevant methods and event handlers are updated to work with wxBitmapBundle instead of wxBitmap. Closes #26117.
This commit is contained in:
committed by
Vadim Zeitlin
parent
8294a66417
commit
722f58e238
+13
-12
@@ -19,6 +19,7 @@
|
||||
#include "wx/font.h"
|
||||
#include "wx/pen.h"
|
||||
#include "wx/bitmap.h"
|
||||
#include "wx/bmpbndl.h"
|
||||
#include "wx/ribbon/bar.h"
|
||||
|
||||
class WXDLLIMPEXP_FWD_CORE wxDC;
|
||||
@@ -638,7 +639,7 @@ protected:
|
||||
void DrawGalleryBackgroundCommon(wxDC& dc, wxRibbonGallery* wnd,
|
||||
const wxRect& rect);
|
||||
virtual void DrawGalleryButton(wxDC& dc, wxRect rect,
|
||||
wxRibbonGalleryButtonState state, wxBitmap* bitmaps);
|
||||
wxRibbonGalleryButtonState state, wxBitmapBundle* bundles, wxWindow* wnd);
|
||||
void DrawButtonBarButtonForeground(
|
||||
wxDC& dc,
|
||||
const wxRect& rect,
|
||||
@@ -655,15 +656,15 @@ protected:
|
||||
void CloneTo(wxRibbonMSWArtProvider* copy) const;
|
||||
|
||||
wxBitmap m_cached_tab_separator;
|
||||
wxBitmap m_gallery_up_bitmap[4];
|
||||
wxBitmap m_gallery_down_bitmap[4];
|
||||
wxBitmap m_gallery_extension_bitmap[4];
|
||||
wxBitmap m_toolbar_drop_bitmap;
|
||||
wxBitmap m_panel_extension_bitmap[2];
|
||||
wxBitmap m_ribbon_toggle_up_bitmap[2];
|
||||
wxBitmap m_ribbon_toggle_down_bitmap[2];
|
||||
wxBitmap m_ribbon_toggle_pin_bitmap[2];
|
||||
wxBitmap m_ribbon_bar_help_button_bitmap[2];
|
||||
wxBitmapBundle m_gallery_up_bundle[4];
|
||||
wxBitmapBundle m_gallery_down_bundle[4];
|
||||
wxBitmapBundle m_gallery_extension_bundle[4];
|
||||
wxBitmapBundle m_toolbar_drop_bundle;
|
||||
wxBitmapBundle m_panel_extension_bundle[2];
|
||||
wxBitmapBundle m_ribbon_toggle_up_bundle[2];
|
||||
wxBitmapBundle m_ribbon_toggle_down_bundle[2];
|
||||
wxBitmapBundle m_ribbon_toggle_pin_bundle[2];
|
||||
wxBitmapBundle m_ribbon_bar_help_button_bundle[2];
|
||||
|
||||
wxColour m_primary_scheme_colour;
|
||||
wxColour m_secondary_scheme_colour;
|
||||
@@ -885,7 +886,7 @@ protected:
|
||||
void DrawPartialPageBackground(wxDC& dc, wxWindow* wnd,
|
||||
const wxRect& rect, bool allow_hovered = true);
|
||||
void DrawGalleryButton(wxDC& dc, wxRect rect,
|
||||
wxRibbonGalleryButtonState state, wxBitmap* bitmaps) override;
|
||||
wxRibbonGalleryButtonState state, wxBitmapBundle* bundles, wxWindow* wnd) override;
|
||||
void DrawPanelBorder(wxDC& dc, const wxRect& rect, wxPen& primary_colour,
|
||||
wxPen& secondary_colour);
|
||||
void ReallyDrawTabSeparator(wxWindow* wnd, const wxRect& rect,
|
||||
@@ -1029,7 +1030,7 @@ protected:
|
||||
void DrawPartialPanelBackground(wxDC& dc, wxWindow* wnd,
|
||||
const wxRect& rect);
|
||||
void DrawGalleryButton(wxDC& dc, wxRect rect,
|
||||
wxRibbonGalleryButtonState state, wxBitmap* bitmaps) override;
|
||||
wxRibbonGalleryButtonState state, wxBitmapBundle* bundles, wxWindow* wnd) override;
|
||||
|
||||
wxColour m_tab_ctrl_background_colour;
|
||||
wxColour m_tab_ctrl_background_gradient_colour;
|
||||
|
||||
@@ -161,8 +161,10 @@ public:
|
||||
|
||||
void HideIfExpanded();
|
||||
|
||||
// Return the image list containing images of the given size, creating it
|
||||
// if necessary.
|
||||
// Deprecated: wxRibbonButtonBar now uses wxBitmapBundle directly for
|
||||
// DPI-aware bitmap management. This method is maintained for backward
|
||||
// compatibility but is no longer used by wxRibbonButtonBar.
|
||||
wxDEPRECATED_MSG("wxRibbonButtonBar now uses wxBitmapBundle for DPI support")
|
||||
wxImageList* GetButtonImageList(wxSize size, int initialCount = 1);
|
||||
|
||||
protected:
|
||||
@@ -185,6 +187,7 @@ protected:
|
||||
void OnEraseBackground(wxEraseEvent& evt);
|
||||
void DoEraseBackground(wxDC& dc);
|
||||
void OnSize(wxSizeEvent& evt);
|
||||
void OnDPIChanged(wxDPIChangedEvent& evt);
|
||||
void OnMouseLeftDown(wxMouseEvent& evt);
|
||||
void OnMouseLeftUp(wxMouseEvent& evt);
|
||||
void OnMouseMiddleDown(wxMouseEvent& evt);
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
#include "wx/ribbon/art.h"
|
||||
#include "wx/ribbon/control.h"
|
||||
#include "wx/dynarray.h"
|
||||
#include "wx/bmpbndl.h"
|
||||
|
||||
class wxRibbonButtonBar;
|
||||
class wxRibbonButtonBarButtonBase;
|
||||
@@ -47,7 +48,7 @@ public:
|
||||
virtual wxRibbonButtonBarButtonBase* AddButton(
|
||||
int button_id,
|
||||
const wxString& label,
|
||||
const wxBitmap& bitmap,
|
||||
const wxBitmapBundle& bitmap,
|
||||
const wxString& help_string,
|
||||
wxRibbonButtonKind kind = wxRIBBON_BUTTON_NORMAL);
|
||||
// NB: help_string cannot be optional as that would cause the signature
|
||||
@@ -57,28 +58,28 @@ public:
|
||||
virtual wxRibbonButtonBarButtonBase* AddDropdownButton(
|
||||
int button_id,
|
||||
const wxString& label,
|
||||
const wxBitmap& bitmap,
|
||||
const wxBitmapBundle& bitmap,
|
||||
const wxString& help_string = wxEmptyString);
|
||||
|
||||
virtual wxRibbonButtonBarButtonBase* AddHybridButton(
|
||||
int button_id,
|
||||
const wxString& label,
|
||||
const wxBitmap& bitmap,
|
||||
const wxBitmapBundle& bitmap,
|
||||
const wxString& help_string = wxEmptyString);
|
||||
|
||||
virtual wxRibbonButtonBarButtonBase* AddToggleButton(
|
||||
int button_id,
|
||||
const wxString& label,
|
||||
const wxBitmap& bitmap,
|
||||
const wxBitmapBundle& bitmap,
|
||||
const wxString& help_string = wxEmptyString);
|
||||
|
||||
virtual wxRibbonButtonBarButtonBase* AddButton(
|
||||
int button_id,
|
||||
const wxString& label,
|
||||
const wxBitmap& bitmap,
|
||||
const wxBitmap& bitmap_small = wxNullBitmap,
|
||||
const wxBitmap& bitmap_disabled = wxNullBitmap,
|
||||
const wxBitmap& bitmap_small_disabled = wxNullBitmap,
|
||||
const wxBitmapBundle& bitmap,
|
||||
const wxBitmapBundle& bitmap_small = wxBitmapBundle(),
|
||||
const wxBitmapBundle& bitmap_disabled = wxBitmapBundle(),
|
||||
const wxBitmapBundle& bitmap_small_disabled = wxBitmapBundle(),
|
||||
wxRibbonButtonKind kind = wxRIBBON_BUTTON_NORMAL,
|
||||
const wxString& help_string = wxEmptyString);
|
||||
|
||||
@@ -86,7 +87,7 @@ public:
|
||||
size_t pos,
|
||||
int button_id,
|
||||
const wxString& label,
|
||||
const wxBitmap& bitmap,
|
||||
const wxBitmapBundle& bitmap,
|
||||
const wxString& help_string,
|
||||
wxRibbonButtonKind kind = wxRIBBON_BUTTON_NORMAL);
|
||||
|
||||
@@ -94,31 +95,31 @@ public:
|
||||
size_t pos,
|
||||
int button_id,
|
||||
const wxString& label,
|
||||
const wxBitmap& bitmap,
|
||||
const wxBitmapBundle& bitmap,
|
||||
const wxString& help_string = wxEmptyString);
|
||||
|
||||
virtual wxRibbonButtonBarButtonBase* InsertHybridButton(
|
||||
size_t pos,
|
||||
int button_id,
|
||||
const wxString& label,
|
||||
const wxBitmap& bitmap,
|
||||
const wxBitmapBundle& bitmap,
|
||||
const wxString& help_string = wxEmptyString);
|
||||
|
||||
virtual wxRibbonButtonBarButtonBase* InsertToggleButton(
|
||||
size_t pos,
|
||||
int button_id,
|
||||
const wxString& label,
|
||||
const wxBitmap& bitmap,
|
||||
const wxBitmapBundle& bitmap,
|
||||
const wxString& help_string = wxEmptyString);
|
||||
|
||||
virtual wxRibbonButtonBarButtonBase* InsertButton(
|
||||
size_t pos,
|
||||
int button_id,
|
||||
const wxString& label,
|
||||
const wxBitmap& bitmap,
|
||||
const wxBitmap& bitmap_small = wxNullBitmap,
|
||||
const wxBitmap& bitmap_disabled = wxNullBitmap,
|
||||
const wxBitmap& bitmap_small_disabled = wxNullBitmap,
|
||||
const wxBitmapBundle& bitmap,
|
||||
const wxBitmapBundle& bitmap_small = wxBitmapBundle(),
|
||||
const wxBitmapBundle& bitmap_disabled = wxBitmapBundle(),
|
||||
const wxBitmapBundle& bitmap_small_disabled = wxBitmapBundle(),
|
||||
wxRibbonButtonKind kind = wxRIBBON_BUTTON_NORMAL,
|
||||
const wxString& help_string = wxEmptyString);
|
||||
|
||||
@@ -142,10 +143,10 @@ public:
|
||||
|
||||
virtual void SetButtonIcon(
|
||||
int button_id,
|
||||
const wxBitmap& bitmap,
|
||||
const wxBitmap& bitmap_small = wxNullBitmap,
|
||||
const wxBitmap& bitmap_disabled = wxNullBitmap,
|
||||
const wxBitmap& bitmap_small_disabled = wxNullBitmap);
|
||||
const wxBitmapBundle& bitmap,
|
||||
const wxBitmapBundle& bitmap_small = wxBitmapBundle(),
|
||||
const wxBitmapBundle& bitmap_disabled = wxBitmapBundle(),
|
||||
const wxBitmapBundle& bitmap_small_disabled = wxBitmapBundle());
|
||||
|
||||
virtual void SetButtonText(int button_id, const wxString& label);
|
||||
virtual void SetButtonTextMinWidth(int button_id,
|
||||
@@ -167,6 +168,9 @@ public:
|
||||
void SetShowToolTipsForDisabled(bool show);
|
||||
bool GetShowToolTipsForDisabled() const;
|
||||
|
||||
// Get bitmap for button (DPI-aware resolution)
|
||||
wxBitmap GetButtonBitmap(int imageIndex, bool large) const;
|
||||
|
||||
protected:
|
||||
friend class wxRibbonButtonBarEvent;
|
||||
virtual wxSize DoGetBestSize() const override;
|
||||
@@ -180,6 +184,7 @@ protected:
|
||||
void OnMouseLeave(wxMouseEvent& evt);
|
||||
void OnMouseDown(wxMouseEvent& evt);
|
||||
void OnMouseUp(wxMouseEvent& evt);
|
||||
void OnDPIChanged(wxDPIChangedEvent& evt);
|
||||
|
||||
virtual wxSize DoGetNextSmallerSize(wxOrientation direction,
|
||||
wxSize relative_to) const override;
|
||||
@@ -208,9 +213,15 @@ protected:
|
||||
bool m_lock_active_state;
|
||||
bool m_show_tooltips_for_disabled;
|
||||
|
||||
std::vector<wxBitmapBundle> m_bundlesLarge; // Large button icons
|
||||
std::vector<wxBitmapBundle> m_bundlesSmall; // Small button icons
|
||||
std::vector<wxBitmapBundle> m_bundlesLargeDisabled; // Disabled large icons
|
||||
std::vector<wxBitmapBundle> m_bundlesSmallDisabled; // Disabled small icons
|
||||
|
||||
private:
|
||||
wxRibbonBar* m_ribbonBar = nullptr;
|
||||
|
||||
|
||||
#ifndef SWIG
|
||||
wxDECLARE_CLASS(wxRibbonButtonBar);
|
||||
wxDECLARE_EVENT_TABLE();
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
|
||||
#include "wx/ribbon/art.h"
|
||||
#include "wx/ribbon/control.h"
|
||||
#include "wx/bmpbndl.h"
|
||||
|
||||
class wxRibbonGalleryItem;
|
||||
|
||||
@@ -44,9 +45,9 @@ public:
|
||||
bool IsEmpty() const;
|
||||
unsigned int GetCount() const;
|
||||
wxRibbonGalleryItem* GetItem(unsigned int n);
|
||||
wxRibbonGalleryItem* Append(const wxBitmap& bitmap, int id);
|
||||
wxRibbonGalleryItem* Append(const wxBitmap& bitmap, int id, void* clientData);
|
||||
wxRibbonGalleryItem* Append(const wxBitmap& bitmap, int id, wxClientData* clientData);
|
||||
wxRibbonGalleryItem* Append(const wxBitmapBundle& bitmap, int id);
|
||||
wxRibbonGalleryItem* Append(const wxBitmapBundle& bitmap, int id, void* clientData);
|
||||
wxRibbonGalleryItem* Append(const wxBitmapBundle& bitmap, int id, wxClientData* clientData);
|
||||
|
||||
void SetItemClientObject(wxRibbonGalleryItem* item, wxClientData* data);
|
||||
wxClientData* GetItemClientObject(const wxRibbonGalleryItem* item) const;
|
||||
@@ -86,6 +87,7 @@ protected:
|
||||
void OnMouseDClick(wxMouseEvent& evt);
|
||||
void OnPaint(wxPaintEvent& evt);
|
||||
void OnSize(wxSizeEvent& evt);
|
||||
void OnDPIChanged(wxDPIChangedEvent& evt);
|
||||
int GetScrollLineSize() const;
|
||||
|
||||
virtual wxSize DoGetBestSize() const override;
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
#include "wx/ribbon/control.h"
|
||||
#include "wx/ribbon/panel.h"
|
||||
#include "wx/bitmap.h"
|
||||
#include "wx/bmpbndl.h"
|
||||
|
||||
class wxRibbonBar;
|
||||
class wxRibbonPageScrollButton;
|
||||
@@ -29,7 +29,7 @@ public:
|
||||
wxRibbonPage(wxRibbonBar* parent,
|
||||
wxWindowID id = wxID_ANY,
|
||||
const wxString& label = wxEmptyString,
|
||||
const wxBitmap& icon = wxNullBitmap,
|
||||
const wxBitmapBundle& icon = wxBitmapBundle(),
|
||||
long style = 0);
|
||||
|
||||
virtual ~wxRibbonPage();
|
||||
@@ -37,12 +37,13 @@ public:
|
||||
bool Create(wxRibbonBar* parent,
|
||||
wxWindowID id = wxID_ANY,
|
||||
const wxString& label = wxEmptyString,
|
||||
const wxBitmap& icon = wxNullBitmap,
|
||||
const wxBitmapBundle& icon = wxBitmapBundle(),
|
||||
long style = 0);
|
||||
|
||||
void SetArtProvider(wxRibbonArtProvider* art) override;
|
||||
|
||||
wxBitmap& GetIcon() {return m_icon;}
|
||||
wxBitmap GetIcon() {return m_icon.GetBitmapFor(this);}
|
||||
const wxBitmapBundle& GetIconBundle() const {return m_icon;}
|
||||
virtual wxSize GetMinSize() const override;
|
||||
void SetSizeWithScrollButtonAdjustment(int x, int y, int width, int height);
|
||||
void AdjustRectToIncludeScrollButtons(wxRect* rect) const;
|
||||
@@ -75,17 +76,18 @@ protected:
|
||||
void OnEraseBackground(wxEraseEvent& evt);
|
||||
void OnPaint(wxPaintEvent& evt);
|
||||
void OnSize(wxSizeEvent& evt);
|
||||
void OnDPIChanged(wxDPIChangedEvent& evt);
|
||||
|
||||
bool ExpandPanels(wxOrientation direction, int maximum_amount);
|
||||
bool CollapsePanels(wxOrientation direction, int minimum_amount);
|
||||
bool ShowScrollButtons();
|
||||
void HideScrollButtons();
|
||||
|
||||
void CommonInit(const wxString& label, const wxBitmap& icon);
|
||||
void CommonInit(const wxString& label, const wxBitmapBundle& icon);
|
||||
void PopulateSizeCalcArray(wxSize (wxWindow::*get_size)(void) const);
|
||||
|
||||
wxArrayRibbonControl m_collapse_stack;
|
||||
wxBitmap m_icon;
|
||||
wxBitmapBundle m_icon;
|
||||
wxSize m_old_size;
|
||||
// NB: Scroll button windows are siblings rather than children (to get correct clipping of children)
|
||||
wxRibbonPageScrollButton* m_scroll_left_btn = nullptr;
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
#if wxUSE_RIBBON
|
||||
|
||||
#include "wx/bitmap.h"
|
||||
#include "wx/bmpbndl.h"
|
||||
#include "wx/ribbon/control.h"
|
||||
|
||||
enum wxRibbonPanelOption
|
||||
@@ -35,7 +35,7 @@ public:
|
||||
wxRibbonPanel(wxWindow* parent,
|
||||
wxWindowID id = wxID_ANY,
|
||||
const wxString& label = wxEmptyString,
|
||||
const wxBitmap& minimised_icon = wxNullBitmap,
|
||||
const wxBitmapBundle& minimised_icon = wxBitmapBundle(),
|
||||
const wxPoint& pos = wxDefaultPosition,
|
||||
const wxSize& size = wxDefaultSize,
|
||||
long style = wxRIBBON_PANEL_DEFAULT_STYLE);
|
||||
@@ -45,13 +45,13 @@ public:
|
||||
bool Create(wxWindow* parent,
|
||||
wxWindowID id = wxID_ANY,
|
||||
const wxString& label = wxEmptyString,
|
||||
const wxBitmap& icon = wxNullBitmap,
|
||||
const wxBitmapBundle& icon = wxBitmapBundle(),
|
||||
const wxPoint& pos = wxDefaultPosition,
|
||||
const wxSize& size = wxDefaultSize,
|
||||
long style = wxRIBBON_PANEL_DEFAULT_STYLE);
|
||||
|
||||
wxBitmap& GetMinimisedIcon() {return m_minimised_icon;}
|
||||
const wxBitmap& GetMinimisedIcon() const {return m_minimised_icon;}
|
||||
wxBitmap GetMinimisedIcon() {return m_minimised_icon.GetBitmapFor(this);}
|
||||
const wxBitmapBundle& GetMinimisedIconBundle() const {return m_minimised_icon;}
|
||||
bool IsMinimised() const;
|
||||
bool IsMinimised(wxSize at_size) const;
|
||||
bool IsHovered() const;
|
||||
@@ -108,17 +108,18 @@ protected:
|
||||
void OnMotion(wxMouseEvent& evt);
|
||||
void OnKillFocus(wxFocusEvent& evt);
|
||||
void OnChildKillFocus(wxFocusEvent& evt);
|
||||
void OnDPIChanged(wxDPIChangedEvent& evt);
|
||||
|
||||
void TestPositionForHover(const wxPoint& pos);
|
||||
bool ShouldSendEventToDummy(wxEvent& evt);
|
||||
virtual bool TryAfter(wxEvent& evt) override;
|
||||
|
||||
void CommonInit(const wxString& label, const wxBitmap& icon, long style);
|
||||
void CommonInit(const wxString& label, const wxBitmapBundle& icon, long style);
|
||||
static wxRect GetExpandedPosition(wxRect panel,
|
||||
wxSize expanded_size,
|
||||
wxDirection direction);
|
||||
|
||||
wxBitmap m_minimised_icon;
|
||||
wxBitmapBundle m_minimised_icon;
|
||||
wxBitmap m_minimised_icon_resized;
|
||||
wxSize m_smallest_unminimised_size;
|
||||
wxSize m_minimised_size;
|
||||
|
||||
+16
-14
@@ -15,6 +15,7 @@
|
||||
|
||||
#include "wx/ribbon/control.h"
|
||||
#include "wx/ribbon/art.h"
|
||||
#include "wx/bmpbndl.h"
|
||||
|
||||
class wxRibbonToolBarToolBase;
|
||||
class wxRibbonToolBarToolGroup;
|
||||
@@ -59,29 +60,29 @@ public:
|
||||
|
||||
virtual wxRibbonToolBarToolBase* AddTool(
|
||||
int tool_id,
|
||||
const wxBitmap& bitmap,
|
||||
const wxBitmapBundle& bitmap,
|
||||
const wxString& help_string,
|
||||
wxRibbonButtonKind kind = wxRIBBON_BUTTON_NORMAL);
|
||||
|
||||
virtual wxRibbonToolBarToolBase* AddDropdownTool(
|
||||
int tool_id,
|
||||
const wxBitmap& bitmap,
|
||||
const wxBitmapBundle& bitmap,
|
||||
const wxString& help_string = wxEmptyString);
|
||||
|
||||
virtual wxRibbonToolBarToolBase* AddHybridTool(
|
||||
int tool_id,
|
||||
const wxBitmap& bitmap,
|
||||
const wxBitmapBundle& bitmap,
|
||||
const wxString& help_string = wxEmptyString);
|
||||
|
||||
virtual wxRibbonToolBarToolBase* AddToggleTool(
|
||||
int tool_id,
|
||||
const wxBitmap& bitmap,
|
||||
const wxBitmapBundle& bitmap,
|
||||
const wxString& help_string = wxEmptyString);
|
||||
|
||||
virtual wxRibbonToolBarToolBase* AddTool(
|
||||
int tool_id,
|
||||
const wxBitmap& bitmap,
|
||||
const wxBitmap& bitmap_disabled = wxNullBitmap,
|
||||
const wxBitmapBundle& bitmap,
|
||||
const wxBitmapBundle& bitmap_disabled = wxBitmapBundle(),
|
||||
const wxString& help_string = wxEmptyString,
|
||||
wxRibbonButtonKind kind = wxRIBBON_BUTTON_NORMAL,
|
||||
wxObject* client_data = nullptr);
|
||||
@@ -91,33 +92,33 @@ public:
|
||||
virtual wxRibbonToolBarToolBase* InsertTool(
|
||||
size_t pos,
|
||||
int tool_id,
|
||||
const wxBitmap& bitmap,
|
||||
const wxBitmapBundle& bitmap,
|
||||
const wxString& help_string,
|
||||
wxRibbonButtonKind kind = wxRIBBON_BUTTON_NORMAL);
|
||||
|
||||
virtual wxRibbonToolBarToolBase* InsertDropdownTool(
|
||||
size_t pos,
|
||||
int tool_id,
|
||||
const wxBitmap& bitmap,
|
||||
const wxBitmapBundle& bitmap,
|
||||
const wxString& help_string = wxEmptyString);
|
||||
|
||||
virtual wxRibbonToolBarToolBase* InsertHybridTool(
|
||||
size_t pos,
|
||||
int tool_id,
|
||||
const wxBitmap& bitmap,
|
||||
const wxBitmapBundle& bitmap,
|
||||
const wxString& help_string = wxEmptyString);
|
||||
|
||||
virtual wxRibbonToolBarToolBase* InsertToggleTool(
|
||||
size_t pos,
|
||||
int tool_id,
|
||||
const wxBitmap& bitmap,
|
||||
const wxBitmapBundle& bitmap,
|
||||
const wxString& help_string = wxEmptyString);
|
||||
|
||||
virtual wxRibbonToolBarToolBase* InsertTool(
|
||||
size_t pos,
|
||||
int tool_id,
|
||||
const wxBitmap& bitmap,
|
||||
const wxBitmap& bitmap_disabled = wxNullBitmap,
|
||||
const wxBitmapBundle& bitmap,
|
||||
const wxBitmapBundle& bitmap_disabled = wxBitmapBundle(),
|
||||
const wxString& help_string = wxEmptyString,
|
||||
wxRibbonButtonKind kind = wxRIBBON_BUTTON_NORMAL,
|
||||
wxObject* client_data = nullptr);
|
||||
@@ -148,9 +149,9 @@ public:
|
||||
virtual void SetRows(int nMin, int nMax = -1);
|
||||
|
||||
virtual void SetToolClientData(int tool_id, wxObject* clientData);
|
||||
virtual void SetToolDisabledBitmap(int tool_id, const wxBitmap &bitmap);
|
||||
virtual void SetToolDisabledBitmap(int tool_id, const wxBitmapBundle &bitmap);
|
||||
virtual void SetToolHelpString(int tool_id, const wxString& helpString);
|
||||
virtual void SetToolNormalBitmap(int tool_id, const wxBitmap &bitmap);
|
||||
virtual void SetToolNormalBitmap(int tool_id, const wxBitmapBundle &bitmap);
|
||||
|
||||
virtual bool IsSizingContinuous() const override;
|
||||
|
||||
@@ -173,6 +174,7 @@ protected:
|
||||
void OnMouseUp(wxMouseEvent& evt);
|
||||
void OnPaint(wxPaintEvent& evt);
|
||||
void OnSize(wxSizeEvent& evt);
|
||||
void OnDPIChanged(wxDPIChangedEvent& evt);
|
||||
|
||||
virtual wxSize DoGetNextSmallerSize(wxOrientation direction,
|
||||
wxSize relative_to) const override;
|
||||
|
||||
+316
-90
File diff suppressed because it is too large
Load Diff
@@ -814,10 +814,10 @@ void wxRibbonAUIArtProvider::DrawPanelBackground(
|
||||
dc.SetPen(m_panel_hover_button_border_pen);
|
||||
dc.SetBrush(m_panel_hover_button_background_brush);
|
||||
dc.DrawRoundedRectangle(label_rect.GetRight() - 13, label_rect.GetBottom() - 13, 13, 13, 1.0);
|
||||
dc.DrawBitmap(m_panel_extension_bitmap[1], label_rect.GetRight() - 10, label_rect.GetBottom() - 10, true);
|
||||
dc.DrawBitmap(m_panel_extension_bundle[1].GetBitmapFor(wnd), label_rect.GetRight() - 10, label_rect.GetBottom() - 10, true);
|
||||
}
|
||||
else
|
||||
dc.DrawBitmap(m_panel_extension_bitmap[0], label_rect.GetRight() - 10, label_rect.GetBottom() - 10, true);
|
||||
dc.DrawBitmap(m_panel_extension_bundle[0].GetBitmapFor(wnd), label_rect.GetRight() - 10, label_rect.GetBottom() - 10, true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -983,7 +983,7 @@ void wxRibbonAUIArtProvider::DrawGalleryBackground(
|
||||
}
|
||||
|
||||
void wxRibbonAUIArtProvider::DrawGalleryButton(wxDC& dc, wxRect rect,
|
||||
wxRibbonGalleryButtonState state, wxBitmap* bitmaps)
|
||||
wxRibbonGalleryButtonState state, wxBitmapBundle* bundles, wxWindow* wnd)
|
||||
{
|
||||
int extra_height = 0;
|
||||
int extra_width = 0;
|
||||
@@ -1007,28 +1007,28 @@ void wxRibbonAUIArtProvider::DrawGalleryButton(wxDC& dc, wxRect rect,
|
||||
dc.GradientFillLinear(reduced_rect,
|
||||
m_gallery_button_background_colour,
|
||||
m_gallery_button_background_gradient_colour, wxSOUTH);
|
||||
btn_bitmap = bitmaps[0];
|
||||
btn_bitmap = bundles[0].GetBitmapFor(wnd);
|
||||
break;
|
||||
case wxRIBBON_GALLERY_BUTTON_HOVERED:
|
||||
dc.SetPen(m_gallery_item_border_pen);
|
||||
dc.SetBrush(m_gallery_button_hover_background_brush);
|
||||
dc.DrawRectangle(rect.x, rect.y, rect.width + extra_width,
|
||||
rect.height + extra_height);
|
||||
btn_bitmap = bitmaps[1];
|
||||
btn_bitmap = bundles[1].GetBitmapFor(wnd);
|
||||
break;
|
||||
case wxRIBBON_GALLERY_BUTTON_ACTIVE:
|
||||
dc.SetPen(m_gallery_item_border_pen);
|
||||
dc.SetBrush(m_gallery_button_active_background_brush);
|
||||
dc.DrawRectangle(rect.x, rect.y, rect.width + extra_width,
|
||||
rect.height + extra_height);
|
||||
btn_bitmap = bitmaps[2];
|
||||
btn_bitmap = bundles[2].GetBitmapFor(wnd);
|
||||
break;
|
||||
case wxRIBBON_GALLERY_BUTTON_DISABLED:
|
||||
dc.SetPen(*wxTRANSPARENT_PEN);
|
||||
dc.SetBrush(m_gallery_button_disabled_background_brush);
|
||||
dc.DrawRectangle(reduced_rect.x, reduced_rect.y, reduced_rect.width,
|
||||
reduced_rect.height);
|
||||
btn_bitmap = bitmaps[3];
|
||||
btn_bitmap = bundles[3].GetBitmapFor(wnd);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1177,7 +1177,7 @@ void wxRibbonAUIArtProvider::DrawToolGroupBackground(
|
||||
|
||||
void wxRibbonAUIArtProvider::DrawTool(
|
||||
wxDC& dc,
|
||||
wxWindow* WXUNUSED(wnd),
|
||||
wxWindow* wnd,
|
||||
const wxRect& rect,
|
||||
const wxBitmap& bitmap,
|
||||
wxRibbonButtonKind kind,
|
||||
@@ -1254,7 +1254,7 @@ void wxRibbonAUIArtProvider::DrawTool(
|
||||
dc.DrawLine(rect.x + avail_width + 1, rect.y,
|
||||
rect.x + avail_width + 1, rect.y + rect.height);
|
||||
}
|
||||
dc.DrawBitmap(m_toolbar_drop_bitmap, bg_rect.x + avail_width + 2,
|
||||
dc.DrawBitmap(m_toolbar_drop_bundle.GetBitmapFor(wnd), bg_rect.x + avail_width + 2,
|
||||
bg_rect.y + (bg_rect.height / 2) - 2, true);
|
||||
}
|
||||
if ( bitmap.IsOk() )
|
||||
|
||||
+58
-57
@@ -515,19 +515,19 @@ void wxRibbonMSWArtProvider::CloneTo(wxRibbonMSWArtProvider* copy) const
|
||||
int i;
|
||||
for(i = 0; i < 4; ++i)
|
||||
{
|
||||
copy->m_gallery_up_bitmap[i] = m_gallery_up_bitmap[i];
|
||||
copy->m_gallery_down_bitmap[i] = m_gallery_down_bitmap[i];
|
||||
copy->m_gallery_extension_bitmap[i] = m_gallery_extension_bitmap[i];
|
||||
copy->m_gallery_up_bundle[i] = m_gallery_up_bundle[i];
|
||||
copy->m_gallery_down_bundle[i] = m_gallery_down_bundle[i];
|
||||
copy->m_gallery_extension_bundle[i] = m_gallery_extension_bundle[i];
|
||||
}
|
||||
for(i = 0; i < 2; ++i)
|
||||
{
|
||||
copy->m_panel_extension_bitmap[i] = m_panel_extension_bitmap[i];
|
||||
copy->m_ribbon_toggle_up_bitmap[i] = m_ribbon_toggle_up_bitmap[i];
|
||||
copy->m_ribbon_toggle_down_bitmap[i] = m_ribbon_toggle_down_bitmap[i];
|
||||
copy->m_ribbon_toggle_pin_bitmap[i] = m_ribbon_toggle_pin_bitmap[i];
|
||||
copy->m_ribbon_bar_help_button_bitmap[i] = m_ribbon_bar_help_button_bitmap[i];
|
||||
copy->m_panel_extension_bundle[i] = m_panel_extension_bundle[i];
|
||||
copy->m_ribbon_toggle_up_bundle[i] = m_ribbon_toggle_up_bundle[i];
|
||||
copy->m_ribbon_toggle_down_bundle[i] = m_ribbon_toggle_down_bundle[i];
|
||||
copy->m_ribbon_toggle_pin_bundle[i] = m_ribbon_toggle_pin_bundle[i];
|
||||
copy->m_ribbon_bar_help_button_bundle[i] = m_ribbon_bar_help_button_bundle[i];
|
||||
}
|
||||
copy->m_toolbar_drop_bitmap = m_toolbar_drop_bitmap;
|
||||
copy->m_toolbar_drop_bundle = m_toolbar_drop_bundle;
|
||||
|
||||
copy->m_primary_scheme_colour = m_primary_scheme_colour;
|
||||
copy->m_secondary_scheme_colour = m_secondary_scheme_colour;
|
||||
@@ -1051,15 +1051,15 @@ void wxRibbonMSWArtProvider::SetColour(int id, const wxColor& colour)
|
||||
m_gallery_button_face_colour = colour;
|
||||
if(m_flags & wxRIBBON_BAR_FLOW_VERTICAL)
|
||||
{
|
||||
m_gallery_up_bitmap[0] = wxRibbonLoadPixmap(gallery_left_xpm, colour);
|
||||
m_gallery_down_bitmap[0] = wxRibbonLoadPixmap(gallery_right_xpm, colour);
|
||||
m_gallery_up_bundle[0] = wxBitmapBundle::FromBitmap(wxRibbonLoadPixmap(gallery_left_xpm, colour));
|
||||
m_gallery_down_bundle[0] = wxBitmapBundle::FromBitmap(wxRibbonLoadPixmap(gallery_right_xpm, colour));
|
||||
}
|
||||
else
|
||||
{
|
||||
m_gallery_up_bitmap[0] = wxRibbonLoadPixmap(gallery_up_xpm, colour);
|
||||
m_gallery_down_bitmap[0] = wxRibbonLoadPixmap(gallery_down_xpm, colour);
|
||||
m_gallery_up_bundle[0] = wxBitmapBundle::FromBitmap(wxRibbonLoadPixmap(gallery_up_xpm, colour));
|
||||
m_gallery_down_bundle[0] = wxBitmapBundle::FromBitmap(wxRibbonLoadPixmap(gallery_down_xpm, colour));
|
||||
}
|
||||
m_gallery_extension_bitmap[0] = wxRibbonLoadPixmap(gallery_extension_xpm, colour);
|
||||
m_gallery_extension_bundle[0] = wxBitmapBundle::FromBitmap(wxRibbonLoadPixmap(gallery_extension_xpm, colour));
|
||||
break;
|
||||
case wxRIBBON_ART_GALLERY_BUTTON_HOVER_BACKGROUND_COLOUR:
|
||||
m_gallery_button_hover_background_colour = colour;
|
||||
@@ -1074,15 +1074,15 @@ void wxRibbonMSWArtProvider::SetColour(int id, const wxColor& colour)
|
||||
m_gallery_button_hover_face_colour = colour;
|
||||
if(m_flags & wxRIBBON_BAR_FLOW_VERTICAL)
|
||||
{
|
||||
m_gallery_up_bitmap[1] = wxRibbonLoadPixmap(gallery_left_xpm, colour);
|
||||
m_gallery_down_bitmap[1] = wxRibbonLoadPixmap(gallery_right_xpm, colour);
|
||||
m_gallery_up_bundle[1] = wxBitmapBundle::FromBitmap(wxRibbonLoadPixmap(gallery_left_xpm, colour));
|
||||
m_gallery_down_bundle[1] = wxBitmapBundle::FromBitmap(wxRibbonLoadPixmap(gallery_right_xpm, colour));
|
||||
}
|
||||
else
|
||||
{
|
||||
m_gallery_up_bitmap[1] = wxRibbonLoadPixmap(gallery_up_xpm, colour);
|
||||
m_gallery_down_bitmap[1] = wxRibbonLoadPixmap(gallery_down_xpm, colour);
|
||||
m_gallery_up_bundle[1] = wxBitmapBundle::FromBitmap(wxRibbonLoadPixmap(gallery_up_xpm, colour));
|
||||
m_gallery_down_bundle[1] = wxBitmapBundle::FromBitmap(wxRibbonLoadPixmap(gallery_down_xpm, colour));
|
||||
}
|
||||
m_gallery_extension_bitmap[1] = wxRibbonLoadPixmap(gallery_extension_xpm, colour);
|
||||
m_gallery_extension_bundle[1] = wxBitmapBundle::FromBitmap(wxRibbonLoadPixmap(gallery_extension_xpm, colour));
|
||||
break;
|
||||
case wxRIBBON_ART_GALLERY_BUTTON_ACTIVE_BACKGROUND_COLOUR:
|
||||
m_gallery_button_active_background_colour = colour;
|
||||
@@ -1097,15 +1097,15 @@ void wxRibbonMSWArtProvider::SetColour(int id, const wxColor& colour)
|
||||
m_gallery_button_active_face_colour = colour;
|
||||
if(m_flags & wxRIBBON_BAR_FLOW_VERTICAL)
|
||||
{
|
||||
m_gallery_up_bitmap[2] = wxRibbonLoadPixmap(gallery_left_xpm, colour);
|
||||
m_gallery_down_bitmap[2] = wxRibbonLoadPixmap(gallery_right_xpm, colour);
|
||||
m_gallery_up_bundle[2] = wxBitmapBundle::FromBitmap(wxRibbonLoadPixmap(gallery_left_xpm, colour));
|
||||
m_gallery_down_bundle[2] = wxBitmapBundle::FromBitmap(wxRibbonLoadPixmap(gallery_right_xpm, colour));
|
||||
}
|
||||
else
|
||||
{
|
||||
m_gallery_up_bitmap[2] = wxRibbonLoadPixmap(gallery_up_xpm, colour);
|
||||
m_gallery_down_bitmap[2] = wxRibbonLoadPixmap(gallery_down_xpm, colour);
|
||||
m_gallery_up_bundle[2] = wxBitmapBundle::FromBitmap(wxRibbonLoadPixmap(gallery_up_xpm, colour));
|
||||
m_gallery_down_bundle[2] = wxBitmapBundle::FromBitmap(wxRibbonLoadPixmap(gallery_down_xpm, colour));
|
||||
}
|
||||
m_gallery_extension_bitmap[2] = wxRibbonLoadPixmap(gallery_extension_xpm, colour);
|
||||
m_gallery_extension_bundle[2] = wxBitmapBundle::FromBitmap(wxRibbonLoadPixmap(gallery_extension_xpm, colour));
|
||||
break;
|
||||
case wxRIBBON_ART_GALLERY_BUTTON_DISABLED_BACKGROUND_COLOUR:
|
||||
m_gallery_button_disabled_background_colour = colour;
|
||||
@@ -1120,15 +1120,15 @@ void wxRibbonMSWArtProvider::SetColour(int id, const wxColor& colour)
|
||||
m_gallery_button_disabled_face_colour = colour;
|
||||
if(m_flags & wxRIBBON_BAR_FLOW_VERTICAL)
|
||||
{
|
||||
m_gallery_up_bitmap[3] = wxRibbonLoadPixmap(gallery_left_xpm, colour);
|
||||
m_gallery_down_bitmap[3] = wxRibbonLoadPixmap(gallery_right_xpm, colour);
|
||||
m_gallery_up_bundle[3] = wxBitmapBundle::FromBitmap(wxRibbonLoadPixmap(gallery_left_xpm, colour));
|
||||
m_gallery_down_bundle[3] = wxBitmapBundle::FromBitmap(wxRibbonLoadPixmap(gallery_right_xpm, colour));
|
||||
}
|
||||
else
|
||||
{
|
||||
m_gallery_up_bitmap[3] = wxRibbonLoadPixmap(gallery_up_xpm, colour);
|
||||
m_gallery_down_bitmap[3] = wxRibbonLoadPixmap(gallery_down_xpm, colour);
|
||||
m_gallery_up_bundle[3] = wxBitmapBundle::FromBitmap(wxRibbonLoadPixmap(gallery_up_xpm, colour));
|
||||
m_gallery_down_bundle[3] = wxBitmapBundle::FromBitmap(wxRibbonLoadPixmap(gallery_down_xpm, colour));
|
||||
}
|
||||
m_gallery_extension_bitmap[3] = wxRibbonLoadPixmap(gallery_extension_xpm, colour);
|
||||
m_gallery_extension_bundle[3] = wxBitmapBundle::FromBitmap(wxRibbonLoadPixmap(gallery_extension_xpm, colour));
|
||||
break;
|
||||
case wxRIBBON_ART_GALLERY_ITEM_BORDER_COLOUR:
|
||||
m_gallery_item_border_pen.SetColour(colour);
|
||||
@@ -1228,11 +1228,11 @@ void wxRibbonMSWArtProvider::SetColour(int id, const wxColor& colour)
|
||||
break;
|
||||
case wxRIBBON_ART_PANEL_BUTTON_FACE_COLOUR:
|
||||
m_panel_button_face_colour = colour;
|
||||
m_panel_extension_bitmap[0] = wxRibbonLoadPixmap(panel_extension_xpm, colour);
|
||||
m_panel_extension_bundle[0] = wxBitmapBundle::FromBitmap(wxRibbonLoadPixmap(panel_extension_xpm, colour));
|
||||
break;
|
||||
case wxRIBBON_ART_PANEL_BUTTON_HOVER_FACE_COLOUR:
|
||||
m_panel_button_hover_face_colour = colour;
|
||||
m_panel_extension_bitmap[1] = wxRibbonLoadPixmap(panel_extension_xpm, colour);
|
||||
m_panel_extension_bundle[1] = wxBitmapBundle::FromBitmap(wxRibbonLoadPixmap(panel_extension_xpm, colour));
|
||||
break;
|
||||
case wxRIBBON_ART_PAGE_BORDER_COLOUR:
|
||||
m_page_border_pen.SetColour(colour);
|
||||
@@ -1267,21 +1267,21 @@ void wxRibbonMSWArtProvider::SetColour(int id, const wxColor& colour)
|
||||
break;
|
||||
case wxRIBBON_ART_TOOLBAR_FACE_COLOUR:
|
||||
m_tool_face_colour = colour;
|
||||
m_toolbar_drop_bitmap = wxRibbonLoadPixmap(gallery_down_xpm, colour);
|
||||
m_toolbar_drop_bundle = wxBitmapBundle::FromBitmap(wxRibbonLoadPixmap(gallery_down_xpm, colour));
|
||||
break;
|
||||
case wxRIBBON_ART_PAGE_TOGGLE_FACE_COLOUR:
|
||||
m_page_toggle_face_colour = colour;
|
||||
m_ribbon_toggle_down_bitmap[0] = wxRibbonLoadPixmap(panel_toggle_down_xpm, colour);
|
||||
m_ribbon_toggle_up_bitmap[0] = wxRibbonLoadPixmap(panel_toggle_up_xpm, colour);
|
||||
m_ribbon_toggle_pin_bitmap[0] = wxRibbonLoadPixmap(ribbon_toggle_pin_xpm, colour);
|
||||
m_ribbon_bar_help_button_bitmap[0] = wxRibbonLoadPixmap(ribbon_help_button_xpm, colour);
|
||||
m_ribbon_toggle_down_bundle[0] = wxBitmapBundle::FromBitmap(wxRibbonLoadPixmap(panel_toggle_down_xpm, colour));
|
||||
m_ribbon_toggle_up_bundle[0] = wxBitmapBundle::FromBitmap(wxRibbonLoadPixmap(panel_toggle_up_xpm, colour));
|
||||
m_ribbon_toggle_pin_bundle[0] = wxBitmapBundle::FromBitmap(wxRibbonLoadPixmap(ribbon_toggle_pin_xpm, colour));
|
||||
m_ribbon_bar_help_button_bundle[0] = wxBitmapBundle::FromBitmap(wxRibbonLoadPixmap(ribbon_help_button_xpm, colour));
|
||||
break;
|
||||
case wxRIBBON_ART_PAGE_TOGGLE_HOVER_FACE_COLOUR:
|
||||
m_page_toggle_hover_face_colour = colour;
|
||||
m_ribbon_toggle_down_bitmap[1] = wxRibbonLoadPixmap(panel_toggle_down_xpm, colour);
|
||||
m_ribbon_toggle_up_bitmap[1] = wxRibbonLoadPixmap(panel_toggle_up_xpm, colour);
|
||||
m_ribbon_toggle_pin_bitmap[1] = wxRibbonLoadPixmap(ribbon_toggle_pin_xpm, colour);
|
||||
m_ribbon_bar_help_button_bitmap[1] = wxRibbonLoadPixmap(ribbon_help_button_xpm, colour);
|
||||
m_ribbon_toggle_down_bundle[1] = wxBitmapBundle::FromBitmap(wxRibbonLoadPixmap(panel_toggle_down_xpm, colour));
|
||||
m_ribbon_toggle_up_bundle[1] = wxBitmapBundle::FromBitmap(wxRibbonLoadPixmap(panel_toggle_up_xpm, colour));
|
||||
m_ribbon_toggle_pin_bundle[1] = wxBitmapBundle::FromBitmap(wxRibbonLoadPixmap(ribbon_toggle_pin_xpm, colour));
|
||||
m_ribbon_bar_help_button_bundle[1] = wxBitmapBundle::FromBitmap(wxRibbonLoadPixmap(ribbon_help_button_xpm, colour));
|
||||
break;
|
||||
case wxRIBBON_ART_BUTTON_BAR_LABEL_HIGHLIGHT_TOP_COLOUR:
|
||||
m_tab_highlight_top_colour = colour;
|
||||
@@ -1986,10 +1986,10 @@ void wxRibbonMSWArtProvider::DrawPanelBackground(
|
||||
dc.SetPen(m_panel_hover_button_border_pen);
|
||||
dc.SetBrush(m_panel_hover_button_background_brush);
|
||||
dc.DrawRoundedRectangle(label_rect.GetRight(), label_rect.GetBottom() - 13, 13, 13, 1.0);
|
||||
dc.DrawBitmap(m_panel_extension_bitmap[1], label_rect.GetRight() + 3, label_rect.GetBottom() - 10, true);
|
||||
dc.DrawBitmap(m_panel_extension_bundle[1].GetBitmapFor(wnd), label_rect.GetRight() + 3, label_rect.GetBottom() - 10, true);
|
||||
}
|
||||
else
|
||||
dc.DrawBitmap(m_panel_extension_bitmap[0], label_rect.GetRight() + 3, label_rect.GetBottom() - 10, true);
|
||||
dc.DrawBitmap(m_panel_extension_bundle[0].GetBitmapFor(wnd), label_rect.GetRight() + 3, label_rect.GetBottom() - 10, true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2097,17 +2097,18 @@ void wxRibbonMSWArtProvider::DrawGalleryBackgroundCommon(wxDC& dc,
|
||||
}
|
||||
|
||||
DrawGalleryButton(dc, up_btn, wnd->GetUpButtonState(),
|
||||
m_gallery_up_bitmap);
|
||||
m_gallery_up_bundle, wnd);
|
||||
DrawGalleryButton(dc, down_btn, wnd->GetDownButtonState(),
|
||||
m_gallery_down_bitmap);
|
||||
m_gallery_down_bundle, wnd);
|
||||
DrawGalleryButton(dc, ext_btn, wnd->GetExtensionButtonState(),
|
||||
m_gallery_extension_bitmap);
|
||||
m_gallery_extension_bundle, wnd);
|
||||
}
|
||||
|
||||
void wxRibbonMSWArtProvider::DrawGalleryButton(wxDC& dc,
|
||||
wxRect rect,
|
||||
wxRibbonGalleryButtonState state,
|
||||
wxBitmap* bitmaps)
|
||||
wxBitmapBundle* bundles,
|
||||
wxWindow* wnd)
|
||||
{
|
||||
wxBitmap btn_bitmap;
|
||||
wxBrush btn_top_brush;
|
||||
@@ -2119,25 +2120,25 @@ void wxRibbonMSWArtProvider::DrawGalleryButton(wxDC& dc,
|
||||
btn_top_brush = m_gallery_button_background_top_brush;
|
||||
btn_colour = m_gallery_button_background_colour;
|
||||
btn_grad_colour = m_gallery_button_background_gradient_colour;
|
||||
btn_bitmap = bitmaps[0];
|
||||
btn_bitmap = bundles[0].GetBitmapFor(wnd);
|
||||
break;
|
||||
case wxRIBBON_GALLERY_BUTTON_HOVERED:
|
||||
btn_top_brush = m_gallery_button_hover_background_top_brush;
|
||||
btn_colour = m_gallery_button_hover_background_colour;
|
||||
btn_grad_colour = m_gallery_button_hover_background_gradient_colour;
|
||||
btn_bitmap = bitmaps[1];
|
||||
btn_bitmap = bundles[1].GetBitmapFor(wnd);
|
||||
break;
|
||||
case wxRIBBON_GALLERY_BUTTON_ACTIVE:
|
||||
btn_top_brush = m_gallery_button_active_background_top_brush;
|
||||
btn_colour = m_gallery_button_active_background_colour;
|
||||
btn_grad_colour = m_gallery_button_active_background_gradient_colour;
|
||||
btn_bitmap = bitmaps[2];
|
||||
btn_bitmap = bundles[2].GetBitmapFor(wnd);
|
||||
break;
|
||||
case wxRIBBON_GALLERY_BUTTON_DISABLED:
|
||||
btn_top_brush = m_gallery_button_disabled_background_top_brush;
|
||||
btn_colour = m_gallery_button_disabled_background_colour;
|
||||
btn_grad_colour = m_gallery_button_disabled_background_gradient_colour;
|
||||
btn_bitmap = bitmaps[3];
|
||||
btn_bitmap = bundles[3].GetBitmapFor(wnd);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -2735,7 +2736,7 @@ void wxRibbonMSWArtProvider::DrawToolGroupBackground(
|
||||
|
||||
void wxRibbonMSWArtProvider::DrawTool(
|
||||
wxDC& dc,
|
||||
wxWindow* WXUNUSED(wnd),
|
||||
wxWindow* wnd,
|
||||
const wxRect& rect,
|
||||
const wxBitmap& bitmap,
|
||||
wxRibbonButtonKind kind,
|
||||
@@ -2825,7 +2826,7 @@ void wxRibbonMSWArtProvider::DrawTool(
|
||||
dc.DrawLine(rect.x + avail_width + 1, rect.y,
|
||||
rect.x + avail_width + 1, rect.y + rect.height);
|
||||
}
|
||||
dc.DrawBitmap(m_toolbar_drop_bitmap, bg_rect.x + avail_width + 2,
|
||||
dc.DrawBitmap(m_toolbar_drop_bundle.GetBitmapFor(wnd), bg_rect.x + avail_width + 2,
|
||||
bg_rect.y + (bg_rect.height / 2) - 2, true);
|
||||
}
|
||||
dc.DrawBitmap(bitmap, bg_rect.x + (avail_width - bitmap.GetLogicalWidth()) / 2,
|
||||
@@ -2854,13 +2855,13 @@ wxRibbonMSWArtProvider::DrawToggleButton(wxDC& dc,
|
||||
switch(mode)
|
||||
{
|
||||
case wxRIBBON_BAR_PINNED:
|
||||
dc.DrawBitmap(m_ribbon_toggle_up_bitmap[bindex], rect.GetX()+7, rect.GetY()+6, true);
|
||||
dc.DrawBitmap(m_ribbon_toggle_up_bundle[bindex].GetBitmapFor(wnd), rect.GetX()+7, rect.GetY()+6, true);
|
||||
break;
|
||||
case wxRIBBON_BAR_MINIMIZED:
|
||||
dc.DrawBitmap(m_ribbon_toggle_down_bitmap[bindex], rect.GetX()+7, rect.GetY()+6, true);
|
||||
dc.DrawBitmap(m_ribbon_toggle_down_bundle[bindex].GetBitmapFor(wnd), rect.GetX()+7, rect.GetY()+6, true);
|
||||
break;
|
||||
case wxRIBBON_BAR_EXPANDED:
|
||||
dc.DrawBitmap(m_ribbon_toggle_pin_bitmap[bindex], rect.GetX ()+4, rect.GetY ()+5, true);
|
||||
dc.DrawBitmap(m_ribbon_toggle_pin_bundle[bindex].GetBitmapFor(wnd), rect.GetX ()+4, rect.GetY ()+5, true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -2879,11 +2880,11 @@ void wxRibbonMSWArtProvider::DrawHelpButton(wxDC& dc,
|
||||
dc.SetPen(m_ribbon_toggle_pen);
|
||||
dc.SetBrush(m_ribbon_toggle_brush);
|
||||
dc.DrawRoundedRectangle(rect.GetX(), rect.GetY(), 20, 20, 1.0);
|
||||
dc.DrawBitmap(m_ribbon_bar_help_button_bitmap[1], rect.GetX ()+4, rect.GetY()+5, true);
|
||||
dc.DrawBitmap(m_ribbon_bar_help_button_bundle[1].GetBitmapFor(wnd), rect.GetX ()+4, rect.GetY()+5, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
dc.DrawBitmap(m_ribbon_bar_help_button_bitmap[0], rect.GetX ()+4, rect.GetY()+5, true);
|
||||
dc.DrawBitmap(m_ribbon_bar_help_button_bundle[0].GetBitmapFor(wnd), rect.GetX ()+4, rect.GetY()+5, true);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+15
-14
@@ -481,7 +481,8 @@ void wxRibbonMSWFlatArtProvider::DrawScrollButton(
|
||||
void wxRibbonMSWFlatArtProvider::DrawGalleryButton(wxDC& dc,
|
||||
wxRect rect,
|
||||
wxRibbonGalleryButtonState state,
|
||||
wxBitmap* bitmaps)
|
||||
wxBitmapBundle* bundles,
|
||||
wxWindow* wnd)
|
||||
{
|
||||
wxBitmap btn_bitmap;
|
||||
wxColour btn_colour;
|
||||
@@ -489,19 +490,19 @@ void wxRibbonMSWFlatArtProvider::DrawGalleryButton(wxDC& dc,
|
||||
{
|
||||
case wxRIBBON_GALLERY_BUTTON_NORMAL:
|
||||
btn_colour = m_gallery_button_background_colour;
|
||||
btn_bitmap = bitmaps[0];
|
||||
btn_bitmap = bundles[0].GetBitmapFor(wnd);
|
||||
break;
|
||||
case wxRIBBON_GALLERY_BUTTON_HOVERED:
|
||||
btn_colour = m_gallery_button_hover_background_colour;
|
||||
btn_bitmap = bitmaps[1];
|
||||
btn_bitmap = bundles[1].GetBitmapFor(wnd);
|
||||
break;
|
||||
case wxRIBBON_GALLERY_BUTTON_ACTIVE:
|
||||
btn_colour = m_gallery_button_active_background_colour;
|
||||
btn_bitmap = bitmaps[2];
|
||||
btn_bitmap = bundles[2].GetBitmapFor(wnd);
|
||||
break;
|
||||
case wxRIBBON_GALLERY_BUTTON_DISABLED:
|
||||
btn_colour = m_gallery_button_disabled_background_colour;
|
||||
btn_bitmap = bitmaps[3];
|
||||
btn_bitmap = bundles[3].GetBitmapFor(wnd);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -961,10 +962,10 @@ void wxRibbonMSWFlatArtProvider::DrawPanelBackground(
|
||||
dc.SetPen(m_panel_hover_button_border_pen);
|
||||
dc.SetBrush(m_panel_hover_button_background_brush);
|
||||
dc.DrawRoundedRectangle(label_rect.GetRight(), label_rect.GetBottom() - 13, 13, 13, 1.0);
|
||||
dc.DrawBitmap(m_panel_extension_bitmap[1], label_rect.GetRight() + 3, label_rect.GetBottom() - 10, true);
|
||||
dc.DrawBitmap(m_panel_extension_bundle[1].GetBitmapFor(wnd), label_rect.GetRight() + 3, label_rect.GetBottom() - 10, true);
|
||||
}
|
||||
else
|
||||
dc.DrawBitmap(m_panel_extension_bitmap[0], label_rect.GetRight() + 3, label_rect.GetBottom() - 10, true);
|
||||
dc.DrawBitmap(m_panel_extension_bundle[0].GetBitmapFor(wnd), label_rect.GetRight() + 3, label_rect.GetBottom() - 10, true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1058,13 +1059,13 @@ wxRibbonMSWFlatArtProvider::DrawToggleButton(wxDC& dc,
|
||||
switch ( mode )
|
||||
{
|
||||
case wxRIBBON_BAR_PINNED:
|
||||
dc.DrawBitmap(m_ribbon_toggle_up_bitmap[bindex], rect.GetX()+7, rect.GetY()+6, true);
|
||||
dc.DrawBitmap(m_ribbon_toggle_up_bundle[bindex].GetBitmapFor(wnd), rect.GetX()+7, rect.GetY()+6, true);
|
||||
break;
|
||||
case wxRIBBON_BAR_MINIMIZED:
|
||||
dc.DrawBitmap(m_ribbon_toggle_down_bitmap[bindex], rect.GetX()+7, rect.GetY()+6, true);
|
||||
dc.DrawBitmap(m_ribbon_toggle_down_bundle[bindex].GetBitmapFor(wnd), rect.GetX()+7, rect.GetY()+6, true);
|
||||
break;
|
||||
case wxRIBBON_BAR_EXPANDED:
|
||||
dc.DrawBitmap(m_ribbon_toggle_pin_bitmap[bindex], rect.GetX()+4, rect.GetY()+5, true);
|
||||
dc.DrawBitmap(m_ribbon_toggle_pin_bundle[bindex].GetBitmapFor(wnd), rect.GetX()+4, rect.GetY()+5, true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -1083,17 +1084,17 @@ void wxRibbonMSWFlatArtProvider::DrawHelpButton(wxDC& dc,
|
||||
dc.SetPen(m_ribbon_toggle_pen);
|
||||
dc.SetBrush(m_ribbon_toggle_brush);
|
||||
dc.DrawRoundedRectangle(rect.GetX(), rect.GetY(), 20, 20, 1.0);
|
||||
dc.DrawBitmap(m_ribbon_bar_help_button_bitmap[1], rect.GetX()+4, rect.GetY()+5, true);
|
||||
dc.DrawBitmap(m_ribbon_bar_help_button_bundle[1].GetBitmapFor(wnd), rect.GetX()+4, rect.GetY()+5, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
dc.DrawBitmap(m_ribbon_bar_help_button_bitmap[0], rect.GetX()+4, rect.GetY()+5, true);
|
||||
dc.DrawBitmap(m_ribbon_bar_help_button_bundle[0].GetBitmapFor(wnd), rect.GetX()+4, rect.GetY()+5, true);
|
||||
}
|
||||
}
|
||||
|
||||
void wxRibbonMSWFlatArtProvider::DrawTool(
|
||||
wxDC& dc,
|
||||
wxWindow* WXUNUSED(wnd),
|
||||
wxWindow* wnd,
|
||||
const wxRect& rect,
|
||||
const wxBitmap& bitmap,
|
||||
wxRibbonButtonKind kind,
|
||||
@@ -1168,7 +1169,7 @@ void wxRibbonMSWFlatArtProvider::DrawTool(
|
||||
dc.DrawLine(rect.x + avail_width + 1, rect.y,
|
||||
rect.x + avail_width + 1, rect.y + rect.height);
|
||||
}
|
||||
dc.DrawBitmap(m_toolbar_drop_bitmap, bg_rect.x + avail_width + 2,
|
||||
dc.DrawBitmap(m_toolbar_drop_bundle.GetBitmapFor(wnd), bg_rect.x + avail_width + 2,
|
||||
bg_rect.y + (bg_rect.height / 2) - 2, true);
|
||||
}
|
||||
dc.DrawBitmap(bitmap, bg_rect.x + (avail_width - bitmap.GetLogicalWidth()) / 2,
|
||||
|
||||
@@ -54,6 +54,7 @@ wxBEGIN_EVENT_TABLE(wxRibbonBar, wxRibbonControl)
|
||||
EVT_LEFT_DCLICK(wxRibbonBar::OnMouseDoubleClick)
|
||||
EVT_SIZE(wxRibbonBar::OnSize)
|
||||
EVT_KILL_FOCUS(wxRibbonBar::OnKillFocus)
|
||||
EVT_DPI_CHANGED(wxRibbonBar::OnDPIChanged)
|
||||
wxEND_EVENT_TABLE()
|
||||
|
||||
void wxRibbonBar::AddPage(wxRibbonPage *page)
|
||||
@@ -964,6 +965,28 @@ void wxRibbonBar::OnSize(wxSizeEvent& evt)
|
||||
evt.Skip();
|
||||
}
|
||||
|
||||
void wxRibbonBar::OnDPIChanged(wxDPIChangedEvent& event)
|
||||
{
|
||||
// Recalculate tab sizes for new DPI
|
||||
RecalculateTabSizes();
|
||||
|
||||
// Realize all pages to update their layouts
|
||||
size_t page_count = m_pages.GetCount();
|
||||
for(size_t i = 0; i < page_count; ++i)
|
||||
{
|
||||
m_pages.Item(i).page->Realize();
|
||||
}
|
||||
|
||||
// Reposition current page
|
||||
if(m_current_page != wxNOT_FOUND)
|
||||
{
|
||||
RepositionPage(m_pages.Item(m_current_page).page);
|
||||
}
|
||||
|
||||
Refresh();
|
||||
event.Skip();
|
||||
}
|
||||
|
||||
void wxRibbonBar::RepositionPage(wxRibbonPage *page)
|
||||
{
|
||||
int w, h;
|
||||
|
||||
+209
-128
@@ -41,6 +41,7 @@ wxBEGIN_EVENT_TABLE(wxRibbonButtonBar, wxRibbonControl)
|
||||
EVT_LEFT_DOWN(wxRibbonButtonBar::OnMouseDown)
|
||||
EVT_LEFT_DCLICK(wxRibbonButtonBar::OnMouseDown)
|
||||
EVT_LEFT_UP(wxRibbonButtonBar::OnMouseUp)
|
||||
EVT_DPI_CHANGED(wxRibbonButtonBar::OnDPIChanged)
|
||||
wxEND_EVENT_TABLE()
|
||||
|
||||
class wxRibbonButtonBarButtonSizeInfo
|
||||
@@ -62,18 +63,6 @@ public:
|
||||
|
||||
namespace
|
||||
{
|
||||
|
||||
wxBitmap MakeResizedBitmap(const wxBitmap& original, wxSize size)
|
||||
{
|
||||
double scale = original.GetScaleFactor();
|
||||
if (scale > 1.0)
|
||||
scale = 2.0;
|
||||
|
||||
wxImage img(original.ConvertToImage());
|
||||
img.Rescale(scale * size, wxIMAGE_QUALITY_HIGH);
|
||||
return wxBitmap(img, -1, scale);
|
||||
}
|
||||
|
||||
wxBitmap MakeDisabledBitmap(const wxBitmap& original)
|
||||
{
|
||||
wxImage img(original.ConvertToImage());
|
||||
@@ -87,85 +76,19 @@ class wxRibbonButtonBarButtonBase
|
||||
public:
|
||||
wxRibbonButtonBarButtonBase()
|
||||
{
|
||||
barButtonImageListPos =
|
||||
barButtonSmallImageListPos = -1;
|
||||
imageIndexLarge = -1;
|
||||
imageIndexSmall = -1;
|
||||
imageIndexLargeDisabled = -1;
|
||||
imageIndexSmallDisabled = -1;
|
||||
}
|
||||
|
||||
void SetBitmaps(wxRibbonBar* ribbon,
|
||||
wxSize bitmap_size_large,
|
||||
wxSize bitmap_size_small,
|
||||
wxBitmap bitmap_large,
|
||||
wxBitmap bitmap_large_disabled,
|
||||
wxBitmap bitmap_small,
|
||||
wxBitmap bitmap_small_disabled)
|
||||
// Store bundle indices in parent's bundle vectors
|
||||
void SetBundleIndices(int largeIdx, int smallIdx, int largeDisabledIdx, int smallDisabledIdx)
|
||||
{
|
||||
wxCHECK_RET(ribbon, "Ribbon bar not set; can't register button images yet!");
|
||||
|
||||
if(!bitmap_large.IsOk())
|
||||
{
|
||||
bitmap_large = MakeResizedBitmap(bitmap_small, bitmap_size_large);
|
||||
}
|
||||
else if(bitmap_large.GetLogicalSize() != bitmap_size_large)
|
||||
{
|
||||
bitmap_large = MakeResizedBitmap(bitmap_large, bitmap_size_large);
|
||||
}
|
||||
|
||||
if(!bitmap_small.IsOk())
|
||||
{
|
||||
bitmap_small = MakeResizedBitmap(bitmap_large, bitmap_size_small);
|
||||
}
|
||||
else if(bitmap_small.GetLogicalSize() != bitmap_size_small)
|
||||
{
|
||||
bitmap_small = MakeResizedBitmap(bitmap_small, bitmap_size_small);
|
||||
}
|
||||
|
||||
if(!bitmap_large_disabled.IsOk())
|
||||
{
|
||||
bitmap_large_disabled = MakeDisabledBitmap(bitmap_large);
|
||||
}
|
||||
|
||||
if(!bitmap_small_disabled.IsOk())
|
||||
{
|
||||
bitmap_small_disabled = MakeDisabledBitmap(bitmap_small);
|
||||
}
|
||||
|
||||
if ( bitmap_large.IsOk() )
|
||||
{
|
||||
wxImageList* const
|
||||
buttonImageList = ribbon->GetButtonImageList(bitmap_size_large);
|
||||
|
||||
barButtonImageListPos = buttonImageList->Add(bitmap_large);
|
||||
buttonImageList->Add(bitmap_large_disabled);
|
||||
}
|
||||
|
||||
wxImageList* const
|
||||
buttonSmallImageList = ribbon->GetButtonImageList(bitmap_size_small);
|
||||
|
||||
barButtonSmallImageListPos = buttonSmallImageList->Add(bitmap_small);
|
||||
buttonSmallImageList->Add(bitmap_small_disabled);
|
||||
}
|
||||
|
||||
void GetBitmaps(wxRibbonBar* ribbon,
|
||||
wxSize bitmap_size_large,
|
||||
wxSize bitmap_size_small,
|
||||
wxBitmap& bitmap,
|
||||
wxBitmap& bitmap_small) const
|
||||
{
|
||||
wxImageList* buttonImageList = ribbon->GetButtonImageList(bitmap_size_large);
|
||||
wxImageList* buttonSmallImageList = ribbon->GetButtonImageList(bitmap_size_small);
|
||||
|
||||
int pos = barButtonImageListPos;
|
||||
int pos_small = barButtonSmallImageListPos;
|
||||
|
||||
if (state & wxRIBBON_BUTTONBAR_BUTTON_DISABLED)
|
||||
{
|
||||
// Disabled buttons are stored after the normal ones.
|
||||
pos++;
|
||||
pos_small++;
|
||||
}
|
||||
|
||||
bitmap = buttonImageList->GetBitmap(pos);
|
||||
bitmap_small = buttonSmallImageList->GetBitmap(pos_small);
|
||||
imageIndexLarge = largeIdx;
|
||||
imageIndexSmall = smallIdx;
|
||||
imageIndexLargeDisabled = largeDisabledIdx;
|
||||
imageIndexSmallDisabled = smallDisabledIdx;
|
||||
}
|
||||
|
||||
wxRibbonButtonBarButtonInstance NewInstance()
|
||||
@@ -226,12 +149,11 @@ public:
|
||||
wxString help_string;
|
||||
wxCoord text_min_width[3];
|
||||
|
||||
// Index of the bitmap in the wxRibbonBar normal image list. Notice that
|
||||
// the disabled bitmap is in the next position, so this one is always even.
|
||||
int barButtonImageListPos;
|
||||
|
||||
// Same thing for the small bitmap index in the small image list.
|
||||
int barButtonSmallImageListPos;
|
||||
// Indices into parent wxRibbonButtonBar's wxWithImages collections
|
||||
int imageIndexLarge;
|
||||
int imageIndexSmall;
|
||||
int imageIndexLargeDisabled;
|
||||
int imageIndexSmallDisabled;
|
||||
|
||||
wxRibbonButtonBarButtonSizeInfo sizes[3];
|
||||
wxRibbonButtonBarButtonState min_size_class;
|
||||
@@ -341,18 +263,18 @@ bool wxRibbonButtonBar::Create(wxWindow* parent,
|
||||
wxRibbonButtonBarButtonBase* wxRibbonButtonBar::AddButton(
|
||||
int button_id,
|
||||
const wxString& label,
|
||||
const wxBitmap& bitmap,
|
||||
const wxBitmapBundle& bitmap,
|
||||
const wxString& help_string,
|
||||
wxRibbonButtonKind kind)
|
||||
{
|
||||
return AddButton(button_id, label, bitmap, wxNullBitmap, wxNullBitmap,
|
||||
wxNullBitmap, kind, help_string);
|
||||
return AddButton(button_id, label, bitmap, wxBitmapBundle(), wxBitmapBundle(),
|
||||
wxBitmapBundle(), kind, help_string);
|
||||
}
|
||||
|
||||
wxRibbonButtonBarButtonBase* wxRibbonButtonBar::AddDropdownButton(
|
||||
int button_id,
|
||||
const wxString& label,
|
||||
const wxBitmap& bitmap,
|
||||
const wxBitmapBundle& bitmap,
|
||||
const wxString& help_string)
|
||||
{
|
||||
return AddButton(button_id, label, bitmap, help_string,
|
||||
@@ -362,7 +284,7 @@ wxRibbonButtonBarButtonBase* wxRibbonButtonBar::AddDropdownButton(
|
||||
wxRibbonButtonBarButtonBase* wxRibbonButtonBar::AddToggleButton(
|
||||
int button_id,
|
||||
const wxString& label,
|
||||
const wxBitmap& bitmap,
|
||||
const wxBitmapBundle& bitmap,
|
||||
const wxString& help_string)
|
||||
{
|
||||
return AddButton(button_id, label, bitmap, help_string,
|
||||
@@ -372,7 +294,7 @@ wxRibbonButtonBarButtonBase* wxRibbonButtonBar::AddToggleButton(
|
||||
wxRibbonButtonBarButtonBase* wxRibbonButtonBar::AddHybridButton(
|
||||
int button_id,
|
||||
const wxString& label,
|
||||
const wxBitmap& bitmap,
|
||||
const wxBitmapBundle& bitmap,
|
||||
const wxString& help_string)
|
||||
{
|
||||
return AddButton(button_id, label, bitmap, help_string,
|
||||
@@ -382,10 +304,10 @@ wxRibbonButtonBarButtonBase* wxRibbonButtonBar::AddHybridButton(
|
||||
wxRibbonButtonBarButtonBase* wxRibbonButtonBar::AddButton(
|
||||
int button_id,
|
||||
const wxString& label,
|
||||
const wxBitmap& bitmap,
|
||||
const wxBitmap& bitmap_small,
|
||||
const wxBitmap& bitmap_disabled,
|
||||
const wxBitmap& bitmap_small_disabled,
|
||||
const wxBitmapBundle& bitmap,
|
||||
const wxBitmapBundle& bitmap_small,
|
||||
const wxBitmapBundle& bitmap_disabled,
|
||||
const wxBitmapBundle& bitmap_small_disabled,
|
||||
wxRibbonButtonKind kind,
|
||||
const wxString& help_string)
|
||||
{
|
||||
@@ -397,19 +319,22 @@ wxRibbonButtonBarButtonBase* wxRibbonButtonBar::InsertButton(
|
||||
size_t pos,
|
||||
int button_id,
|
||||
const wxString& label,
|
||||
const wxBitmap& bitmap,
|
||||
const wxBitmap& bitmap_small,
|
||||
const wxBitmap& bitmap_disabled,
|
||||
const wxBitmap& bitmap_small_disabled,
|
||||
const wxBitmapBundle& bitmap,
|
||||
const wxBitmapBundle& bitmap_small,
|
||||
const wxBitmapBundle& bitmap_disabled,
|
||||
const wxBitmapBundle& bitmap_small_disabled,
|
||||
wxRibbonButtonKind kind,
|
||||
const wxString& help_string)
|
||||
{
|
||||
wxASSERT(bitmap.IsOk() || bitmap_small.IsOk());
|
||||
|
||||
// Determine base bitmap sizes on first button (at 100% scale)
|
||||
// These are scaled by DPI when used for layout and drawing
|
||||
if(m_buttons.IsEmpty())
|
||||
{
|
||||
if(bitmap.IsOk())
|
||||
{
|
||||
m_bitmap_size_large = bitmap.GetLogicalSize();
|
||||
m_bitmap_size_large = bitmap.GetDefaultSize();
|
||||
if(!bitmap_small.IsOk())
|
||||
{
|
||||
m_bitmap_size_small = m_bitmap_size_large;
|
||||
@@ -418,7 +343,7 @@ wxRibbonButtonBarButtonBase* wxRibbonButtonBar::InsertButton(
|
||||
}
|
||||
if(bitmap_small.IsOk())
|
||||
{
|
||||
m_bitmap_size_small = bitmap_small.GetLogicalSize();
|
||||
m_bitmap_size_small = bitmap_small.GetDefaultSize();
|
||||
if(!bitmap.IsOk())
|
||||
{
|
||||
m_bitmap_size_large = m_bitmap_size_small;
|
||||
@@ -427,11 +352,69 @@ wxRibbonButtonBarButtonBase* wxRibbonButtonBar::InsertButton(
|
||||
}
|
||||
}
|
||||
|
||||
// Add bundles to our vectors and remember indices
|
||||
int idxLarge = -1;
|
||||
int idxSmall = -1;
|
||||
int idxLargeDisabled = -1;
|
||||
int idxSmallDisabled = -1;
|
||||
|
||||
if(bitmap.IsOk())
|
||||
{
|
||||
idxLarge = m_bundlesLarge.size();
|
||||
m_bundlesLarge.push_back(bitmap);
|
||||
|
||||
idxLargeDisabled = m_bundlesLargeDisabled.size();
|
||||
if(bitmap_disabled.IsOk())
|
||||
{
|
||||
m_bundlesLargeDisabled.push_back(bitmap_disabled);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Generate disabled bitmap from normal one
|
||||
wxBitmap bmp = bitmap.GetBitmap(m_bitmap_size_large);
|
||||
m_bundlesLargeDisabled.push_back(wxBitmapBundle::FromBitmap(MakeDisabledBitmap(bmp)));
|
||||
}
|
||||
}
|
||||
|
||||
if(bitmap_small.IsOk())
|
||||
{
|
||||
idxSmall = m_bundlesSmall.size();
|
||||
m_bundlesSmall.push_back(bitmap_small);
|
||||
|
||||
idxSmallDisabled = m_bundlesSmallDisabled.size();
|
||||
if(bitmap_small_disabled.IsOk())
|
||||
{
|
||||
m_bundlesSmallDisabled.push_back(bitmap_small_disabled);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Generate disabled bitmap from normal one
|
||||
wxBitmap bmp = bitmap_small.GetBitmap(m_bitmap_size_small);
|
||||
m_bundlesSmallDisabled.push_back(wxBitmapBundle::FromBitmap(MakeDisabledBitmap(bmp)));
|
||||
}
|
||||
}
|
||||
else if(bitmap.IsOk())
|
||||
{
|
||||
// Use large bitmap scaled down for small
|
||||
idxSmall = m_bundlesSmall.size();
|
||||
m_bundlesSmall.push_back(bitmap);
|
||||
|
||||
idxSmallDisabled = m_bundlesSmallDisabled.size();
|
||||
if(bitmap_disabled.IsOk())
|
||||
{
|
||||
m_bundlesSmallDisabled.push_back(bitmap_disabled);
|
||||
}
|
||||
else
|
||||
{
|
||||
wxBitmap bmp = bitmap.GetBitmap(m_bitmap_size_small);
|
||||
m_bundlesSmallDisabled.push_back(wxBitmapBundle::FromBitmap(MakeDisabledBitmap(bmp)));
|
||||
}
|
||||
}
|
||||
|
||||
wxRibbonButtonBarButtonBase* base = new wxRibbonButtonBarButtonBase;
|
||||
base->id = button_id;
|
||||
base->label = label;
|
||||
base->SetBitmaps(m_ribbonBar, m_bitmap_size_large, m_bitmap_size_small,
|
||||
bitmap, bitmap_disabled, bitmap_small, bitmap_small_disabled);
|
||||
base->SetBundleIndices(idxLarge, idxSmall, idxLargeDisabled, idxSmallDisabled);
|
||||
base->kind = kind;
|
||||
base->help_string = help_string;
|
||||
base->state = 0;
|
||||
@@ -491,19 +474,19 @@ wxRibbonButtonBarButtonBase* wxRibbonButtonBar::InsertButton(
|
||||
size_t pos,
|
||||
int button_id,
|
||||
const wxString& label,
|
||||
const wxBitmap& bitmap,
|
||||
const wxBitmapBundle& bitmap,
|
||||
const wxString& help_string,
|
||||
wxRibbonButtonKind kind)
|
||||
{
|
||||
return InsertButton(pos, button_id, label, bitmap, wxNullBitmap,
|
||||
wxNullBitmap, wxNullBitmap, kind, help_string);
|
||||
return InsertButton(pos, button_id, label, bitmap, wxBitmapBundle(),
|
||||
wxBitmapBundle(), wxBitmapBundle(), kind, help_string);
|
||||
}
|
||||
|
||||
wxRibbonButtonBarButtonBase* wxRibbonButtonBar::InsertDropdownButton(
|
||||
size_t pos,
|
||||
int button_id,
|
||||
const wxString& label,
|
||||
const wxBitmap& bitmap,
|
||||
const wxBitmapBundle& bitmap,
|
||||
const wxString& help_string)
|
||||
{
|
||||
return InsertButton(pos, button_id, label, bitmap, help_string,
|
||||
@@ -514,7 +497,7 @@ wxRibbonButtonBarButtonBase* wxRibbonButtonBar::InsertToggleButton(
|
||||
size_t pos,
|
||||
int button_id,
|
||||
const wxString& label,
|
||||
const wxBitmap& bitmap,
|
||||
const wxBitmapBundle& bitmap,
|
||||
const wxString& help_string)
|
||||
{
|
||||
return InsertButton(pos, button_id, label, bitmap, help_string,
|
||||
@@ -525,7 +508,7 @@ wxRibbonButtonBarButtonBase* wxRibbonButtonBar::InsertHybridButton(
|
||||
size_t pos,
|
||||
int button_id,
|
||||
const wxString& label,
|
||||
const wxBitmap& bitmap,
|
||||
const wxBitmapBundle& bitmap,
|
||||
const wxString& help_string)
|
||||
{
|
||||
return InsertButton(pos, button_id, label, bitmap, help_string,
|
||||
@@ -538,9 +521,14 @@ void wxRibbonButtonBar::FetchButtonSizeInfo(wxRibbonButtonBarButtonBase* button,
|
||||
wxRibbonButtonBarButtonSizeInfo& info = button->sizes[size];
|
||||
if(m_art)
|
||||
{
|
||||
// Scale base bitmap sizes by current DPI for layout calculation
|
||||
const double scale = GetDPIScaleFactor();
|
||||
wxSize scaledLarge = m_bitmap_size_large * scale;
|
||||
wxSize scaledSmall = m_bitmap_size_small * scale;
|
||||
|
||||
info.is_supported = m_art->GetButtonBarButtonSize(dc, this,
|
||||
button->kind, size, button->label, button->text_min_width[size],
|
||||
m_bitmap_size_large, m_bitmap_size_small, &info.size,
|
||||
scaledLarge, scaledSmall, &info.size,
|
||||
&info.normal_region, &info.dropdown_region);
|
||||
}
|
||||
else
|
||||
@@ -662,16 +650,48 @@ void wxRibbonButtonBar::ToggleButton(int button_id, bool checked)
|
||||
|
||||
void wxRibbonButtonBar::SetButtonIcon(
|
||||
int button_id,
|
||||
const wxBitmap& bitmap,
|
||||
const wxBitmap& bitmap_small,
|
||||
const wxBitmap& bitmap_disabled,
|
||||
const wxBitmap& bitmap_small_disabled)
|
||||
const wxBitmapBundle& bitmap,
|
||||
const wxBitmapBundle& bitmap_small,
|
||||
const wxBitmapBundle& bitmap_disabled,
|
||||
const wxBitmapBundle& bitmap_small_disabled)
|
||||
{
|
||||
wxRibbonButtonBarButtonBase* base = GetItemById(button_id);
|
||||
if(base == nullptr)
|
||||
return;
|
||||
base->SetBitmaps(m_ribbonBar, m_bitmap_size_large, m_bitmap_size_small,
|
||||
bitmap, bitmap_disabled, bitmap_small, bitmap_small_disabled);
|
||||
|
||||
// Update the bundles in our vectors
|
||||
if(bitmap.IsOk() && base->imageIndexLarge >= 0)
|
||||
{
|
||||
m_bundlesLarge[base->imageIndexLarge] = bitmap;
|
||||
|
||||
if(bitmap_disabled.IsOk())
|
||||
{
|
||||
m_bundlesLargeDisabled[base->imageIndexLargeDisabled] = bitmap_disabled;
|
||||
}
|
||||
else
|
||||
{
|
||||
wxBitmap bmp = bitmap.GetBitmap(m_bitmap_size_large);
|
||||
m_bundlesLargeDisabled[base->imageIndexLargeDisabled] =
|
||||
wxBitmapBundle::FromBitmap(MakeDisabledBitmap(bmp));
|
||||
}
|
||||
}
|
||||
|
||||
if(bitmap_small.IsOk() && base->imageIndexSmall >= 0)
|
||||
{
|
||||
m_bundlesSmall[base->imageIndexSmall] = bitmap_small;
|
||||
|
||||
if(bitmap_small_disabled.IsOk())
|
||||
{
|
||||
m_bundlesSmallDisabled[base->imageIndexSmallDisabled] = bitmap_small_disabled;
|
||||
}
|
||||
else
|
||||
{
|
||||
wxBitmap bmp = bitmap_small.GetBitmap(m_bitmap_size_small);
|
||||
m_bundlesSmallDisabled[base->imageIndexSmallDisabled] =
|
||||
wxBitmapBundle::FromBitmap(MakeDisabledBitmap(bmp));
|
||||
}
|
||||
}
|
||||
|
||||
Refresh();
|
||||
}
|
||||
|
||||
@@ -924,20 +944,62 @@ void wxRibbonButtonBar::OnPaint(wxPaintEvent& WXUNUSED(evt))
|
||||
|
||||
wxRibbonButtonBarLayout* layout = m_layouts.Item(m_current_layout);
|
||||
|
||||
// Calculate DPI-scaled bitmap sizes (must match layout calculation)
|
||||
const double scale = GetDPIScaleFactor();
|
||||
const wxSize scaledLarge = m_bitmap_size_large * scale;
|
||||
const wxSize scaledSmall = m_bitmap_size_small * scale;
|
||||
|
||||
for ( auto& button : layout->buttons )
|
||||
{
|
||||
wxRibbonButtonBarButtonBase* base = button.base;
|
||||
wxRect rect(button.position + m_layout_offset, base->sizes[button.size].size);
|
||||
|
||||
// Get bitmaps at the DPI-scaled sizes used for layout
|
||||
// Using explicit sizes ensures bundles are scaled correctly even if
|
||||
// the small bundle contains a large source image
|
||||
wxBitmap bitmap, bitmap_small;
|
||||
base->GetBitmaps(m_ribbonBar,
|
||||
m_bitmap_size_large, m_bitmap_size_small, bitmap,
|
||||
bitmap_small);
|
||||
|
||||
bool disabled = (base->state & wxRIBBON_BUTTONBAR_BUTTON_DISABLED) != 0;
|
||||
|
||||
if(base->imageIndexLarge >= 0)
|
||||
{
|
||||
int idx = disabled ? base->imageIndexLargeDisabled : base->imageIndexLarge;
|
||||
if(idx >= 0 && idx < (int)m_bundlesLarge.size())
|
||||
{
|
||||
const wxBitmapBundle& bundle = disabled ?
|
||||
m_bundlesLargeDisabled[idx] : m_bundlesLarge[idx];
|
||||
bitmap = bundle.GetBitmap(scaledLarge);
|
||||
}
|
||||
}
|
||||
|
||||
if(base->imageIndexSmall >= 0)
|
||||
{
|
||||
int idx = disabled ? base->imageIndexSmallDisabled : base->imageIndexSmall;
|
||||
if(idx >= 0 && idx < (int)m_bundlesSmall.size())
|
||||
{
|
||||
const wxBitmapBundle& bundle = disabled ?
|
||||
m_bundlesSmallDisabled[idx] : m_bundlesSmall[idx];
|
||||
bitmap_small = bundle.GetBitmap(scaledSmall);
|
||||
}
|
||||
}
|
||||
|
||||
m_art->DrawButtonBarButton(dc, this, rect, base->kind,
|
||||
base->state | button.size, base->label, bitmap, bitmap_small);
|
||||
}
|
||||
}
|
||||
|
||||
wxBitmap wxRibbonButtonBar::GetButtonBitmap(int imageIndex, bool large) const
|
||||
{
|
||||
if(imageIndex < 0)
|
||||
return wxNullBitmap;
|
||||
|
||||
const wxVector<wxBitmapBundle>& bundles = large ? m_bundlesLarge : m_bundlesSmall;
|
||||
if(imageIndex >= (int)bundles.size())
|
||||
return wxNullBitmap;
|
||||
|
||||
return bundles[imageIndex].GetBitmapFor(this);
|
||||
}
|
||||
|
||||
void wxRibbonButtonBar::OnSize(wxSizeEvent& evt)
|
||||
{
|
||||
wxSize new_size = evt.GetSize();
|
||||
@@ -1526,4 +1588,23 @@ bool wxRibbonButtonBarEvent::PopupMenu(wxMenu* menu)
|
||||
return m_bar->PopupMenu(menu, pos);
|
||||
}
|
||||
|
||||
void wxRibbonButtonBar::OnDPIChanged(wxDPIChangedEvent& event)
|
||||
{
|
||||
// Recalculate all button sizes with new DPI scale, then rebuild layouts
|
||||
wxInfoDC temp_dc(this);
|
||||
size_t btn_count = m_buttons.GetCount();
|
||||
for(size_t btn_i = 0; btn_i < btn_count; ++btn_i)
|
||||
{
|
||||
wxRibbonButtonBarButtonBase* base = m_buttons.Item(btn_i);
|
||||
FetchButtonSizeInfo(base, wxRIBBON_BUTTONBAR_BUTTON_SMALL, temp_dc);
|
||||
FetchButtonSizeInfo(base, wxRIBBON_BUTTONBAR_BUTTON_MEDIUM, temp_dc);
|
||||
FetchButtonSizeInfo(base, wxRIBBON_BUTTONBAR_BUTTON_LARGE, temp_dc);
|
||||
}
|
||||
|
||||
m_layouts_valid = false;
|
||||
Realize();
|
||||
Refresh();
|
||||
event.Skip();
|
||||
}
|
||||
|
||||
#endif // wxUSE_RIBBON
|
||||
|
||||
+20
-10
@@ -38,8 +38,9 @@ public:
|
||||
wxRibbonGalleryItem() = default;
|
||||
|
||||
void SetId(int id) {m_id = id;}
|
||||
void SetBitmap(const wxBitmap& bitmap) {m_bitmap = bitmap;}
|
||||
const wxBitmap& GetBitmap() const {return m_bitmap;}
|
||||
void SetBitmap(const wxBitmapBundle& bitmap) {m_bitmap = bitmap;}
|
||||
const wxBitmapBundle& GetBitmapBundle() const {return m_bitmap;}
|
||||
wxBitmap GetBitmap(wxWindow* wnd) const {return m_bitmap.GetBitmapFor(wnd);}
|
||||
void SetIsVisible(bool visible) {m_is_visible = visible;}
|
||||
void SetPosition(int x, int y, const wxSize& size)
|
||||
{
|
||||
@@ -54,7 +55,7 @@ public:
|
||||
void *GetClientData() const {return m_client_data.GetClientData();}
|
||||
|
||||
protected:
|
||||
wxBitmap m_bitmap;
|
||||
wxBitmapBundle m_bitmap;
|
||||
wxClientDataContainer m_client_data;
|
||||
wxRect m_position;
|
||||
int m_id = 0;
|
||||
@@ -71,6 +72,7 @@ wxBEGIN_EVENT_TABLE(wxRibbonGallery, wxRibbonControl)
|
||||
EVT_MOTION(wxRibbonGallery::OnMouseMove)
|
||||
EVT_PAINT(wxRibbonGallery::OnPaint)
|
||||
EVT_SIZE(wxRibbonGallery::OnSize)
|
||||
EVT_DPI_CHANGED(wxRibbonGallery::OnDPIChanged)
|
||||
wxEND_EVENT_TABLE()
|
||||
|
||||
wxRibbonGallery::wxRibbonGallery()
|
||||
@@ -518,8 +520,10 @@ void wxRibbonGallery::OnPaint(wxPaintEvent& WXUNUSED(evt))
|
||||
else
|
||||
offset_pos.SetLeft(offset_pos.GetLeft() - m_scroll_amount);
|
||||
m_art->DrawGalleryItemBackground(dc, this, offset_pos, item);
|
||||
if (item->GetBitmap().IsOk() )
|
||||
dc.DrawBitmap(item->GetBitmap(), offset_pos.GetLeft() + padding_left,
|
||||
// Resolve bitmap bundle for current DPI
|
||||
wxBitmap bmp = item->GetBitmap(this);
|
||||
if (bmp.IsOk())
|
||||
dc.DrawBitmap(bmp, offset_pos.GetLeft() + padding_left,
|
||||
offset_pos.GetTop() + padding_top);
|
||||
}
|
||||
}
|
||||
@@ -529,17 +533,23 @@ void wxRibbonGallery::OnSize(wxSizeEvent& WXUNUSED(evt))
|
||||
Layout();
|
||||
}
|
||||
|
||||
wxRibbonGalleryItem* wxRibbonGallery::Append(const wxBitmap& bitmap, int id)
|
||||
void wxRibbonGallery::OnDPIChanged(wxDPIChangedEvent& event)
|
||||
{
|
||||
Realize();
|
||||
event.Skip();
|
||||
}
|
||||
|
||||
wxRibbonGalleryItem* wxRibbonGallery::Append(const wxBitmapBundle& bitmap, int id)
|
||||
{
|
||||
wxASSERT(bitmap.IsOk());
|
||||
if(m_items.IsEmpty())
|
||||
{
|
||||
m_bitmap_size = bitmap.GetLogicalSize();
|
||||
m_bitmap_size = bitmap.GetDefaultSize();
|
||||
CalculateMinSize();
|
||||
}
|
||||
else
|
||||
{
|
||||
wxASSERT(bitmap.GetLogicalSize() == m_bitmap_size);
|
||||
wxASSERT(bitmap.GetDefaultSize() == m_bitmap_size);
|
||||
}
|
||||
|
||||
wxRibbonGalleryItem *item = new wxRibbonGalleryItem;
|
||||
@@ -549,7 +559,7 @@ wxRibbonGalleryItem* wxRibbonGallery::Append(const wxBitmap& bitmap, int id)
|
||||
return item;
|
||||
}
|
||||
|
||||
wxRibbonGalleryItem* wxRibbonGallery::Append(const wxBitmap& bitmap, int id,
|
||||
wxRibbonGalleryItem* wxRibbonGallery::Append(const wxBitmapBundle& bitmap, int id,
|
||||
void* clientData)
|
||||
{
|
||||
wxRibbonGalleryItem *item = Append(bitmap, id);
|
||||
@@ -557,7 +567,7 @@ wxRibbonGalleryItem* wxRibbonGallery::Append(const wxBitmap& bitmap, int id,
|
||||
return item;
|
||||
}
|
||||
|
||||
wxRibbonGalleryItem* wxRibbonGallery::Append(const wxBitmap& bitmap, int id,
|
||||
wxRibbonGalleryItem* wxRibbonGallery::Append(const wxBitmapBundle& bitmap, int id,
|
||||
wxClientData* clientData)
|
||||
{
|
||||
wxRibbonGalleryItem *item = Append(bitmap, id);
|
||||
|
||||
+10
-3
@@ -148,6 +148,7 @@ wxBEGIN_EVENT_TABLE(wxRibbonPage, wxRibbonControl)
|
||||
EVT_ERASE_BACKGROUND(wxRibbonPage::OnEraseBackground)
|
||||
EVT_PAINT(wxRibbonPage::OnPaint)
|
||||
EVT_SIZE(wxRibbonPage::OnSize)
|
||||
EVT_DPI_CHANGED(wxRibbonPage::OnDPIChanged)
|
||||
wxEND_EVENT_TABLE()
|
||||
|
||||
wxRibbonPage::wxRibbonPage()
|
||||
@@ -161,7 +162,7 @@ wxRibbonPage::wxRibbonPage()
|
||||
wxRibbonPage::wxRibbonPage(wxRibbonBar* parent,
|
||||
wxWindowID id,
|
||||
const wxString& label,
|
||||
const wxBitmap& icon,
|
||||
const wxBitmapBundle& icon,
|
||||
long WXUNUSED(style))
|
||||
: wxRibbonControl(parent, id, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE)
|
||||
{
|
||||
@@ -178,7 +179,7 @@ wxRibbonPage::~wxRibbonPage()
|
||||
bool wxRibbonPage::Create(wxRibbonBar* parent,
|
||||
wxWindowID id,
|
||||
const wxString& label,
|
||||
const wxBitmap& icon,
|
||||
const wxBitmapBundle& icon,
|
||||
long WXUNUSED(style))
|
||||
{
|
||||
if(!wxRibbonControl::Create(parent, id, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE))
|
||||
@@ -189,7 +190,7 @@ bool wxRibbonPage::Create(wxRibbonBar* parent,
|
||||
return true;
|
||||
}
|
||||
|
||||
void wxRibbonPage::CommonInit(const wxString& label, const wxBitmap& icon)
|
||||
void wxRibbonPage::CommonInit(const wxString& label, const wxBitmapBundle& icon)
|
||||
{
|
||||
SetName(label);
|
||||
|
||||
@@ -563,6 +564,12 @@ void wxRibbonPage::OnSize(wxSizeEvent& evt)
|
||||
evt.Skip();
|
||||
}
|
||||
|
||||
void wxRibbonPage::OnDPIChanged(wxDPIChangedEvent& event)
|
||||
{
|
||||
Realize();
|
||||
event.Skip();
|
||||
}
|
||||
|
||||
void wxRibbonPage::RemoveChild(wxWindowBase *child)
|
||||
{
|
||||
// Remove all references to the child from the collapse stack
|
||||
|
||||
+14
-17
@@ -42,6 +42,7 @@ wxBEGIN_EVENT_TABLE(wxRibbonPanel, wxRibbonControl)
|
||||
EVT_LEFT_DOWN(wxRibbonPanel::OnMouseClick)
|
||||
EVT_PAINT(wxRibbonPanel::OnPaint)
|
||||
EVT_SIZE(wxRibbonPanel::OnSize)
|
||||
EVT_DPI_CHANGED(wxRibbonPanel::OnDPIChanged)
|
||||
wxEND_EVENT_TABLE()
|
||||
|
||||
wxRibbonPanel::wxRibbonPanel() : m_expanded_dummy(nullptr), m_expanded_panel(nullptr)
|
||||
@@ -51,7 +52,7 @@ wxRibbonPanel::wxRibbonPanel() : m_expanded_dummy(nullptr), m_expanded_panel(nul
|
||||
wxRibbonPanel::wxRibbonPanel(wxWindow* parent,
|
||||
wxWindowID id,
|
||||
const wxString& label,
|
||||
const wxBitmap& minimised_icon,
|
||||
const wxBitmapBundle& minimised_icon,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style)
|
||||
@@ -72,7 +73,7 @@ wxRibbonPanel::~wxRibbonPanel()
|
||||
bool wxRibbonPanel::Create(wxWindow* parent,
|
||||
wxWindowID id,
|
||||
const wxString& label,
|
||||
const wxBitmap& icon,
|
||||
const wxBitmapBundle& icon,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style)
|
||||
@@ -105,7 +106,7 @@ void wxRibbonPanel::SetArtProvider(wxRibbonArtProvider* art)
|
||||
m_expanded_panel->SetArtProvider(art);
|
||||
}
|
||||
|
||||
void wxRibbonPanel::CommonInit(const wxString& label, const wxBitmap& icon, long style)
|
||||
void wxRibbonPanel::CommonInit(const wxString& label, const wxBitmapBundle& icon, long style)
|
||||
{
|
||||
SetName(label);
|
||||
SetLabel(label);
|
||||
@@ -252,6 +253,12 @@ void wxRibbonPanel::OnSize(wxSizeEvent& evt)
|
||||
evt.Skip();
|
||||
}
|
||||
|
||||
void wxRibbonPanel::OnDPIChanged(wxDPIChangedEvent& event)
|
||||
{
|
||||
Realize();
|
||||
event.Skip();
|
||||
}
|
||||
|
||||
void wxRibbonPanel::DoSetSize(int x, int y, int width, int height, int sizeFlags)
|
||||
{
|
||||
// At least on MSW, changing the size of a window will cause GetSize() to
|
||||
@@ -700,23 +707,13 @@ bool wxRibbonPanel::Realize()
|
||||
m_smallest_unminimised_size =
|
||||
m_art->GetPanelSize(temp_dc, this, minimum_children_size, nullptr);
|
||||
|
||||
wxSize bitmap_size;
|
||||
wxSize panel_min_size = GetMinNotMinimisedSize();
|
||||
m_minimised_size = m_art->GetMinimisedPanelMinimumSize(temp_dc, this,
|
||||
&bitmap_size, &m_preferred_expand_direction);
|
||||
if(m_minimised_icon.IsOk() && m_minimised_icon.GetLogicalSize() != bitmap_size)
|
||||
nullptr, &m_preferred_expand_direction);
|
||||
if(m_minimised_icon.IsOk())
|
||||
{
|
||||
double scale = m_minimised_icon.GetScaleFactor();
|
||||
if (scale > 1.0)
|
||||
scale = 2.0;
|
||||
|
||||
wxImage img(m_minimised_icon.ConvertToImage());
|
||||
img.Rescale(scale * bitmap_size, wxIMAGE_QUALITY_HIGH);
|
||||
m_minimised_icon_resized = wxBitmap(img, -1, scale);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_minimised_icon_resized = m_minimised_icon;
|
||||
m_minimised_icon_resized = m_minimised_icon.GetBitmap(
|
||||
m_minimised_icon.GetPreferredBitmapSizeFor(this));
|
||||
}
|
||||
if(m_minimised_size.x > panel_min_size.x &&
|
||||
m_minimised_size.y > panel_min_size.y)
|
||||
|
||||
+43
-31
@@ -30,8 +30,8 @@ class wxRibbonToolBarToolBase
|
||||
{
|
||||
public:
|
||||
wxString help_string;
|
||||
wxBitmap bitmap;
|
||||
wxBitmap bitmap_disabled;
|
||||
wxBitmapBundle bitmap;
|
||||
wxBitmapBundle bitmap_disabled;
|
||||
wxRect dropdown;
|
||||
wxPoint position;
|
||||
wxSize size;
|
||||
@@ -70,6 +70,7 @@ wxBEGIN_EVENT_TABLE(wxRibbonToolBar, wxRibbonControl)
|
||||
EVT_MOTION(wxRibbonToolBar::OnMouseMove)
|
||||
EVT_PAINT(wxRibbonToolBar::OnPaint)
|
||||
EVT_SIZE(wxRibbonToolBar::OnSize)
|
||||
EVT_DPI_CHANGED(wxRibbonToolBar::OnDPIChanged)
|
||||
wxEND_EVENT_TABLE()
|
||||
|
||||
wxRibbonToolBar::wxRibbonToolBar()
|
||||
@@ -133,44 +134,44 @@ wxRibbonToolBar::~wxRibbonToolBar()
|
||||
|
||||
wxRibbonToolBarToolBase* wxRibbonToolBar::AddTool(
|
||||
int tool_id,
|
||||
const wxBitmap& bitmap,
|
||||
const wxBitmapBundle& bitmap,
|
||||
const wxString& help_string,
|
||||
wxRibbonButtonKind kind)
|
||||
{
|
||||
return AddTool(tool_id, bitmap, wxNullBitmap, help_string, kind, nullptr);
|
||||
return AddTool(tool_id, bitmap, wxBitmapBundle(), help_string, kind, nullptr);
|
||||
}
|
||||
|
||||
wxRibbonToolBarToolBase* wxRibbonToolBar::AddDropdownTool(
|
||||
int tool_id,
|
||||
const wxBitmap& bitmap,
|
||||
const wxBitmapBundle& bitmap,
|
||||
const wxString& help_string)
|
||||
{
|
||||
return AddTool(tool_id, bitmap, wxNullBitmap, help_string,
|
||||
return AddTool(tool_id, bitmap, wxBitmapBundle(), help_string,
|
||||
wxRIBBON_BUTTON_DROPDOWN, nullptr);
|
||||
}
|
||||
|
||||
wxRibbonToolBarToolBase* wxRibbonToolBar::AddHybridTool(
|
||||
int tool_id,
|
||||
const wxBitmap& bitmap,
|
||||
const wxBitmapBundle& bitmap,
|
||||
const wxString& help_string)
|
||||
{
|
||||
return AddTool(tool_id, bitmap, wxNullBitmap, help_string,
|
||||
return AddTool(tool_id, bitmap, wxBitmapBundle(), help_string,
|
||||
wxRIBBON_BUTTON_HYBRID, nullptr);
|
||||
}
|
||||
|
||||
wxRibbonToolBarToolBase* wxRibbonToolBar::AddToggleTool(
|
||||
int tool_id,
|
||||
const wxBitmap& bitmap,
|
||||
const wxBitmapBundle& bitmap,
|
||||
const wxString& help_string)
|
||||
{
|
||||
return AddTool(tool_id, bitmap, wxNullBitmap, help_string,
|
||||
return AddTool(tool_id, bitmap, wxBitmapBundle(), help_string,
|
||||
wxRIBBON_BUTTON_TOGGLE, nullptr);
|
||||
}
|
||||
|
||||
wxRibbonToolBarToolBase* wxRibbonToolBar::AddTool(
|
||||
int tool_id,
|
||||
const wxBitmap& bitmap,
|
||||
const wxBitmap& bitmap_disabled,
|
||||
const wxBitmapBundle& bitmap,
|
||||
const wxBitmapBundle& bitmap_disabled,
|
||||
const wxString& help_string,
|
||||
wxRibbonButtonKind kind,
|
||||
wxObject* client_data)
|
||||
@@ -192,49 +193,49 @@ wxRibbonToolBarToolBase* wxRibbonToolBar::AddSeparator()
|
||||
wxRibbonToolBarToolBase* wxRibbonToolBar::InsertTool(
|
||||
size_t pos,
|
||||
int tool_id,
|
||||
const wxBitmap& bitmap,
|
||||
const wxBitmapBundle& bitmap,
|
||||
const wxString& help_string,
|
||||
wxRibbonButtonKind kind)
|
||||
{
|
||||
return InsertTool(pos, tool_id, bitmap, wxNullBitmap, help_string, kind,
|
||||
return InsertTool(pos, tool_id, bitmap, wxBitmapBundle(), help_string, kind,
|
||||
nullptr);
|
||||
}
|
||||
|
||||
wxRibbonToolBarToolBase* wxRibbonToolBar::InsertDropdownTool(
|
||||
size_t pos,
|
||||
int tool_id,
|
||||
const wxBitmap& bitmap,
|
||||
const wxBitmapBundle& bitmap,
|
||||
const wxString& help_string)
|
||||
{
|
||||
return InsertTool(pos, tool_id, bitmap, wxNullBitmap, help_string,
|
||||
return InsertTool(pos, tool_id, bitmap, wxBitmapBundle(), help_string,
|
||||
wxRIBBON_BUTTON_DROPDOWN, nullptr);
|
||||
}
|
||||
|
||||
wxRibbonToolBarToolBase* wxRibbonToolBar::InsertHybridTool(
|
||||
size_t pos,
|
||||
int tool_id,
|
||||
const wxBitmap& bitmap,
|
||||
const wxBitmapBundle& bitmap,
|
||||
const wxString& help_string)
|
||||
{
|
||||
return InsertTool(pos, tool_id, bitmap, wxNullBitmap, help_string,
|
||||
return InsertTool(pos, tool_id, bitmap, wxBitmapBundle(), help_string,
|
||||
wxRIBBON_BUTTON_HYBRID, nullptr);
|
||||
}
|
||||
|
||||
wxRibbonToolBarToolBase* wxRibbonToolBar::InsertToggleTool(
|
||||
size_t pos,
|
||||
int tool_id,
|
||||
const wxBitmap& bitmap,
|
||||
const wxBitmapBundle& bitmap,
|
||||
const wxString& help_string)
|
||||
{
|
||||
return InsertTool(pos, tool_id, bitmap, wxNullBitmap, help_string,
|
||||
return InsertTool(pos, tool_id, bitmap, wxBitmapBundle(), help_string,
|
||||
wxRIBBON_BUTTON_TOGGLE, nullptr);
|
||||
}
|
||||
|
||||
wxRibbonToolBarToolBase* wxRibbonToolBar::InsertTool(
|
||||
size_t pos,
|
||||
int tool_id,
|
||||
const wxBitmap& bitmap,
|
||||
const wxBitmap& bitmap_disabled,
|
||||
const wxBitmapBundle& bitmap,
|
||||
const wxBitmapBundle& bitmap_disabled,
|
||||
const wxString& help_string,
|
||||
wxRibbonButtonKind kind,
|
||||
wxObject* client_data)
|
||||
@@ -247,11 +248,15 @@ wxRibbonToolBarToolBase* wxRibbonToolBar::InsertTool(
|
||||
tool->bitmap = bitmap;
|
||||
if(bitmap_disabled.IsOk())
|
||||
{
|
||||
wxASSERT(bitmap.GetLogicalSize() == bitmap_disabled.GetLogicalSize());
|
||||
wxASSERT(bitmap.GetDefaultSize() == bitmap_disabled.GetDefaultSize());
|
||||
tool->bitmap_disabled = bitmap_disabled;
|
||||
}
|
||||
else
|
||||
tool->bitmap_disabled = MakeDisabledBitmap(bitmap);
|
||||
{
|
||||
// Generate disabled bitmap from normal bitmap
|
||||
wxBitmap bmp = bitmap.GetBitmap(bitmap.GetDefaultSize());
|
||||
tool->bitmap_disabled = wxBitmapBundle::FromBitmap(MakeDisabledBitmap(bmp));
|
||||
}
|
||||
tool->help_string = help_string;
|
||||
tool->kind = kind;
|
||||
tool->client_data = client_data;
|
||||
@@ -580,7 +585,7 @@ void wxRibbonToolBar::SetToolClientData(int tool_id, wxObject* clientData)
|
||||
tool->client_data = clientData;
|
||||
}
|
||||
|
||||
void wxRibbonToolBar::SetToolDisabledBitmap(int tool_id, const wxBitmap &bitmap)
|
||||
void wxRibbonToolBar::SetToolDisabledBitmap(int tool_id, const wxBitmapBundle &bitmap)
|
||||
{
|
||||
wxRibbonToolBarToolBase* tool = FindById(tool_id);
|
||||
wxCHECK_RET(tool != nullptr , "Invalid tool id");
|
||||
@@ -594,7 +599,7 @@ void wxRibbonToolBar::SetToolHelpString(int tool_id, const wxString& helpString)
|
||||
tool->help_string = helpString;
|
||||
}
|
||||
|
||||
void wxRibbonToolBar::SetToolNormalBitmap(int tool_id, const wxBitmap &bitmap)
|
||||
void wxRibbonToolBar::SetToolNormalBitmap(int tool_id, const wxBitmapBundle &bitmap)
|
||||
{
|
||||
wxRibbonToolBarToolBase* tool = FindById(tool_id);
|
||||
wxCHECK_RET(tool != nullptr , "Invalid tool id");
|
||||
@@ -784,7 +789,7 @@ bool wxRibbonToolBar::Realize()
|
||||
{
|
||||
wxRibbonToolBarToolBase* tool = group->tools.Item(t);
|
||||
tool->size = m_art->GetToolSize(temp_dc, this,
|
||||
tool->bitmap.GetLogicalSize(), tool->kind, t == 0,
|
||||
tool->bitmap.GetPreferredLogicalSizeFor(this), tool->kind, t == 0,
|
||||
t == (tool_count - 1), &tool->dropdown);
|
||||
if(t == 0)
|
||||
tool->state |= wxRIBBON_TOOLBAR_TOOL_FIRST;
|
||||
@@ -975,6 +980,12 @@ void wxRibbonToolBar::OnSize(wxSizeEvent& evt)
|
||||
delete[] row_sizes;
|
||||
}
|
||||
|
||||
void wxRibbonToolBar::OnDPIChanged(wxDPIChangedEvent& event)
|
||||
{
|
||||
Realize();
|
||||
event.Skip();
|
||||
}
|
||||
|
||||
// Finds the best width and height given the parents' width and height
|
||||
wxSize wxRibbonToolBar::GetBestSizeForParentSize(const wxSize& parentSize) const
|
||||
{
|
||||
@@ -1038,12 +1049,13 @@ void wxRibbonToolBar::OnPaint(wxPaintEvent& WXUNUSED(evt))
|
||||
{
|
||||
wxRibbonToolBarToolBase* tool = group->tools.Item(t);
|
||||
wxRect rect(group->position + tool->position, tool->size);
|
||||
// Resolve bitmap bundle to actual bitmap for current DPI
|
||||
wxBitmap bmp;
|
||||
if(tool->state & wxRIBBON_TOOLBAR_TOOL_DISABLED)
|
||||
m_art->DrawTool(dc, this, rect, tool->bitmap_disabled,
|
||||
tool->kind, tool->state);
|
||||
bmp = tool->bitmap_disabled.GetBitmapFor(this);
|
||||
else
|
||||
m_art->DrawTool(dc, this, rect, tool->bitmap, tool->kind,
|
||||
tool->state);
|
||||
bmp = tool->bitmap.GetBitmapFor(this);
|
||||
m_art->DrawTool(dc, this, rect, bmp, tool->kind, tool->state);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user