diff options
| author | Po Lu <luangruo@yahoo.com> | 2023-07-08 21:49:21 +0800 |
|---|---|---|
| committer | Po Lu <luangruo@yahoo.com> | 2023-07-08 21:49:21 +0800 |
| commit | a36207574ac436fd8871639388cc6400069bb9bb (patch) | |
| tree | 4d9cb662104eeb5013ef8a8af5c1d8c22ccfa052 /java/org/gnu/emacs/EmacsDrawLine.java | |
| parent | c843f3e23b48dcf65e72db0eefa6a5a74c815ff6 (diff) | |
Fix EmacsDrawLine again
* java/org/gnu/emacs/EmacsDrawLine.java (perform): Symmetrically
adjust coordinates to cover the last pixel. Then, fill the left
most pixel of the line.
Diffstat (limited to 'java/org/gnu/emacs/EmacsDrawLine.java')
| -rw-r--r-- | java/org/gnu/emacs/EmacsDrawLine.java | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/java/org/gnu/emacs/EmacsDrawLine.java b/java/org/gnu/emacs/EmacsDrawLine.java index 3f5067c0bdd..d367ccff9c4 100644 --- a/java/org/gnu/emacs/EmacsDrawLine.java +++ b/java/org/gnu/emacs/EmacsDrawLine.java @@ -32,30 +32,45 @@ public final class EmacsDrawLine Rect rect; Canvas canvas; Paint paint; + int x0, x1, y0, y1; /* TODO implement stippling. */ if (gc.fill_style == EmacsGC.GC_FILL_OPAQUE_STIPPLED) return; + /* Calculate the leftmost and rightmost points. */ + + x0 = Math.min (x, x2 + 1); + x1 = Math.max (x, x2 + 1); + y0 = Math.min (y, y2 + 1); + y1 = Math.max (y, y2 + 1); + + /* And the clip rectangle. */ + paint = gc.gcPaint; - rect = new Rect (Math.min (x, x2 + 1), - Math.min (y, y2 + 1), - Math.max (x2 + 1, x), - Math.max (y2 + 1, y)); + rect = new Rect (x0, y0, x1, y1); canvas = drawable.lockCanvas (gc); if (canvas == null) return; - paint.setStyle (Paint.Style.STROKE); + paint.setStyle (Paint.Style.FILL); /* Since drawLine has PostScript style behavior, adjust the - coordinates appropriately. */ + coordinates appropriately. + + The left most pixel of a straight line is always partially + filled. Patch it in manually. */ if (gc.clip_mask == null) - canvas.drawLine ((float) x, (float) y + 0.5f, - (float) x2 + 0.5f, (float) y2 + 0.5f, - paint); + { + canvas.drawLine ((float) x + 0.5f, (float) y + 0.5f, + (float) x2 + 0.5f, (float) y2 + 0.5f, + paint); + + if (x2 > x) + canvas.drawRect (new Rect (x, y, x + 1, y + 1), paint); + } /* DrawLine with clip mask not implemented; it is not used by Emacs. */ |
