Add a silent zone "gutter" to the output viewer.
[pspp] / src / ui / gui / psppire-output-view.c
index 9a4be6810e18832f07f92117ba9cca08d79e55e1..ca3f9dc60523d0e775584ef478fe3d5f812acee4 100644 (file)
@@ -165,6 +165,17 @@ create_drawing_area (struct psppire_output_view *view,
                      GtkWidget *drawing_area, struct xr_rendering *r,
                      int tw, int th)
 {
+  /* Enable this to help with debugging.  It shows you which widgets are being
+     put where. */
+  if (0)
+    {
+      GdkRGBA green = {0, 1, 0, 1};
+      gtk_widget_override_background_color (GTK_WIDGET (view->output),
+                                           GTK_STATE_NORMAL, &green);
+      GdkRGBA red = {1, 0, 0, 1};
+      gtk_widget_override_background_color (drawing_area, GTK_STATE_NORMAL, &red);
+    }
+
   g_object_set_data_full (G_OBJECT (drawing_area),
                           "rendering", r, free_rendering);
 
@@ -181,13 +192,15 @@ static void
 rerender (struct psppire_output_view *view)
 {
   struct output_view_item *item;
+  GdkWindow *gdkw = gtk_widget_get_window (GTK_WIDGET (view->output));
   cairo_t *cr;
 
-  if (!view->n_items || !gtk_widget_get_window (GTK_WIDGET (view->output)))
+  if (!view->n_items || ! gdkw)
     return;
 
-  cr = gdk_cairo_create (gtk_widget_get_window (GTK_WIDGET (view->output)));
-
+  cr = gdk_cairo_create (gdkw);
+  if (view->xr == NULL)
+    create_xr (view);
   view->y = 0;
   view->max_width = 0;
   for (item = view->items; item < &view->items[view->n_items]; item++)
@@ -208,6 +221,10 @@ 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;
+
       if (!item->drawing_area)
         {
           item->drawing_area = gtk_drawing_area_new ();
@@ -218,10 +235,10 @@ rerender (struct psppire_output_view *view)
           g_object_set_data_full (G_OBJECT (item->drawing_area),
                                   "rendering", r, free_rendering);
           gtk_widget_set_size_request (item->drawing_area, tw, th);
-          gtk_layout_move (view->output, item->drawing_area, 0, view->y);
+          gtk_layout_move (view->output, item->drawing_area, xpos, view->y);
         }
 
-      alloc.x = 0;
+      alloc.x = xpos;
       alloc.y = view->y;
       alloc.width = tw;
       alloc.height = th;