fix clipping for PostScript/PDF drawing

This commit is contained in:
Matthew Flatt 2011-01-21 21:08:48 -07:00
parent b112fd76df
commit ac083b9148
2 changed files with 9 additions and 4 deletions

View File

@ -493,7 +493,8 @@
(do-reset-matrix cr) (do-reset-matrix cr)
(when clipping-region (when clipping-region
(send clipping-region install-region cr scroll-dx scroll-dy (send clipping-region install-region cr scroll-dx scroll-dy
(lambda (x) (align-x x)) (lambda (y) (align-y y))))) (lambda (x) (align-x x)) (lambda (y) (align-y y))
#:init-matrix (lambda (cr) (init-cr-matrix cr)))))
(define smoothing 'unsmoothed) (define smoothing 'unsmoothed)
@ -649,7 +650,8 @@
(when clipping-region (when clipping-region
(send clipping-region lock-region 1) (send clipping-region lock-region 1)
(send clipping-region install-region cr scroll-dx scroll-dy (send clipping-region install-region cr scroll-dx scroll-dy
(lambda (x) (align-x x)) (lambda (y) (align-y y)))))) (lambda (x) (align-x x)) (lambda (y) (align-y y))
#:init-matrix (lambda (cr) (init-cr-matrix cr))))))
(define/public (get-clipping-matrix) (define/public (get-clipping-matrix)
(let* ([cm (make-cairo_matrix_t (cairo_matrix_t-xx matrix) (let* ([cm (make-cairo_matrix_t (cairo_matrix_t-xx matrix)

View File

@ -109,7 +109,8 @@
(max b (+ t2 h2))))))))) (max b (+ t2 h2)))))))))
(define/public (install-region cr scroll-dx scroll-dy align-x align-y (define/public (install-region cr scroll-dx scroll-dy align-x align-y
[init (void)] [install (lambda (cr v) (cairo_clip cr))]) [init (void)] [install (lambda (cr v) (cairo_clip cr))]
#:init-matrix [init-matrix (lambda (cr) (void))])
(let ([default-fill-rule (if (ormap (lambda (pr) (eq? (cdr pr) 'odd-even)) paths) (let ([default-fill-rule (if (ormap (lambda (pr) (eq? (cdr pr) 'odd-even)) paths)
CAIRO_FILL_RULE_EVEN_ODD CAIRO_FILL_RULE_EVEN_ODD
CAIRO_FILL_RULE_WINDING)] CAIRO_FILL_RULE_WINDING)]
@ -119,7 +120,9 @@
m))]) m))])
(when old-matrix (when old-matrix
;; each path is already transformed ;; each path is already transformed
(cairo_set_matrix cr (make-cairo_matrix_t 1 0 0 1 scroll-dx scroll-dy))) (cairo_identity_matrix cr)
(init-matrix cr)
(cairo_transform cr (make-cairo_matrix_t 1 0 0 1 scroll-dx scroll-dy)))
(for/fold ([v init]) ([pr (in-list paths)]) (for/fold ([v init]) ([pr (in-list paths)])
(cairo_new_path cr) (cairo_new_path cr)
(send (car pr) do-path cr values values) (send (car pr) do-path cr values values)