///////////////////////////////////////////////////////////////////////////////
-// Name: gtk/renderer.cpp
+// Name: src/gtk/renderer.cpp
// Purpose: implementation of wxRendererNative for wxGTK
// Author: Vadim Zeitlin
// Modified by:
#endif
#include "wx/renderer.h"
+
+#ifndef WX_PRECOMP
+ #include "wx/window.h"
+ #include "wx/dc.h"
+ #include "wx/dcclient.h"
+ #include "wx/settings.h"
+#endif
+
#include <gtk/gtk.h>
#include "wx/gtk/win_gtk.h"
-#include "wx/window.h"
-#include "wx/dc.h"
-#include "wx/dcclient.h"
-#include "wx/settings.h"
-
// RR: After a correction to the orientation of the sash
// this doesn't seem to be required anymore and it
// seems to confuse some themes so USE_ERASE_RECT=0
const wxRect& rect,
int flags = 0);
- virtual void DrawCheckButton(wxWindow *win,
- wxDC& dc,
- const wxRect& rect,
- int flags = 0);
-
+ virtual void DrawCheckBox(wxWindow *win,
+ wxDC& dc,
+ const wxRect& rect,
+ int flags = 0);
+
+ virtual void DrawPushButton(wxWindow *win,
+ wxDC& dc,
+ const wxRect& rect,
+ int flags = 0);
+
+ virtual void DrawItemSelectionRect(wxWindow *win,
+ wxDC& dc,
+ const wxRect& rect,
+ int flags = 0);
+
virtual wxSplitterRenderParams GetSplitterParams(const wxWindow *win);
private:
// FIXME: shouldn't we destroy these windows somewhere?
- // used by DrawHeaderButton and DrawComboBoxDropButton
+ // used by DrawHeaderButton and DrawPushButton
static GtkWidget *GetButtonWidget();
// used by DrawTreeItemButton()
static GtkWidget *GetTreeWidget();
-
- // used by DrawCheckButton()
+
+ // used by DrawCheckBox()
static GtkWidget *GetCheckButtonWidget();
};
(
button->style,
// FIXME: I suppose GTK_PIZZA(win->m_wxwindow)->bin_window doesn't work with wxMemoryDC.
- // Maybe use code similar as in DrawComboBoxDropButton below?
+ // Maybe use code similar as in DrawPushButton below?
GTK_PIZZA(win->m_wxwindow)->bin_window,
flags & wxCONTROL_DISABLED ? GTK_STATE_INSENSITIVE : GTK_STATE_NORMAL,
GTK_SHADOW_OUT,
NULL,
button,
"button",
- dc.XLOG2DEV(rect.x) -1, rect.y -1, rect.width +2, rect.height +2
+ dc.XLOG2DEV(rect.x), rect.y, rect.width, rect.height
);
}
const wxRect& rect,
int flags)
{
- GtkWidget *button = GetButtonWidget();
+ DrawPushButton(win,dc,rect,flags);
+ DrawDropArrow(win,dc,rect);
+}
+
+void
+wxRendererGTK::DrawCheckBox(wxWindow *win,
+ wxDC& dc,
+ const wxRect& rect,
+ int flags )
+{
+ GtkWidget *button = GetCheckButtonWidget();
// for reason why we do this, see DrawDropArrow
wxWindowDC& wdc = (wxWindowDC&)dc;
wxASSERT ( wdc.IsKindOf(CLASSINFO(wxWindowDC)) );
- // draw button
GtkStateType state;
if ( flags & wxCONTROL_PRESSED )
else
state = GTK_STATE_NORMAL;
- gtk_paint_box
+ gtk_paint_check
(
button->style,
wdc.m_window,
state,
- flags & wxCONTROL_PRESSED ? GTK_SHADOW_IN : GTK_SHADOW_OUT,
+ flags & wxCONTROL_CHECKED ? GTK_SHADOW_IN : GTK_SHADOW_OUT,
NULL,
button,
- "button",
- rect.x, rect.y, rect.width, rect.height
+ "cellcheck",
+ dc.LogicalToDeviceX(rect.x)+2,
+ dc.LogicalToDeviceY(rect.y)+3,
+ 13, 13
);
-
- // draw arrow on button
- DrawDropArrow(win,dc,rect,flags);
-
}
-void
-wxRendererGTK::DrawCheckButton(wxWindow *win,
- wxDC& dc,
- const wxRect& rect,
- int flags )
+void
+wxRendererGTK::DrawPushButton(wxWindow *win,
+ wxDC& dc,
+ const wxRect& rect,
+ int flags)
{
- GtkWidget *button = GetCheckButtonWidget();
+ GtkWidget *button = GetButtonWidget();
// for reason why we do this, see DrawDropArrow
wxWindowDC& wdc = (wxWindowDC&)dc;
wxASSERT ( wdc.IsKindOf(CLASSINFO(wxWindowDC)) );
-
+
+ // draw button
GtkStateType state;
if ( flags & wxCONTROL_PRESSED )
state = GTK_STATE_PRELIGHT;
else
state = GTK_STATE_NORMAL;
-
- gtk_paint_check
+
+ gtk_paint_box
(
button->style,
wdc.m_window,
state,
- flags & wxCONTROL_CHECKED ? GTK_SHADOW_IN : GTK_SHADOW_OUT,
+ flags & wxCONTROL_PRESSED ? GTK_SHADOW_IN : GTK_SHADOW_OUT,
NULL,
button,
- "cellcheck",
- rect.x, rect.y, 13, 13
+ "button",
+ rect.x, rect.y, rect.width, rect.height
);
}
+
+void
+wxRendererGTK::DrawItemSelectionRect(wxWindow *win,
+ wxDC& dc,
+ const wxRect& rect,
+ int flags )
+{
+ // for reason why we do this, see DrawDropArrow
+ wxWindowDC& wdc = (wxWindowDC&)dc;
+ wxASSERT ( wdc.IsKindOf(CLASSINFO(wxWindowDC)) );
+
+ GtkStateType state;
+ if (flags & wxCONTROL_SELECTED)
+ {
+ if (flags & wxCONTROL_FOCUSED)
+ state = GTK_STATE_SELECTED;
+ else
+ state = GTK_STATE_INSENSITIVE;
+
+ gtk_paint_flat_box( win->m_wxwindow->style,
+ GTK_PIZZA(win->m_wxwindow)->bin_window,
+ state,
+ GTK_SHADOW_NONE,
+ NULL,
+ win->m_wxwindow,
+ "treeview",
+ dc.LogicalToDeviceX(rect.x),
+ dc.LogicalToDeviceY(rect.y),
+ rect.width,
+ rect.height );
+ }
+
+ if (flags & wxCONTROL_CURRENT)
+ {
+ dc.SetPen( *wxBLACK_PEN );
+ dc.SetBrush( *wxTRANSPARENT_BRUSH );
+ dc.DrawRectangle( rect );
+ }
+}