diff --git a/library/ui/gadgets.factor b/library/ui/gadgets.factor index 7bfe2c64f2..0cd18d68a6 100644 --- a/library/ui/gadgets.factor +++ b/library/ui/gadgets.factor @@ -35,10 +35,17 @@ M: array rect-dim drop { 0 0 } ; : intersects? ( rect/point rect -- ? ) (rect-intersect) [v-] { 0 0 } = ; +! gadget-pref-dim is a cached value; call pref-dim instead +! gadget-children is a vector +! gadget-orientation is { 1 0 } or { 0 1 } +! gadget-state is f, relayout or relayout-1 +! gadget-root? relayout requests do not propogate higher +! gadget-grafted? are we part of a live world's gadget hierarchy +! gadget-interior, gadget-boundary: see paint.factor TUPLE: gadget - pref-dim parent children orientation - visible? relayout? root? clipped? grafted? - interior boundary ; +pref-dim parent children orientation state +visible? root? clipped? grafted? +interior boundary ; M: gadget = eq? ; diff --git a/library/ui/gadgets/incremental.factor b/library/ui/gadgets/incremental.factor index f88cb89e99..9cb610e1e6 100644 --- a/library/ui/gadgets/incremental.factor +++ b/library/ui/gadgets/incremental.factor @@ -20,7 +20,7 @@ C: incremental ( pack -- incremental ) dup delegate pref-dim over set-incremental-cursor ; M: incremental pref-dim* ( incremental -- dim ) - dup gadget-relayout? [ + dup gadget-state [ dup delegate pref-dim over set-incremental-cursor ] when incremental-cursor ; diff --git a/library/ui/layouts.factor b/library/ui/layouts.factor index a79d62a0c9..2ff2d7455e 100644 --- a/library/ui/layouts.factor +++ b/library/ui/layouts.factor @@ -4,7 +4,7 @@ USING: errors generic hashtables kernel math namespaces queues sequences ; IN: gadgets -: invalidate ( gadget -- ) t swap set-gadget-relayout? ; +: invalidate ( gadget state -- ) swap set-gadget-state ; : forget-pref-dim ( gadget -- ) f swap set-gadget-pref-dim ; @@ -14,8 +14,8 @@ IN: gadgets DEFER: relayout -: invalidate* ( gadget -- ) - dup invalidate +: invalidate* ( gadget state -- ) + dupd invalidate dup forget-pref-dim dup gadget-root? [ add-invalid ] [ gadget-parent [ relayout ] when* ] if ; @@ -24,16 +24,16 @@ DEFER: relayout #! Relayout and redraw a gadget and its parent before the #! next iteration of the event loop. Should be used when the #! gadget's size has potentially changed. See relayout-1. - dup gadget-relayout? - [ drop ] [ invalidate* ] if ; + dup gadget-state \ relayout eq? + [ drop ] [ \ relayout invalidate* ] if ; : relayout-1 ( gadget -- ) #! Relayout and redraw a gadget before th next iteration of #! the event loop. Should be used if the gadget should be #! repainted, or if its internal layout changed, but its #! preferred size did not change. - dup gadget-relayout? - [ drop ] [ dup invalidate add-invalid ] if ; + dup gadget-state + [ drop ] [ dup \ relayout-1 invalidate add-invalid ] if ; : show-gadget t over set-gadget-visible? relayout-1 ; @@ -77,8 +77,8 @@ DEFER: layout #! Position the children of the gadget inside the gadget. #! Note that nothing is done if the gadget does not need to #! be laid out. - dup gadget-relayout? [ - f over set-gadget-relayout? + dup gadget-state [ + f over set-gadget-state dup layout* dup layout-children ] when drop ;