diff --git a/collects/racket/draw/private/dc.rkt b/collects/racket/draw/private/dc.rkt index 51466344ae..3c607e5b9e 100644 --- a/collects/racket/draw/private/dc.rkt +++ b/collects/racket/draw/private/dc.rkt @@ -493,7 +493,8 @@ (do-reset-matrix cr) (when clipping-region (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) @@ -649,7 +650,8 @@ (when clipping-region (send clipping-region lock-region 1) (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) (let* ([cm (make-cairo_matrix_t (cairo_matrix_t-xx matrix) diff --git a/collects/racket/draw/private/region.rkt b/collects/racket/draw/private/region.rkt index 27b35fbf19..0f131bf24e 100644 --- a/collects/racket/draw/private/region.rkt +++ b/collects/racket/draw/private/region.rkt @@ -109,7 +109,8 @@ (max b (+ t2 h2))))))))) (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) CAIRO_FILL_RULE_EVEN_ODD CAIRO_FILL_RULE_WINDING)] @@ -119,7 +120,9 @@ m))]) (when old-matrix ;; 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)]) (cairo_new_path cr) (send (car pr) do-path cr values values)