diff --git a/pkgs/gui-pkgs/gui-doc/mrlib/scribblings/image-core.scrbl b/pkgs/gui-pkgs/gui-doc/mrlib/scribblings/image-core.scrbl index 01568bab..90936124 100644 --- a/pkgs/gui-pkgs/gui-doc/mrlib/scribblings/image-core.scrbl +++ b/pkgs/gui-pkgs/gui-doc/mrlib/scribblings/image-core.scrbl @@ -26,6 +26,11 @@ up an image. @defproc[(un/cache-image [image image?] [b any/c]) image?]{ Returns an image that either caches its drawing in the snip @method[snip% draw] method or doesn't, depending on @racket[b]. + + Not all @racket[image?] values have special caching capabilities; + in those cases, this returns a copy of the value if it is a + @racket[snip%]; otherwise it returns the value itself (if it + isn't a @racket[snip%]). } @defproc[(compute-image-cache [image image?]) void?]{ diff --git a/pkgs/gui-pkgs/gui-lib/mrlib/image-core.rkt b/pkgs/gui-pkgs/gui-lib/mrlib/image-core.rkt index 2ccb2d93..3dcbaa13 100644 --- a/pkgs/gui-pkgs/gui-lib/mrlib/image-core.rkt +++ b/pkgs/gui-pkgs/gui-lib/mrlib/image-core.rkt @@ -84,10 +84,17 @@ has been moved out). (define (un/cache-image img bitmap-cache?) (unless (image? img) - (error 'un/cache-image "expected an image as the first argument, got ~e" img)) - (define res (send img copy)) - (send res set-use-bitmap-cache?! (and bitmap-cache? #t)) - res) + (raise-argument-error 'un/cache-image + "image?" + 0 + img bitmap-cache?)) + (cond + [(is-a? img snip%) + (define res (send img copy)) + (when (is-a? res image%) + (send res set-use-bitmap-cache?! (and bitmap-cache? #t))) + res] + [else img])) (define (compute-image-cache img) (unless (image? img) diff --git a/pkgs/gui-pkgs/gui-test/mrlib/tests/image-core.rkt b/pkgs/gui-pkgs/gui-test/mrlib/tests/image-core.rkt new file mode 100644 index 00000000..e8bf39be --- /dev/null +++ b/pkgs/gui-pkgs/gui-test/mrlib/tests/image-core.rkt @@ -0,0 +1,10 @@ +#lang racket/base + +(require rackunit + mrlib/image-core + (only-in racket/gui/base make-bitmap)) + +;; just check there is no error +(check-equal? (begin (un/cache-image (make-bitmap 1 1) #t) + (void)) + (void)) \ No newline at end of file