Glass panes can now be stacked

db4
Slava Pestov 2009-02-18 20:59:51 -06:00
parent f6f9b0874e
commit d6a2f9b84b
2 changed files with 13 additions and 10 deletions

View 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>

View 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>> [