summaryrefslogtreecommitdiff
path: root/src/libs/libgroff/geometry.cc
diff options
context:
space:
mode:
authorwlemb <wlemb>2002-01-24 22:37:29 +0000
committerwlemb <wlemb>2002-01-24 22:37:29 +0000
commit7482010e8f31df2ac357c1f652c20f2d4fd6e713 (patch)
treed134edbf57061a0a29ced6b9bf92f37eeda3909a /src/libs/libgroff/geometry.cc
parent1878e2b7b01e7a8975aa29a57ea6b307226b88c8 (diff)
downloadgroff-7482010e8f31df2ac357c1f652c20f2d4fd6e713.tar.gz
* tmac/groff_www.man, NEWS: Fix typos.
Complete revision of color support: Adapt programs to the new libdriver/input.cc. Color spaces are no longer converted to RGB but transferred as-is in the troff intermediate output format. Handle default color gracefully. troff now supports a `default' color (which can't be changed). grops will now use the proper color space functions if available. Update pic. Note that currently grohtml doesn't handle colors properly. This has to be fixed. * src/libgroff/itoa.c (UINT_DIGITS): New macro. (ui_to_a): New function. * src/include/lib.h: Updated. * src/include/color.h (color_scheme): Replace `NONE' with `DEFAULT'. (color): Simplified; removed all `double' members and methods. A new array `components' now holds the color parameters. (color::is_default, color::get_components): New methods. (color::operator==, color:operator!=): New. (Red, Green, Blue, Cyan, Magenta, Yellow, Black, Gray): New macros to make access to the `components' array more comprehensible. * src/libgroff/color.cc: Implement new color support. (atoh): Small fixes. (color::read_encoding): Simplified for new troff intermediate color output format. (default_color): New global variable. * src/roff/troff/input.cc (default_symbol): New global variable. (lookup_color): Use it. (default_black): Removed. (do_glyph_color, do_fill_color): Simplified. (define_color): Handle default color. Improve warnings. (do_if_request): Handle default color. * src/roff/troff/env.cc (environment::environment): Initialize colors with `default_color'. * src/roff/troff/node.cc (troff_output_file::put): Add method for `unsigned int'. (troff_output_file::hex): Removed. (troff_output_file::fill_color, troff_output_file::glyph_color): Updated to include/color.h and libdriver/input.cc. * src/preproc/pic/object.cc (draw_arrow): New parameter to set fill color properly (identically to the outline color). \D'f...' doesn't work any more. All function calls to it updated. * src/devices/grohtml/post-html.cc (html_printer::do_body, main): Updated. * src/devices/grohtml/html-text.cc (html_text::issue_color_begin): Updated. * src/devices/grops/ps.cc (ps_output::put_color): New method. (ps_printer::sbuf_color): Make a real member instead of pointer. (ps_printer::fill_color, ps_printer::output_color): Removed. (ps_printer::ps_printer): Updated. (ps_printer::set_char): Ditto. (ps_printer::set_color): Use various color schemes. Use `put_color' method. (ps_printer::flush_sbuf): Don't set color. (ps_printer::fill_path): Take `environment' as parameter. Simplify color handling. (ps_printer::set_line_thickness): Renamed to ... (ps_printer::set_line_thickness_and_color): This (and updated). (ps_printer::set_color): Change second parameter from `complete' to `fill' which better describes what it does. (ps_printer::draw): Call `flush_sbuf' to output graphic commands and text in the right order. Updated. Remove branches for `f' and `F'; this is handled by libdriver/input.cc. * src/devices/grops/ps.h: Updated. * font/devps/prologue (FL): Redefined ({F,C}r,k,g: New color functions (with and without filling). * doc/pic.ms, src/preproc/pic/pic.man: Small fixes. * man/groff_diff.man, man/groff.man, man/groff_out.man, doc/groff.texinfo, NEWS: Updated. * src/libs/libdriver/input.cc: Completely rewritten. See comments in this file for what has been changed.
Diffstat (limited to 'src/libs/libgroff/geometry.cc')
-rw-r--r--src/libs/libgroff/geometry.cc32
1 files changed, 20 insertions, 12 deletions
diff --git a/src/libs/libgroff/geometry.cc b/src/libs/libgroff/geometry.cc
index 7aa0d2b8..58a94a4a 100644
--- a/src/libs/libgroff/geometry.cc
+++ b/src/libs/libgroff/geometry.cc
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001
+/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002
Free Software Foundation, Inc.
Written by Gaius Mulley <gaius@glam.ac.uk>
using adjust_arc_center() from printer.cc, written by James Clark.
@@ -136,14 +136,22 @@ void check_output_arc_limits(int x1, int y1,
*miny = y1 + yv1 - radius;
*maxy = y1 + yv1 + radius;
- // now see which min/max can be reduced and increased for the limits of
- // the arc
- //
- // Q2 | Q1
- // -----+-----
- // Q3 | Q4
- //
- if (xv1 >= 0 && yv1 >= 0) {
+ /* now to see which min/max can be reduced and increased for the limits of
+ * the arc
+ *
+ * Q2 | Q1
+ * -----+-----
+ * Q3 | Q4
+ *
+ *
+ * NB. (x1+xv1, y1+yv1) is at the origin
+ *
+ * below we ask a nested question
+ * (i) from which quadrant does the first vector start?
+ * (ii) into which quadrant does the second vector go?
+ * from the 16 possible answers we determine the limits of the arc
+ */
+ if (xv1 > 0 && yv1 > 0) {
// first vector in Q3
if (xv2 >= 0 && yv2 >= 0 ) {
// second in Q1
@@ -172,7 +180,7 @@ void check_output_arc_limits(int x1, int y1,
}
}
}
- else if (xv1 >= 0 && yv1 < 0) {
+ else if (xv1 > 0 && yv1 < 0) {
// first vector in Q2
if (xv2 >= 0 && yv2 >= 0) {
// second in Q1
@@ -202,7 +210,7 @@ void check_output_arc_limits(int x1, int y1,
*minx = MIN(x1, x2);
}
}
- else if (xv1 < 0 && yv1 < 0) {
+ else if (xv1 <= 0 && yv1 <= 0) {
// first vector in Q1
if (xv2 >= 0 && yv2 >= 0) {
// second in Q1
@@ -232,7 +240,7 @@ void check_output_arc_limits(int x1, int y1,
*maxy = y1;
}
}
- else if (xv1 < 0 && yv1 >= 0) {
+ else if (xv1 <= 0 && yv1 > 0) {
// first vector in Q4
if (xv2 >= 0 && yv2 >= 0) {
// second in Q1