diff --git a/collects/racket/draw/private/bitmap-dc.rkt b/collects/racket/draw/private/bitmap-dc.rkt index 4ac570c946..469508cb37 100644 --- a/collects/racket/draw/private/bitmap-dc.rkt +++ b/collects/racket/draw/private/bitmap-dc.rkt @@ -73,6 +73,11 @@ (define/override (collapse-bitmap-b&w?) b&w?) + (define/override (get-clear-operator) + (if (send bm has-alpha-channel?) + CAIRO_OPERATOR_CLEAR + CAIRO_OPERATOR_OVER)) + (super-new))) (define black (send the-color-database find-color "black")) diff --git a/collects/racket/draw/private/dc.rkt b/collects/racket/draw/private/dc.rkt index 9c71ea07fe..67af6fc249 100644 --- a/collects/racket/draw/private/dc.rkt +++ b/collects/racket/draw/private/dc.rkt @@ -151,7 +151,12 @@ ;; erase : -> void ;; A public method: erases all drawing - erase)) + erase + + ;; get-clear-operator : -> int + ;; Gets the Cairo operator used by the default + ;; `clear' implementation + get-clear-operator)) (define default-dc-backend% (class* object% (dc-backend<%>) @@ -206,6 +211,9 @@ (define/public (get-gl-context) #f) + (define/public (get-clear-operator) + CAIRO_OPERATOR_CLEAR) + (super-new))) (define hilite-color (send the-color-database find-color "black")) @@ -228,7 +236,7 @@ (inherit flush-cr get-cr release-cr end-cr init-cr-matrix get-pango install-color dc-adjust-smoothing reset-clip collapse-bitmap-b&w? - ok? can-combine-text? can-mask-bitmap?) + ok? can-combine-text? can-mask-bitmap? get-clear-operator) ;; Using the global lock here is troublesome, becase ;; operations involving paths, regions, and text can @@ -651,7 +659,7 @@ (with-cr (check-ok 'erase) cr - (cairo_set_operator cr CAIRO_OPERATOR_CLEAR) + (cairo_set_operator cr (get-clear-operator)) (cairo_set_source_rgba cr 1.0 1.0 1.0 1.0) (cairo_paint cr) (cairo_set_operator cr CAIRO_OPERATOR_OVER))) diff --git a/collects/racket/draw/private/local.rkt b/collects/racket/draw/private/local.rkt index 76041e97ec..c3cfeea2c4 100644 --- a/collects/racket/draw/private/local.rkt +++ b/collects/racket/draw/private/local.rkt @@ -43,4 +43,6 @@ install-color dc-adjust-smoothing can-combine-text? - can-mask-bitmap?) + can-mask-bitmap? + reset-clip + get-clear-operator)