clean up drawing with 0-width pens (hairline mode)
This commit is contained in:
parent
009468d6a8
commit
95f0d16761
|
@ -122,6 +122,11 @@
|
||||||
;; Used to keep smoothing disabled for b&w contexts
|
;; Used to keep smoothing disabled for b&w contexts
|
||||||
dc-adjust-smoothing
|
dc-adjust-smoothing
|
||||||
|
|
||||||
|
;; get-hairline-width
|
||||||
|
;;
|
||||||
|
;; Gets the pen width to use in place of 0 in 'smoothed mode
|
||||||
|
get-hairline-width
|
||||||
|
|
||||||
;; install-color : cairo_t color<%> alpha boolean? -> void
|
;; install-color : cairo_t color<%> alpha boolean? -> void
|
||||||
;;
|
;;
|
||||||
;; Installs a color, which a monochrome context might reduce
|
;; Installs a color, which a monochrome context might reduce
|
||||||
|
@ -186,6 +191,7 @@
|
||||||
(define/public (ok?) #t)
|
(define/public (ok?) #t)
|
||||||
|
|
||||||
(define/public (dc-adjust-smoothing s) s)
|
(define/public (dc-adjust-smoothing s) s)
|
||||||
|
(define/public (get-hairline-width sx) (/ 1 sx))
|
||||||
|
|
||||||
(define/public (install-color cr c a bg?)
|
(define/public (install-color cr c a bg?)
|
||||||
(let ([norm (lambda (v) (/ v 255.0))])
|
(let ([norm (lambda (v) (/ v 255.0))])
|
||||||
|
@ -236,7 +242,7 @@
|
||||||
(super-new)
|
(super-new)
|
||||||
|
|
||||||
(inherit flush-cr get-cr release-cr end-cr init-cr-matrix get-pango
|
(inherit flush-cr get-cr release-cr end-cr init-cr-matrix get-pango
|
||||||
install-color dc-adjust-smoothing reset-clip
|
install-color dc-adjust-smoothing get-hairline-width reset-clip
|
||||||
collapse-bitmap-b&w?
|
collapse-bitmap-b&w?
|
||||||
ok? can-combine-text? can-mask-bitmap? get-clear-operator)
|
ok? can-combine-text? can-mask-bitmap? get-clear-operator)
|
||||||
|
|
||||||
|
@ -873,11 +879,14 @@
|
||||||
alpha
|
alpha
|
||||||
#f)))
|
#f)))
|
||||||
(cairo_set_line_width cr (let* ([v (send pen get-width)]
|
(cairo_set_line_width cr (let* ([v (send pen get-width)]
|
||||||
[v (if (aligned? smoothing)
|
[align? (aligned? smoothing)]
|
||||||
|
[v (if align?
|
||||||
(/ (floor (* effective-scale-x v)) effective-scale-x)
|
(/ (floor (* effective-scale-x v)) effective-scale-x)
|
||||||
v)])
|
v)])
|
||||||
(if (zero? v)
|
(if (zero? v)
|
||||||
1
|
(if align?
|
||||||
|
(/ 1 effective-scale-x)
|
||||||
|
(get-hairline-width effective-scale-x))
|
||||||
v)))
|
v)))
|
||||||
(unless (or (eq? s 'solid)
|
(unless (or (eq? s 'solid)
|
||||||
(eq? s 'xor))
|
(eq? s 'xor))
|
||||||
|
|
|
@ -44,6 +44,7 @@
|
||||||
get-font-metrics-key
|
get-font-metrics-key
|
||||||
install-color
|
install-color
|
||||||
dc-adjust-smoothing
|
dc-adjust-smoothing
|
||||||
|
get-hairline-width
|
||||||
can-combine-text?
|
can-combine-text?
|
||||||
can-mask-bitmap?
|
can-mask-bitmap?
|
||||||
reset-clip
|
reset-clip
|
||||||
|
|
|
@ -182,6 +182,8 @@
|
||||||
(define/override (can-mask-bitmap?)
|
(define/override (can-mask-bitmap?)
|
||||||
#f)
|
#f)
|
||||||
|
|
||||||
|
(define/override (get-hairline-width cx) (/ 1.0 (* cx 4)))
|
||||||
|
|
||||||
(define is-eps? (and as-eps #t))
|
(define is-eps? (and as-eps #t))
|
||||||
(define/public (multiple-pages-ok?) (not is-eps?))
|
(define/public (multiple-pages-ok?) (not is-eps?))
|
||||||
|
|
||||||
|
|
|
@ -49,10 +49,15 @@ To avoid creating multiple pens with the same characteristics, use the
|
||||||
global @scheme[pen-list%] object @indexed-scheme[the-pen-list], or
|
global @scheme[pen-list%] object @indexed-scheme[the-pen-list], or
|
||||||
provide a color, width, and style to @xmethod[dc<%> set-pen].
|
provide a color, width, and style to @xmethod[dc<%> set-pen].
|
||||||
|
|
||||||
A pen of size @scheme[0] uses the minimum line size for the
|
When drawing in @racket['smoothed] or @racket['aligned] mode, a pen's
|
||||||
destination drawing context. In (unscaled) canvases and bitmaps,
|
size is truncated after scaling to an integral size. A pen of size
|
||||||
a zero-width pen behaves the nearly same as a pen of
|
@scheme[0] (after truncation, if applicable) uses a non-zero,
|
||||||
size @scheme[1].
|
scale-insensitive line size for the destination drawing context:
|
||||||
|
@racket[1/4] unit (after scaling) for @racket[post-script-dc%] or
|
||||||
|
@racket[pdf-dc%] contexts in @racket['smoothed] mode, or @racket[1]
|
||||||
|
unit (after scaling) for any other context. For example, in unscaled
|
||||||
|
canvas and bitmap contexts, a zero-width pen behaves the same as a
|
||||||
|
pen of size @scheme[1].
|
||||||
|
|
||||||
|
|
||||||
@defconstructor[([color (or/c string? (is-a?/c color%)) "black"]
|
@defconstructor[([color (or/c string? (is-a?/c color%)) "black"]
|
||||||
|
|
|
@ -108,6 +108,13 @@ generates PDF output.
|
||||||
The new `svg-dc%' drawing context is similar to `post-script-dc%',
|
The new `svg-dc%' drawing context is similar to `post-script-dc%',
|
||||||
but it generates SVG output.
|
but it generates SVG output.
|
||||||
|
|
||||||
|
All drawing contexts, including `post-script-dc%' support smoothing
|
||||||
|
modes, and the default is 'unsmoothed even for `post-script-dc%' ---
|
||||||
|
which means that PostScript drawing is aligned and pen widths are
|
||||||
|
truncated to integer sizes by default. Drawing at pen size 0 no longer
|
||||||
|
triggers ``hairline'' mode, but instead just uses a 1/4-width pen
|
||||||
|
when in 'smoothed mode.
|
||||||
|
|
||||||
|
|
||||||
Other Drawing-Context Changes
|
Other Drawing-Context Changes
|
||||||
-----------------------------
|
-----------------------------
|
||||||
|
|
Loading…
Reference in New Issue
Block a user