! 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 -- )
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>
TUPLE: world < track
active? focused?
-glass
+layers
title status
text-handle handle images
window-loc ;
: <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>> [