Merge remote-tracking branch 'origin/sheet'
[pspp] / src / output / cairo.c
index 1a8c78c69fe0d0062dcb379aa0f4d758c2ebb48c..ef0b593233e67f7e03867926d35753536314166f 100644 (file)
@@ -1078,7 +1078,8 @@ xr_layout_cell_text (struct xr_driver *xr,
             {
               if (brk && clip[H][0] != clip[H][1])
                 best = bottom;
-              *brk = bottom;
+              if (brk)
+                *brk = bottom;
             }
           else
             break;
@@ -1307,7 +1308,7 @@ xr_rendering_create_text (struct xr_driver *xr, const char *text, cairo_t *cr)
   return r;
 }
 
-void 
+void
 xr_rendering_apply_options (struct xr_rendering *xr, struct string_map *o)
 {
   if (is_table_item (xr->item))
@@ -1541,13 +1542,20 @@ xr_chart_render (struct xr_render_fsm *fsm, struct xr_driver *xr)
 {
   struct xr_chart_state *cs = UP_CAST (fsm, struct xr_chart_state, fsm);
 
-  if (xr->y > 0)
+  const int chart_height = 0.8 * (xr->length < xr->width ? xr->length : xr->width);
+
+  if (xr->y > xr->length - chart_height)
     return true;
 
   if (xr->cairo != NULL)
-    xr_draw_chart (cs->chart_item, xr->cairo, 0.0, 0.0,
-                   xr_to_pt (xr->width), xr_to_pt (xr->length));
-  xr->y = xr->length;
+    {
+      xr_draw_chart (cs->chart_item, xr->cairo,
+                    0.0,
+                    xr_to_pt (xr->y),
+                    xr_to_pt (xr->width),
+                    xr_to_pt (chart_height));
+    }
+  xr->y += chart_height;
 
   return false;
 }