Ticket #14527: RibbonHighlighPage2.patch

File RibbonHighlighPage2.patch, 8.0 KB (added by wxBen, 8 years ago)

RibbonHighlighPage2.patch - Use this one only

  • wxWidgets/interface/wx/ribbon/bar.h

     
    278278    void HidePage(size_t page);
    279279
    280280    /**
     281        Indicates whether a tab has the highlight setting or not.
     282    */
     283    bool IsPageHighlighted(size_t page) const;
     284   
     285    /**
     286        Changes a tab to be highlighted.
     287       
     288        Highlighted tabs have a colour between that of the active tab
     289        and a tab over which the mouse is hovering. This can be used
     290        to make a tab more noticeable or obvious to the user.
     291    */
     292    void AddPageHighlight(size_t page, bool highlight = true);
     293   
     294    /**
     295        Changes a tab to not be highlighted.
     296    */
     297    void RemovePageHighlight(size_t page);
     298   
     299    /**
    281300        Shows or hides the panel area of the ribbon bar.
    282301
    283302        If the panel area is hidden, then only the tab of the ribbon bar will
  • wxWidgets/samples/ribbon/ribbondemo.cpp

     
    402402        bar->AddButton(ID_HIDE_PAGES, wxT("Hide Pages"), ribbon_xpm);
    403403        bar->AddButton(ID_SHOW_PAGES, wxT("Show Pages"), ribbon_xpm);
    404404    }
     405    new wxRibbonPage(m_ribbon, wxID_ANY, wxT("Highlight Page"), empty_xpm);
     406    m_ribbon->AddPageHighlight(m_ribbon->GetPageCount()-1);
    405407
    406408    m_ribbon->Realize();
    407409
  • wxWidgets/include/wx/ribbon/bar.h

     
    8080    int minimum_width;
    8181    bool active;
    8282    bool hovered;
     83    bool highlight;
    8384    bool shown;
    8485};
    8586
     
    125126    void ShowPage(size_t page, bool show = true);
    126127    void HidePage(size_t page) { ShowPage(page, false); }
    127128
     129    bool IsPageHighlighted(size_t page) const;
     130    void AddPageHighlight(size_t page, bool highlight = true);
     131    void RemovePageHighlight(size_t page) { AddPageHighlight(page, false); }
     132   
    128133    void ShowPanels(bool show = true);
    129134    void HidePanels() { ShowPanels(false); }
    130135    bool ArePanelsShown() const { return m_arePanelsShown; }
  • wxWidgets/src/ribbon/art_aui.cpp

     
    326326
    327327    dc.SetFont(m_tab_label_font);
    328328    dc.SetPen(*wxTRANSPARENT_PEN);
    329     if(tab.active || tab.hovered)
     329    if(tab.active || tab.hovered || tab.highlight)
    330330    {
    331331        if(tab.active)
    332332        {
     
    343343        dc.SetBrush(m_tab_active_top_background_brush);
    344344        dc.DrawRectangle(tab.rect.x, tab.rect.y + 3, tab.rect.width - 1,
    345345            grad_rect.y - tab.rect.y - 3);
    346         dc.GradientFillLinear(grad_rect, m_tab_active_background_colour,
    347             m_tab_active_background_gradient_colour, wxSOUTH);
     346        if(tab.highlight)
     347        {
     348            wxColour top_colour((m_tab_active_background_colour.Red()   + m_tab_hover_background_top_colour.Red())/2,
     349                                (m_tab_active_background_colour.Green() + m_tab_hover_background_top_colour.Green())/2,
     350                                (m_tab_active_background_colour.Blue()  + m_tab_hover_background_top_colour.Blue())/2);
     351
     352            wxColour bottom_colour((m_tab_active_background_gradient_colour.Red()   + m_tab_hover_background_top_gradient_colour.Red())/2,
     353                                   (m_tab_active_background_gradient_colour.Green() + m_tab_hover_background_top_gradient_colour.Green())/2,
     354                                   (m_tab_active_background_gradient_colour.Blue()  + m_tab_hover_background_top_gradient_colour.Blue())/2);
     355
     356            dc.GradientFillLinear(grad_rect, top_colour,
     357                bottom_colour, wxSOUTH);
     358        }
     359        else
     360        {
     361            dc.GradientFillLinear(grad_rect, m_tab_active_background_colour,
     362                m_tab_active_background_gradient_colour, wxSOUTH);
     363        }
    348364    }
    349365    else
    350366    {
  • wxWidgets/src/ribbon/bar.cpp

     
    6666    info.page = page;
    6767    info.active = false;
    6868    info.hovered = false;
     69    info.highlight = false;
    6970    info.shown = true;
    7071    // info.rect not set (intentional)
    7172
     
    298299    m_pages.Item(page).shown = show;
    299300}
    300301
     302bool wxRibbonBar::IsPageHighlighted(size_t page) const
     303{
     304    if (page >= m_pages.GetCount())
     305        return false;
     306    return m_pages.Item(page).highlight;
     307}
     308
     309void wxRibbonBar::AddPageHighlight(size_t page, bool highlight)
     310{
     311    if(page >= m_pages.GetCount())
     312        return;
     313    m_pages.Item(page).highlight = highlight;
     314}
     315
    301316void wxRibbonBar::DeletePage(size_t n)
    302317{
    303318    if(n < m_pages.GetCount())
  • wxWidgets/src/ribbon/art_msw.cpp

     
    10091009    if(tab.rect.height <= 2)
    10101010        return;
    10111011
    1012     if(tab.active || tab.hovered)
     1012    if(tab.active || tab.hovered || tab.highlight)
    10131013    {
    10141014        if(tab.active)
    10151015        {
     
    10441044            dc.GradientFillLinear(background, m_tab_hover_background_colour,
    10451045                m_tab_hover_background_gradient_colour, wxSOUTH);
    10461046        }
     1047        else if(tab.highlight)
     1048        {
     1049            wxRect background(tab.rect);
    10471050
     1051            background.x += 2;
     1052            background.y += 2;
     1053            background.width -= 4;
     1054            background.height -= 3;
     1055            int h = background.height;
     1056            background.height /= 2;
     1057
     1058            //For highlight pages we show a colour between the active page and for a hovered page:
     1059            wxColour top_colour1((m_tab_active_background_colour.Red()   + m_tab_hover_background_top_colour.Red())/2,
     1060                                 (m_tab_active_background_colour.Green() + m_tab_hover_background_top_colour.Green())/2,
     1061                                 (m_tab_active_background_colour.Blue()  + m_tab_hover_background_top_colour.Blue())/2);
     1062
     1063            wxColour bottom_colour1((m_tab_active_background_gradient_colour.Red()   + m_tab_hover_background_top_gradient_colour.Red())/2,
     1064                                    (m_tab_active_background_gradient_colour.Green() + m_tab_hover_background_top_gradient_colour.Green())/2,
     1065                                    (m_tab_active_background_gradient_colour.Blue()  + m_tab_hover_background_top_gradient_colour.Blue())/2);
     1066
     1067            dc.GradientFillLinear(background, top_colour1, bottom_colour1, wxSOUTH);
     1068
     1069            background.y += background.height;
     1070            background.height = h - background.height;
     1071
     1072            wxColour top_colour2((m_tab_active_background_colour.Red()   + m_tab_hover_background_colour.Red())/2,
     1073                                 (m_tab_active_background_colour.Green() + m_tab_hover_background_colour.Green())/2,
     1074                                 (m_tab_active_background_colour.Blue()  + m_tab_hover_background_colour.Blue())/2);
     1075
     1076            wxColour bottom_colour2((m_tab_active_background_gradient_colour.Red()   + m_tab_hover_background_gradient_colour.Red())/2,
     1077                                    (m_tab_active_background_gradient_colour.Green() + m_tab_hover_background_gradient_colour.Green())/2,
     1078                                    (m_tab_active_background_gradient_colour.Blue()  + m_tab_hover_background_gradient_colour.Blue())/2);
     1079
     1080            dc.GradientFillLinear(background, top_colour2, bottom_colour2, wxSOUTH);
     1081        }
     1082
    10481083        wxPoint border_points[6];
    10491084        border_points[0] = wxPoint(1, tab.rect.height - 2);
    10501085        border_points[1] = wxPoint(1, 3);