]> gitweb.factorcode.org Git - factor.git/commitdiff
audio.gadget: create/dispose clip on graft/ungraft
authorJoe Groff <arcata@gmail.com>
Wed, 22 Feb 2012 23:46:45 +0000 (15:46 -0800)
committerJoe Groff <arcata@gmail.com>
Wed, 22 Feb 2012 23:46:45 +0000 (15:46 -0800)
extra/audio/gadget/gadget.factor

index 6e34eff3a3b7319bc908a96bb16b16ae925b3ba4..f882f952d8dfb120745a5023a126edf8aebaac85 100644 (file)
@@ -1,13 +1,13 @@
-USING: accessors audio audio.engine combinators images.loader
-images.viewer init kernel locals namespaces ui.gadgets
-ui.gadgets.buttons ui.gadgets.panes ;
+USING: accessors audio audio.engine combinators destructors
+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 ;
+    audio audio-clip state ;
 
 <PRIVATE
 
@@ -64,12 +64,24 @@ PRIVATE>
     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
+        audio >>audio
         paused >>state
         play-label >>play-label
         pause-label >>pause-label ;
 
+M: audio-gadget graft*
+    [ call-next-method ] [
+        dup audio>>
+        [ gadget-audio-engine get-global f ] dip f <static-audio-clip>
+           >>audio-clip
+        drop
+    ] bi ;
+
+M: audio-gadget ungraft*
+    [ pause-audio-gadget ]
+    [ audio-clip>> dispose ]
+    [ call-next-method ] tri ;
+
 : audio. ( audio -- )
     <audio-gadget> gadget. ;