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. ! See http://factorcode.org/license.txt for BSD license.
USING: accessors kernel namespaces ui.gadgets ui.gadgets.worlds USING: accessors kernel namespaces ui.gadgets ui.gadgets.worlds
ui.gadgets.wrappers ui.gestures math.rectangles ui.gadgets.wrappers ui.gestures math.rectangles
math.rectangles.positioning combinators ; math.rectangles.positioning combinators vectors ;
IN: ui.gadgets.glass IN: ui.gadgets.glass
GENERIC: hide-glass-hook ( gadget -- ) GENERIC: hide-glass-hook ( gadget -- )
@ -32,16 +32,15 @@ M: glass layout*
M: glass ungraft* gadget-child hide-glass-hook ; M: glass ungraft* gadget-child hide-glass-hook ;
: (hide-glass) ( gadget -- )
[ [ unparent ] when* f ] change-glass drop ;
: add-glass ( glass world -- ) : add-glass ( glass world -- )
dup (hide-glass) swap [ add-gadget ] [ >>glass ] bi drop ; [ swap add-gadget drop ] [ [ ?push ] change-layers drop ] 2bi ;
PRIVATE> PRIVATE>
: hide-glass ( child -- ) : 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 -- ) : show-glass ( owner child visible-rect -- )
<glass> <glass>

View File

@ -9,7 +9,7 @@ IN: ui.gadgets.worlds
TUPLE: world < track TUPLE: world < track
active? focused? active? focused?
glass layers
title status title status
text-handle handle images text-handle handle images
window-loc ; window-loc ;
@ -53,16 +53,20 @@ M: world request-focus-on ( child gadget -- )
: <world> ( gadget title status -- world ) : <world> ( gadget title status -- world )
world new-world ; world new-world ;
: as-big-as-possible ( world gadget -- )
dup [ { 0 0 } >>loc over dim>> >>dim ] when 2drop ; inline
M: world layout* M: world layout*
dup call-next-method [ call-next-method ]
dup glass>> dup [ swap dim>> >>dim drop ] [ 2drop ] if ; [ dup layers>> [ as-big-as-possible ] with each ] bi ;
M: world focusable-child* gadget-child ; M: world focusable-child* gadget-child ;
M: world children-on nip children>> ; M: world children-on nip children>> ;
M: world remove-gadget M: world remove-gadget
2dup glass>> eq? [ 2drop ] [ call-next-method ] if ; 2dup layers>> memq?
[ layers>> delq ] [ call-next-method ] if ;
: (draw-world) ( world -- ) : (draw-world) ( world -- )
dup handle>> [ dup handle>> [