wxSize wxRibbonAUIArtProvider::GetPanelSize( wxDC& dc, const wxRibbonPanel* wnd, wxSize client_size, wxPoint* client_offset) { dc.SetFont(m_panel_label_font); wxSize label_size = dc.GetTextExtent(wnd->GetLabel()); int label_height = label_size.GetHeight() + 5; if(m_flags & wxRIBBON_BAR_FLOW_VERTICAL) { client_size.IncBy(4, label_height + 6); if(client_offset) *client_offset = wxPoint(2, label_height + 3); } else { client_size.IncBy(6, label_height + 4); if(client_offset) *client_offset = wxPoint(3, label_height + 2); } return client_size; }
void wxAnyButton::AdjustForBitmapSize(wxSize &size) const { wxCHECK_RET( m_imageData, wxT("shouldn't be called if no image") ); // account for the bitmap size, including the user-specified margins const wxSize sizeBmp = m_imageData->GetBitmap(State_Normal).GetSize() + 2*m_imageData->GetBitmapMargins(); const wxDirection dirBmp = m_imageData->GetBitmapPosition(); if ( dirBmp == wxLEFT || dirBmp == wxRIGHT ) { size.x += sizeBmp.x; if ( sizeBmp.y > size.y ) size.y = sizeBmp.y; } else // bitmap on top/below the text { size.y += sizeBmp.y; if ( sizeBmp.x > size.x ) size.x = sizeBmp.x; } // and also for the margins we always add internally (unless we have no // border at all in which case the button has exactly the same size as // bitmap and so no margins should be used) if ( !HasFlag(wxBORDER_NONE) ) { int marginH = 0, marginV = 0; #if wxUSE_UXTHEME if ( wxUxThemeEngine::GetIfActive() ) { wxUxThemeHandle theme(const_cast<wxAnyButton *>(this), L"BUTTON"); MARGINS margins; wxUxThemeEngine::Get()->GetThemeMargins(theme, NULL, BP_PUSHBUTTON, PBS_NORMAL, TMT_CONTENTMARGINS, NULL, &margins); // XP doesn't draw themed buttons correctly when the client // area is smaller than 8x8 - enforce this minimum size for // small bitmaps size.IncTo(wxSize(8, 8)); marginH = margins.cxLeftWidth + margins.cxRightWidth + 2*XP_BUTTON_EXTRA_MARGIN; marginV = margins.cyTopHeight + margins.cyBottomHeight + 2*XP_BUTTON_EXTRA_MARGIN; } else #endif // wxUSE_UXTHEME { marginH = marginV = OD_BUTTON_MARGIN; } size.IncBy(marginH, marginV); } }