#pragma hdrstop
#endif
+#include "wx/univ/theme.h"
+
+#if wxUSE_THEME_GTK
+
#ifndef WX_PRECOMP
#include "wx/intl.h"
#include "wx/log.h"
#include "wx/dcmemory.h"
+ #include "wx/dcclient.h"
#include "wx/window.h"
#include "wx/menu.h"
#include "wx/univ/inpcons.h"
#include "wx/univ/inphand.h"
#include "wx/univ/colschem.h"
-#include "wx/univ/theme.h"
-class WXDLLEXPORT wxGTKMenuGeometryInfo;
+class wxGTKMenuGeometryInfo;
// ----------------------------------------------------------------------------
// constants
wxGTKRenderer(const wxColourScheme *scheme);
// wxRenderer methods
- virtual void DrawFocusRect(wxDC& dc, const wxRect& rect);
+ virtual void DrawFocusRect(wxWindow* win, wxDC& dc, const wxRect& rect, int flags = 0);
virtual void DrawTextBorder(wxDC& dc,
wxBorder border,
const wxRect& rect,
wxOrientation orient,
const wxRect& rect,
int flags = 0);
- virtual void DrawScrollCorner(wxDC& dc,
- const wxRect& rect);
- virtual void DrawCheckItem(wxDC& dc,
- const wxString& label,
- const wxBitmap& bitmap,
- const wxRect& rect,
- int flags = 0);
#if wxUSE_TOOLBAR
virtual void DrawToolBarButton(wxDC& dc,
virtual void DrawLineWrapMark(wxDC& dc, const wxRect& rect);
#endif // wxUSE_TEXTCTRL
+#if wxUSE_NOTEBOOK
virtual void DrawTab(wxDC& dc,
const wxRect& rect,
wxDirection dir,
const wxBitmap& bitmap = wxNullBitmap,
int flags = 0,
int indexAccel = -1);
+#endif // wxUSE_NOTEBOOK
#if wxUSE_SLIDER
virtual void DrawSliderShaft(wxDC& dc,
const wxMenuGeometryInfo& geomInfo);
#endif // wxUSE_MENUS
-#if wxUSE_STATUSBAR
- virtual void DrawStatusField(wxDC& dc,
- const wxRect& rect,
- const wxString& label,
- int flags = 0, int style = 0);
-#endif // wxUSE_STATUSBAR
-
- virtual void DrawFrameTitleBar(wxDC& dc,
- const wxRect& rect,
- const wxString& title,
- const wxIcon& icon,
- int flags,
- int specialButton = 0,
- int specialButtonFlag = 0);
- virtual void DrawFrameBorder(wxDC& dc,
- const wxRect& rect,
- int flags);
- virtual void DrawFrameBackground(wxDC& dc,
- const wxRect& rect,
- int flags);
- virtual void DrawFrameTitle(wxDC& dc,
- const wxRect& rect,
- const wxString& title,
- int flags);
- virtual void DrawFrameIcon(wxDC& dc,
- const wxRect& rect,
- const wxIcon& icon,
- int flags);
- virtual void DrawFrameButton(wxDC& dc,
- wxCoord x, wxCoord y,
- int button,
- int flags = 0);
-
- // titlebars
- virtual wxRect GetFrameClientArea(const wxRect& rect, int flags) const;
- virtual wxSize GetFrameTotalSize(const wxSize& clientSize, int flags) const;
- virtual wxSize GetFrameMinSize(int flags) const;
- virtual wxSize GetFrameIconSize() const;
- virtual int HitTestFrame(const wxRect& rect, const wxPoint& pt, int flags) const;
-
virtual void GetComboBitmaps(wxBitmap *bmpNormal,
wxBitmap *bmpFocus,
wxBitmap *bmpPressed,
virtual void AdjustSize(wxSize *size, const wxWindow *window);
// geometry and hit testing
+#if wxUSE_SCROLLBAR
virtual wxSize GetScrollbarArrowSize() const
{ return m_sizeScrollbarArrow; }
-#if wxUSE_SCROLLBAR
- virtual wxRect GetScrollbarRect(const wxScrollBar *scrollbar,
- wxScrollBar::Element elem,
- int thumbPos = -1) const;
#endif // wxUSE_SCROLLBAR
- virtual wxCoord GetListboxItemHeight(wxCoord fontHeight)
- { return fontHeight + 2; }
virtual wxSize GetCheckBitmapSize() const
{ return wxSize(10, 10); }
virtual wxSize GetRadioBitmapSize() const
virtual wxCoord GetCheckItemMargin() const
{ return 2; }
+#if wxUSE_TOOLBAR
virtual wxSize GetToolBarButtonSize(wxCoord *separator) const
{ if ( separator ) *separator = 5; return wxSize(16, 15); }
virtual wxSize GetToolBarMargin() const
{ return wxSize(6, 6); }
+#endif // wxUSE_TOOLBAR
#if wxUSE_TEXTCTRL
- virtual wxRect GetTextTotalArea(const wxTextCtrl *text,
- const wxRect& rect) const;
virtual wxRect GetTextClientArea(const wxTextCtrl *text,
const wxRect& rect,
wxCoord *extraSpaceBeyond) const;
#endif // wxUSE_TEXTCTRL
+#if wxUSE_NOTEBOOK
virtual wxSize GetTabIndent() const { return wxSize(2, 2); }
virtual wxSize GetTabPadding() const { return wxSize(6, 6); }
+#endif // wxUSE_NOTEBOOK
#if wxUSE_SLIDER
virtual wxCoord GetSliderDim() const { return 15; }
const wxMenu& menu) const;
#endif // wxUSE_MENUS
-#if wxUSE_STATUSBAR
- virtual wxSize GetStatusBarBorders(wxCoord *borderBetweenFields) const;
-#endif // wxUSE_STATUSBAR
-
// helpers for "wxBitmap wxColourScheme::Get()"
void DrawCheckBitmap(wxDC& dc, const wxRect& rect);
void DrawUncheckBitmap(wxDC& dc, const wxRect& rect, bool isPressed);
void DrawUndeterminedBitmap(wxDC& dc, const wxRect& rect, bool isPressed);
protected:
+ // overridden wxStdRenderer methods
virtual void DrawSunkenBorder(wxDC& dc, wxRect *rect);
virtual void DrawFrameWithLabel(wxDC& dc,
int alignment,
int indexAccel);
+ virtual void DrawCheckItemBitmap(wxDC& dc,
+ const wxBitmap& bitmap,
+ const wxRect& rect,
+ int flags);
+
// get the colour to use for background
wxColour GetBackgroundColour(int flags) const
{
// draw inner GTK shadow
void DrawInnerShadedRect(wxDC& dc, wxRect *rect);
-#if wxUSE_SCROLLBAR
- // returns the size of the arrow for the scrollbar (depends on
- // orientation)
- wxSize GetScrollbarArrowSize(const wxScrollBar *scrollbar) const
- {
- wxSize size;
- if ( scrollbar->IsVertical() )
- {
- size = m_sizeScrollbarArrow;
- }
- else
- {
- size.x = m_sizeScrollbarArrow.y;
- size.y = m_sizeScrollbarArrow.x;
- }
-
- return size;
- }
-#endif // wxUSE_SCROLLBAR
-
// get the line wrap indicator bitmap
wxBitmap GetLineWrapBitmap() const;
wxCoord y1, wxCoord y2);
// draw the radio button bitmap for the given state
- void DrawRadioBitmap(wxDC& dc, const wxRect& rect, int flags);
-
- // draw check/radio - the bitmap must be a valid one by now
- void DoDrawCheckOrRadioBitmap(wxDC& dc,
- const wxString& label,
- const wxBitmap& bitmap,
- const wxRect& rectTotal,
- int flags,
- wxAlignment align,
- int indexAccel);
+ void DrawRadioButtonBitmap(wxDC& dc, const wxRect& rect, int flags);
// common part of DrawMenuItem() and DrawMenuBarItem()
void DoDrawMenuItem(wxDC& dc,
// initialize the combo bitmaps
void InitComboBitmaps();
-private:
- const wxColourScheme *m_scheme;
+ virtual wxBitmap GetFrameButtonBitmap(FrameButtonType WXUNUSED(type))
+ {
+ return wxNullBitmap;
+ }
+private:
// data
wxSize m_sizeScrollbarArrow;
wxSortedArrayString m_handlerNames;
wxArrayHandlers m_handlers;
- wxGTKInputHandler *m_handlerDefault;
-
wxGTKColourScheme *m_scheme;
WX_DECLARE_THEME(gtk)
{
m_scheme = NULL;
m_renderer = NULL;
- m_handlerDefault = NULL;
m_artProvider = NULL;
}
wxGTKTheme::~wxGTKTheme()
{
- size_t count = m_handlers.GetCount();
- for ( size_t n = 0; n < count; n++ )
- {
- if ( m_handlers[n] != m_handlerDefault )
- delete m_handlers[n];
- }
-
- delete m_handlerDefault;
delete m_renderer;
delete m_scheme;
- wxArtProvider::RemoveProvider(m_artProvider);
+ delete m_artProvider;
}
wxRenderer *wxGTKTheme::GetRenderer()
{
switch ( col )
{
+ case FRAME:
case WINDOW: return *wxWHITE;
case SHADOW_DARK: return *wxBLACK;
case MAX:
default:
- wxFAIL_MSG(_T("invalid standard colour"));
+ wxFAIL_MSG(wxT("invalid standard colour"));
return *wxBLACK;
}
}
break;
default:
- wxFAIL_MSG(_T("unknown rectangle side"));
+ wxFAIL_MSG(wxT("unknown rectangle side"));
}
}
DrawShadedRect(dc, rect, m_penBlack, m_penLightGrey);
}
-void wxGTKRenderer::DrawFocusRect(wxDC& dc, const wxRect& rect)
+void
+wxGTKRenderer::DrawFocusRect(wxWindow* WXUNUSED(win), wxDC& dc, const wxRect& rect, int WXUNUSED(flags))
{
dc.SetBrush(*wxTRANSPARENT_BRUSH);
wxRect rectFocus = rect;
}
// ----------------------------------------------------------------------------
-// label
+// check/radio buttons
// ----------------------------------------------------------------------------
-void wxGTKRenderer::DrawCheckItem(wxDC& dc,
- const wxString& label,
- const wxBitmap& bitmap,
- const wxRect& rect,
- int flags)
+void wxGTKRenderer::DrawCheckItemBitmap(wxDC& dc,
+ const wxBitmap& bitmap,
+ const wxRect& rect,
+ int flags)
{
- wxRect rectBitmap = rect;
- rectBitmap.x -= 1;
- rectBitmap.width = GetCheckBitmapSize().x;
-
// never draw the focus rect around the check indicators here
- DrawCheckButton(dc, wxEmptyString, bitmap, rectBitmap, flags & ~wxCONTROL_FOCUSED);
-
- wxRect rectLabel = rect;
- wxCoord shift = rectBitmap.width + 2*GetCheckItemMargin();
- rectLabel.x += shift;
- rectLabel.width -= shift;
- DrawItem(dc, label, rectLabel, flags);
+ DrawCheckButton(dc, wxEmptyString, bitmap, rect, flags & ~wxCONTROL_FOCUSED);
}
-// ----------------------------------------------------------------------------
-// check/radion buttons
-// ----------------------------------------------------------------------------
-
void wxGTKRenderer::DrawUndeterminedBitmap(wxDC& dc,
const wxRect& rectTotal,
bool isPressed)
dc.DrawRectangle(rect);
}
-void wxGTKRenderer::DrawRadioBitmap(wxDC& dc,
- const wxRect& rect,
- int flags)
+void wxGTKRenderer::DrawRadioButtonBitmap(wxDC& dc,
+ const wxRect& rect,
+ int flags)
{
wxCoord x = rect.x,
y = rect.y,
bmp.Create(size.x, size.y);
dc.SelectObject(bmp);
- DrawRadioBitmap(dc, size, flags);
+ DrawRadioButtonBitmap(dc, size, flags);
}
return bmp;
wxBitmap bmpLineWrap(line_wrap_bits, line_wrap_width, line_wrap_height);
if ( !bmpLineWrap.Ok() )
{
- wxFAIL_MSG( _T("Failed to create line wrap XBM") );
+ wxFAIL_MSG( wxT("Failed to create line wrap XBM") );
}
else
{
#if wxUSE_TEXTCTRL
-wxRect wxGTKRenderer::GetTextTotalArea(const wxTextCtrl * WXUNUSED(text),
- const wxRect& rect) const
-{
- wxRect rectTotal = rect;
- rectTotal.Inflate(2*BORDER_THICKNESS);
- return rectTotal;
-}
-
wxRect wxGTKRenderer::GetTextClientArea(const wxTextCtrl *text,
const wxRect& rect,
wxCoord *extraSpaceBeyond) const
{
- wxRect rectText = rect;
- rectText.Deflate(2*BORDER_THICKNESS);
+ wxRect
+ rectText = wxStdRenderer::GetTextClientArea(text, rect, extraSpaceBeyond);
if ( text->WrapLines() )
{
return rectText;
}
-#endif // wxUSE_TEXTCTRL
-
void wxGTKRenderer::DrawLineWrapMark(wxDC& dc, const wxRect& rect)
{
wxBitmap bmpLineWrap = GetLineWrapBitmap();
}
}
+#endif // wxUSE_TEXTCTRL
+
// ----------------------------------------------------------------------------
// notebook
// ----------------------------------------------------------------------------
+#if wxUSE_NOTEBOOK
+
void wxGTKRenderer::DrawTab(wxDC& dc,
const wxRect& rectOrig,
wxDirection dir,
switch ( dir )
{
default:
- wxFAIL_MSG(_T("invaild notebook tab orientation"));
+ wxFAIL_MSG(wxT("invaild notebook tab orientation"));
// fall through
case wxTOP:
}
}
-#if wxUSE_SLIDER
+#endif // wxUSE_NOTEBOOK
// ----------------------------------------------------------------------------
// slider
// ----------------------------------------------------------------------------
+#if wxUSE_SLIDER
+
wxSize wxGTKRenderer::GetSliderThumbSize(const wxRect& rect,
int lenThumb,
wxOrientation orient) const
// ----------------------------------------------------------------------------
// wxGTKMenuGeometryInfo: the wxMenuGeometryInfo used by wxGTKRenderer
-class WXDLLEXPORT wxGTKMenuGeometryInfo : public wxMenuGeometryInfo
+class wxGTKMenuGeometryInfo : public wxMenuGeometryInfo
{
public:
virtual wxSize GetSize() const { return m_size; }
if ( !accel.empty() )
{
// menubar items shouldn't have them
- wxCHECK_RET( geometryInfo, _T("accel strings only valid for menus") );
+ wxCHECK_RET( geometryInfo, wxT("accel strings only valid for menus") );
rect.x = geometryInfo->GetAccelOffset();
rect.SetRight(geometryInfo->GetSize().x);
// draw the submenu indicator
if ( flags & wxCONTROL_ISSUBMENU )
{
- wxCHECK_RET( geometryInfo, _T("wxCONTROL_ISSUBMENU only valid for menus") );
+ wxCHECK_RET( geometryInfo, wxT("wxCONTROL_ISSUBMENU only valid for menus") );
rect.x = geometryInfo->GetSize().x - MENU_RIGHT_MARGIN;
rect.width = MENU_RIGHT_MARGIN;
h = heightText;
wxCoord widthLabel;
- dc.GetTextExtent(item->GetLabel(), &widthLabel, NULL);
+ dc.GetTextExtent(item->GetItemLabelText(), &widthLabel, NULL);
if ( widthLabel > widthLabelMax )
{
widthLabelMax = widthLabel;
#endif // wxUSE_MENUS
-#if wxUSE_STATUSBAR
-
-// ----------------------------------------------------------------------------
-// status bar
-// ----------------------------------------------------------------------------
-
-wxSize
-wxGTKRenderer::GetStatusBarBorders(wxCoord * WXUNUSED(borderBetweenFields)) const
-{
- return wxSize(0,0);
-}
-
-void wxGTKRenderer::DrawStatusField(wxDC& WXUNUSED(dc),
- const wxRect& WXUNUSED(rect),
- const wxString& WXUNUSED(label),
- int WXUNUSED(flags), int WXUNUSED(style))
-{
-}
-
-#endif // wxUSE_STATUSBAR
-
// ----------------------------------------------------------------------------
// combobox
// ----------------------------------------------------------------------------
break;
default:
- wxFAIL_MSG(_T("unknown arrow direction"));
+ wxFAIL_MSG(wxT("unknown arrow direction"));
return;
}
break;
default:
- wxFAIL_MSG(_T("unknown arrow direction"));
+ wxFAIL_MSG(wxT("unknown arrow direction"));
}
dc.DrawPolygon(WXSIZEOF(ptArrow), ptArrow);
break;
default:
- wxFAIL_MSG(_T("unknown arrow direction"));
+ wxFAIL_MSG(wxT("unknown arrow direction"));
return;
}
}
DrawSolidRect(dc, wxSCHEME_COLOUR(m_scheme, SCROLLBAR), rectBar);
}
-void wxGTKRenderer::DrawScrollCorner(wxDC& dc, const wxRect& rect)
-{
- DrawSolidRect(dc, wxSCHEME_COLOUR(m_scheme, CONTROL), rect);
-}
-
-#if wxUSE_SCROLLBAR
-wxRect wxGTKRenderer::GetScrollbarRect(const wxScrollBar *scrollbar,
- wxScrollBar::Element elem,
- int thumbPos) const
-{
- // as GTK scrollbars can't be disabled, it makes no sense to remove the
- // thumb for a scrollbar with range 0 - instead, make it fill the entire
- // scrollbar shaft
- if ( (elem == wxScrollBar::Element_Thumb) && !scrollbar->GetRange() )
- {
- elem = wxScrollBar::Element_Bar_2;
- }
-
- return wxStdRenderer::GetScrollbarRect(scrollbar, elem, thumbPos);
-}
-
-#endif // wxUSE_SCROLLBAR
-
// ----------------------------------------------------------------------------
// size adjustments
// ----------------------------------------------------------------------------
#endif // wxUSE_SCROLLBAR
{
// take into account the border width
- wxRect rectBorder = GetBorderDimensions(window->GetBorder());
- size->x += rectBorder.x + rectBorder.width;
- size->y += rectBorder.y + rectBorder.height;
+ wxStdRenderer::AdjustSize(size, window);
}
}
-// ----------------------------------------------------------------------------
-// top level windows
-// ----------------------------------------------------------------------------
-
-void wxGTKRenderer::DrawFrameTitleBar(wxDC& WXUNUSED(dc),
- const wxRect& WXUNUSED(rect),
- const wxString& WXUNUSED(title),
- const wxIcon& WXUNUSED(icon),
- int WXUNUSED(flags),
- int WXUNUSED(specialButton),
- int WXUNUSED(specialButtonFlag))
-{
-}
-
-void wxGTKRenderer::DrawFrameBorder(wxDC& WXUNUSED(dc),
- const wxRect& WXUNUSED(rect),
- int WXUNUSED(flags))
-{
-}
-
-void wxGTKRenderer::DrawFrameBackground(wxDC& WXUNUSED(dc),
- const wxRect& WXUNUSED(rect),
- int WXUNUSED(flags))
-{
-}
-
-void wxGTKRenderer::DrawFrameTitle(wxDC& WXUNUSED(dc),
- const wxRect& WXUNUSED(rect),
- const wxString& WXUNUSED(title),
- int WXUNUSED(flags))
-{
-}
-
-void wxGTKRenderer::DrawFrameIcon(wxDC& WXUNUSED(dc),
- const wxRect& WXUNUSED(rect),
- const wxIcon& WXUNUSED(icon),
- int WXUNUSED(flags))
-{
-}
-
-void wxGTKRenderer::DrawFrameButton(wxDC& WXUNUSED(dc),
- wxCoord WXUNUSED(x),
- wxCoord WXUNUSED(y),
- int WXUNUSED(button),
- int WXUNUSED(flags))
-{
-}
-
-wxRect
-wxGTKRenderer::GetFrameClientArea(const wxRect& rect,
- int WXUNUSED(flags)) const
-{
- return rect;
-}
-
-wxSize
-wxGTKRenderer::GetFrameTotalSize(const wxSize& clientSize,
- int WXUNUSED(flags)) const
-{
- return clientSize;
-}
-
-wxSize wxGTKRenderer::GetFrameMinSize(int WXUNUSED(flags)) const
-{
- return wxSize(0,0);
-}
-
-wxSize wxGTKRenderer::GetFrameIconSize() const
-{
- return wxSize(wxDefaultCoord, wxDefaultCoord);
-}
-
-int
-wxGTKRenderer::HitTestFrame(const wxRect& WXUNUSED(rect),
- const wxPoint& WXUNUSED(pt),
- int WXUNUSED(flags)) const
-{
- return wxHT_TOPLEVEL_CLIENT_AREA;
-}
-
-
// ----------------------------------------------------------------------------
// standard icons
// ----------------------------------------------------------------------------
}
#endif // wxUSE_TEXTCTRL
+
+#endif // wxUSE_THEME_GTK