Allow customizing wxRibbon highlight colours

Add wxRIBBON_ART_BUTTON_BAR_LABEL_XXX settings.

Closes #16784.
This commit is contained in:
wxBen
2016-02-08 01:10:47 +01:00
committed by Vadim Zeitlin
parent b1cb64f47f
commit 526a627fa8
5 changed files with 105 additions and 30 deletions

View File

@@ -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:

View File

@@ -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;

View File

@@ -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
};
/**

View File

@@ -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
{

View File

@@ -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];