X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d1bf0be0bcb74c67c35556138b891fd907b1d59f..5c14ec264057d86fe60b2bacc09965492652cc0f:/src/ribbon/art_msw.cpp diff --git a/src/ribbon/art_msw.cpp b/src/ribbon/art_msw.cpp index 312148f1c6..b7509113f5 100644 --- a/src/ribbon/art_msw.cpp +++ b/src/ribbon/art_msw.cpp @@ -82,6 +82,18 @@ static const char* const gallery_extension_xpm[] = { " xxx ", " x "}; +static const char* const panel_extension_xpm[] = { + "7 7 2 1", + " c None", + "x c #FF00FF", + "xxxxxx ", + "x ", + "x ", + "x x x", + "x xxx", + "x xxx", + " xxxx"}; + wxRibbonMSWArtProvider::wxRibbonMSWArtProvider(bool set_colour_scheme) { m_flags = 0; @@ -212,6 +224,10 @@ void wxRibbonMSWArtProvider::SetColourScheme( m_panel_label_colour = LikePrimary(2.8, -0.14, -0.35); m_panel_hover_label_colour = m_panel_label_colour; m_panel_minimised_label_colour = m_tab_label_colour; + m_panel_hover_button_background_brush = LikeSecondary(-0.9, 0.16, -0.07); + m_panel_hover_button_border_pen = LikeSecondary(-3.9, -0.16, -0.14); + SetColour(wxRIBBON_ART_PANEL_BUTTON_FACE_COLOUR, LikePrimary(1.4, -0.21, -0.23)); + SetColour(wxRIBBON_ART_PANEL_BUTTON_HOVER_FACE_COLOUR, LikePrimary(1.5, -0.24, -0.29)); m_gallery_button_disabled_background_colour = LikePrimary(-2.8, -0.46, 0.09); m_gallery_button_disabled_background_top_brush = LikePrimary(-2.8, -0.36, 0.15); @@ -278,12 +294,17 @@ wxRibbonArtProvider* wxRibbonMSWArtProvider::Clone() const void wxRibbonMSWArtProvider::CloneTo(wxRibbonMSWArtProvider* copy) const { - for(int i = 0; i < 4; ++i) + 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]; } + for(i = 0; i < 2; ++i) + { + copy->m_panel_extension_bitmap[i] = m_panel_extension_bitmap[i]; + } copy->m_toolbar_drop_bitmap = m_toolbar_drop_bitmap; copy->m_primary_scheme_colour = m_primary_scheme_colour; @@ -303,6 +324,8 @@ void wxRibbonMSWArtProvider::CloneTo(wxRibbonMSWArtProvider* copy) const copy->m_panel_label_colour = m_panel_label_colour; copy->m_panel_hover_label_colour = m_panel_hover_label_colour; copy->m_panel_minimised_label_colour = m_panel_minimised_label_colour; + copy->m_panel_button_face_colour = m_panel_button_face_colour; + copy->m_panel_button_hover_face_colour = m_panel_button_hover_face_colour; copy->m_panel_active_background_colour = m_panel_active_background_colour; copy->m_panel_active_background_gradient_colour = m_panel_active_background_gradient_colour; copy->m_panel_active_background_top_colour = m_panel_active_background_top_colour; @@ -339,6 +362,7 @@ void wxRibbonMSWArtProvider::CloneTo(wxRibbonMSWArtProvider* copy) const 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; + copy->m_panel_hover_button_background_brush = m_panel_hover_button_background_brush; copy->m_gallery_hover_background_brush = m_gallery_hover_background_brush; copy->m_gallery_button_background_top_brush = m_gallery_button_background_top_brush; copy->m_gallery_button_hover_background_top_brush = m_gallery_button_hover_background_top_brush; @@ -354,6 +378,7 @@ void wxRibbonMSWArtProvider::CloneTo(wxRibbonMSWArtProvider* copy) const copy->m_panel_border_gradient_pen = m_panel_border_gradient_pen; copy->m_panel_minimised_border_pen = m_panel_minimised_border_pen; copy->m_panel_minimised_border_gradient_pen = m_panel_minimised_border_gradient_pen; + copy->m_panel_hover_button_border_pen = m_panel_hover_button_border_pen; copy->m_tab_border_pen = m_tab_border_pen; copy->m_gallery_border_pen = m_gallery_border_pen; copy->m_button_bar_hover_border_pen = m_button_bar_hover_border_pen; @@ -407,6 +432,8 @@ void wxRibbonMSWArtProvider::SetFlags(long flags) Reload(wxRIBBON_ART_GALLERY_BUTTON_HOVER_FACE_COLOUR); Reload(wxRIBBON_ART_GALLERY_BUTTON_ACTIVE_FACE_COLOUR); Reload(wxRIBBON_ART_GALLERY_BUTTON_DISABLED_FACE_COLOUR); + Reload(wxRIBBON_ART_PANEL_BUTTON_FACE_COLOUR); + Reload(wxRIBBON_ART_PANEL_BUTTON_HOVER_FACE_COLOUR); #undef Reload } @@ -647,6 +674,10 @@ wxColour wxRibbonMSWArtProvider::GetColour(int id) const return m_panel_active_background_colour; case wxRIBBON_ART_PANEL_ACTIVE_BACKGROUND_GRADIENT_COLOUR: return m_panel_active_background_gradient_colour; + case wxRIBBON_ART_PANEL_BUTTON_FACE_COLOUR: + return m_panel_button_face_colour; + case wxRIBBON_ART_PANEL_BUTTON_HOVER_FACE_COLOUR: + return m_panel_button_hover_face_colour; case wxRIBBON_ART_PAGE_BORDER_COLOUR: return m_page_border_pen.GetColour(); case wxRIBBON_ART_PAGE_BACKGROUND_TOP_COLOUR: @@ -897,6 +928,14 @@ void wxRibbonMSWArtProvider::SetColour(int id, const wxColor& colour) case wxRIBBON_ART_PANEL_ACTIVE_BACKGROUND_GRADIENT_COLOUR: m_panel_active_background_gradient_colour = 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); + 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); + break; case wxRIBBON_ART_PAGE_BORDER_COLOUR: m_page_border_pen.SetColour(colour); break; @@ -1149,10 +1188,10 @@ void wxRibbonMSWArtProvider::DrawPartialPageBackground(wxDC& dc, { wxRect background; // Expanded panels need a background - the expanded panel at - // best size may have a greater Y dimension higher than when + // best size may have a greater Y dimension higher than when // on the bar if it has a sizer. AUI art provider does not need this // because it paints the panel without reference to its parent's size. - // Expanded panels use a wxFrame as parent (not a wxRibbonPage). + // Expanded panels use a wxFrame as parent (not a wxRibbonPage). if(wnd->GetSizer() && wnd->GetParent() != page) { @@ -1464,6 +1503,7 @@ void wxRibbonMSWArtProvider::DrawPanelBackground( wxRect true_rect(rect); RemovePanelPadding(&true_rect); + bool has_ext_button = wnd->HasExtButton(); int label_height; { @@ -1491,6 +1531,11 @@ void wxRibbonMSWArtProvider::DrawPanelBackground( label_rect.SetY(true_rect.GetBottom() - label_rect.GetHeight()); label_height = label_rect.GetHeight(); + wxRect label_bg_rect = label_rect; + + if(has_ext_button) + label_rect.SetWidth(label_rect.GetWidth() - 13); + if(label_size.GetWidth() > label_rect.GetWidth()) { // Test if there is enough length for 3 letters and ... @@ -1519,7 +1564,7 @@ void wxRibbonMSWArtProvider::DrawPanelBackground( } } - dc.DrawRectangle(label_rect.GetX(), label_rect.GetY(), label_rect.GetWidth(), label_rect.GetHeight()); + dc.DrawRectangle(label_bg_rect); if(clip_label) { wxDCClipper clip(dc, label_rect); @@ -1533,6 +1578,19 @@ void wxRibbonMSWArtProvider::DrawPanelBackground( label_rect.y + (label_rect.GetHeight() - label_size.GetHeight()) / 2); } + + if(has_ext_button) + { + if(wnd->IsExtButtonHovered()) + { + 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); + } + else + dc.DrawBitmap(m_panel_extension_bitmap[0], label_rect.GetRight() + 3, label_rect.GetBottom() - 10, true); + } } if(wnd->IsHovered()) @@ -1548,6 +1606,15 @@ void wxRibbonMSWArtProvider::DrawPanelBackground( DrawPanelBorder(dc, true_rect, m_panel_border_pen, m_panel_border_gradient_pen); } +wxRect wxRibbonMSWArtProvider::GetPanelExtButtonArea(wxDC& WXUNUSED(dc), + const wxRibbonPanel* WXUNUSED(wnd), + wxRect rect) +{ + RemovePanelPadding(&rect); + rect = wxRect(rect.GetRight()-13, rect.GetBottom()-13, 13, 13); + return rect; +} + void wxRibbonMSWArtProvider::DrawGalleryBackground( wxDC& dc, wxRibbonGallery* wnd,