diff --git a/pkgs/gui-pkgs/gui-lib/mred/private/wx/cocoa/dc.rkt b/pkgs/gui-pkgs/gui-lib/mred/private/wx/cocoa/dc.rkt index bba8669c..2a1afe13 100644 --- a/pkgs/gui-pkgs/gui-lib/mred/private/wx/cocoa/dc.rkt +++ b/pkgs/gui-pkgs/gui-lib/mred/private/wx/cocoa/dc.rkt @@ -204,6 +204,13 @@ (cairo_matrix_t-y0 m))) (cairo_surface_flush s) (define cg (cairo_quartz_surface_get_cg_context s)) + (begin + ;; A Cairo flush doesn't reset the clipping region. The + ;; implementation of clipping is that there's a saved + ;; GState that we can use to get back to the original + ;; clipping region, so restore (and save again) that state: + (CGContextRestoreGState cg) + (CGContextSaveGState cg)) (CGContextSaveGState cg) (CGContextConcatCTM cg trans) (let ([n (cairo_rectangle_list_t-num_rectangles rs)]) diff --git a/pkgs/gui-pkgs/gui-test/tests/gracket/draw.rkt b/pkgs/gui-pkgs/gui-test/tests/gracket/draw.rkt index 1f082eaa..55e43173 100644 --- a/pkgs/gui-pkgs/gui-test/tests/gracket/draw.rkt +++ b/pkgs/gui-pkgs/gui-test/tests/gracket/draw.rkt @@ -262,6 +262,7 @@ (define c-xscale 1) (define c-yscale 1) (define c-offset 0) + (define c-rotate 0) (define c-gray? #f) (public* [set-bitmaps (lambda (on?) (set! no-bitmaps? (not on?)) (refresh))] @@ -275,6 +276,7 @@ [set-scale (lambda (xs ys) (set! xscale xs) (set! yscale ys) (refresh))] [set-offset (lambda (o) (set! offset o) (refresh))] [set-canvas-offset (lambda (o) (set! c-offset o) (refresh))] + [set-canvas-rotation (lambda (r) (set! c-rotate r) (refresh))] [set-canvas-gray (lambda (g?) (set! c-gray? g?) (refresh))]) (override* [on-paint @@ -1042,6 +1044,7 @@ (send can-dc set-brush b) (send can-dc set-pen p))) (send can-dc set-origin c-offset c-offset) + (send can-dc set-rotation c-rotate) (send can-dc set-scale c-xscale c-yscale) (send can-dc set-alpha current-c-alpha) (when c-clip @@ -1415,6 +1418,9 @@ (make-object check-box% "Cvs +10" hp3 (lambda (self event) (send canvas set-canvas-offset (if (send self get-value) 10 0)))) + (make-object check-box% "Cvs rot" hp3 + (lambda (self event) + (send canvas set-canvas-rotation (if (send self get-value) (* pi -1/5) 0)))) (make-object choice% "Cvs Clip" '("None" "Empty" "Square" "Squares" "Octagon") hp3 (lambda (self event) (send canvas set-canvas-clip (case (send self get-selection)