From a083809b937e6714ff9259e53ff28d659fb427e2 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 28 Nov 2014 17:20:23 -0500 Subject: [PATCH] GtkScrolledWindow: Take border into account Use the new scrollable API for getting non-scrollable borders and draw over/undershoot at the right place. In practice, this means that they now appear below treeview headers. --- gtk/gtkscrolledwindow.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c index c2b3ecbfc1..1365eb648b 100644 --- a/gtk/gtkscrolledwindow.c +++ b/gtk/gtkscrolledwindow.c @@ -1765,6 +1765,26 @@ gtk_scrolled_window_draw_scrollbars_junction (GtkScrolledWindow *scrolled_window gtk_style_context_restore (context); } +static void +gtk_scrolled_window_inner_allocation (GtkWidget *widget, + GtkAllocation *rect) +{ + GtkWidget *child; + GtkBorder border = { 0 }; + + gtk_scrolled_window_relative_allocation (widget, rect); + + child = gtk_bin_get_child (GTK_BIN (widget)); + if (GTK_IS_SCROLLABLE (child) && + gtk_scrollable_get_border (GTK_SCROLLABLE (child), &border)) + { + rect->x += border.left; + rect->y += border.top; + rect->width -= border.left + border.right; + rect->height -= border.top + border.bottom; + } +} + static void gtk_scrolled_window_draw_overshoot (GtkScrolledWindow *scrolled_window, cairo_t *cr) @@ -1778,7 +1798,8 @@ gtk_scrolled_window_draw_overshoot (GtkScrolledWindow *scrolled_window, return; context = gtk_widget_get_style_context (widget); - gtk_scrolled_window_relative_allocation (widget, &rect); + gtk_scrolled_window_inner_allocation (widget, &rect); + overshoot_x = CLAMP (overshoot_x, - MAX_OVERSHOOT_DISTANCE, MAX_OVERSHOOT_DISTANCE); overshoot_y = CLAMP (overshoot_y, - MAX_OVERSHOOT_DISTANCE, MAX_OVERSHOOT_DISTANCE); @@ -1836,7 +1857,7 @@ gtk_scrolled_window_draw_undershoot (GtkScrolledWindow *scrolled_window, GtkAdjustment *adj; context = gtk_widget_get_style_context (widget); - gtk_scrolled_window_relative_allocation (widget, &rect); + gtk_scrolled_window_inner_allocation (widget, &rect); gtk_style_context_save (context); gtk_style_context_remove_class (context, GTK_STYLE_CLASS_FRAME);