output: Cache the script ltr versus rtl direction.
[pspp] / src / output / render.c
index bb4b4ad996304449d557fdf5a58886eb84853845..239d0c68ad5c9581e8d7411feec54617daec5382 100644 (file)
@@ -952,7 +952,7 @@ render_rule (const struct render_page *page, const int ofs[TABLE_N_AXES],
 
       bb[H][0] = ofs[H] + page->cp[H][d[H]];
       bb[H][1] = ofs[H] + page->cp[H][d[H] + 1];
-      if (render_direction_rtl ())
+      if (page->params->rtl)
        {
          int temp = bb[H][0];
          bb[H][0] = render_page_get_size (page, H) - bb[H][1];
@@ -974,7 +974,7 @@ render_cell (const struct render_page *page, const int ofs[TABLE_N_AXES],
 
   bb[H][0] = clip[H][0] = ofs[H] + page->cp[H][cell->d[H][0] * 2 + 1];
   bb[H][1] = clip[H][1] = ofs[H] + page->cp[H][cell->d[H][1] * 2];
-  if (render_direction_rtl ())
+  if (page->params->rtl)
     {
       int temp = bb[H][0];
       bb[H][0] = clip[H][0] = render_page_get_size (page, H) - bb[H][1];
@@ -1028,7 +1028,12 @@ render_cell (const struct render_page *page, const int ofs[TABLE_N_AXES],
       spill[axis][1] = rule_width (page, axis, cell->d[axis][1]) / 2;
     }
 
-  page->params->draw_cell (page->params->aux, cell, bb, spill, clip);
+  int color_idx = (cell->d[V][0] < page->h[V][0]
+                   || page->n[V] - (cell->d[V][0] + 1) < page->h[V][1]
+                   ? 0
+                   : (cell->d[V][0] - page->h[V][0]) & 1);
+  page->params->draw_cell (page->params->aux, cell, color_idx,
+                           bb, spill, clip);
 }
 
 /* Draws the cells of PAGE indicated in BB. */
@@ -1481,6 +1486,9 @@ render_pager_create (const struct render_params *params,
   /* Title. */
   add_text_page (p, table_item_get_title (table_item), title_width);
 
+  /* Layers. */
+  add_text_page (p, table_item_get_layers (table_item), title_width);
+
   /* Body. */
   render_pager_add_table (p, table_ref (table_item_get_table (table_item)), 0);