}
void wxRibbonMSWArtProvider::DrawPartialPageBackground(wxDC& dc,
- wxWindow* WXUNUSED(wnd), const wxRect& rect, wxRibbonPage* page,
+ wxWindow* wnd, const wxRect& rect, wxRibbonPage* page,
wxPoint offset, bool hovered)
{
- wxRect background(page->GetSize());
- page->AdjustRectToIncludeScrollButtons(&background);
- background.height -= 2;
+ wxRect background;
+ // Expanded panels need a background - the expanded panel at
+ // 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).
+
+ if(wnd->GetSizer() && wnd->GetParent() != page)
+ {
+ background = wnd->GetParent()->GetSize();
+ offset = wxPoint(0,0);
+ }
+ else
+ {
+ background = page->GetSize();
+ page->AdjustRectToIncludeScrollButtons(&background);
+ background.height -= 2;
+ }
// Page background isn't dependant upon the width of the page
// (at least not the part of it intended to be painted by this
// function). Set to wider than the page itself for when externally
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))
{
switch(kind)
{
case wxRIBBON_BUTTON_NORMAL:
+ case wxRIBBON_BUTTON_TOGGLE:
*normal_region = wxRect(*button_size);
*dropdown_region = wxRect(0, 0, 0, 0);
break;
dropdown_region->SetX(dropdown_region->GetX() + text_size);
// no break
case wxRIBBON_BUTTON_NORMAL:
+ case wxRIBBON_BUTTON_TOGGLE:
normal_region->SetWidth(normal_region->GetWidth() + text_size);
break;
}
wxCoord best_width;
dc.GetTextExtent(label, &best_width, &label_height);
int last_line_extra_width = 0;
- if(kind != wxRIBBON_BUTTON_NORMAL)
+ if(kind != wxRIBBON_BUTTON_NORMAL && kind != wxRIBBON_BUTTON_TOGGLE)
{
last_line_extra_width += 8;
}
dropdown_region->height = icon_size.GetHeight() - normal_region->height;
break;
case wxRIBBON_BUTTON_NORMAL:
+ case wxRIBBON_BUTTON_TOGGLE:
*normal_region = wxRect(icon_size);
break;
}