slideshow: add pict->pre-render-pict

Uses `make-bitmap` from the viewer's canvas to optimize drawing.
This commit is contained in:
Matthew Flatt 2013-11-23 11:35:04 -07:00
parent 9cb646bbd2
commit 83123726eb
9 changed files with 34 additions and 2 deletions

View File

@ -204,6 +204,13 @@ pixels tall. The result is @racket[pict] when using a 1024 by 768
display.} display.}
@defproc[(pict->pre-render-pict [pict pict?]) pict?]{
Produces a pict that is like @racket[pict], but optimized for drawing
on some platforms (currently Mac OS X). This function may be useful
to reduce drawing times for for large bitmaps or complex drawings.}
@defproc[(make-outline [name (or/c symbol? (listof symbol?))] @defproc[(make-outline [name (or/c symbol? (listof symbol?))]
[title (or/c string? pict?)] [title (or/c string? pict?)]
[subitems (or/c #f null? [subitems (or/c #f null?

View File

@ -1,3 +1,6 @@
Version 1.2
slideshow/base: added pict->pre-render-pict
Version 1.1 Version 1.1
slideshow/pict: added 'outline style for text slideshow/pict: added 'outline style for text

View File

@ -46,4 +46,5 @@
current-titlet current-para-width current-titlet current-para-width
set-page-numbers-visible! done-making-slides set-page-numbers-visible! done-making-slides
set-spotlight-style! set-spotlight-style!
pict->pre-render-pict
clickback interactive make-slide-inset slide-inset? apply-slide-inset)) clickback interactive make-slide-inset slide-inset? apply-slide-inset))

View File

@ -168,6 +168,9 @@
(define (set-spotlight-style! #:size [size #f] #:color [color #f]) (define (set-spotlight-style! #:size [size #f] #:color [color #f])
(viewer:set-spotlight-style! #:size size #:color color)) (viewer:set-spotlight-style! #:size size #:color color))
(define (pict->pre-render-pict p)
(viewer:pict->pre-render-pict p))
(define current-page-number-font (define current-page-number-font
(make-parameter (make-parameter
(make-object font% 10 'default 'normal 'normal) (make-object font% 10 'default 'normal 'normal)

View File

@ -4,4 +4,4 @@
(define release-note-files '(("Slideshow" "HISTORY.txt"))) (define release-note-files '(("Slideshow" "HISTORY.txt")))
(define version "1.1") (define version "1.2")

View File

@ -31,7 +31,9 @@
;; Called when a clickback-containing slide is rendered: ;; Called when a clickback-containing slide is rendered:
add-click-region! add-click-region!
;; Called when a interactive-containing slide is rendered: ;; Called when a interactive-containing slide is rendered:
add-interactive!)) add-interactive!
;; To potentially speed up display:
pict->pre-render-pict))
;; The core unit's exports, which are the functions used by a ;; The core unit's exports, which are the functions used by a
;; Slideshow program: ;; Slideshow program:
@ -82,6 +84,7 @@
current-titlet current-para-width current-titlet current-para-width
set-page-numbers-visible! done-making-slides set-page-numbers-visible! done-making-slides
set-spotlight-style! set-spotlight-style!
pict->pre-render-pict
clickback clickback
interactive interactive
make-slide-inset make-slide-inset

View File

@ -129,6 +129,7 @@
current-titlet current-para-width current-titlet current-para-width
set-page-numbers-visible! done-making-slides set-page-numbers-visible! done-making-slides
set-spotlight-style! set-spotlight-style!
pict->pre-render-pict
slide/timeout slide/timeout
slide/title/timeout slide/title/timeout
slide/center/timeout slide/center/timeout

View File

@ -63,6 +63,7 @@
(define (set-spotlight-style! #:size [size #f] (define (set-spotlight-style! #:size [size #f]
#:color [color #f]) #:color [color #f])
(void)) (void))
(define (pict->pre-render-pict p) p)
(define done-making-slides void)) (define done-making-slides void))
CORE])))) CORE]))))
(parameterize ([current-namespace ns]) (parameterize ([current-namespace ns])

View File

@ -31,6 +31,7 @@
(viewer:enable-click-advance! enable-click-advance!) (viewer:enable-click-advance! enable-click-advance!)
(viewer:set-page-numbers-visible! set-page-numbers-visible!) (viewer:set-page-numbers-visible! set-page-numbers-visible!)
(viewer:set-spotlight-style! set-spotlight-style!) (viewer:set-spotlight-style! set-spotlight-style!)
(viewer:pict->pre-render-pict pict->pre-render-pict)
(viewer:done-making-slides done-making-slides))) (viewer:done-making-slides done-making-slides)))
(define-accessor margin get-margin) (define-accessor margin get-margin)
@ -1238,6 +1239,18 @@
(define c (make-object c% f)) (define c (make-object c% f))
(define c-both (make-object two-c% f-both)) (define c-both (make-object two-c% f-both))
(define (viewer:pict->pre-render-pict p)
(case (system-type)
[(macosx)
(let ([bm (send c make-bitmap
(inexact->exact (ceiling (pict-width p)))
(inexact->exact (ceiling (pict-height p))))])
(define dc (send bm make-dc))
((make-pict-drawer p) dc 0 0)
(send dc set-bitmap #f)
(refocus (lt-superimpose (ghost p) (bitmap bm)) p))]
[else (refocus (cc-superimpose (blank) p) p)]))
(define time-update-thread #f) (define time-update-thread #f)
(define (start-time-update!) (define (start-time-update!)
(when config:show-time? (when config:show-time?