X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Foutput%2Frender.c;fp=src%2Foutput%2Frender.c;h=0585d2362236889b18e38da7bf35c4cdca119ad4;hb=2f2e7da7b83ac875fae35059bfb4df6effdf3cd2;hp=d282a8fce68797e0430fc7a95cf86a5c1dbe35dd;hpb=a33e8056b09457b35ef25605c7f097058637da59;p=pspp diff --git a/src/output/render.c b/src/output/render.c index d282a8fce6..0585d23622 100644 --- a/src/output/render.c +++ b/src/output/render.c @@ -933,6 +933,33 @@ render_page_get_size (const struct render_page *page, enum table_axis axis) return page->cp[axis][page->n[axis] * 2 + 1]; } +/* If PAGE is smaller than SIZE along AXIS, inserts extra space to increase + its size to SIZE. */ +void +render_page_stretch (struct render_page *page, enum table_axis axis, + int size) +{ + int extra = size - render_page_get_size (page, axis); + if (extra > 0) + { + int n = page->n[axis]; + int error = 0; + int adjust = 0; + int i; + + for (i = 2; i <= 2 * n + 1; i++) + { + if (!(i & 1)) + { + error += extra; + adjust += error / n; + error %= n; + } + page->cp[axis][i] += adjust; + } + } +} + int render_page_get_best_breakpoint (const struct render_page *page, int height) { @@ -1416,7 +1443,7 @@ struct render_pager struct render_break y_break; }; -static const struct render_page * +static struct render_page * render_pager_add_table (struct render_pager *p, struct table *table) { struct render_page *page; @@ -1489,18 +1516,27 @@ render_pager_create (const struct render_params *params, const char *caption = table_item_get_caption (table_item); const char *title = table_item_get_title (table_item); const struct render_page *body_page; + struct render_page *title_page; struct render_pager *p; p = xzalloc (sizeof *p); p->params = params; /* Title. */ - if (title) - render_pager_add_table (p, table_from_string (TAB_LEFT, title)); + title_page = (title + ? render_pager_add_table ( + p, table_from_string (TAB_CENTER | TAB_EMPH, title)) + : NULL); /* Body. */ body_page = render_pager_add_table (p, table_ref (table_item_get_table ( table_item))); + if (title_page && body_page) + { + int body_page_size = render_page_get_size (body_page, H); + render_page_stretch (title_page, H, + MIN (body_page_size, params->size[H])); + } /* Caption. */ if (caption)