X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d2328d9822495e812917890e4854c4bdfa9664cc..ccd67a6af88981a8c1a2b752a14051fe7698814b:/src/univ/stdrend.cpp diff --git a/src/univ/stdrend.cpp b/src/univ/stdrend.cpp index 37f95f7aa7..5a78545902 100644 --- a/src/univ/stdrend.cpp +++ b/src/univ/stdrend.cpp @@ -24,6 +24,11 @@ #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" @@ -33,12 +38,13 @@ // 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 // ============================================================================ @@ -161,9 +167,20 @@ void wxStdRenderer::DrawBackground(wxDC& dc, 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); } @@ -181,7 +198,8 @@ void wxStdRenderer::DrawButtonSurface(wxDC& dc, // 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 @@ -366,12 +384,22 @@ void wxStdRenderer::DrawAntiSunkenBorder(wxDC& dc, wxRect *rect) 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, @@ -388,11 +416,11 @@ void wxStdRenderer::DrawBorder(wxDC& dc, 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: @@ -469,7 +497,7 @@ bool wxStdRenderer::AreScrollbarsInsideBorder() const wxCoord wxStdRenderer::GetListboxItemHeight(wxCoord fontHeight) { - return fontHeight + 2; + return fontHeight + 2*ITEM_MARGIN; } void wxStdRenderer::DrawTextBorder(wxDC& dc, @@ -574,7 +602,7 @@ void wxStdRenderer::DrawFrame(wxDC& dc, } else // no label { - DrawFrameBorder(dc, &rectFrame); + DrawBoxBorder(dc, &rectFrame); } } @@ -595,14 +623,14 @@ void wxStdRenderer::DrawItem(wxDC& dc, 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); } } @@ -1079,11 +1107,30 @@ int wxStdRenderer::PixelToScrollbar(const wxScrollBar *scrollbar, wxCoord coord) #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); } @@ -1100,7 +1147,7 @@ void wxStdRenderer::DrawStatusField(wxDC& dc, 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); @@ -1256,11 +1303,10 @@ void wxStdRenderer::DrawFrameBorder(wxDC& dc, const wxRect& rect, int flags) 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) @@ -1388,8 +1434,7 @@ void wxStdRenderer::DrawFrameButton(wxDC& dc, { DrawSunkenBorder(dc, &rectBtn); - rectBtn.x++; - rectBtn.y++; + rectBtn.Offset(1, 1); } else { @@ -1402,6 +1447,11 @@ void wxStdRenderer::DrawFrameButton(wxDC& dc, dc.DrawBitmap(bmp, rectBmp.CentreIn(rectBtn).GetPosition(), true); } +int wxStdRenderer::GetFrameBorderWidth(int flags) const +{ + return flags & wxTOPLEVEL_RESIZEABLE ? 4 : 3; +} + wxRect wxStdRenderer::GetFrameClientArea(const wxRect& rect, int flags) const { @@ -1409,10 +1459,7 @@ wxRect wxStdRenderer::GetFrameClientArea(const wxRect& rect, int flags) const 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 ) @@ -1431,11 +1478,7 @@ wxStdRenderer::GetFrameTotalSize(const wxSize& clientSize, int flags) const 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 ) @@ -1450,11 +1493,7 @@ wxSize wxStdRenderer::GetFrameMinSize(int flags) const 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 ) @@ -1482,4 +1521,3 @@ wxSize wxStdRenderer::GetFrameIconSize() const { return wxSize(16, 16); } -