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
This commit is contained in:
Robby Findler 2012-02-15 21:20:02 -06:00
parent 6e8c3e072b
commit 94be0ced5e
7 changed files with 27 additions and 39 deletions

View File

@ -5,13 +5,13 @@
racket/draw racket/draw
racket/draw/private/gl-context racket/draw/private/gl-context
racket/draw/private/color racket/draw/private/color
racket/draw/private/bitmap
"pool.rkt" "pool.rkt"
"utils.rkt" "utils.rkt"
"const.rkt" "const.rkt"
"types.rkt" "types.rkt"
"window.rkt" "window.rkt"
"dc.rkt" "dc.rkt"
"bitmap.rkt"
"cg.rkt" "cg.rkt"
"queue.rkt" "queue.rkt"
"item.rkt" "item.rkt"

View File

@ -8,7 +8,6 @@
racket/draw/private/gl-context racket/draw/private/gl-context
"types.rkt" "types.rkt"
"utils.rkt" "utils.rkt"
"bitmap.rkt"
"window.rkt" "window.rkt"
"../../lock.rkt" "../../lock.rkt"
"../common/queue.rkt" "../common/queue.rkt"

View File

@ -5,11 +5,11 @@
racket/draw/unsafe/cairo racket/draw/unsafe/cairo
racket/draw/private/local racket/draw/private/local
racket/draw/unsafe/bstr racket/draw/unsafe/bstr
racket/draw/private/bitmap
"utils.rkt" "utils.rkt"
"types.rkt" "types.rkt"
"const.rkt" "const.rkt"
"cg.rkt" "cg.rkt"
"bitmap.rkt"
"../../lock.rkt" "../../lock.rkt"
(only-in '#%foreign ffi-callback)) (only-in '#%foreign ffi-callback))

View File

@ -13,7 +13,6 @@
"../../lock.rkt" "../../lock.rkt"
"dc.rkt" "dc.rkt"
"frame.rkt" "frame.rkt"
"bitmap.rkt"
"cg.rkt" "cg.rkt"
"utils.rkt" "utils.rkt"
"types.rkt") "types.rkt")

View File

@ -2,6 +2,7 @@
(require "../../syntax.rkt" (require "../../syntax.rkt"
racket/class racket/class
racket/draw racket/draw
racket/draw/private/bitmap
ffi/unsafe ffi/unsafe
ffi/unsafe/objc ffi/unsafe/objc
"utils.rkt" "utils.rkt"
@ -12,7 +13,6 @@
"filedialog.rkt" "filedialog.rkt"
"colordialog.rkt" "colordialog.rkt"
"dc.rkt" "dc.rkt"
"bitmap.rkt"
"printer-dc.rkt" "printer-dc.rkt"
"menu-bar.rkt" "menu-bar.rkt"
"agl.rkt" "agl.rkt"

View File

@ -23,46 +23,33 @@
(define-gdi32 SelectClipRgn (_wfun _pointer _pointer -> _int)) (define-gdi32 SelectClipRgn (_wfun _pointer _pointer -> _int))
(define win32-bitmap% (define hwnd-param (make-parameter #f))
(class bitmap%
(init w h hwnd [gl-config #f])
(super-make-object (make-alternate-bitmap-kind w h))
(define s (define win32-bitmap%
(let ([s (class win32-no-hwnd-bitmap%
(if (not hwnd) (init w h hwnd [gl-config #f])
(cairo_win32_surface_create_with_dib CAIRO_FORMAT_RGB24 w h) (inherit get-cairo-surface)
(atomically (parameterize ([hwnd-param hwnd])
(let ([hdc (GetDC hwnd)]) (super-new [w w] [h h]))
(begin0
(cairo_win32_surface_create_with_ddb hdc (define/override (build-cairo-surface w h)
CAIRO_FORMAT_RGB24 w h) (define hwnd (hwnd-param))
(ReleaseDC hwnd hdc)))))]) (if hwnd
;; initialize bitmap to white: (atomically
(let ([cr (cairo_create s)]) (let ([hdc (GetDC hwnd)])
(cairo_set_source_rgba cr 1.0 1.0 1.0 1.0) (begin0
(cairo_paint cr) (cairo_win32_surface_create_with_ddb hdc
(cairo_destroy cr)) CAIRO_FORMAT_RGB24 w h)
s)) (ReleaseDC hwnd hdc))))
(super build-cairo-surface)))
(define gl (and gl-config (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) (set-cpointer-tag! hdc 'HDC)
(create-gl-context hdc (create-gl-context hdc
gl-config gl-config
#t)))) #t))))
(define/override (get-bitmap-gl-context) gl) (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 dc% (define dc%
(class backing-dc% (class backing-dc%

View File

@ -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. canvas in its default configuration.
A normal @racket[bitmap%] draws in a more platform-independent way and 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?] @defproc[(play-sound [filename path-string?]