#endif
#ifndef WX_PRECOMP
+ #include "wx/settings.h"
+ #include "wx/brush.h"
+ #include "wx/dc.h"
+ #include "wx/statusbr.h"
+ #include "wx/toplevel.h"
#endif //WX_PRECOMP
#include "wx/univ/stdrend.h"
// constants
// ----------------------------------------------------------------------------
-static const int FRAME_BORDER_THICKNESS = 3;
-static const int RESIZEABLE_FRAME_BORDER_THICKNESS = 4;
static const int FRAME_TITLEBAR_HEIGHT = 18;
static const int FRAME_BUTTON_WIDTH = 16;
static const int FRAME_BUTTON_HEIGHT = 14;
+// the margin between listbox item text and its rectangle
+static const int ITEM_MARGIN = 1;
+
// ============================================================================
// wxStdRenderer implementation
// ============================================================================
int WXUNUSED(flags),
wxWindow *window)
{
- wxColour colBg = col.Ok() ? col
- : window ? m_scheme->GetBackground(window)
- : wxSCHEME_COLOUR(m_scheme, CONTROL);
+ wxColour colBg;
+
+ if (col.Ok())
+ {
+ colBg = col;
+ }
+ else if (window)
+ {
+ colBg = m_scheme->GetBackground(window);
+ }
+ else
+ {
+ colBg = wxSCHEME_COLOUR(m_scheme, CONTROL);
+ }
DrawSolidRect(dc, colBg, rect);
}
// text
// ----------------------------------------------------------------------------
-void wxStdRenderer::DrawFocusRect(wxDC& dc, const wxRect& rect)
+void
+wxStdRenderer::DrawFocusRect(wxDC& dc, const wxRect& rect, int WXUNUSED(flags))
{
// draw the pixels manually because the "dots" in wxPen with wxDOT style
// may be short traits and not really dots
DrawShadedRect(dc, rect, m_penHighlight, m_penDarkGrey);
}
-void wxStdRenderer::DrawFrameBorder(wxDC& dc, wxRect *rect)
+void wxStdRenderer::DrawBoxBorder(wxDC& dc, wxRect *rect)
{
DrawShadedRect(dc, rect, m_penDarkGrey, m_penHighlight);
DrawShadedRect(dc, rect, m_penHighlight, m_penDarkGrey);
}
+void wxStdRenderer::DrawStaticBorder(wxDC& dc, wxRect *rect)
+{
+ DrawShadedRect(dc, rect, m_penDarkGrey, m_penHighlight);
+}
+
+void wxStdRenderer::DrawExtraBorder(wxDC& dc, wxRect *rect)
+{
+ DrawRect(dc, rect, m_penLightGrey);
+}
+
void wxStdRenderer::DrawBorder(wxDC& dc,
wxBorder border,
const wxRect& rectTotal,
case wxBORDER_DOUBLE:
DrawAntiSunkenBorder(dc, &rect);
- DrawRect(dc, &rect, m_penLightGrey);
+ DrawExtraBorder(dc, &rect);
break;
case wxBORDER_STATIC:
- DrawShadedRect(dc, &rect, m_penDarkGrey, m_penHighlight);
+ DrawStaticBorder(dc, &rect);
break;
case wxBORDER_RAISED:
wxCoord wxStdRenderer::GetListboxItemHeight(wxCoord fontHeight)
{
- return fontHeight + 2;
+ return fontHeight + 2*ITEM_MARGIN;
}
void wxStdRenderer::DrawTextBorder(wxDC& dc,
}
else // no label
{
- DrawFrameBorder(dc, &rectFrame);
+ DrawBoxBorder(dc, &rectFrame);
}
}
dc.DrawRectangle(rect);
}
+ // horizontal adjustment is arbitrary
wxRect rectText = rect;
- rectText.x += 2;
- rectText.width -= 2;
+ rectText.Deflate(2, ITEM_MARGIN);
dc.DrawLabel(label, wxNullBitmap, rectText);
if ( flags & wxCONTROL_FOCUSED )
{
- DrawFocusRect(dc, rect);
+ DrawFocusRect(dc, rect, flags);
}
}
#if wxUSE_STATUSBAR
-wxSize wxStdRenderer::GetStatusBarBorders(wxCoord *borderBetweenFields) const
+wxSize wxStdRenderer::GetStatusBarBorders() const
{
- if ( borderBetweenFields )
- *borderBetweenFields = 2;
+ // Rendered border may be different depending on field's style, we use
+ // the largest value so that any field certainly fits into the borders
+ // we return:
+ wxRect raised = GetBorderDimensions(wxBORDER_RAISED);
+ wxRect flat = GetBorderDimensions(wxBORDER_STATIC);
+ wxASSERT_MSG( raised.x == raised.width && raised.y == raised.height &&
+ flat.x == flat.width && flat.y == flat.height,
+ _T("this code expects uniform borders, you must override GetStatusBarBorders") );
+
+ // take the larger of flat/raised values:
+ wxSize border(wxMax(raised.x, flat.x), wxMax(raised.y, flat.y));
+
+ return border;
+}
+wxCoord wxStdRenderer::GetStatusBarBorderBetweenFields() const
+{
+ return 2;
+}
+
+wxSize wxStdRenderer::GetStatusBarFieldMargins() const
+{
return wxSize(2, 2);
}
else if ( style != wxSB_FLAT )
DrawBorder(dc, wxBORDER_STATIC, rect, flags, &rectIn);
- rectIn.Deflate(GetStatusBarBorders(NULL));
+ rectIn.Deflate(GetStatusBarFieldMargins());
wxDCClipper clipper(dc, rectIn);
DrawLabel(dc, label, rectIn, flags, wxALIGN_LEFT | wxALIGN_CENTRE_VERTICAL);
wxRect r(rect);
- DrawShadedRect(dc, &r, m_penLightGrey, m_penBlack);
- DrawShadedRect(dc, &r, m_penHighlight, m_penDarkGrey);
- DrawShadedRect(dc, &r, m_penLightGrey, m_penLightGrey);
+ DrawAntiSunkenBorder(dc, &r);
+ DrawExtraBorder(dc, &r);
if ( flags & wxTOPLEVEL_RESIZEABLE )
- DrawShadedRect(dc, &r, m_penLightGrey, m_penLightGrey);
+ DrawExtraBorder(dc, &r);
}
void wxStdRenderer::DrawFrameBackground(wxDC& dc, const wxRect& rect, int flags)
if ( !bmp.Ok() )
return;
- wxRect r(x, y, FRAME_BUTTON_WIDTH, FRAME_BUTTON_HEIGHT);
+ wxRect rectBtn(x, y, FRAME_BUTTON_WIDTH, FRAME_BUTTON_HEIGHT);
if ( flags & wxCONTROL_PRESSED )
{
- DrawSunkenBorder(dc, &r);
+ DrawSunkenBorder(dc, &rectBtn);
- r.x++;
- r.y++;
+ rectBtn.Offset(1, 1);
}
else
{
- DrawRaisedBorder(dc, &r);
+ DrawRaisedBorder(dc, &rectBtn);
}
- DrawBackground(dc, wxSCHEME_COLOUR(m_scheme, CONTROL), r);
+ DrawBackground(dc, wxSCHEME_COLOUR(m_scheme, CONTROL), rectBtn);
+
+ wxRect rectBmp(0, 0, bmp.GetWidth(), bmp.GetHeight());
+ dc.DrawBitmap(bmp, rectBmp.CentreIn(rectBtn).GetPosition(), true);
+}
- dc.DrawBitmap(bmp, r.x, r.y, true);
+int wxStdRenderer::GetFrameBorderWidth(int flags) const
+{
+ return flags & wxTOPLEVEL_RESIZEABLE ? 4 : 3;
}
if ( (flags & wxTOPLEVEL_BORDER) && !(flags & wxTOPLEVEL_MAXIMIZED) )
{
- int border = flags & wxTOPLEVEL_RESIZEABLE
- ? RESIZEABLE_FRAME_BORDER_THICKNESS
- : FRAME_BORDER_THICKNESS;
- r.Inflate(-border);
+ r.Inflate(-GetFrameBorderWidth(flags));
}
if ( flags & wxTOPLEVEL_TITLEBAR )
if ( (flags & wxTOPLEVEL_BORDER) && !(flags & wxTOPLEVEL_MAXIMIZED) )
{
- int border = flags & wxTOPLEVEL_RESIZEABLE
- ? RESIZEABLE_FRAME_BORDER_THICKNESS
- : FRAME_BORDER_THICKNESS;
- s.x += 2*border;
- s.y += 2*border;
+ s.IncBy(2*GetFrameBorderWidth(flags));
}
if ( flags & wxTOPLEVEL_TITLEBAR )
if ( (flags & wxTOPLEVEL_BORDER) && !(flags & wxTOPLEVEL_MAXIMIZED) )
{
- int border = (flags & wxTOPLEVEL_RESIZEABLE) ?
- RESIZEABLE_FRAME_BORDER_THICKNESS :
- FRAME_BORDER_THICKNESS;
- s.x += 2*border;
- s.y += 2*border;
+ s.IncBy(2*GetFrameBorderWidth(flags));
}
if ( flags & wxTOPLEVEL_TITLEBAR )
{
return wxSize(16, 16);
}
-