Revise the printing colour framework so that we can explicitly

request either of hatching or halftoning, and also choose which to
supply as a fallback when printing in colour.

[originally from svn r7976]
This commit is contained in:
Simon Tatham
2008-04-07 17:13:29 +00:00
parent 30da25262d
commit 0564211167
9 changed files with 172 additions and 105 deletions

34
ps.c
View File

@ -35,12 +35,13 @@ static void ps_fill(psdata *ps, int colour)
int hatch;
float r, g, b;
print_get_colour(ps->drawing, colour, &hatch, &r, &g, &b);
print_get_colour(ps->drawing, colour, ps->colour, &hatch, &r, &g, &b);
if (ps->colour) {
ps_printf(ps, "%g %g %g setrgbcolor fill\n", r, g, b);
} else if (hatch == HATCH_SOLID || hatch == HATCH_CLEAR) {
ps_printf(ps, "%d setgray fill\n", hatch == HATCH_CLEAR);
if (hatch < 0) {
if (ps->colour)
ps_printf(ps, "%g %g %g setrgbcolor fill\n", r, g, b);
else
ps_printf(ps, "%g setgray fill\n", r);
} else {
/* Clip to the region. */
ps_printf(ps, "gsave clip\n");
@ -77,20 +78,17 @@ static void ps_setcolour_internal(psdata *ps, int colour, char *suffix)
int hatch;
float r, g, b;
print_get_colour(ps->drawing, colour, &hatch, &r, &g, &b);
print_get_colour(ps->drawing, colour, ps->colour, &hatch, &r, &g, &b);
if (ps->colour) {
if (r != g || r != b)
ps_printf(ps, "%g %g %g setrgbcolor%s\n", r, g, b, suffix);
else
ps_printf(ps, "%g setgray%s\n", r, suffix);
} else {
/*
* Stroking in hatched colours is not permitted.
*/
assert(hatch == HATCH_SOLID || hatch == HATCH_CLEAR);
ps_printf(ps, "%d setgray%s\n", hatch == HATCH_CLEAR, suffix);
}
/*
* Stroking in hatched colours is not permitted.
*/
assert(hatch < 0);
if (ps->colour)
ps_printf(ps, "%g %g %g setrgbcolor%s\n", r, g, b, suffix);
else
ps_printf(ps, "%g setgray%s\n", r, suffix);
}
static void ps_setcolour(psdata *ps, int colour)