diff --git a/docs/changes.txt b/docs/changes.txt index 7a90872eba..4d57524fd9 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -149,6 +149,7 @@ All (GUI): - Add support for the events from multimedia keys (Jens Göpfert). - Improve wxAUI appearance in high contrast themes (Zane U. Ji). - Allow suppressing warnings from wxImage::LoadFile(). +- Allow customizing wxRibbon highlight colours (wxBen). wxGTK: diff --git a/include/wx/ribbon/art.h b/include/wx/ribbon/art.h index a74219535f..5dc3ebf2d6 100644 --- a/include/wx/ribbon/art.h +++ b/include/wx/ribbon/art.h @@ -131,7 +131,11 @@ enum wxRibbonArtSetting wxRIBBON_ART_TOOL_ACTIVE_BACKGROUND_TOP_GRADIENT_COLOUR, wxRIBBON_ART_TOOL_ACTIVE_BACKGROUND_COLOUR, wxRIBBON_ART_TOOL_ACTIVE_BACKGROUND_GRADIENT_COLOUR, - wxRIBBON_ART_BUTTON_BAR_LABEL_DISABLED_COLOUR + wxRIBBON_ART_BUTTON_BAR_LABEL_DISABLED_COLOUR, + wxRIBBON_ART_BUTTON_BAR_LABEL_HIGHLIGHT_COLOUR, + wxRIBBON_ART_BUTTON_BAR_LABEL_HIGHLIGHT_GRADIENT_COLOUR, + wxRIBBON_ART_BUTTON_BAR_LABEL_HIGHLIGHT_TOP_COLOUR, + wxRIBBON_ART_BUTTON_BAR_LABEL_HIGHLIGHT_GRADIENT_TOP_COLOUR }; enum wxRibbonScrollButtonStyle @@ -660,6 +664,10 @@ protected: wxColour m_tab_hover_background_gradient_colour; wxColour m_tab_hover_background_top_colour; wxColour m_tab_hover_background_top_gradient_colour; + wxColour m_tab_highlight_top_colour; + wxColour m_tab_highlight_top_gradient_colour; + wxColour m_tab_highlight_colour; + wxColour m_tab_highlight_gradient_colour; wxColour m_panel_label_colour; wxColour m_panel_minimised_label_colour; wxColour m_panel_hover_label_colour; diff --git a/interface/wx/ribbon/art.h b/interface/wx/ribbon/art.h index 40a4768297..febae28a1d 100644 --- a/interface/wx/ribbon/art.h +++ b/interface/wx/ribbon/art.h @@ -118,6 +118,10 @@ enum wxRibbonArtSetting wxRIBBON_ART_TOOL_ACTIVE_BACKGROUND_TOP_GRADIENT_COLOUR, wxRIBBON_ART_TOOL_ACTIVE_BACKGROUND_COLOUR, wxRIBBON_ART_TOOL_ACTIVE_BACKGROUND_GRADIENT_COLOUR, + wxRIBBON_ART_BUTTON_BAR_LABEL_HIGHLIGHT_COLOUR, //< @since 3.1.0 + wxRIBBON_ART_BUTTON_BAR_LABEL_HIGHLIGHT_GRADIENT_COLOUR, //< @since 3.1.0 + wxRIBBON_ART_BUTTON_BAR_LABEL_HIGHLIGHT_TOP_COLOUR, //< @since 3.1.0 + wxRIBBON_ART_BUTTON_BAR_LABEL_HIGHLIGHT_GRADIENT_TOP_COLOUR, //< @since 3.1.0 }; /** diff --git a/src/ribbon/art_aui.cpp b/src/ribbon/art_aui.cpp index 331fe03991..7252573fbe 100644 --- a/src/ribbon/art_aui.cpp +++ b/src/ribbon/art_aui.cpp @@ -87,6 +87,11 @@ wxRibbonArtProvider* wxRibbonAUIArtProvider::Clone() const copy->m_gallery_button_hover_background_brush = m_gallery_button_hover_background_brush; copy->m_gallery_button_disabled_background_brush = m_gallery_button_disabled_background_brush; + copy->m_tab_highlight_top_colour = m_tab_highlight_top_colour; + copy->m_tab_highlight_top_gradient_colour = m_tab_highlight_top_gradient_colour; + copy->m_tab_highlight_colour = m_tab_highlight_colour; + copy->m_tab_highlight_gradient_colour = m_tab_highlight_gradient_colour; + copy->m_toolbar_hover_borden_pen = m_toolbar_hover_borden_pen; copy->m_tool_hover_background_brush = m_tool_hover_background_brush; copy->m_tool_active_background_brush = m_tool_active_background_brush; @@ -141,6 +146,14 @@ wxColour wxRibbonAUIArtProvider::GetColour(int id) const case wxRIBBON_ART_GALLERY_BUTTON_DISABLED_BACKGROUND_COLOUR: case wxRIBBON_ART_GALLERY_BUTTON_DISABLED_BACKGROUND_GRADIENT_COLOUR: return m_gallery_button_disabled_background_brush.GetColour(); + case wxRIBBON_ART_BUTTON_BAR_LABEL_HIGHLIGHT_TOP_COLOUR: + return m_tab_highlight_top_colour; + case wxRIBBON_ART_BUTTON_BAR_LABEL_HIGHLIGHT_GRADIENT_TOP_COLOUR: + return m_tab_highlight_top_gradient_colour; + case wxRIBBON_ART_BUTTON_BAR_LABEL_HIGHLIGHT_COLOUR: + return m_tab_highlight_colour; + case wxRIBBON_ART_BUTTON_BAR_LABEL_HIGHLIGHT_GRADIENT_COLOUR: + return m_tab_highlight_gradient_colour; default: return wxRibbonMSWArtProvider::GetColour(id); } @@ -190,6 +203,18 @@ void wxRibbonAUIArtProvider::SetColour(int id, const wxColor& colour) case wxRIBBON_ART_GALLERY_BUTTON_DISABLED_BACKGROUND_GRADIENT_COLOUR: m_gallery_button_disabled_background_brush.SetColour(colour); break; + case wxRIBBON_ART_BUTTON_BAR_LABEL_HIGHLIGHT_TOP_COLOUR: + m_tab_highlight_top_colour = colour; + break; + case wxRIBBON_ART_BUTTON_BAR_LABEL_HIGHLIGHT_GRADIENT_TOP_COLOUR: + m_tab_highlight_top_gradient_colour = colour; + break; + case wxRIBBON_ART_BUTTON_BAR_LABEL_HIGHLIGHT_COLOUR: + m_tab_highlight_colour = colour; + break; + case wxRIBBON_ART_BUTTON_BAR_LABEL_HIGHLIGHT_GRADIENT_COLOUR: + m_tab_highlight_gradient_colour = colour; + break; default: wxRibbonMSWArtProvider::SetColour(id, colour); break; @@ -264,6 +289,21 @@ void wxRibbonAUIArtProvider::SetColourScheme( m_tool_hover_background_brush = m_button_bar_hover_background_brush; m_tool_active_background_brush = m_button_bar_active_background_brush; + //For highlight pages + wxColour top_colour1((m_tab_active_background_colour.Red() + m_tab_hover_background_top_colour.Red())/2, + (m_tab_active_background_colour.Green() + m_tab_hover_background_top_colour.Green())/2, + (m_tab_active_background_colour.Blue() + m_tab_hover_background_top_colour.Blue())/2); + + wxColour bottom_colour1((m_tab_active_background_gradient_colour.Red() + m_tab_hover_background_top_gradient_colour.Red())/2, + (m_tab_active_background_gradient_colour.Green() + m_tab_hover_background_top_gradient_colour.Green())/2, + (m_tab_active_background_gradient_colour.Blue() + m_tab_hover_background_top_gradient_colour.Blue())/2); + + m_tab_highlight_top_colour = top_colour1; + m_tab_highlight_top_gradient_colour = bottom_colour1; + + m_tab_highlight_colour = top_colour1; + m_tab_highlight_gradient_colour = bottom_colour1; + #undef LikeSecondary #undef LikePrimary } @@ -345,16 +385,7 @@ void wxRibbonAUIArtProvider::DrawTab(wxDC& dc, grad_rect.y - tab.rect.y - 3); if(tab.highlight) { - wxColour top_colour((m_tab_active_background_colour.Red() + m_tab_hover_background_top_colour.Red())/2, - (m_tab_active_background_colour.Green() + m_tab_hover_background_top_colour.Green())/2, - (m_tab_active_background_colour.Blue() + m_tab_hover_background_top_colour.Blue())/2); - - wxColour bottom_colour((m_tab_active_background_gradient_colour.Red() + m_tab_hover_background_top_gradient_colour.Red())/2, - (m_tab_active_background_gradient_colour.Green() + m_tab_hover_background_top_gradient_colour.Green())/2, - (m_tab_active_background_gradient_colour.Blue() + m_tab_hover_background_top_gradient_colour.Blue())/2); - - dc.GradientFillLinear(grad_rect, top_colour, - bottom_colour, wxSOUTH); + dc.GradientFillLinear(grad_rect, m_tab_highlight_top_colour, m_tab_highlight_top_gradient_colour, wxSOUTH); } else { diff --git a/src/ribbon/art_msw.cpp b/src/ribbon/art_msw.cpp index 2a25092a3e..97101ce11c 100644 --- a/src/ribbon/art_msw.cpp +++ b/src/ribbon/art_msw.cpp @@ -462,6 +462,29 @@ void wxRibbonMSWArtProvider::SetColourScheme( m_tool_active_background_colour = LikeSecondary(-7.9, 0.16, -0.20); m_tool_active_background_gradient_colour = LikeSecondary(-6.6, 0.16, -0.10); + //For highlight pages we show a colour between the active page and for a hovered page: + wxColour top_colour1((m_tab_active_background_colour.Red() + m_tab_hover_background_top_colour.Red())/2, + (m_tab_active_background_colour.Green() + m_tab_hover_background_top_colour.Green())/2, + (m_tab_active_background_colour.Blue() + m_tab_hover_background_top_colour.Blue())/2); + + wxColour bottom_colour1((m_tab_active_background_gradient_colour.Red() + m_tab_hover_background_top_gradient_colour.Red())/2, + (m_tab_active_background_gradient_colour.Green() + m_tab_hover_background_top_gradient_colour.Green())/2, + (m_tab_active_background_gradient_colour.Blue() + m_tab_hover_background_top_gradient_colour.Blue())/2); + + m_tab_highlight_top_colour = top_colour1; + m_tab_highlight_top_gradient_colour = bottom_colour1; + + wxColour top_colour2((m_tab_active_background_colour.Red() + m_tab_hover_background_colour.Red())/2, + (m_tab_active_background_colour.Green() + m_tab_hover_background_colour.Green())/2, + (m_tab_active_background_colour.Blue() + m_tab_hover_background_colour.Blue())/2); + + wxColour bottom_colour2((m_tab_active_background_gradient_colour.Red() + m_tab_hover_background_gradient_colour.Red())/2, + (m_tab_active_background_gradient_colour.Green() + m_tab_hover_background_gradient_colour.Green())/2, + (m_tab_active_background_gradient_colour.Blue() + m_tab_hover_background_gradient_colour.Blue())/2); + + m_tab_highlight_colour = top_colour2; + m_tab_highlight_gradient_colour = bottom_colour2; + #undef LikePrimary #undef LikeSecondary @@ -551,6 +574,11 @@ void wxRibbonMSWArtProvider::CloneTo(wxRibbonMSWArtProvider* copy) const copy->m_gallery_button_active_face_colour = m_gallery_button_active_face_colour; copy->m_gallery_button_disabled_face_colour = m_gallery_button_disabled_face_colour; + copy->m_tab_highlight_top_colour = m_tab_highlight_top_colour; + copy->m_tab_highlight_top_gradient_colour = m_tab_highlight_top_gradient_colour; + copy->m_tab_highlight_colour = m_tab_highlight_colour; + copy->m_tab_highlight_gradient_colour = m_tab_highlight_gradient_colour; + copy->m_tab_ctrl_background_brush = m_tab_ctrl_background_brush; copy->m_panel_label_background_brush = m_panel_label_background_brush; copy->m_panel_hover_label_background_brush = m_panel_hover_label_background_brush; @@ -901,6 +929,14 @@ wxColour wxRibbonMSWArtProvider::GetColour(int id) const return m_page_toggle_face_colour; case wxRIBBON_ART_PAGE_TOGGLE_HOVER_FACE_COLOUR: return m_page_toggle_hover_face_colour; + case wxRIBBON_ART_BUTTON_BAR_LABEL_HIGHLIGHT_TOP_COLOUR: + return m_tab_highlight_top_colour; + case wxRIBBON_ART_BUTTON_BAR_LABEL_HIGHLIGHT_GRADIENT_TOP_COLOUR: + return m_tab_highlight_top_gradient_colour; + case wxRIBBON_ART_BUTTON_BAR_LABEL_HIGHLIGHT_COLOUR: + return m_tab_highlight_colour; + case wxRIBBON_ART_BUTTON_BAR_LABEL_HIGHLIGHT_GRADIENT_COLOUR: + return m_tab_highlight_gradient_colour; default: wxFAIL_MSG(wxT("Invalid Metric Ordinal")); break; @@ -1188,6 +1224,18 @@ void wxRibbonMSWArtProvider::SetColour(int id, const wxColor& 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); break; + case wxRIBBON_ART_BUTTON_BAR_LABEL_HIGHLIGHT_TOP_COLOUR: + m_tab_highlight_top_colour = colour; + break; + case wxRIBBON_ART_BUTTON_BAR_LABEL_HIGHLIGHT_GRADIENT_TOP_COLOUR: + m_tab_highlight_top_gradient_colour = colour; + break; + case wxRIBBON_ART_BUTTON_BAR_LABEL_HIGHLIGHT_COLOUR: + m_tab_highlight_colour = colour; + break; + case wxRIBBON_ART_BUTTON_BAR_LABEL_HIGHLIGHT_GRADIENT_COLOUR: + m_tab_highlight_gradient_colour = colour; + break; default: wxFAIL_MSG(wxT("Invalid Metric Ordinal")); break; @@ -1268,29 +1316,12 @@ void wxRibbonMSWArtProvider::DrawTab( int h = background.height; background.height /= 2; - //For highlight pages we show a colour between the active page and for a hovered page: - wxColour top_colour1((m_tab_active_background_colour.Red() + m_tab_hover_background_top_colour.Red())/2, - (m_tab_active_background_colour.Green() + m_tab_hover_background_top_colour.Green())/2, - (m_tab_active_background_colour.Blue() + m_tab_hover_background_top_colour.Blue())/2); - - wxColour bottom_colour1((m_tab_active_background_gradient_colour.Red() + m_tab_hover_background_top_gradient_colour.Red())/2, - (m_tab_active_background_gradient_colour.Green() + m_tab_hover_background_top_gradient_colour.Green())/2, - (m_tab_active_background_gradient_colour.Blue() + m_tab_hover_background_top_gradient_colour.Blue())/2); - - dc.GradientFillLinear(background, top_colour1, bottom_colour1, wxSOUTH); + dc.GradientFillLinear(background, m_tab_highlight_top_colour, m_tab_highlight_top_gradient_colour, wxSOUTH); background.y += background.height; background.height = h - background.height; - wxColour top_colour2((m_tab_active_background_colour.Red() + m_tab_hover_background_colour.Red())/2, - (m_tab_active_background_colour.Green() + m_tab_hover_background_colour.Green())/2, - (m_tab_active_background_colour.Blue() + m_tab_hover_background_colour.Blue())/2); - - wxColour bottom_colour2((m_tab_active_background_gradient_colour.Red() + m_tab_hover_background_gradient_colour.Red())/2, - (m_tab_active_background_gradient_colour.Green() + m_tab_hover_background_gradient_colour.Green())/2, - (m_tab_active_background_gradient_colour.Blue() + m_tab_hover_background_gradient_colour.Blue())/2); - - dc.GradientFillLinear(background, top_colour2, bottom_colour2, wxSOUTH); + dc.GradientFillLinear(background, m_tab_highlight_colour, m_tab_highlight_gradient_colour, wxSOUTH); } wxPoint border_points[6];