mirror of
https://github.com/wxWidgets/wxWidgets.git
synced 2026-08-18 01:19:45 +08:00
Add system color change responsiveness to ribbon
Add new wxRibbonArtProvider::UpdateColoursFromSystem() and implement it in wxRibbonMSWArtProvider. Closes #26644.
This commit is contained in:
committed by
Vadim Zeitlin
parent
6c3b09b8d3
commit
8b080b8cb0
@@ -232,6 +232,10 @@ public:
|
||||
const wxColour& secondary,
|
||||
const wxColour& tertiary) = 0;
|
||||
|
||||
// Called when the system colours change; override to recalculate colours
|
||||
// from system settings.
|
||||
virtual void UpdateColoursFromSystem() {}
|
||||
|
||||
virtual void DrawTabCtrlBackground(
|
||||
wxDC& dc,
|
||||
wxWindow* wnd,
|
||||
@@ -441,6 +445,8 @@ public:
|
||||
const wxColour& secondary,
|
||||
const wxColour& tertiary) override;
|
||||
|
||||
void UpdateColoursFromSystem() override;
|
||||
|
||||
int GetTabCtrlHeight(
|
||||
wxReadOnlyDC& dc,
|
||||
wxWindow* wnd,
|
||||
|
||||
@@ -188,6 +188,7 @@ protected:
|
||||
void DoEraseBackground(wxDC& dc);
|
||||
void OnSize(wxSizeEvent& evt);
|
||||
void OnDPIChanged(wxDPIChangedEvent& evt);
|
||||
void OnSysColourChanged(wxSysColourChangedEvent& evt);
|
||||
void OnMouseLeftDown(wxMouseEvent& evt);
|
||||
void OnMouseLeftUp(wxMouseEvent& evt);
|
||||
void OnMouseMiddleDown(wxMouseEvent& evt);
|
||||
|
||||
@@ -185,6 +185,7 @@ protected:
|
||||
void OnMouseDown(wxMouseEvent& evt);
|
||||
void OnMouseUp(wxMouseEvent& evt);
|
||||
void OnDPIChanged(wxDPIChangedEvent& evt);
|
||||
void OnSysColourChanged(wxSysColourChangedEvent& evt);
|
||||
|
||||
virtual wxSize DoGetNextSmallerSize(wxOrientation direction,
|
||||
wxSize relative_to) const override;
|
||||
|
||||
@@ -88,6 +88,7 @@ protected:
|
||||
void OnPaint(wxPaintEvent& evt);
|
||||
void OnSize(wxSizeEvent& evt);
|
||||
void OnDPIChanged(wxDPIChangedEvent& evt);
|
||||
void OnSysColourChanged(wxSysColourChangedEvent& evt);
|
||||
int GetScrollLineSize() const;
|
||||
|
||||
virtual wxSize DoGetBestSize() const override;
|
||||
|
||||
@@ -77,6 +77,7 @@ protected:
|
||||
void OnPaint(wxPaintEvent& evt);
|
||||
void OnSize(wxSizeEvent& evt);
|
||||
void OnDPIChanged(wxDPIChangedEvent& evt);
|
||||
void OnSysColourChanged(wxSysColourChangedEvent& evt);
|
||||
|
||||
bool ExpandPanels(wxOrientation direction, int maximum_amount);
|
||||
bool CollapsePanels(wxOrientation direction, int minimum_amount);
|
||||
|
||||
@@ -109,6 +109,7 @@ protected:
|
||||
void OnKillFocus(wxFocusEvent& evt);
|
||||
void OnChildKillFocus(wxFocusEvent& evt);
|
||||
void OnDPIChanged(wxDPIChangedEvent& evt);
|
||||
void OnSysColourChanged(wxSysColourChangedEvent& evt);
|
||||
|
||||
void TestPositionForHover(const wxPoint& pos);
|
||||
bool ShouldSendEventToDummy(wxEvent& evt);
|
||||
|
||||
@@ -175,6 +175,7 @@ protected:
|
||||
void OnPaint(wxPaintEvent& evt);
|
||||
void OnSize(wxSizeEvent& evt);
|
||||
void OnDPIChanged(wxDPIChangedEvent& evt);
|
||||
void OnSysColourChanged(wxSysColourChangedEvent& evt);
|
||||
|
||||
virtual wxSize DoGetNextSmallerSize(wxOrientation direction,
|
||||
wxSize relative_to) const override;
|
||||
|
||||
@@ -344,6 +344,15 @@ public:
|
||||
const wxColour& secondary,
|
||||
const wxColour& tertiary) = 0;
|
||||
|
||||
/**
|
||||
Called when the system colours change to allow the art provider to
|
||||
update its colours. Override to recalculate colours from the current
|
||||
system settings.
|
||||
|
||||
@since 3.3.3
|
||||
*/
|
||||
virtual void UpdateColoursFromSystem() {}
|
||||
|
||||
/**
|
||||
Draw the background of the tab region of a ribbon bar.
|
||||
|
||||
|
||||
+19
-16
@@ -273,22 +273,7 @@ wxRibbonMSWArtProvider::wxRibbonMSWArtProvider(bool set_colour_scheme)
|
||||
m_panel_label_font = m_tab_label_font;
|
||||
|
||||
if(set_colour_scheme)
|
||||
{
|
||||
if (wxSystemSettings::GetAppearance().IsDark())
|
||||
{
|
||||
SetColourScheme(
|
||||
wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE),
|
||||
wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHT),
|
||||
wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT));
|
||||
}
|
||||
else
|
||||
{
|
||||
SetColourScheme(
|
||||
wxColour(194, 216, 241),
|
||||
wxColour(255, 223, 114),
|
||||
wxColour(0, 0, 0));
|
||||
}
|
||||
}
|
||||
UpdateColoursFromSystem();
|
||||
|
||||
m_cached_tab_separator_visibility = -10.0; // valid visibilities are in range [0, 1]
|
||||
m_tab_separation_size = 3;
|
||||
@@ -311,6 +296,24 @@ wxRibbonMSWArtProvider::~wxRibbonMSWArtProvider()
|
||||
{
|
||||
}
|
||||
|
||||
void wxRibbonMSWArtProvider::UpdateColoursFromSystem()
|
||||
{
|
||||
if (wxSystemSettings::GetAppearance().IsDark())
|
||||
{
|
||||
SetColourScheme(
|
||||
wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE),
|
||||
wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHT),
|
||||
wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT));
|
||||
}
|
||||
else
|
||||
{
|
||||
SetColourScheme(
|
||||
wxColour(194, 216, 241),
|
||||
wxColour(255, 223, 114),
|
||||
wxColour(0, 0, 0));
|
||||
}
|
||||
}
|
||||
|
||||
void wxRibbonMSWArtProvider::GetColourScheme(
|
||||
wxColour* primary,
|
||||
wxColour* secondary,
|
||||
|
||||
@@ -55,6 +55,7 @@ wxBEGIN_EVENT_TABLE(wxRibbonBar, wxRibbonControl)
|
||||
EVT_SIZE(wxRibbonBar::OnSize)
|
||||
EVT_KILL_FOCUS(wxRibbonBar::OnKillFocus)
|
||||
EVT_DPI_CHANGED(wxRibbonBar::OnDPIChanged)
|
||||
EVT_SYS_COLOUR_CHANGED(wxRibbonBar::OnSysColourChanged)
|
||||
wxEND_EVENT_TABLE()
|
||||
|
||||
void wxRibbonBar::AddPage(wxRibbonPage *page)
|
||||
@@ -956,6 +957,12 @@ void wxRibbonBar::OnDPIChanged(wxDPIChangedEvent& event)
|
||||
event.Skip();
|
||||
}
|
||||
|
||||
void wxRibbonBar::OnSysColourChanged(wxSysColourChangedEvent& event)
|
||||
{
|
||||
event.Skip();
|
||||
m_art->UpdateColoursFromSystem();
|
||||
}
|
||||
|
||||
void wxRibbonBar::RepositionPage(wxRibbonPage *page)
|
||||
{
|
||||
int w, h;
|
||||
|
||||
@@ -42,6 +42,7 @@ wxBEGIN_EVENT_TABLE(wxRibbonButtonBar, wxRibbonControl)
|
||||
EVT_LEFT_DCLICK(wxRibbonButtonBar::OnMouseDown)
|
||||
EVT_LEFT_UP(wxRibbonButtonBar::OnMouseUp)
|
||||
EVT_DPI_CHANGED(wxRibbonButtonBar::OnDPIChanged)
|
||||
EVT_SYS_COLOUR_CHANGED(wxRibbonButtonBar::OnSysColourChanged)
|
||||
wxEND_EVENT_TABLE()
|
||||
|
||||
class wxRibbonButtonBarButtonSizeInfo
|
||||
@@ -1603,4 +1604,10 @@ void wxRibbonButtonBar::OnDPIChanged(wxDPIChangedEvent& event)
|
||||
event.Skip();
|
||||
}
|
||||
|
||||
void wxRibbonButtonBar::OnSysColourChanged(wxSysColourChangedEvent& event)
|
||||
{
|
||||
event.Skip();
|
||||
m_art->UpdateColoursFromSystem();
|
||||
}
|
||||
|
||||
#endif // wxUSE_RIBBON
|
||||
|
||||
@@ -73,6 +73,7 @@ wxBEGIN_EVENT_TABLE(wxRibbonGallery, wxRibbonControl)
|
||||
EVT_PAINT(wxRibbonGallery::OnPaint)
|
||||
EVT_SIZE(wxRibbonGallery::OnSize)
|
||||
EVT_DPI_CHANGED(wxRibbonGallery::OnDPIChanged)
|
||||
EVT_SYS_COLOUR_CHANGED(wxRibbonGallery::OnSysColourChanged)
|
||||
wxEND_EVENT_TABLE()
|
||||
|
||||
wxRibbonGallery::wxRibbonGallery()
|
||||
@@ -539,6 +540,12 @@ void wxRibbonGallery::OnDPIChanged(wxDPIChangedEvent& event)
|
||||
event.Skip();
|
||||
}
|
||||
|
||||
void wxRibbonGallery::OnSysColourChanged(wxSysColourChangedEvent& event)
|
||||
{
|
||||
event.Skip();
|
||||
m_art->UpdateColoursFromSystem();
|
||||
}
|
||||
|
||||
wxRibbonGalleryItem* wxRibbonGallery::Append(const wxBitmapBundle& bitmap, int id)
|
||||
{
|
||||
wxASSERT(bitmap.IsOk());
|
||||
|
||||
@@ -149,6 +149,7 @@ wxBEGIN_EVENT_TABLE(wxRibbonPage, wxRibbonControl)
|
||||
EVT_PAINT(wxRibbonPage::OnPaint)
|
||||
EVT_SIZE(wxRibbonPage::OnSize)
|
||||
EVT_DPI_CHANGED(wxRibbonPage::OnDPIChanged)
|
||||
EVT_SYS_COLOUR_CHANGED(wxRibbonPage::OnSysColourChanged)
|
||||
wxEND_EVENT_TABLE()
|
||||
|
||||
wxRibbonPage::wxRibbonPage()
|
||||
@@ -570,6 +571,12 @@ void wxRibbonPage::OnDPIChanged(wxDPIChangedEvent& event)
|
||||
event.Skip();
|
||||
}
|
||||
|
||||
void wxRibbonPage::OnSysColourChanged(wxSysColourChangedEvent& event)
|
||||
{
|
||||
event.Skip();
|
||||
m_art->UpdateColoursFromSystem();
|
||||
}
|
||||
|
||||
void wxRibbonPage::RemoveChild(wxWindowBase *child)
|
||||
{
|
||||
// Remove all references to the child from the collapse stack
|
||||
|
||||
@@ -43,6 +43,7 @@ wxBEGIN_EVENT_TABLE(wxRibbonPanel, wxRibbonControl)
|
||||
EVT_PAINT(wxRibbonPanel::OnPaint)
|
||||
EVT_SIZE(wxRibbonPanel::OnSize)
|
||||
EVT_DPI_CHANGED(wxRibbonPanel::OnDPIChanged)
|
||||
EVT_SYS_COLOUR_CHANGED(wxRibbonPanel::OnSysColourChanged)
|
||||
wxEND_EVENT_TABLE()
|
||||
|
||||
wxRibbonPanel::wxRibbonPanel() : m_expanded_dummy(nullptr), m_expanded_panel(nullptr)
|
||||
@@ -259,6 +260,12 @@ void wxRibbonPanel::OnDPIChanged(wxDPIChangedEvent& event)
|
||||
event.Skip();
|
||||
}
|
||||
|
||||
void wxRibbonPanel::OnSysColourChanged(wxSysColourChangedEvent& event)
|
||||
{
|
||||
event.Skip();
|
||||
m_art->UpdateColoursFromSystem();
|
||||
}
|
||||
|
||||
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
|
||||
|
||||
@@ -71,6 +71,7 @@ wxBEGIN_EVENT_TABLE(wxRibbonToolBar, wxRibbonControl)
|
||||
EVT_PAINT(wxRibbonToolBar::OnPaint)
|
||||
EVT_SIZE(wxRibbonToolBar::OnSize)
|
||||
EVT_DPI_CHANGED(wxRibbonToolBar::OnDPIChanged)
|
||||
EVT_SYS_COLOUR_CHANGED(wxRibbonToolBar::OnSysColourChanged)
|
||||
wxEND_EVENT_TABLE()
|
||||
|
||||
wxRibbonToolBar::wxRibbonToolBar()
|
||||
@@ -986,6 +987,12 @@ void wxRibbonToolBar::OnDPIChanged(wxDPIChangedEvent& event)
|
||||
event.Skip();
|
||||
}
|
||||
|
||||
void wxRibbonToolBar::OnSysColourChanged(wxSysColourChangedEvent& event)
|
||||
{
|
||||
event.Skip();
|
||||
m_art->UpdateColoursFromSystem();
|
||||
}
|
||||
|
||||
// Finds the best width and height given the parents' width and height
|
||||
wxSize wxRibbonToolBar::GetBestSizeForParentSize(const wxSize& parentSize) const
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user