X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e413198572959f013fc2537a3c8cc184c9ac820d..33f4afdbc08a2a8b8438420aa9d16aadee0bacc2:/src/generic/renderg.cpp diff --git a/src/generic/renderg.cpp b/src/generic/renderg.cpp index 906a9b342a..e55d87bb71 100644 --- a/src/generic/renderg.cpp +++ b/src/generic/renderg.cpp @@ -118,7 +118,7 @@ public: virtual void DrawTextCtrl(wxWindow* win, wxDC& dc, const wxRect& rect, int flags=0); - virtual void DrawRadioButton(wxWindow* win, wxDC& dc, const wxRect& rect, int flags=0); + virtual void DrawOptionButton(wxWindow* win, wxDC& dc, const wxRect& rect, int flags=0); virtual wxSplitterRenderParams GetSplitterParams(const wxWindow *win); @@ -324,13 +324,42 @@ wxRendererGeneric::DrawHeaderButtonContents(wxWindow *win, const int margin = 5; // number of pixels to reserve on either side of the label int bmpWidth = 0; - int txtEnd = 0; if ( params && params->m_labelBitmap.Ok() ) bmpWidth = params->m_labelBitmap.GetWidth() + 2; labelWidth += bmpWidth + 2*margin; + // draw the bitmap if there is one + if ( params && params->m_labelBitmap.Ok() ) + { + int w, h, x, y; + w = params->m_labelBitmap.GetWidth(); + h = params->m_labelBitmap.GetHeight(); + + x = margin + rect.x; + y = rect.y + wxMax(1, (rect.height - h) / 2); + + if (params->m_labelText.empty()) + { + // use the alignment flags + switch (params->m_labelAlignment) + { + default: + case wxALIGN_LEFT: + x = rect.x + margin; + break; + case wxALIGN_CENTER: + x = rect.x + wxMax(1, (rect.width - arrowSpace - w)/2); + break; + case wxALIGN_RIGHT: + x = rect.x + wxMax(1, rect.width - arrowSpace - margin - w); + break; + } + } + dc.DrawBitmap(params->m_labelBitmap, x, y, true); + } + // Draw a label if one is given if ( params && !params->m_labelText.empty() ) { @@ -349,6 +378,9 @@ wxRendererGeneric::DrawHeaderButtonContents(wxWindow *win, dc.GetTextExtent( label, &tw, &th, &td); labelWidth += tw; y = rect.y + wxMax(0, (rect.height - (th+td)) / 2); +#ifdef __WXGTK__ + y += 2; // No idea why. +#endif // truncate and add an ellipsis (...) if the text is too wide. int targetWidth = rect.width - arrowSpace - bmpWidth - 2*margin; @@ -378,42 +410,7 @@ wxRendererGeneric::DrawHeaderButtonContents(wxWindow *win, break; } - dc.DrawText(label, x, y); - txtEnd = x + tw + 2; - } - - // draw the bitmap if there is one - if ( params && params->m_labelBitmap.Ok() ) - { - int w, h, x, y; - w = params->m_labelBitmap.GetWidth(); - h = params->m_labelBitmap.GetHeight(); - - y = rect.y + wxMax(1, (rect.height - h) / 2); - - // if there is a text label, then put the bitmap at the end of the label - if ( txtEnd != 0 ) - { - x = txtEnd; - } - // otherwise use the alignment flags - else - { - switch (params->m_labelAlignment) - { - default: - case wxALIGN_LEFT: - x = rect.x + margin; - break; - case wxALIGN_CENTER: - x = rect.x + wxMax(1, (rect.width - arrowSpace - w)/2); - break; - case wxALIGN_RIGHT: - x = rect.x + wxMax(1, rect.width - arrowSpace - margin - w); - break; - } - } - dc.DrawBitmap(params->m_labelBitmap, x, y, true); + dc.DrawText(label, x + bmpWidth, y); } return labelWidth; } @@ -746,7 +743,7 @@ void wxRendererGeneric::DrawComboBox(wxWindow* WXUNUSED(win), wxDC& WXUNUSED(dc) // FIXME: Implement } -void wxRendererGeneric::DrawRadioButton(wxWindow* WXUNUSED(win), wxDC& WXUNUSED(dc), +void wxRendererGeneric::DrawOptionButton(wxWindow* WXUNUSED(win), wxDC& WXUNUSED(dc), const wxRect& WXUNUSED(rect), int WXUNUSED(flags)) { // FIXME: Implement