diff options
Diffstat (limited to 'sys/gio/glabax/glbtitle.x')
-rw-r--r-- | sys/gio/glabax/glbtitle.x | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/sys/gio/glabax/glbtitle.x b/sys/gio/glabax/glbtitle.x new file mode 100644 index 00000000..d8c43c67 --- /dev/null +++ b/sys/gio/glabax/glbtitle.x @@ -0,0 +1,76 @@ +# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc. + +include <mach.h> +include <gset.h> +include <gio.h> +include "glabax.h" + +# GLB_PLOT_TITLE -- Draw plot title block. The block may contain several lines. +# Lines are plotted with center, left, or right justification, immediately +# above the top viewport boundary (not immediately above the drawn axis, +# which need not be at the viewport boundary). + +procedure glb_plot_title (gp, title, ntitlelines) + +pointer gp # graphics descriptor +char title[ARB] # title block +int ntitlelines # number of lines in title block + +int lineno, ip, wcs +real char_height, x, y, dy +pointer sp, op, lbuf, format, w +real ggetr() + +begin + if (title[1] == EOS || ntitlelines < 1) + return + + call smark (sp) + call salloc (lbuf, SZ_LINE, TY_CHAR) + call salloc (format, SZ_FORMAT, TY_CHAR) + + char_height = ggetr (gp, "ch") + if (char_height < EPSILON) + char_height = DEF_CHARHEIGHT * GP_TITLESIZE(gp) + + wcs = GP_WCS(gp) + w = GP_WCSPTR (gp, wcs) + y = min (1.0 - char_height, + WCS_SY2(w) + (ntitlelines - 1 + 0.5) * char_height) + + call sprintf (Memc[format], SZ_FORMAT, "hj=%c,vj=b") + switch (GP_TITLEJUST(gp)) { + case GT_LEFT: + call pargi ('l') + x = WCS_SX1(w) + case GT_RIGHT: + call pargi ('r') + x = WCS_SX2(w) + default: + call pargi ('c') + x = (WCS_SX1(w) + WCS_SX2(w)) / 2.0 + } + + call gsetr (gp, G_TXSIZE, GP_TITLESIZE(gp)) + call gseti (gp, G_WCS, 0) + lineno = 1 + op = lbuf + + for (ip=1; title[ip] != EOS; ip=ip+1) + if (title[ip] == '\n' || (title[ip+1] == EOS && op > lbuf)) { + if (title[ip] != '\n') { + Memc[op] = title[ip] + op = op + 1 + } + Memc[op] = EOS + dy = (lineno - 1) * char_height + call gtext (gp, x, y - dy, Memc[lbuf], Memc[format]) + lineno = lineno + 1 + op = lbuf + } else { + Memc[op] = title[ip] + op = op + 1 + } + + call sfree (sp) +end |