diff --git a/basis/ui/gadgets/glass/glass.factor b/basis/ui/gadgets/glass/glass.factor index 8722d817ed..a8f438c85e 100644 --- a/basis/ui/gadgets/glass/glass.factor +++ b/basis/ui/gadgets/glass/glass.factor @@ -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 -- ) diff --git a/basis/ui/gadgets/worlds/worlds.factor b/basis/ui/gadgets/worlds/worlds.factor index e276cd91fd..9b836bc127 100644 --- a/basis/ui/gadgets/worlds/worlds.factor +++ b/basis/ui/gadgets/worlds/worlds.factor @@ -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 -- ) : ( 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>> [