From b8e3e8a04bf4ce9931c0d7854400ffc1e14ca78c Mon Sep 17 00:00:00 2001 From: Neil Toronto Date: Thu, 19 Jan 2012 21:31:00 -0700 Subject: [PATCH] Fixed error in flomap gradient calculation (borders were always getting 0.0, causing erroneous lighting) Inset rendered deep-flomaps by 1px to harden against future border issues Adjusted scatter-simulating blur (finally rid of edge sparklies!) Added portable hash-quote-icon, stopwatch-icon Vertical toolbar macro stepper icon now discernable Updated Performance Report toolbar icon Updated FrTime loading icon Closes PR 12422 Please merge into release --- collects/frtime/tool/clock.png | Bin 2668 -> 2528 bytes collects/icons/macro-stepper-32x32.png | Bin 2645 -> 2589 bytes collects/images/icons/misc.rkt | 172 +++++++++++------- collects/images/icons/style.rkt | 8 +- collects/images/icons/symbol.rkt | 35 +++- collects/images/icons/tool.rkt | 12 +- collects/images/logos.rkt | 27 +-- .../images/private/deep-flomap-render.rkt | 105 ++++++----- collects/images/private/flomap-gradient.rkt | 56 +++--- collects/images/scribblings/icons.scrbl | 17 +- collects/images/scribblings/logos.scrbl | 4 +- collects/images/tests/icon-tests.rkt | 5 +- collects/typed-racket/optimizer/tool/tool.rkt | 8 +- 13 files changed, 273 insertions(+), 176 deletions(-) diff --git a/collects/frtime/tool/clock.png b/collects/frtime/tool/clock.png index 96c583338ce58d90c9bedd3faf3751ff9dbf18f3..4a3e849ff3bb55bded55466cc3e5cac958051e6b 100644 GIT binary patch delta 2501 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 P00000NkvXXu0mjfLMigo delta 2642 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 YUw3=@i$pBkasU7T07*qoM6N<$f()S)Z~y=R delta 2619 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 face-color) 1 'solid) - (send dc set-brush face-color 'solid) - (draw-ellipse/smoothed dc 0 0 32 32) - ;; ticks + (define R 13) + (define hour-θ (* (+ (- hours 3) (/ minutes 60)) (/ (* 2 pi) 12))) + (define minute-θ (* (- minutes 15) (/ (* 2 pi) 60))) + (define scale (/ height 32)) + (define face-fm + (flomap-cc-superimpose + ;; face and ticks + (draw-icon-flomap + 32 32 (λ (dc) + (set-icon-pen dc (icon-color->outline-color (icon-color->outline-color face-color)) + 1 'solid) + (send dc set-brush face-color 'solid) + (draw-ellipse/smoothed dc 0 0 32 32) + (set-icon-pen dc "black" 1 'solid) + (for ([θ (in-range 0 (* 2 pi) (* 1/30 pi))] + [r (in-cycle (list 1.5 .5 .5 .5 .5 + 1.0 .5 .5 .5 .5 + 1.0 .5 .5 .5 .5))] + [t (in-cycle (list 1.0 .25 .25 .25 .25 + .75 .25 .25 .25 .25 + .75 .25 .25 .25 .25))]) + (set-icon-pen dc "black" t 'solid) + (send dc draw-line + (+ 15.5 (* (- R r) (cos θ))) + (+ 15.5 (* (- R r) (sin θ))) + (+ 15.5 (* R (cos θ))) + (+ 15.5 (* R (sin θ)))))) + scale) + (fm* 0.25 (lambda-flomap face-color (* 1/2 height) glass-icon-material)) + (draw-rendered-icon-flomap + 32 32 (λ (dc) + (set-icon-pen dc (icon-color->outline-color hand-color) 1/2 'solid) + (send dc set-brush hand-color 'solid) + ;; minute hand + (send dc draw-polygon + (list (cons (+ 15.5 (* R (cos minute-θ))) + (+ 15.5 (* R (sin minute-θ)))) + (cons (+ 15.5 (* 1 (cos (+ minute-θ (* 1/2 pi))))) + (+ 15.5 (* 1 (sin (+ minute-θ (* 1/2 pi)))))) + (cons (+ 15.5 (* 1 (cos (+ minute-θ pi)))) + (+ 15.5 (* 1 (sin (+ minute-θ pi))))) + (cons (+ 15.5 (* 1 (cos (+ minute-θ (* 3/2 pi))))) + (+ 15.5 (* 1 (sin (+ minute-θ (* 3/2 pi))))))))) + scale + metal-icon-material) + ;; hands + (draw-rendered-icon-flomap + 32 32 (λ (dc) + (set-icon-pen dc (icon-color->outline-color hand-color) 1/2 'solid) + (send dc set-brush hand-color 'solid) + ;; hour hand + (send dc draw-polygon + (list (cons (+ 15.5 (* (- R 5) (cos hour-θ))) + (+ 15.5 (* (- R 5) (sin hour-θ)))) + (cons (+ 15.5 (* 1.25 (cos (+ hour-θ (* 1/2 pi))))) + (+ 15.5 (* 1.25 (sin (+ hour-θ (* 1/2 pi)))))) + (cons (+ 15.5 (* 1.25 (cos (+ hour-θ pi)))) + (+ 15.5 (* 1.25 (sin (+ hour-θ pi))))) + (cons (+ 15.5 (* 1.25 (cos (+ hour-θ (* 3/2 pi))))) + (+ 15.5 (* 1.25 (sin (+ hour-θ (* 3/2 pi))))))))) + scale + metal-icon-material))) + + (define shell-fm + (draw-icon-flomap + 32 32 (λ (dc) + (set-icon-pen dc "white" 1 'solid) + (send dc set-brush "white" 'solid) + (draw-ellipse/smoothed dc 1 1 30 30)) + scale)) + + (let* ([dfm (flomap->deep-flomap shell-fm)] + [dfm (deep-flomap-bulge-spheroid dfm (* 6 scale))] + [dfm (deep-flomap-raise dfm (* -2 scale))] + [dfm (deep-flomap-smooth-z dfm (* 1/3 scale))]) + (flomap-cc-superimpose + face-fm + (deep-flomap-render-icon dfm clock-shell-material face-fm))))) + +(defproc (stopwatch-flomap [height (and/c rational? (>=/c 0)) (default-icon-height)] + [face-color (or/c string? (is-a?/c color%)) light-metal-icon-color] + [hand-color (or/c string? (is-a?/c color%)) "firebrick"] + [hours (integer-in 0 11) 0] + [minutes (real-in 0 60) 47]) flomap? + (make-cached-flomap + [height face-color hand-color hours minutes] + (define clock-fm (clock-flomap (* 30/32 height) face-color hand-color hours minutes)) + (define buttons-fm + (draw-rendered-icon-flomap + 32 8 (λ (dc) + (set-icon-pen dc (make-object color% 128 0 0) 1 'solid) + (send dc set-brush (make-object color% 144 0 0) 'solid) + (send dc draw-polygon '((2 . 4) (4 . 2) (15.5 . 15.5))) + (send dc draw-polygon '((0 . 5) (5 . 0) (6 . 1) (1 . 6))) (set-icon-pen dc "black" 1 'solid) - (for ([θ (in-range 0 (* 2 pi) (* 1/6 pi))] - [i (in-cycle (in-range 0 3))]) - (define r (if (= i 0) 2 1)) - (send dc draw-line - (+ 15.5 (* (- R r) (cos θ))) - (+ 15.5 (* (- R r) (sin θ))) - (+ 15.5 (* R (cos θ))) - (+ 15.5 (* R (sin θ))))) - (set-icon-pen dc (icon-color->outline-color hand-color) 1/2 'solid) - (send dc set-brush hand-color 'solid) - ;; minute hand - (send dc draw-polygon - (list (cons (+ 15.5 (* R (cos minute-θ))) - (+ 15.5 (* R (sin minute-θ)))) - (cons (+ 15.5 (* 1.5 (cos (+ minute-θ 60-degrees)))) - (+ 15.5 (* 1.5 (sin (+ minute-θ 60-degrees))))) - (cons (+ 15.5 (* 1.5 (cos (- minute-θ 60-degrees)))) - (+ 15.5 (* 1.5 (sin (- minute-θ 60-degrees))))))) - ;; hour hand - (send dc draw-polygon - (list (cons (+ 15.5 (* (- R 4) (cos hour-θ))) - (+ 15.5 (* (- R 4) (sin hour-θ)))) - (cons (+ 15.5 (* 1.5 (cos (+ hour-θ 60-degrees)))) - (+ 15.5 (* 1.5 (sin (+ hour-θ 60-degrees))))) - (cons (+ 15.5 (* 1.5 (cos (- hour-θ 60-degrees)))) - (+ 15.5 (* 1.5 (sin (- hour-θ 60-degrees)))))))) - scale)) - - (define shell-fm - (draw-icon-flomap - 32 32 (λ (dc) - (set-icon-pen dc (icon-color->outline-color "white") 1 'solid) - (send dc set-brush "white" 'solid) - (draw-ellipse/smoothed dc 0 0 32 32)) - scale)) - - (let* ([dfm (flomap->deep-flomap shell-fm)] - [dfm (deep-flomap-bulge-spheroid dfm (* 8 scale))]) - (deep-flomap-render-icon dfm clock-shell-material face-fm)))) + (send dc set-brush (make-object color% 16 16 16) 'solid) + (send dc draw-polygon '((28 . 5) (26 . 3) (15.5 . 15.5))) + (send dc draw-polygon '((31 . 5) (26 . 0) (24.5 . 1.5) (29.5 . 6.5)))) + (/ height 32) + metal-icon-material)) + (flomap-pin* 1/2 0 1/2 -2/32 buttons-fm clock-fm))) ;; =================================================================================================== ;; Bitmaps (icons) @@ -335,12 +383,14 @@ ) (is-a?/c bitmap%) (flomap->bitmap (regular-polygon-flomap sides start color height material))) -(defproc (clock-icon [height (and/c rational? (>=/c 0)) (default-icon-height)] - [face-color (or/c string? (is-a?/c color%)) light-metal-icon-color] - [hand-color (or/c string? (is-a?/c color%)) "firebrick"] - [hours (integer-in 0 11) 1] - [minutes (real-in 0 60) 33]) (is-a?/c bitmap%) - (flomap->bitmap (clock-flomap height face-color hand-color hours minutes))) +(define-icon-wrappers + ([height (and/c rational? (>=/c 0)) (default-icon-height)] + [face-color (or/c string? (is-a?/c color%)) light-metal-icon-color] + [hand-color (or/c string? (is-a?/c color%)) "firebrick"] + [hours (integer-in 0 11) 0] + [minutes (real-in 0 60) 47]) + [clock-icon clock-flomap] + [stopwatch-icon stopwatch-flomap]) (define-icon-wrappers ([color (or/c string? (is-a?/c color%))] diff --git a/collects/images/icons/style.rkt b/collects/images/icons/style.rkt index cbacf5bb6b..8eebd87fc0 100644 --- a/collects/images/icons/style.rkt +++ b/collects/images/icons/style.rkt @@ -72,8 +72,9 @@ ) (is-a?/c bitmap%) (let* ([fm (bitmap->flomap bitmap)] [dfm (flomap->deep-flomap fm)] - [dfm (deep-flomap-icon-style dfm (* 32 z-ratio))]) - (flomap->bitmap (deep-flomap-render-icon dfm material)))) + [dfm (deep-flomap-icon-style dfm (* 32 z-ratio))] + [fm (deep-flomap-render-icon dfm material)]) + (flomap->bitmap fm))) (defproc (icon-color->outline-color [color (or/c string? (is-a?/c color%))]) (is-a?/c color%) (cond [(string? color) (icon-color->outline-color (send the-color-database find-color color))] @@ -120,7 +121,8 @@ (define s (/ (deep-flomap-height dfm) 32)) (let* ([dfm (deep-flomap-emboss dfm (* s 2) (* s 2))] [dfm (deep-flomap-bulge-round dfm (* s 6))] - [dfm (deep-flomap-raise dfm (* s height))]) + [dfm (deep-flomap-raise dfm (* s height))] + [dfm (deep-flomap-smooth-z dfm 1/3)]) dfm)) (define (draw-icon-flomap w h draw-proc scale) diff --git a/collects/images/icons/symbol.rkt b/collects/images/icons/symbol.rkt index aa33dd9045..cfde68106a 100644 --- a/collects/images/icons/symbol.rkt +++ b/collects/images/icons/symbol.rkt @@ -13,7 +13,8 @@ recycle-icon recycle-flomap x-icon x-flomap check-icon check-flomap - lambda-icon lambda-flomap) + lambda-icon lambda-flomap + hash-quote-icon hash-quote-flomap) (only-doc-out (all-defined-out))) (define (flat-x-flomap color height) @@ -238,6 +239,35 @@ (/ height 32) material))) +(defproc (hash-quote-flomap [color (or/c string? (is-a?/c color%))] + [height (and/c rational? (>=/c 0)) (default-icon-height)] + [material deep-flomap-material-value? (default-icon-material)]) flomap? + (make-cached-flomap + [height color material] + (define (draw-hash-quote dc) + ;; vertical lines + (send dc draw-polygon '((6 . 0) (11 . 0) (9 . 30) (4 . 30))) + (send dc draw-polygon '((17 . 0) (22 . 0) (20 . 30) (15 . 30))) + ;; horizontal lines + (send dc draw-polygon '((1 . 6.5) (26 . 6.5) (26 . 11.5) (1 . 11.5))) + (send dc draw-polygon '((0 . 18.5) (25 . 18.5) (25 . 23.5) (0 . 23.5))) + ;; quote + (send dc draw-polygon '((30 . 0) (34 . 0) (33 . 9) (30 . 9)))) + + (define outline-color (icon-color->outline-color color)) + + (draw-rendered-icon-flomap + 36 32 (λ (dc) + (send dc translate 0.5 0.5) + (set-icon-pen dc outline-color 2 'solid) + (send dc set-brush outline-color 'solid) + (draw-hash-quote dc) + (send dc set-pen "black" 1 'transparent) + (send dc set-brush color 'solid) + (draw-hash-quote dc)) + (/ height 32) + material))) + ;; =================================================================================================== ;; Bitmaps (icons) @@ -257,4 +287,5 @@ [recycle-icon recycle-flomap] [x-icon x-flomap] [check-icon check-flomap] - [lambda-icon lambda-flomap]) + [lambda-icon lambda-flomap] + [hash-quote-icon hash-quote-flomap]) diff --git a/collects/images/icons/tool.rkt b/collects/images/icons/tool.rkt index 47534a52d1..ec5b9152aa 100644 --- a/collects/images/icons/tool.rkt +++ b/collects/images/icons/tool.rkt @@ -24,10 +24,12 @@ (defthing debugger-bomb-color (or/c string? (is-a?/c color%)) #:document-value (make-object color% 128 32 32)) + ;; Actual color is too dark after rendering -;(define macro-stepper-hash-color (make-object color% 30 96 30)) (defthing macro-stepper-hash-color (or/c string? (is-a?/c color%)) #:document-value - (make-object color% 90 192 90)) + (make-object color% 60 192 60)) +(defthing small-macro-stepper-hash-color (or/c string? (is-a?/c color%)) #:document-value + (make-object color% 128 255 128)) (defproc (check-syntax-flomap [height (and/c rational? (>=/c 0)) (toolbar-icon-height)] [material deep-flomap-material-value? (default-icon-material)] @@ -49,8 +51,7 @@ [material deep-flomap-material-value? (default-icon-material)] ) flomap? (flomap-ht-append - (text-flomap "#'" (make-object font% (max 1 (min 1024 height)) 'system) - macro-stepper-hash-color #t 'auto height material) + (hash-quote-flomap macro-stepper-hash-color height material) (make-flomap 4 (max 1 (inexact->exact (round (* 1/32 height)))) 0) (step-flomap syntax-icon-color height material))) @@ -60,8 +61,7 @@ (flomap-pin* 0 0 7/16 0 (step-flomap syntax-icon-color height material) - (text-flomap "#'" (make-object font% (max 1 (min 1024 height)) 'system) - macro-stepper-hash-color #t 'auto (* 3/4 height) material))) + (hash-quote-flomap small-macro-stepper-hash-color (* 3/4 height) material))) (defproc (debugger-flomap [height (and/c rational? (>=/c 0)) (toolbar-icon-height)] [material deep-flomap-material-value? (default-icon-material)] diff --git a/collects/images/logos.rkt b/collects/images/logos.rkt index 10cfe4b5ad..05cb4cbd76 100644 --- a/collects/images/logos.rkt +++ b/collects/images/logos.rkt @@ -298,33 +298,10 @@ (lambda-flomap light-metal-icon-color (* 5/8 height) metal-icon-material))) (defproc (macro-stepper-logo-flomap [height (and/c rational? (>=/c 0)) 96]) flomap? - (define outline-color (icon-color->outline-color light-metal-icon-color)) - - (define (draw-hash-quote dc) - ;; vertical lines - (send dc draw-polygon '((5 . 0) (8 . 0) (6 . 19) (3 . 19))) - (send dc draw-polygon '((12 . 0) (15 . 0) (13 . 19) (10 . 19))) - ;; horizontal lines - (send dc draw-polygon '((1 . 4) (1 . 7) (18 . 7) (18 . 4))) - (send dc draw-polygon '((0 . 12) (0 . 15) (17 . 15) (17 . 12))) - ;; quote - (send dc draw-polygon '((20 . 0) (23 . 0) (22.75 . 6) (20.25 . 6))) - ) - (flomap-pin* - 1/2 20/32 1/2 1/2 + 1/2 20/32 15/36 1/2 (foot-flomap (make-object color% 34 42 160) height glass-icon-material) - (draw-rendered-icon-flomap - 32 32 (λ (dc) - (send dc translate 5 6) - (set-icon-pen dc outline-color 2 'solid) - (send dc set-brush outline-color 'solid) - (draw-hash-quote dc) - (send dc set-pen "black" 1 'transparent) - (send dc set-brush light-metal-icon-color 'solid) - (draw-hash-quote dc)) - (/ (* 3/4 height) 32) - metal-icon-material))) + (hash-quote-flomap light-metal-icon-color (* 1/2 height) metal-icon-material))) (define-icon-wrappers ([height (and/c rational? (>=/c 0)) 256]) diff --git a/collects/images/private/deep-flomap-render.rkt b/collects/images/private/deep-flomap-render.rkt index 6d6dd3ce15..412323d66b 100644 --- a/collects/images/private/deep-flomap-render.rkt +++ b/collects/images/private/deep-flomap-render.rkt @@ -69,11 +69,13 @@ ;; =================================================================================================== ;; Pass 1: tracing from a directional light source -(: trace-directional-light (flomap flomap flomap flomap Integer Integer Integer Integer - -> (values flomap flomap))) -(define (trace-directional-light alpha-fm rgb-fm z-fm normal-fm x-min x-max y-min y-max) +(: trace-directional-light (flomap flomap flomap flomap + Integer Integer Integer Integer -> (values flomap flomap))) +(define (trace-directional-light alpha-fm rgb-fm z-fm normal-fm + x-min x-max y-min y-max) (match-define (flomap alpha-vs 1 w h) alpha-fm) - (match-define (list rgb-vs z-vs normal-vs) (map flomap-values (list rgb-fm z-fm normal-fm))) + (match-define (list rgb-vs z-vs normal-vs) + (map flomap-values (list rgb-fm z-fm normal-fm))) (define z-max (flomap-max-value z-fm)) (define opacity-z (/ z-max (transmission-density))) @@ -111,8 +113,12 @@ (define diffuse-fm (make-flomap 3 w h lz)) (define diffuse-vs (flomap-values diffuse-fm)) - (define sx-vs (make-flvector (* w h) +nan.0)) - (define sy-vs (make-flvector (* w h) +nan.0)) + ;(define sx-vs (make-flvector (* w h) +nan.0)) + ;(define sy-vs (make-flvector (* w h) +nan.0)) + (define sx-fm (inline-build-flomap 1 w h (λ (k x y i) (+ (fx->fl x) 0.5)))) + (define sy-fm (inline-build-flomap 1 w h (λ (k x y i) (+ (fx->fl y) 0.5)))) + (define sx-vs (flomap-values sx-fm)) + (define sy-vs (flomap-values sy-fm)) (define Irgb-vs (make-flvector (* 3 w h))) (for*: ([int-y : Integer (in-range y-min y-max)] @@ -330,9 +336,10 @@ ;; =================================================================================================== ;; Pass 2: tracing from a directional viewer -(: trace-directional-view (flomap flomap flomap flomap flomap Integer Integer Integer Integer - -> (values flomap flomap))) -(define (trace-directional-view alpha-fm rgb-fm z-fm normal-fm shadow-fm x-min x-max y-min y-max) +(: trace-directional-view (flomap flomap flomap flomap flomap + Integer Integer Integer Integer -> (values flomap flomap))) +(define (trace-directional-view alpha-fm rgb-fm z-fm normal-fm shadow-fm + x-min x-max y-min y-max) (define-values (w h) (flomap-size alpha-fm)) (match-define (list alpha-vs rgb-vs z-vs normal-vs shadow-vs) (map flomap-values (list alpha-fm rgb-fm z-fm normal-fm shadow-fm))) @@ -407,7 +414,10 @@ (unsafe-flvector-set! reflected-vs (fx+ j 2) b)))) ;; transmission (refraction) (when (Ti . > . 0.0) - (define-values (tx ty tz) (transmitted-vector nx ny nz 0.0 0.0 -1.0 1.0 η2)) + (define snx (unsafe-flvector-ref normal-vs j)) + (define sny (unsafe-flvector-ref normal-vs (fx+ j 1))) + (define snz (unsafe-flvector-ref normal-vs (fx+ j 2))) + (define-values (tx ty tz) (transmitted-vector snx sny snz 0.0 0.0 -1.0 1.0 η2)) ;; sz = z + dist * tz, so dist = (sz - z) / tz (define dist (/ (- 0.0 z) tz)) (when (and (dist . >= . 0.0) (dist . < . +inf.0)) @@ -456,38 +466,43 @@ (case-lambda [(dfm) (deep-flomap-render dfm #f)] [(dfm background-fm) - (define-values (w h) (deep-flomap-size dfm)) - (define argb-fm (flomap-divide-alpha (deep-flomap-argb dfm))) - (define alpha-fm (flomap-ref-component argb-fm 0)) - (define rgb-fm (flomap-drop-components argb-fm 1)) - (define z-fm (fmmax 0.0 (deep-flomap-z dfm))) - (define normal-fm (flomap-gradient-normal z-fm)) - (define bg-fm (if background-fm (prep-background background-fm w h) #f)) - (define-values (_1 x-min y-min _2 x-max y-max) (flomap-nonzero-rect alpha-fm)) - - ;; pass 1: trace from the light source - (define-values (diffracted-fm raw-shadow-fm) - (trace-directional-light alpha-fm rgb-fm z-fm normal-fm x-min x-max y-min y-max)) - - ;; blur the shadow to simulate internal scatter - (define σ (* (min w h) (shadow-blur))) - (define shadow-fm - (cond [bg-fm - ;; two Gaussian blurs by half-σ is equivalent to one Gaussian blur by σ - (define half-σ (* (/ 1 (sqrt 2)) σ)) - (let* ([fm (flomap-blur raw-shadow-fm half-σ)] - [fm (fm* fm bg-fm)] - [fm (flomap-blur fm half-σ)]) - fm)] - [else - (flomap-blur raw-shadow-fm σ)])) - - ;; pass 2: trace from the viewer - (define-values (reflected-fm transmitted-fm) - (trace-directional-view alpha-fm rgb-fm z-fm normal-fm shadow-fm x-min x-max y-min y-max)) - - ;; add all the light together, convert to premultiplied-alpha flomap - (let* ([fm (fm+ (fm+ diffracted-fm transmitted-fm) reflected-fm)] - [fm (flomap-append-components alpha-fm fm)] - [fm (flomap-multiply-alpha fm)]) - fm)])) + (let ([dfm (deep-flomap-inset dfm 1)]) + (define-values (w h) (deep-flomap-size dfm)) + (define argb-fm (flomap-divide-alpha (deep-flomap-argb dfm))) + (define alpha-fm (flomap-ref-component argb-fm 0)) + (define rgb-fm (flomap-drop-components argb-fm 1)) + (define z-fm (fmmax 0.0 (deep-flomap-z dfm))) + (define normal-fm (flomap-gradient-normal z-fm)) + (define bg-fm (if background-fm (prep-background background-fm w h) #f)) + (define-values (x-min y-min x-max y-max) + (let-values ([(_1 x-min y-min _2 x-max y-max) (flomap-nonzero-rect alpha-fm)]) + (values (max 0 (- x-min 1)) (max 0 (- y-min 1)) + (min w (+ x-max 1)) (min h (+ y-max 1))))) + + ;; pass 1: trace from the light source + (define-values (diffracted-fm raw-shadow-fm) + (trace-directional-light alpha-fm rgb-fm z-fm normal-fm x-min x-max y-min y-max)) + + ;; two Gaussian blurs by half of σ^2 is equivalent to one Gaussian blur by σ^2 + (define σ^2 (sqr (* (min w h) (shadow-blur)))) + + ;; blur the shadow to simulate internal scatter + (define shadow-fm + (cond [bg-fm + (let* ([fm (flomap-blur raw-shadow-fm (sqrt (* 1/3 σ^2)))] + [fm (fm* fm bg-fm)] + [fm (flomap-blur fm (sqrt (* 1/3 σ^2)))]) + fm)] + [else + (flomap-blur raw-shadow-fm (sqrt (* 2/3 σ^2)))])) + + ;; pass 2: trace from the viewer + (define-values (reflected-fm raw-transmitted-fm) + (trace-directional-view alpha-fm rgb-fm z-fm normal-fm shadow-fm x-min x-max y-min y-max)) + ;; simulate scatter some more + (define transmitted-fm (flomap-blur raw-transmitted-fm (sqrt (* 1/3 σ^2)))) + ;; add all the light together, convert to premultiplied-alpha flomap + (let* ([fm (fm+ (fm+ diffracted-fm transmitted-fm) reflected-fm)] + [fm (flomap-append-components alpha-fm fm)] + [fm (flomap-multiply-alpha fm)]) + (flomap-inset fm -1)))])) diff --git a/collects/images/private/flomap-gradient.rkt b/collects/images/private/flomap-gradient.rkt index 29986297fc..1320212be7 100644 --- a/collects/images/private/flomap-gradient.rkt +++ b/collects/images/private/flomap-gradient.rkt @@ -14,44 +14,56 @@ (: flomap-gradient-x (flomap -> flomap)) (define (flomap-gradient-x fm) (match-define (flomap vs c w h) fm) - (define cw (fx* c w)) - (define d20 (fx- 1 cw)) - (define d22 (fx+ cw 1)) + (define +x (fx* c 1)) + (define -x+y (fx* c (fx- w 1))) + (define +x+y (fx* c (fx+ w 1))) (define w-1 (fx- w 1)) (define h-1 (fx- h 1)) (inline-build-flomap c w h - (λ (_k x y i) + (λ (k x y i) (cond [(and (x . fx> . 0) (x . fx< . w-1) (y . fx> . 0) (y . fx< . h-1)) - (+ (- (* 0.1875 (unsafe-flvector-ref vs (fx+ i d20))) - (* 0.1875 (unsafe-flvector-ref vs (fx- i d22)))) - (- (* 0.6250 (unsafe-flvector-ref vs (fx+ i 1))) - (* 0.6250 (unsafe-flvector-ref vs (fx- i 1)))) - (- (* 0.1875 (unsafe-flvector-ref vs (fx+ i d22))) - (* 0.1875 (unsafe-flvector-ref vs (fx- i d20)))))] - [else 0.0])))) + (+ (- (* 0.1875 (unsafe-flvector-ref vs (fx- i -x+y))) + (* 0.1875 (unsafe-flvector-ref vs (fx- i +x+y)))) + (- (* 0.6250 (unsafe-flvector-ref vs (fx+ i +x))) + (* 0.6250 (unsafe-flvector-ref vs (fx- i +x)))) + (- (* 0.1875 (unsafe-flvector-ref vs (fx+ i +x+y))) + (* 0.1875 (unsafe-flvector-ref vs (fx+ i -x+y)))))] + [else + (+ (- (* 0.1875 (flomap-ref fm k (+ x 1) (- y 1))) + (* 0.1875 (flomap-ref fm k (- x 1) (- y 1)))) + (- (* 0.6250 (flomap-ref fm k (+ x 1) y)) + (* 0.6250 (flomap-ref fm k (- x 1) y))) + (- (* 0.1875 (flomap-ref fm k (+ x 1) (+ y 1))) + (* 0.1875 (flomap-ref fm k (- x 1) (+ y 1)))))])))) (: flomap-gradient-y (flomap -> flomap)) (define (flomap-gradient-y fm) (match-define (flomap vs c w h) fm) - (define cw (fx* c w)) - (define d02 (fx- cw 1)) - (define d22 (fx+ cw 1)) + (define +y (fx* c w)) + (define -x+y (fx* c (fx- w 1))) + (define +x+y (fx* c (fx+ w 1))) (define w-1 (fx- w 1)) (define h-1 (fx- h 1)) (inline-build-flomap c w h - (λ (_k x y i) + (λ (k x y i) (cond [(and (x . fx> . 0) (x . fx< . w-1) (y . fx> . 0) (y . fx< . h-1)) - (+ (- (* 0.1875 (unsafe-flvector-ref vs (fx+ i d02))) - (* 0.1875 (unsafe-flvector-ref vs (fx- i d22)))) - (- (* 0.6250 (unsafe-flvector-ref vs (fx+ i cw))) - (* 0.6250 (unsafe-flvector-ref vs (fx- i cw)))) - (- (* 0.1875 (unsafe-flvector-ref vs (fx+ i d22))) - (* 0.1875 (unsafe-flvector-ref vs (fx- i d02)))))] - [else 0.0])))) + (+ (- (* 0.1875 (unsafe-flvector-ref vs (fx+ i -x+y))) + (* 0.1875 (unsafe-flvector-ref vs (fx- i +x+y)))) + (- (* 0.6250 (unsafe-flvector-ref vs (fx+ i +y))) + (* 0.6250 (unsafe-flvector-ref vs (fx- i +y)))) + (- (* 0.1875 (unsafe-flvector-ref vs (fx+ i +x+y))) + (* 0.1875 (unsafe-flvector-ref vs (fx- i -x+y)))))] + [else + (+ (- (* 0.1875 (flomap-ref fm k (- x 1) (+ y 1))) + (* 0.1875 (flomap-ref fm k (- x 1) (- y 1)))) + (- (* 0.6250 (flomap-ref fm k x (+ y 1))) + (* 0.6250 (flomap-ref fm k x (- y 1)))) + (- (* 0.1875 (flomap-ref fm k (+ x 1) (+ y 1))) + (* 0.1875 (flomap-ref fm k (+ x 1) (- y 1)))))])))) (: flomap-gradient (flomap -> (values flomap flomap))) (define (flomap-gradient fm) diff --git a/collects/images/scribblings/icons.scrbl b/collects/images/scribblings/icons.scrbl index 811fce839b..171c928e20 100644 --- a/collects/images/scribblings/icons.scrbl +++ b/collects/images/scribblings/icons.scrbl @@ -45,8 +45,7 @@ Its shape and color are a visual metaphor for an action or a message. Icons should be @bold{easily recognizable}, @bold{distinguishable}, @bold{visually consistent}, and @bold{metaphorically appropriate} for the actions and messages they are used with. It can be difficult to meet all four requirements at once (``distinguishable'' and ``visually consistent' are often at odds), but good examples, good abstractions, and an existing icon library help considerably. -@(define (hash-quote) (text-icon "#'" (make-object font% 32 'system) - macro-stepper-hash-color #t 'auto 16)) +@(define (hash-quote) (hash-quote-icon macro-stepper-hash-color 16)) @(define (step) (step-icon syntax-icon-color 16)) @(define (play) (play-icon syntax-icon-color 16)) @(define (bar) (bar-icon syntax-icon-color 16)) @@ -283,7 +282,7 @@ Renders a text string as an icon. For example, @interaction[#:eval icons-eval (text-icon "An Important Point!" (make-object font% 48 'decorative 'normal 'bold #t) - "lightskyblue" #t 2 48)] + "lightskyblue" #t 'auto 48)] Before rendering, the drawn text is scaled so that it is exactly @racket[height] pixels tall. Make sure the font is large enough that scaling does not create blurry and jagged edge artifacts, as in the following example: @@ -329,6 +328,12 @@ Returns an ``x'' icon that is guaranteed to look the same on all platforms. (lambda-icon light-metal-icon-color 32 metal-icon-material)] } +@doc-apply[hash-quote-icon]{ +@examples[#:eval icons-eval + (require (only-in images/icons/tool macro-stepper-hash-color)) + (hash-quote-icon macro-stepper-hash-color 32)] +} + @;==================================================================================================== @section[#:tag "misc"]{Miscellaneous Icons} @@ -388,10 +393,14 @@ Equivalent to @racket[(regular-polygon-icon 8 (/ (* 2 pi) 16) color height mater @doc-apply[clock-icon]{ @examples[#:eval icons-eval - (clock-icon 48) + (clock-icon 96) (clock-icon 48 "lightblue" "darkblue" 3 21)] } +@doc-apply[stopwatch-icon]{ +@examples[#:eval icons-eval (stopwatch-icon 96)] +} + @;==================================================================================================== @section[#:tag "stickman"]{Stickman Icons} diff --git a/collects/images/scribblings/logos.scrbl b/collects/images/scribblings/logos.scrbl index 8701378f93..11881f74a8 100644 --- a/collects/images/scribblings/logos.scrbl +++ b/collects/images/scribblings/logos.scrbl @@ -30,11 +30,11 @@ Returns an unofficial PLaneT logo. This is used as the PLaneT icon when DrRacket } @doc-apply[stepper-logo]{ -An algebraic stepper logo. +Returns the algebraic stepper logo. @examples[#:eval logos-eval (stepper-logo)] } @doc-apply[macro-stepper-logo]{ -A macro stepper logo. +Returns the macro stepper logo. @examples[#:eval logos-eval (macro-stepper-logo)] } diff --git a/collects/images/tests/icon-tests.rkt b/collects/images/tests/icon-tests.rkt index 2ffe7b9f01..9de3436f60 100644 --- a/collects/images/tests/icon-tests.rkt +++ b/collects/images/tests/icon-tests.rkt @@ -48,12 +48,13 @@ (λ (color) (load-icon syntax-icon-color color)) (λ (color) (small-save-icon syntax-icon-color color)) (λ (color) (small-load-icon syntax-icon-color color))) - (list x-icon check-icon recycle-icon lambda-icon) + (list x-icon check-icon recycle-icon lambda-icon hash-quote-icon) (list octagon-icon stop-sign-icon stop-signs-icon foot-icon (λ (color) (magnifying-glass-icon metal-icon-color color)) (λ (color) (left-magnifying-glass-icon metal-icon-color color)) (λ (color) (bomb-icon metal-icon-color color)) - (λ (color) (left-bomb-icon metal-icon-color color))))) + (λ (color) (left-bomb-icon metal-icon-color color)) + (λ (color) (stopwatch-icon (default-icon-height) color))))) (define tool-icon-procs (list check-syntax-icon small-check-syntax-icon diff --git a/collects/typed-racket/optimizer/tool/tool.rkt b/collects/typed-racket/optimizer/tool/tool.rkt index 926aa31aac..186ed37197 100644 --- a/collects/typed-racket/optimizer/tool/tool.rkt +++ b/collects/typed-racket/optimizer/tool/tool.rkt @@ -1,7 +1,9 @@ #lang racket/base (require racket/class racket/port racket/list racket/match - racket/gui/base racket/unit drracket/tool) + racket/gui/base racket/unit drracket/tool + images/compile-time + (for-syntax racket/base images/icons/misc images/icons/style)) (require "report.rkt" "display.rkt") @@ -11,9 +13,7 @@ ;; DrRacket tool for reporting missed optimizations in the editor. (define performance-report-bitmap - (make-object - bitmap% - (collection-file-path "performance-report.png" "icons") 'png/mask)) + (compiled-bitmap (stopwatch-icon (toolbar-icon-height)))) ;; performance-report-callback : drracket:unit:frame<%> -> void (define (performance-report-callback drr-frame)