From 94be0ced5ee9410446613753ee2bb87adad1fc8e Mon Sep 17 00:00:00 2001 From: Robby Findler Date: Wed, 15 Feb 2012 21:20:02 -0600 Subject: [PATCH] add make-platform-bitmap also: use it in pict's rendering and remove redex's platform-specific font choice (going back to using 'modern on all platforms) closes PR 12554 original commit: 1945ff270962679e13f66131c5b3eb91cc1edb2f --- collects/mred/private/wx/cocoa/canvas.rkt | 2 +- collects/mred/private/wx/cocoa/dc.rkt | 1 - collects/mred/private/wx/cocoa/image.rkt | 2 +- collects/mred/private/wx/cocoa/printer-dc.rkt | 1 - collects/mred/private/wx/cocoa/procs.rkt | 2 +- collects/mred/private/wx/win32/dc.rkt | 53 +++++++------------ collects/scribblings/gui/miscwin-funcs.scrbl | 5 +- 7 files changed, 27 insertions(+), 39 deletions(-) diff --git a/collects/mred/private/wx/cocoa/canvas.rkt b/collects/mred/private/wx/cocoa/canvas.rkt index 02b26721..7c5af3ef 100644 --- a/collects/mred/private/wx/cocoa/canvas.rkt +++ b/collects/mred/private/wx/cocoa/canvas.rkt @@ -5,13 +5,13 @@ racket/draw racket/draw/private/gl-context racket/draw/private/color + racket/draw/private/bitmap "pool.rkt" "utils.rkt" "const.rkt" "types.rkt" "window.rkt" "dc.rkt" - "bitmap.rkt" "cg.rkt" "queue.rkt" "item.rkt" diff --git a/collects/mred/private/wx/cocoa/dc.rkt b/collects/mred/private/wx/cocoa/dc.rkt index a04391c3..e0d076d0 100644 --- a/collects/mred/private/wx/cocoa/dc.rkt +++ b/collects/mred/private/wx/cocoa/dc.rkt @@ -8,7 +8,6 @@ racket/draw/private/gl-context "types.rkt" "utils.rkt" - "bitmap.rkt" "window.rkt" "../../lock.rkt" "../common/queue.rkt" diff --git a/collects/mred/private/wx/cocoa/image.rkt b/collects/mred/private/wx/cocoa/image.rkt index e6b86f4b..5b759a97 100644 --- a/collects/mred/private/wx/cocoa/image.rkt +++ b/collects/mred/private/wx/cocoa/image.rkt @@ -5,11 +5,11 @@ racket/draw/unsafe/cairo racket/draw/private/local racket/draw/unsafe/bstr + racket/draw/private/bitmap "utils.rkt" "types.rkt" "const.rkt" "cg.rkt" - "bitmap.rkt" "../../lock.rkt" (only-in '#%foreign ffi-callback)) diff --git a/collects/mred/private/wx/cocoa/printer-dc.rkt b/collects/mred/private/wx/cocoa/printer-dc.rkt index 2df653c5..11def7cd 100644 --- a/collects/mred/private/wx/cocoa/printer-dc.rkt +++ b/collects/mred/private/wx/cocoa/printer-dc.rkt @@ -13,7 +13,6 @@ "../../lock.rkt" "dc.rkt" "frame.rkt" - "bitmap.rkt" "cg.rkt" "utils.rkt" "types.rkt") diff --git a/collects/mred/private/wx/cocoa/procs.rkt b/collects/mred/private/wx/cocoa/procs.rkt index 13730a60..68eb670c 100644 --- a/collects/mred/private/wx/cocoa/procs.rkt +++ b/collects/mred/private/wx/cocoa/procs.rkt @@ -2,6 +2,7 @@ (require "../../syntax.rkt" racket/class racket/draw + racket/draw/private/bitmap ffi/unsafe ffi/unsafe/objc "utils.rkt" @@ -12,7 +13,6 @@ "filedialog.rkt" "colordialog.rkt" "dc.rkt" - "bitmap.rkt" "printer-dc.rkt" "menu-bar.rkt" "agl.rkt" diff --git a/collects/mred/private/wx/win32/dc.rkt b/collects/mred/private/wx/win32/dc.rkt index 85caeb7f..63f4951f 100644 --- a/collects/mred/private/wx/win32/dc.rkt +++ b/collects/mred/private/wx/win32/dc.rkt @@ -23,46 +23,33 @@ (define-gdi32 SelectClipRgn (_wfun _pointer _pointer -> _int)) -(define win32-bitmap% - (class bitmap% - (init w h hwnd [gl-config #f]) - (super-make-object (make-alternate-bitmap-kind w h)) +(define hwnd-param (make-parameter #f)) - (define s - (let ([s - (if (not hwnd) - (cairo_win32_surface_create_with_dib CAIRO_FORMAT_RGB24 w h) - (atomically - (let ([hdc (GetDC hwnd)]) - (begin0 - (cairo_win32_surface_create_with_ddb hdc - CAIRO_FORMAT_RGB24 w h) - (ReleaseDC hwnd hdc)))))]) - ;; initialize bitmap to white: - (let ([cr (cairo_create s)]) - (cairo_set_source_rgba cr 1.0 1.0 1.0 1.0) - (cairo_paint cr) - (cairo_destroy cr)) - s)) +(define win32-bitmap% + (class win32-no-hwnd-bitmap% + (init w h hwnd [gl-config #f]) + (inherit get-cairo-surface) + (parameterize ([hwnd-param hwnd]) + (super-new [w w] [h h])) + + (define/override (build-cairo-surface w h) + (define hwnd (hwnd-param)) + (if hwnd + (atomically + (let ([hdc (GetDC hwnd)]) + (begin0 + (cairo_win32_surface_create_with_ddb hdc + CAIRO_FORMAT_RGB24 w h) + (ReleaseDC hwnd hdc)))) + (super build-cairo-surface))) (define gl (and gl-config - (let ([hdc (cairo_win32_surface_get_dc s)]) + (let ([hdc (cairo_win32_surface_get_dc (get-cairo-surface))]) (set-cpointer-tag! hdc 'HDC) (create-gl-context hdc gl-config #t)))) - (define/override (get-bitmap-gl-context) gl) - - (define/override (ok?) #t) - (define/override (is-color?) #t) - (define/override (has-alpha-channel?) #f) - - (define/override (get-cairo-surface) s) - - (define/override (release-bitmap-storage) - (atomically - (cairo_surface_destroy s) - (set! s #f))))) + (define/override (get-bitmap-gl-context) gl))) (define dc% (class backing-dc% diff --git a/collects/scribblings/gui/miscwin-funcs.scrbl b/collects/scribblings/gui/miscwin-funcs.scrbl index 38577952..b7c33226 100644 --- a/collects/scribblings/gui/miscwin-funcs.scrbl +++ b/collects/scribblings/gui/miscwin-funcs.scrbl @@ -253,7 +253,10 @@ Creates a bitmap that draws in a way that is the same as drawing to a canvas in its default configuration. A normal @racket[bitmap%] draws in a more platform-independent way and -may use fewer constrained resources, particularly on Windows.} +may use fewer constrained resources, particularly on Windows. + +See also @racket[make-platform-bitmap]. +} @defproc[(play-sound [filename path-string?]