X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/86badbc455cc2a87d66c90b80643b93ec661398c..07aaf32633ecf18ec3edfbb41793a112914792d0:/src/ribbon/art_aui.cpp diff --git a/src/ribbon/art_aui.cpp b/src/ribbon/art_aui.cpp index 6a5df2529d..b284e24786 100644 --- a/src/ribbon/art_aui.cpp +++ b/src/ribbon/art_aui.cpp @@ -15,12 +15,9 @@ #pragma hdrstop #endif -#include "wx/dc.h" -#include "wx/settings.h" -#include "wx/ribbon/art.h" - #if wxUSE_RIBBON +#include "wx/ribbon/art.h" #include "wx/ribbon/art_internal.h" #include "wx/ribbon/bar.h" #include "wx/ribbon/buttonbar.h" @@ -28,14 +25,14 @@ #include "wx/ribbon/toolbar.h" #ifndef WX_PRECOMP +#include "wx/dc.h" +#include "wx/settings.h" #endif #ifdef __WXMSW__ #include "wx/msw/private.h" #elif defined(__WXMAC__) #include "wx/osx/private.h" -// only for kThemeBrushToolbarBackground -#include #endif wxRibbonAUIArtProvider::wxRibbonAUIArtProvider() @@ -247,6 +244,7 @@ void wxRibbonAUIArtProvider::SetColourScheme( m_button_bar_hover_background_brush = LikeSecondary(1.7); m_button_bar_active_background_brush = LikeSecondary(1.4); m_button_bar_label_colour = m_tab_label_colour; + m_button_bar_label_disabled_colour = m_tab_label_colour; m_gallery_border_pen = m_tab_border_pen; m_gallery_item_border_pen = m_button_bar_hover_border_pen; m_gallery_hover_background_brush = LikePrimary(1.2); @@ -329,7 +327,7 @@ void wxRibbonAUIArtProvider::DrawTab(wxDC& dc, dc.SetFont(m_tab_label_font); dc.SetPen(*wxTRANSPARENT_PEN); - if(tab.active || tab.hovered) + if(tab.active || tab.hovered || tab.highlight) { if(tab.active) { @@ -346,8 +344,24 @@ void wxRibbonAUIArtProvider::DrawTab(wxDC& dc, dc.SetBrush(m_tab_active_top_background_brush); dc.DrawRectangle(tab.rect.x, tab.rect.y + 3, tab.rect.width - 1, grad_rect.y - tab.rect.y - 3); - dc.GradientFillLinear(grad_rect, m_tab_active_background_colour, - m_tab_active_background_gradient_colour, wxSOUTH); + 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); + } + else + { + dc.GradientFillLinear(grad_rect, m_tab_active_background_colour, + m_tab_active_background_gradient_colour, wxSOUTH); + } } else { @@ -390,9 +404,12 @@ void wxRibbonAUIArtProvider::DrawTab(wxDC& dc, icon = tab.page->GetIcon(); if((m_flags & wxRIBBON_BAR_SHOW_PAGE_LABELS) == 0) { + if(icon.IsOk()) + { int x = tab.rect.x + (tab.rect.width - icon.GetWidth()) / 2; dc.DrawBitmap(icon, x, tab.rect.y + 1 + (tab.rect.height - 1 - icon.GetHeight()) / 2, true); + } } } if(m_flags & wxRIBBON_BAR_SHOW_PAGE_LABELS) @@ -637,9 +654,32 @@ wxSize wxRibbonAUIArtProvider::GetPanelClientSize( if(client_offset) *client_offset = wxPoint(3, label_height + 2); } + if (size.x < 0) size.x = 0; + if (size.y < 0) size.y = 0; return size; } +wxRect wxRibbonAUIArtProvider::GetPanelExtButtonArea(wxDC& dc, + const wxRibbonPanel* wnd, + wxRect rect) +{ + wxRect true_rect(rect); + RemovePanelPadding(&true_rect); + + true_rect.x++; + true_rect.width -= 2; + true_rect.y++; + + dc.SetFont(m_panel_label_font); + wxSize label_size = dc.GetTextExtent(wnd->GetLabel()); + int label_height = label_size.GetHeight() + 5; + wxRect label_rect(true_rect); + label_rect.height = label_height - 1; + + rect = wxRect(label_rect.GetRight()-13, label_rect.GetBottom()-13, 13, 13); + return rect; +} + void wxRibbonAUIArtProvider::DrawPanelBackground( wxDC& dc, wxRibbonPanel* wnd, @@ -703,6 +743,19 @@ void wxRibbonAUIArtProvider::DrawPanelBackground( #endif dc.GradientFillLinear(gradient_rect, colour, gradient, wxSOUTH); } + + if(wnd->HasExtButton()) + { + if(wnd->IsExtButtonHovered()) + { + 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); + } + else + dc.DrawBitmap(m_panel_extension_bitmap[0], label_rect.GetRight() - 10, label_rect.GetBottom() - 10, true); + } } void wxRibbonAUIArtProvider::DrawMinimisedPanel( @@ -862,7 +915,7 @@ void wxRibbonAUIArtProvider::DrawGalleryBackground( dc.SetPen(m_gallery_border_pen); dc.SetBrush(*wxTRANSPARENT_BRUSH); dc.DrawRectangle(rect.x, rect.y, rect.width, rect.height); - + DrawGalleryBackgroundCommon(dc, wnd, rect); } @@ -957,6 +1010,13 @@ void wxRibbonAUIArtProvider::DrawButtonBarButton( const wxBitmap& bitmap_large, const wxBitmap& bitmap_small) { + if(kind == wxRIBBON_BUTTON_TOGGLE) + { + kind = wxRIBBON_BUTTON_NORMAL; + if(state & wxRIBBON_BUTTONBAR_BUTTON_TOGGLED) + state ^= wxRIBBON_BUTTONBAR_BUTTON_ACTIVE_MASK; + } + if(state & (wxRIBBON_BUTTONBAR_BUTTON_HOVER_MASK | wxRIBBON_BUTTONBAR_BUTTON_ACTIVE_MASK)) { @@ -1023,7 +1083,9 @@ void wxRibbonAUIArtProvider::DrawButtonBarButton( } dc.SetFont(m_button_bar_label_font); - dc.SetTextForeground(m_button_bar_label_colour); + dc.SetTextForeground(state & wxRIBBON_BUTTONBAR_BUTTON_DISABLED + ? m_button_bar_label_disabled_colour + : m_button_bar_label_colour); DrawButtonBarButtonForeground(dc, rect, kind, state, label, bitmap_large, bitmap_small); } @@ -1058,6 +1120,12 @@ void wxRibbonAUIArtProvider::DrawTool( wxRibbonButtonKind kind, long state) { + if(kind == wxRIBBON_BUTTON_TOGGLE) + { + if(state & wxRIBBON_TOOLBAR_TOOL_TOGGLED) + state ^= wxRIBBON_TOOLBAR_TOOL_ACTIVE_MASK; + } + wxRect bg_rect(rect); bg_rect.Deflate(1); if((state & wxRIBBON_TOOLBAR_TOOL_LAST) == 0) @@ -1115,12 +1183,12 @@ void wxRibbonAUIArtProvider::DrawTool( // Foreground int avail_width = bg_rect.GetWidth(); - if(kind != wxRIBBON_BUTTON_NORMAL) + if(kind & wxRIBBON_BUTTON_DROPDOWN) { avail_width -= 8; if(is_split_hybrid) { - dc.DrawLine(rect.x + avail_width + 1, rect.y, + 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,