UI race fix: if you call relayout-1 then relayout on the same gadget, it behaves as if it was a relayout-1
parent
f7b1fae96c
commit
ec3ee8f389
|
@ -35,9 +35,16 @@ M: array rect-dim drop { 0 0 } ;
|
||||||
: intersects? ( rect/point rect -- ? )
|
: intersects? ( rect/point rect -- ? )
|
||||||
(rect-intersect) [v-] { 0 0 } = ;
|
(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
|
TUPLE: gadget
|
||||||
pref-dim parent children orientation
|
pref-dim parent children orientation state
|
||||||
visible? relayout? root? clipped? grafted?
|
visible? root? clipped? grafted?
|
||||||
interior boundary ;
|
interior boundary ;
|
||||||
|
|
||||||
M: gadget = eq? ;
|
M: gadget = eq? ;
|
||||||
|
|
|
@ -20,7 +20,7 @@ C: incremental ( pack -- incremental )
|
||||||
dup delegate pref-dim over set-incremental-cursor ;
|
dup delegate pref-dim over set-incremental-cursor ;
|
||||||
|
|
||||||
M: incremental pref-dim* ( incremental -- dim )
|
M: incremental pref-dim* ( incremental -- dim )
|
||||||
dup gadget-relayout? [
|
dup gadget-state [
|
||||||
dup delegate pref-dim over set-incremental-cursor
|
dup delegate pref-dim over set-incremental-cursor
|
||||||
] when incremental-cursor ;
|
] when incremental-cursor ;
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ USING: errors generic hashtables kernel math
|
||||||
namespaces queues sequences ;
|
namespaces queues sequences ;
|
||||||
IN: gadgets
|
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 ;
|
: forget-pref-dim ( gadget -- ) f swap set-gadget-pref-dim ;
|
||||||
|
|
||||||
|
@ -14,8 +14,8 @@ IN: gadgets
|
||||||
|
|
||||||
DEFER: relayout
|
DEFER: relayout
|
||||||
|
|
||||||
: invalidate* ( gadget -- )
|
: invalidate* ( gadget state -- )
|
||||||
dup invalidate
|
dupd invalidate
|
||||||
dup forget-pref-dim
|
dup forget-pref-dim
|
||||||
dup gadget-root?
|
dup gadget-root?
|
||||||
[ add-invalid ] [ gadget-parent [ relayout ] when* ] if ;
|
[ add-invalid ] [ gadget-parent [ relayout ] when* ] if ;
|
||||||
|
@ -24,16 +24,16 @@ DEFER: relayout
|
||||||
#! Relayout and redraw a gadget and its parent before the
|
#! Relayout and redraw a gadget and its parent before the
|
||||||
#! next iteration of the event loop. Should be used when the
|
#! next iteration of the event loop. Should be used when the
|
||||||
#! gadget's size has potentially changed. See relayout-1.
|
#! gadget's size has potentially changed. See relayout-1.
|
||||||
dup gadget-relayout?
|
dup gadget-state \ relayout eq?
|
||||||
[ drop ] [ invalidate* ] if ;
|
[ drop ] [ \ relayout invalidate* ] if ;
|
||||||
|
|
||||||
: relayout-1 ( gadget -- )
|
: relayout-1 ( gadget -- )
|
||||||
#! Relayout and redraw a gadget before th next iteration of
|
#! Relayout and redraw a gadget before th next iteration of
|
||||||
#! the event loop. Should be used if the gadget should be
|
#! the event loop. Should be used if the gadget should be
|
||||||
#! repainted, or if its internal layout changed, but its
|
#! repainted, or if its internal layout changed, but its
|
||||||
#! preferred size did not change.
|
#! preferred size did not change.
|
||||||
dup gadget-relayout?
|
dup gadget-state
|
||||||
[ drop ] [ dup invalidate add-invalid ] if ;
|
[ drop ] [ dup \ relayout-1 invalidate add-invalid ] if ;
|
||||||
|
|
||||||
: show-gadget t over set-gadget-visible? relayout-1 ;
|
: show-gadget t over set-gadget-visible? relayout-1 ;
|
||||||
|
|
||||||
|
@ -77,8 +77,8 @@ DEFER: layout
|
||||||
#! Position the children of the gadget inside the gadget.
|
#! Position the children of the gadget inside the gadget.
|
||||||
#! Note that nothing is done if the gadget does not need to
|
#! Note that nothing is done if the gadget does not need to
|
||||||
#! be laid out.
|
#! be laid out.
|
||||||
dup gadget-relayout? [
|
dup gadget-state [
|
||||||
f over set-gadget-relayout?
|
f over set-gadget-state
|
||||||
dup layout* dup layout-children
|
dup layout* dup layout-children
|
||||||
] when drop ;
|
] when drop ;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue