// splitter sash drawing
// ----------------------------------------------------------------------------
-// all this should probably be read from the current theme settings somehow?
-#ifdef __WXGTK20__
- // the full sash size
- static const wxCoord SASH_FULL_SIZE = 5;
-#else // GTK+ 1.x
+#ifndef __WXGTK20__
// the full sash width (should be even)
static const wxCoord SASH_SIZE = 8;
// margin around the sash
static const wxCoord SASH_MARGIN = 2;
-
- // the full sash size
- static const wxCoord SASH_FULL_SIZE = SASH_SIZE + SASH_MARGIN;
#endif // GTK+ 2.x/1.x
+static int GetGtkSplitterFullSize()
+{
+#ifdef __WXGTK20__
+ static GtkWidget *s_paned = NULL;
+ if (s_paned == NULL)
+ s_paned = gtk_vpaned_new();
+
+ gint handle_size;
+ gtk_widget_style_get (s_paned, "handle_size", &handle_size, NULL);
+
+ return handle_size;
+#else
+ return SASH_SIZE + SASH_MARGIN;
+#endif
+}
+
wxSplitterRenderParams
-wxRendererGTK::GetSplitterParams(const wxWindow * WXUNUSED(win))
+wxRendererGTK::GetSplitterParams(const wxWindow *WXUNUSED(win))
{
// we don't draw any border, hence 0 for the second field
return wxSplitterRenderParams
(
- SASH_FULL_SIZE,
+ GetGtkSplitterFullSize(),
0,
#ifdef __WXGTK20__
true // hot sensitive
// window not realized yet
return;
}
+
+ wxCoord full_size = GetGtkSplitterFullSize();
// are we drawing vertical or horizontal splitter?
const bool isVert = orient == wxVERTICAL;
rect.x = position;
rect.y = 0;
- rect.width = SASH_FULL_SIZE;
+ rect.width = full_size;
rect.height = h;
erase_rect.x = position;
erase_rect.y = 0;
- erase_rect.width = SASH_FULL_SIZE;
+ erase_rect.width = full_size;
erase_rect.height = h;
}
else // horz
rect.x = 0;
rect.y = position;
- rect.height = SASH_FULL_SIZE;
+ rect.height = full_size;
rect.width = w;
erase_rect.y = position;
erase_rect.x = 0;
- erase_rect.height = SASH_FULL_SIZE;
+ erase_rect.height = full_size;
erase_rect.width = w;
}
- // we must erase everything first, otherwise the garbage from the old sash
- // is left when dragging it
- //
- // TODO: is this the right way to draw themed background?
+#if 0
+ // 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
+
+ // we must erase everything first, otherwise the garbage
+ // from the old sash is left when dragging it
gtk_paint_flat_box
(
win->m_wxwindow->style,
GTK_SHADOW_NONE,
NULL,
win->m_wxwindow,
- (char *)"base", // const_cast
+ (char *)"viewportbin", // const_cast
erase_rect.x,
erase_rect.y,
erase_rect.width,
erase_rect.height
);
+#endif
#ifdef __WXGTK20__
gtk_paint_handle
rect.y,
rect.width,
rect.height,
- !isVert ? GTK_ORIENTATION_VERTICAL : GTK_ORIENTATION_HORIZONTAL
+ isVert ? GTK_ORIENTATION_VERTICAL : GTK_ORIENTATION_HORIZONTAL
);
#else // GTK+ 1.x