From d1cd4621dedbe8fe902168ec6307b2e5e4cbad41 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Fri, 14 Sep 2012 15:58:47 -0600 Subject: [PATCH] racket/draw: add `make-dc' convenience method to `bitmap%' --- collects/racket/draw/private/bitmap.rkt | 9 ++++++++- collects/racket/draw/private/dc.rkt | 4 ---- collects/scribblings/draw/bitmap-class.scrbl | 6 ++++++ collects/scribblings/draw/guide.scrbl | 4 ++-- 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/collects/racket/draw/private/bitmap.rkt b/collects/racket/draw/private/bitmap.rkt index 2e1e35efaf..17cab15b7f 100644 --- a/collects/racket/draw/private/bitmap.rkt +++ b/collects/racket/draw/private/bitmap.rkt @@ -22,10 +22,15 @@ make-platform-bitmap read-bitmap make-monochrome-bitmap + -bitmap-dc% (protect-out make-alternate-bitmap-kind build-cairo-surface quartz-bitmap% - win32-no-hwnd-bitmap%)) + win32-no-hwnd-bitmap% + install-bitmap-dc-class!)) + +(define -bitmap-dc% #f) +(define (install-bitmap-dc-class! v) (set! -bitmap-dc% v)) ;; FIXME: there must be some way to abstract over all many of the ;; ARGB/RGBA/BGRA iterations. @@ -286,6 +291,8 @@ (define/public (get-bitmap-gl-context) #f) + (define/public (make-dc) (make-object -bitmap-dc% this)) + (define/public (load-file in [kind 'unknown] [bg #f] diff --git a/collects/racket/draw/private/dc.rkt b/collects/racket/draw/private/dc.rkt index ee3df564c0..57052a1f2b 100644 --- a/collects/racket/draw/private/dc.rkt +++ b/collects/racket/draw/private/dc.rkt @@ -26,7 +26,6 @@ (provide dc-mixin dc-backend<%> default-dc-backend% - install-bitmap-dc-class! do-set-pen! do-set-brush!) @@ -45,9 +44,6 @@ black) (color->immutable-color c))) -(define -bitmap-dc% #f) -(define (install-bitmap-dc-class! v) (set! -bitmap-dc% v)) - ;; dc-backend : interface ;; ;; This is the interface that the backend specific code must implement diff --git a/collects/scribblings/draw/bitmap-class.scrbl b/collects/scribblings/draw/bitmap-class.scrbl index 3bdb0c7902..67fca0e4d2 100644 --- a/collects/scribblings/draw/bitmap-class.scrbl +++ b/collects/scribblings/draw/bitmap-class.scrbl @@ -241,6 +241,12 @@ For PNG loading, if @racket[bg-color] is not @racket[#f], then it is } +@defmethod[(make-dc) + boolean?]{ + +Return @racket[(make-object bitmap-dc% this)].} + + @defmethod[(ok?) boolean?]{ diff --git a/collects/scribblings/draw/guide.scrbl b/collects/scribblings/draw/guide.scrbl index 2a4b01d4a5..ffc1527a90 100644 --- a/collects/scribblings/draw/guide.scrbl +++ b/collects/scribblings/draw/guide.scrbl @@ -11,13 +11,13 @@ (let ([w (send bm0 get-width)] [h (send bm0 get-height)]) (let ([bm (make-bitmap w h)]) - (let ([dc (make-object bitmap-dc% bm)]) + (let ([dc (send bm make-dc)]) (send dc draw-bitmap bm0 0 0) (send dc set-bitmap #f)) bm)))] @interaction-eval[#:eval draw-eval (define (line-bitmap mode) (let* ([bm (make-bitmap 30 4)] - [dc (make-object bitmap-dc% bm)]) + [dc (send bm make-dc)]) (send dc set-smoothing mode) (send dc draw-line 0 2 30 2) (send dc set-bitmap #f)