summaryrefslogtreecommitdiff
path: root/gtk/gtkhpaned.c
diff options
context:
space:
mode:
Diffstat (limited to 'gtk/gtkhpaned.c')
-rw-r--r--gtk/gtkhpaned.c44
1 files changed, 35 insertions, 9 deletions
diff --git a/gtk/gtkhpaned.c b/gtk/gtkhpaned.c
index 51513108d4..7fa7b4e37f 100644
--- a/gtk/gtkhpaned.c
+++ b/gtk/gtkhpaned.c
@@ -245,7 +245,7 @@ gtk_hpaned_draw (GtkWidget *widget,
GdkRectangle *area)
{
GtkPaned *paned;
- GdkRectangle child_area;
+ GdkRectangle handle_area, child_area;
guint16 border_width;
g_return_if_fail (widget != NULL);
@@ -253,11 +253,43 @@ gtk_hpaned_draw (GtkWidget *widget,
if (GTK_WIDGET_VISIBLE (widget) && GTK_WIDGET_MAPPED (widget))
{
+ gint width, height;
+
paned = GTK_PANED (widget);
border_width = GTK_CONTAINER (paned)->border_width;
gdk_window_clear_area (widget->window,
area->x, area->y, area->width, area->height);
+
+ /* Redraw the handle
+ */
+ gdk_window_get_size (paned->handle, &width, &height);
+
+ handle_area.x = paned->handle_xpos;
+ handle_area.y = paned->handle_ypos;
+ handle_area.width = width;
+ handle_area.height = height;
+
+ if (gdk_rectangle_intersect (&handle_area, area, &child_area))
+ {
+ child_area.x -= handle_area.x;
+ child_area.y -= handle_area.y;
+ gtk_paint_box (widget->style, paned->handle,
+ GTK_WIDGET_STATE(widget),
+ GTK_SHADOW_OUT,
+ &child_area, widget, "paned",
+ 0, 0,
+ width, height);
+ }
+
+ /* Redraw the groove
+ */
+ gtk_paint_vline(widget->style, widget->window, GTK_STATE_NORMAL,
+ area, widget, "hpaned",
+ 0, widget->allocation.height - 1,
+ border_width + paned->child1_size + paned->gutter_size / 2 - 1);
+ /* Redraw the children
+ */
if (paned->child1 &&
gtk_widget_intersect (paned->child1, area, &child_area))
gtk_widget_draw (paned->child1, &child_area);
@@ -265,10 +297,6 @@ gtk_hpaned_draw (GtkWidget *widget,
gtk_widget_intersect (paned->child2, area, &child_area))
gtk_widget_draw (paned->child2, &child_area);
- gtk_paint_vline(widget->style, widget->window, GTK_STATE_NORMAL,
- area, widget, "hpaned",
- 0, widget->allocation.height - 1,
- border_width + paned->child1_size + paned->gutter_size / 2 - 1);
}
}
@@ -283,18 +311,16 @@ gtk_hpaned_xor_line (GtkPaned *paned)
if (!paned->xor_gc)
{
- values.foreground = widget->style->white;
- values.function = GDK_XOR;
+ values.function = GDK_INVERT;
values.subwindow_mode = GDK_INCLUDE_INFERIORS;
paned->xor_gc = gdk_gc_new_with_values (widget->window,
&values,
- GDK_GC_FOREGROUND |
GDK_GC_FUNCTION |
GDK_GC_SUBWINDOW);
}
xpos = paned->child1_size
- + GTK_CONTAINER(paned)->border_width + paned->gutter_size / 2;
+ + GTK_CONTAINER (paned)->border_width + paned->gutter_size / 2;
gdk_draw_line (widget->window, paned->xor_gc,
xpos,