Fix bug rendering margin in output viewer.
authorJohn Darrington <john@darrington.wattle.id.au>
Mon, 7 Dec 2015 17:25:29 +0000 (18:25 +0100)
committerJohn Darrington <john@darrington.wattle.id.au>
Mon, 7 Dec 2015 17:25:29 +0000 (18:25 +0100)
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.

src/ui/gui/output-window.ui
src/ui/gui/psppire-output-view.c

index 76822d17d88bada97c4aad289e4ab69ce3f83cc1..3c9686d566ed657466c76b1aa4c917b42dc3a5b5 100644 (file)
                 <child>
                   <object class="GtkLayout" id="output">
                     <property name="visible">True</property>
+                   <property name="border-width">5</property>
                     <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                   </object>
                 </child>
index ca3f9dc60523d0e775584ef478fe3d5f812acee4..a7367ed76a9d85723d195e2ce98b21035c57463b 100644 (file)
@@ -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)
         {