From: John Darrington Date: Mon, 7 Dec 2015 17:25:29 +0000 (+0100) Subject: Fix bug rendering margin in output viewer. X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?p=pspp;a=commitdiff_plain;h=1c492427c0c4e03065f4a327549a6d31b9e693a8 Fix bug rendering margin in output viewer. commit 7b1373b8bded55eedc2328c1afd3eece6d259c34 tried to add an offset to the output viewer rendering. However the implementation was somewhat naive. The result was that the desired rendering was not observed until an expose or resize event occured. This change improves the implementation. --- diff --git a/src/ui/gui/output-window.ui b/src/ui/gui/output-window.ui index 76822d17d8..3c9686d566 100644 --- a/src/ui/gui/output-window.ui +++ b/src/ui/gui/output-window.ui @@ -127,6 +127,7 @@ True + 5 GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK diff --git a/src/ui/gui/psppire-output-view.c b/src/ui/gui/psppire-output-view.c index ca3f9dc605..a7367ed76a 100644 --- a/src/ui/gui/psppire-output-view.c +++ b/src/ui/gui/psppire-output-view.c @@ -160,6 +160,18 @@ create_xr (struct psppire_output_view *view) cairo_destroy (cr); } +/* Return the horizontal position to place a widget whose + width is CHILD_WIDTH */ +static gint +get_xpos (const struct psppire_output_view *view, gint child_width) +{ + GdkWindow *gdkw = gtk_widget_get_window (GTK_WIDGET (view->output)); + guint w = gdk_window_get_width (gdkw); + int gutter = 0; + g_object_get (view->output, "border-width", &gutter, NULL); + return (gtk_widget_get_direction (GTK_WIDGET (view->output)) == GTK_TEXT_DIR_RTL) ? w - child_width - gutter: gutter; +} + static void create_drawing_area (struct psppire_output_view *view, GtkWidget *drawing_area, struct xr_rendering *r, @@ -183,7 +195,9 @@ create_drawing_area (struct psppire_output_view *view, G_CALLBACK (draw_callback), view); gtk_widget_set_size_request (drawing_area, tw, th); - gtk_layout_put (view->output, drawing_area, 0, view->y); + gint xpos = get_xpos (view, tw); + + gtk_layout_put (view->output, drawing_area, xpos, view->y); gtk_widget_show (drawing_area); } @@ -221,9 +235,7 @@ rerender (struct psppire_output_view *view) xr_rendering_measure (r, &tw, &th); - guint w = gdk_window_get_width (gdkw); - const gint gutter = 5; - gint xpos = (gtk_widget_get_direction (GTK_WIDGET (view->output)) == GTK_TEXT_DIR_RTL) ? w - tw - gutter: gutter; + gint xpos = get_xpos (view, tw); if (!item->drawing_area) {