]> gitweb.factorcode.org Git - factor.git/commitdiff
Glass panes can now be stacked
authorSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Thu, 19 Feb 2009 02:59:51 +0000 (20:59 -0600)
committerSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Thu, 19 Feb 2009 02:59:51 +0000 (20:59 -0600)
basis/ui/gadgets/glass/glass.factor
basis/ui/gadgets/worlds/worlds.factor

index 8722d817ede73a8af54e3d8f14d5c99e57e6bc32..a8f438c85eecd66e442a58749f52fc801f003997 100644 (file)
@@ -2,7 +2,7 @@
 ! See http://factorcode.org/license.txt for BSD license.
 USING: accessors kernel namespaces ui.gadgets ui.gadgets.worlds
 ui.gadgets.wrappers ui.gestures math.rectangles
-math.rectangles.positioning combinators ;
+math.rectangles.positioning combinators vectors ;
 IN: ui.gadgets.glass
 
 GENERIC: hide-glass-hook ( gadget -- )
@@ -32,16 +32,15 @@ M: glass layout*
 
 M: glass ungraft* gadget-child hide-glass-hook ;
 
-: (hide-glass) ( gadget -- )
-    [ [ unparent ] when* f ] change-glass drop ;
-
 : add-glass ( glass world -- )
-    dup (hide-glass) swap [ add-gadget ] [ >>glass ] bi drop ;
+    [ swap add-gadget drop ] [ [ ?push ] change-layers drop ] 2bi ;
 
 PRIVATE>
 
 : hide-glass ( child -- )
-    find-world [ [ (hide-glass) ] [ request-focus ] bi ] when* ;
+    [ glass? ] find-parent
+    [ dup find-world [ unparent ] dip request-focus ]
+    when* ;
 
 : show-glass ( owner child visible-rect -- )
     <glass>
index e276cd91fddd13d8c8c65b3760824b559be4efb6..9b836bc1276302105f997412d8ce28eb97f3269d 100644 (file)
@@ -9,7 +9,7 @@ IN: ui.gadgets.worlds
 
 TUPLE: world < track
 active? focused?
-glass
+layers
 title status
 text-handle handle images
 window-loc ;
@@ -53,16 +53,20 @@ M: world request-focus-on ( child gadget -- )
 : <world> ( gadget title status -- world )
     world new-world ;
 
+: as-big-as-possible ( world gadget -- )
+    dup [ { 0 0 } >>loc over dim>> >>dim ] when 2drop ; inline
+
 M: world layout*
-    dup call-next-method
-    dup glass>> dup [ swap dim>> >>dim drop ] [ 2drop ] if ;
+    [ call-next-method ]
+    [ dup layers>> [ as-big-as-possible ] with each ] bi ;
 
 M: world focusable-child* gadget-child ;
 
 M: world children-on nip children>> ;
 
 M: world remove-gadget
-    2dup glass>> eq? [ 2drop ] [ call-next-method ] if ;
+    2dup layers>> memq?
+    [ layers>> delq ] [ call-next-method ] if ;
 
 : (draw-world) ( world -- )
     dup handle>> [