From f2a33f0a24b38d7630c599674233f287e3486db1 Mon Sep 17 00:00:00 2001 From: Eduardo Cavazos Date: Mon, 21 Jul 2008 17:01:44 -0500 Subject: [PATCH 1/6] math.geometry and math.geometry.rect: Fix some problems with the methods --- extra/math/geometry/geometry.factor | 3 +++ extra/math/geometry/rect/rect.factor | 3 +++ 2 files changed, 6 insertions(+) diff --git a/extra/math/geometry/geometry.factor b/extra/math/geometry/geometry.factor index f70864aba3..d82478dd7f 100644 --- a/extra/math/geometry/geometry.factor +++ b/extra/math/geometry/geometry.factor @@ -4,5 +4,8 @@ IN: math.geometry GENERIC: width ( object -- width ) GENERIC: height ( object -- width ) +GENERIC# set-width! 1 ( object width -- object ) +GENERIC# set-height! 1 ( object height -- object ) + GENERIC# set-x! 1 ( object x -- object ) GENERIC# set-y! 1 ( object y -- object ) \ No newline at end of file diff --git a/extra/math/geometry/rect/rect.factor b/extra/math/geometry/rect/rect.factor index d5b83e2715..4503d08a0a 100644 --- a/extra/math/geometry/rect/rect.factor +++ b/extra/math/geometry/rect/rect.factor @@ -45,5 +45,8 @@ M: array rect-dim drop { 0 0 } ; M: rect width ( rect -- width ) dim>> first ; M: rect height ( rect -- height ) dim>> second ; +M: rect set-width! ( rect width -- rect ) over dim>> set-first ; +M: rect set-height! ( rect height -- rect ) over dim>> set-second ; + M: rect set-x! ( rect x -- rect ) over loc>> set-first ; M: rect set-y! ( rect y -- rect ) over loc>> set-second ; From 22fb3f329c78840e1778e5d96674043197905b2c Mon Sep 17 00:00:00 2001 From: Eduardo Cavazos Date: Mon, 21 Jul 2008 17:02:39 -0500 Subject: [PATCH 2/6] ui.gadgets: Add '(>>dim)' method for 'gadget'. Add 'do-invalidate'. --- extra/ui/gadgets/gadgets.factor | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/extra/ui/gadgets/gadgets.factor b/extra/ui/gadgets/gadgets.factor index 328d6eb749..de43704b05 100755 --- a/extra/ui/gadgets/gadgets.factor +++ b/extra/ui/gadgets/gadgets.factor @@ -170,11 +170,21 @@ DEFER: relayout [ [ 2drop ] [ set-rect-dim ] if ] 2keep [ drop ] r> if ; inline -: set-layout-dim ( dim gadget -- ) - [ invalidate ] (set-rect-dim) ; +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -: set-gadget-dim ( dim gadget -- ) - [ invalidate* ] (set-rect-dim) ; +DEFER: in-layout? + +: do-invalidate ( gadget -- gadget ) + in-layout? get [ dup invalidate ] [ dup invalidate* ] if ; + +M: gadget (>>dim) ( dim gadget -- ) + 2dup dim>> = + [ 2drop ] + [ tuck call-next-method do-invalidate drop ] + if ; + +: set-layout-dim ( dim gadget -- ) (>>dim) ; +: set-gadget-dim ( dim gadget -- ) (>>dim) ; GENERIC: pref-dim* ( gadget -- dim ) From f1f7fe5dd8e7b28095af928db2179ae4f78b517a Mon Sep 17 00:00:00 2001 From: Eduardo Cavazos Date: Mon, 21 Jul 2008 17:07:59 -0500 Subject: [PATCH 3/6] ui.gadgets: remove '(set-rect-dim)' --- extra/ui/gadgets/gadgets.factor | 7 ------- 1 file changed, 7 deletions(-) diff --git a/extra/ui/gadgets/gadgets.factor b/extra/ui/gadgets/gadgets.factor index de43704b05..3a6af52b1a 100755 --- a/extra/ui/gadgets/gadgets.factor +++ b/extra/ui/gadgets/gadgets.factor @@ -165,13 +165,6 @@ DEFER: relayout : hide-gadget ( gadget -- ) f swap (>>visible?) ; -: (set-rect-dim) ( dim gadget quot -- ) - >r 2dup rect-dim = - [ [ 2drop ] [ set-rect-dim ] if ] 2keep - [ drop ] r> if ; inline - -! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - DEFER: in-layout? : do-invalidate ( gadget -- gadget ) From 4f2dc6b8d2f51de380089cb5690bcdff87b4a2a4 Mon Sep 17 00:00:00 2001 From: Eduardo Cavazos Date: Mon, 21 Jul 2008 17:11:28 -0500 Subject: [PATCH 4/6] ui.gadgets.wrappers: use (>>dim) --- extra/ui/gadgets/wrappers/wrappers.factor | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/extra/ui/gadgets/wrappers/wrappers.factor b/extra/ui/gadgets/wrappers/wrappers.factor index 447704f818..b750e3c2a4 100644 --- a/extra/ui/gadgets/wrappers/wrappers.factor +++ b/extra/ui/gadgets/wrappers/wrappers.factor @@ -12,7 +12,6 @@ TUPLE: wrapper < gadget ; M: wrapper pref-dim* ( wrapper -- dim ) gadget-child pref-dim ; -M: wrapper layout* ( wrapper -- ) - [ dim>> ] [ gadget-child ] bi set-layout-dim ; +M: wrapper layout* ( wrapper -- ) [ dim>> ] [ gadget-child ] bi (>>dim) ; M: wrapper focusable-child* ( wrapper -- child/t ) gadget-child ; From a1cdd65b660e3211c883e5157c489481f9ad58ce Mon Sep 17 00:00:00 2001 From: Eduardo Cavazos Date: Mon, 21 Jul 2008 17:18:17 -0500 Subject: [PATCH 5/6] Convert a bunch of code to use '(>>dim)' instead of 'set-layout-dim'. --- extra/ui/gadgets/books/books.factor | 2 +- extra/ui/gadgets/borders/borders.factor | 2 +- extra/ui/gadgets/gadgets-docs.factor | 8 +------- extra/ui/gadgets/gadgets.factor | 2 +- extra/ui/gadgets/grids/grids.factor | 2 +- extra/ui/gadgets/packs/packs.factor | 2 +- extra/ui/gadgets/sliders/sliders.factor | 2 +- extra/ui/gadgets/viewports/viewports.factor | 2 +- extra/ui/gadgets/worlds/worlds.factor | 2 +- extra/ui/ui-docs.factor | 1 - 10 files changed, 9 insertions(+), 16 deletions(-) diff --git a/extra/ui/gadgets/books/books.factor b/extra/ui/gadgets/books/books.factor index 9f92266efe..3ff9c63726 100755 --- a/extra/ui/gadgets/books/books.factor +++ b/extra/ui/gadgets/books/books.factor @@ -25,6 +25,6 @@ M: book model-changed ( model book -- ) M: book pref-dim* ( book -- dim ) children>> pref-dims max-dim ; M: book layout* ( book -- ) - [ dim>> ] [ children>> ] bi [ set-layout-dim ] with each ; + [ dim>> ] [ children>> ] bi [ (>>dim) ] with each ; M: book focusable-child* ( book -- child/t ) current-page ; diff --git a/extra/ui/gadgets/borders/borders.factor b/extra/ui/gadgets/borders/borders.factor index d1cf7cfb29..da21c06a1b 100644 --- a/extra/ui/gadgets/borders/borders.factor +++ b/extra/ui/gadgets/borders/borders.factor @@ -42,7 +42,7 @@ M: border pref-dim* M: border layout* dup border-child-rect swap gadget-child over loc>> over set-rect-loc - swap dim>> swap set-layout-dim ; + swap dim>> swap (>>dim) ; M: border focusable-child* gadget-child ; diff --git a/extra/ui/gadgets/gadgets-docs.factor b/extra/ui/gadgets/gadgets-docs.factor index ac428799ab..42b6d6a9cd 100755 --- a/extra/ui/gadgets/gadgets-docs.factor +++ b/extra/ui/gadgets/gadgets-docs.factor @@ -65,15 +65,9 @@ HELP: relayout-1 { relayout relayout-1 } related-words -HELP: set-layout-dim -{ $values { "dim" "a pair of integers" } { "gadget" gadget } } -{ $description "Resizes a gadget inside a " { $link layout* } " method." } -{ $warning "Do not call this word outside of a " { $link layout* } " method, or otherwise the gadget will not be relayout automatically. Instead, use " { $link set-gadget-dim } "." } ; - HELP: set-gadget-dim { $values { "dim" "a pair of integers" } { "gadget" gadget } } -{ $description "Resizes and relayouts a gadget before the next iteration of the event loop." } -{ $warning "Do not call this word inside a " { $link layout* } " method, or otherwise unnecessary work will be done by the UI to ensure the gadget is relayout. Instead, use " { $link set-layout-dim } "." } ; +{ $description "Resizes and relayouts a gadget before the next iteration of the event loop." } ; HELP: pref-dim* { $values { "gadget" gadget } { "dim" "a pair of integers" } } diff --git a/extra/ui/gadgets/gadgets.factor b/extra/ui/gadgets/gadgets.factor index 3a6af52b1a..561562b893 100755 --- a/extra/ui/gadgets/gadgets.factor +++ b/extra/ui/gadgets/gadgets.factor @@ -198,7 +198,7 @@ GENERIC: layout* ( gadget -- ) M: gadget layout* drop ; -: prefer ( gadget -- ) dup pref-dim swap set-layout-dim ; +: prefer ( gadget -- ) dup pref-dim swap (>>dim) ; : validate ( gadget -- ) f swap (>>layout-state) ; diff --git a/extra/ui/gadgets/grids/grids.factor b/extra/ui/gadgets/grids/grids.factor index b53bf063f2..fcc1f691e9 100644 --- a/extra/ui/gadgets/grids/grids.factor +++ b/extra/ui/gadgets/grids/grids.factor @@ -66,7 +66,7 @@ M: grid pref-dim* : resize-grid ( grid horiz vert -- ) pick grid-fill? [ - pair-up swap [ set-layout-dim ] do-grid + pair-up swap [ (>>dim) ] do-grid ] [ 2drop grid>> [ [ prefer ] each ] each ] if ; diff --git a/extra/ui/gadgets/packs/packs.factor b/extra/ui/gadgets/packs/packs.factor index c33217a494..08a034d195 100755 --- a/extra/ui/gadgets/packs/packs.factor +++ b/extra/ui/gadgets/packs/packs.factor @@ -31,7 +31,7 @@ TUPLE: pack < gadget : pack-layout ( pack sizes -- ) round-dims over gadget-children - >r dupd packed-dims r> 2dup [ set-layout-dim ] 2each + >r dupd packed-dims r> 2dup [ (>>dim) ] 2each >r packed-locs r> [ set-rect-loc ] 2each ; : ( orientation -- pack ) diff --git a/extra/ui/gadgets/sliders/sliders.factor b/extra/ui/gadgets/sliders/sliders.factor index 4e081d972f..fba5f5df48 100755 --- a/extra/ui/gadgets/sliders/sliders.factor +++ b/extra/ui/gadgets/sliders/sliders.factor @@ -110,7 +110,7 @@ elevator H{ dup dup thumb-dim (layout-thumb) >r >r dup rect-dim r> rot gadget-orientation set-axis [ ceiling ] map - r> set-layout-dim ; + r> (>>dim) ; : layout-thumb ( slider -- ) dup layout-thumb-loc layout-thumb-dim ; diff --git a/extra/ui/gadgets/viewports/viewports.factor b/extra/ui/gadgets/viewports/viewports.factor index 91265abcfa..bbe64e7ec5 100755 --- a/extra/ui/gadgets/viewports/viewports.factor +++ b/extra/ui/gadgets/viewports/viewports.factor @@ -23,7 +23,7 @@ TUPLE: viewport < gadget ; M: viewport layout* dup rect-dim viewport-gap 2 v*n v- over gadget-child pref-dim vmax - swap gadget-child set-layout-dim ; + swap gadget-child (>>dim) ; M: viewport focusable-child* gadget-child ; diff --git a/extra/ui/gadgets/worlds/worlds.factor b/extra/ui/gadgets/worlds/worlds.factor index 0e7fbb4c30..69bb8a13c0 100755 --- a/extra/ui/gadgets/worlds/worlds.factor +++ b/extra/ui/gadgets/worlds/worlds.factor @@ -46,7 +46,7 @@ M: world request-focus-on ( child gadget -- ) M: world layout* dup call-next-method dup world-glass [ - >r dup rect-dim r> set-layout-dim + >r dup rect-dim r> (>>dim) ] when* drop ; M: world focusable-child* gadget-child ; diff --git a/extra/ui/ui-docs.factor b/extra/ui/ui-docs.factor index 4181f60d81..e95109c667 100755 --- a/extra/ui/ui-docs.factor +++ b/extra/ui/ui-docs.factor @@ -244,7 +244,6 @@ ARTICLE: "ui-layout-impl" "Implementing layout gadgets" { $subsection layout* } "When a " { $link layout* } " method is called, the size and location of the gadget has already been determined by its parent, and the method's job is to lay out the gadget's children. Children can be positioned and resized with a pair of words:" { $subsection set-rect-loc } -{ $subsection set-layout-dim } "Some assorted utility words which are useful for implementing layout logic:" { $subsection pref-dim } { $subsection pref-dims } From af1211b890cdfde71e0d6b2356230e8783f7a5e8 Mon Sep 17 00:00:00 2001 From: Eduardo Cavazos Date: Mon, 21 Jul 2008 18:49:36 -0500 Subject: [PATCH 6/6] ui.gadgets: remove 'set-layout-dim' --- extra/ui/gadgets/gadgets.factor | 1 - 1 file changed, 1 deletion(-) diff --git a/extra/ui/gadgets/gadgets.factor b/extra/ui/gadgets/gadgets.factor index 561562b893..3cd54fa843 100755 --- a/extra/ui/gadgets/gadgets.factor +++ b/extra/ui/gadgets/gadgets.factor @@ -176,7 +176,6 @@ M: gadget (>>dim) ( dim gadget -- ) [ tuck call-next-method do-invalidate drop ] if ; -: set-layout-dim ( dim gadget -- ) (>>dim) ; : set-gadget-dim ( dim gadget -- ) (>>dim) ; GENERIC: pref-dim* ( gadget -- dim )