+ gdk_window_end_draw_frame (win, ctx);
+ cairo_region_destroy (region);
+}
+
+/* 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,
+ int tw, int th)
+{
+ g_object_set_data_full (G_OBJECT (drawing_area),
+ "rendering", r, free_rendering);
+
+ g_signal_connect (drawing_area, "draw",
+ G_CALLBACK (draw_callback), view);
+
+ gtk_widget_set_size_request (drawing_area, tw, th);
+ gint xpos = get_xpos (view, tw);
+
+ gtk_layout_put (view->output, drawing_area, xpos, view->y);
+
+ gtk_widget_show (drawing_area);