audio.gadget: printable audio play button

db4
Joe Groff 2012-02-20 23:49:01 -08:00
parent 3f9b2ef47a
commit ff990717f8
3 changed files with 74 additions and 0 deletions

View File

@ -0,0 +1,74 @@
USING: accessors audio audio.engine combinators images.loader
images.viewer init kernel locals namespaces ui.gadgets
ui.gadgets.buttons ui.gadgets.panes ;
FROM: ui.gadgets.buttons.private => border-button-theme ;
FROM: audio.engine.private => make-engine-current ;
IN: audio.gadget
TUPLE: audio-gadget < button
play-label pause-label
audio-clip state ;
<PRIVATE
CONSTANT: play-label-image-path "vocab:audio/gadget/play.png"
CONSTANT: pause-label-image-path "vocab:audio/gadget/pause.png"
SYMBOLS: play-label-image pause-label-image gadget-audio-engine ;
[
f play-label-image set-global
f pause-label-image set-global
f gadget-audio-engine set-global
] "audio.gadget" add-startup-hook
: initialize-audio-gadgets ( -- )
gadget-audio-engine get-global [
play-label-image-path load-image
play-label-image set-global
pause-label-image-path load-image
pause-label-image set-global
<standard-audio-engine> dup start-audio*
gadget-audio-engine set-global
] unless ;
SYMBOLS: playing paused ;
: relabel-audio-gadget ( audio-gadget label -- )
[ drop clear-gadget ] [ add-gadget drop ] 2bi ;
: pause-audio-gadget ( audio-gadget -- )
[ dup play-label>> relabel-audio-gadget ]
[ paused swap state<< ]
[ audio-clip>> pause-clip ] tri ;
: play-audio-gadget ( audio-gadget -- )
[ dup pause-label>> relabel-audio-gadget ]
[ playing swap state<< ]
[ audio-clip>> play-clip ] tri ;
: click-audio-gadget ( audio-gadget -- )
gadget-audio-engine get make-engine-current
dup state>> {
{ playing [ pause-audio-gadget ] }
{ paused [ play-audio-gadget ] }
} case ;
PRIVATE>
:: <audio-gadget> ( audio -- gadget )
initialize-audio-gadgets
play-label-image get-global <image-gadget> :> play-label
pause-label-image get-global <image-gadget> :> pause-label
play-label [ click-audio-gadget ] audio-gadget new-button
border-button-theme
gadget-audio-engine get-global f audio t <static-audio-clip>
>>audio-clip
paused >>state
play-label >>play-label
pause-label >>pause-label ;
: audio. ( audio -- )
<audio-gadget> gadget. ;

Binary file not shown.

After

Width:  |  Height:  |  Size: 957 B

BIN
extra/audio/gadget/play.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB