shithub: puzzles

Download patch

ref: a0435df8aa30af4ea24b4b375bc1e37600bc19fe
parent: df3b9cb845d5641dab16cbe071dca0ac2b7a97fb
author: Ian Jackson <ijackson@chiark.greenend.org.uk>
date: Fri Sep 29 10:29:56 EDT 2017

draw_thick_line: Bound thickness by 1.0 below

A line less than 1 pixel wide may not be visible.  So if a backend
wants to draw a line whose width scaled by the window size, that line
thickness ought to be at least 1.0.

That way if the scale is small, but still big enough that there is a
straightforward interpretation of the drawing primitives which is
legible, we implement that interpretation.

If a frontend draws a narrower line, making it wider might cause
drawing anomalies, due to the line now having a bigger bounding box.
These anomalies should occur only at small scales where currently the
display is not legible, and we should fix them as we notice them.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>

--- a/devel.but
+++ b/devel.but
@@ -1928,6 +1928,9 @@
 
 This function may be used for both drawing and printing.
 
+If the xpecified thickness is less than 1.0, 1.0 is used.
+This ensures that thin lines are visible even at small scales.
+
 \S{drawing-draw-text} \cw{draw_text()}
 
 \c void draw_text(drawing *dr, int x, int y, int fonttype,
--- a/drawing.c
+++ b/drawing.c
@@ -90,6 +90,8 @@
 void draw_thick_line(drawing *dr, float thickness,
 		     float x1, float y1, float x2, float y2, int colour)
 {
+    if (thickness < 1.0)
+        thickness = 1.0;
     if (dr->api->draw_thick_line) {
 	dr->api->draw_thick_line(dr->handle, thickness,
 				 x1, y1, x2, y2, colour);