diff --git a/basis/ui/gadgets/borders/borders.factor b/basis/ui/gadgets/borders/borders.factor index 94816788e1..1f66cca178 100644 --- a/basis/ui/gadgets/borders/borders.factor +++ b/basis/ui/gadgets/borders/borders.factor @@ -16,6 +16,9 @@ TUPLE: border < gadget swap border new-border swap dup 2array >>size ; +: ( child gap -- border ) + { 1 1 } >>fill ; + M: border pref-dim* [ size>> 2 v*n ] keep gadget-child pref-dim v+ ; diff --git a/basis/ui/gadgets/tracks/tracks-tests.factor b/basis/ui/gadgets/tracks/tracks-tests.factor index 5381eebb01..0ce348e9b7 100644 --- a/basis/ui/gadgets/tracks/tracks-tests.factor +++ b/basis/ui/gadgets/tracks/tracks-tests.factor @@ -21,3 +21,20 @@ IN: ui.gadgets.tracks.tests { 10 10 } >>dim 0 track-add pref-dim ] unit-test + +[ { 10 30 } ] [ + { 0 1 } + { 10 10 } >>dim f track-add + { 10 10 } >>dim f track-add + { 10 10 } >>dim f track-add + pref-dim +] unit-test + +[ { 10 40 } ] [ + { 0 1 } + { 5 5 } >>gap + { 10 10 } >>dim f track-add + { 10 10 } >>dim f track-add + { 10 10 } >>dim f track-add + pref-dim +] unit-test \ No newline at end of file diff --git a/basis/ui/gadgets/tracks/tracks.factor b/basis/ui/gadgets/tracks/tracks.factor index ddc7cf18fd..aca2d7549e 100644 --- a/basis/ui/gadgets/tracks/tracks.factor +++ b/basis/ui/gadgets/tracks/tracks.factor @@ -27,10 +27,15 @@ TUPLE: track < pack sizes ; [ children>> ] [ sizes>> ] bi { 0 0 } [ [ drop { 0 0 } ] [ pref-dim ] if v+ ] 2reduce ; -: available-dim ( track -- dim ) [ dim>> ] [ alloted-dim ] bi v- ; +: gap-dim ( track -- dim ) + [ gap>> ] [ children>> length 1 [-] ] bi v*n ; + +: available-dim ( track -- dim ) + [ dim>> ] [ alloted-dim ] bi v- ; : track-layout ( track -- sizes ) - [ available-dim ] [ children>> ] [ normalized-sizes ] tri + [ [ available-dim ] [ gap-dim ] bi v- ] + [ children>> ] [ normalized-sizes ] tri [ [ over n*v ] [ pref-dim ] ?if ] 2map nip ; M: track layout* ( track -- ) dup track-layout pack-layout ; @@ -41,11 +46,9 @@ M: track layout* ( track -- ) dup track-layout pack-layout ; : track-pref-dims-2 ( track -- dim ) [ [ children>> pref-dims ] [ normalized-sizes ] bi - [ dup { 0 f } memq? [ drop ] [ v/n ] if ] 2map + [ dup { 0 f } member? [ 2drop { 0 0 } ] [ v/n ] if ] 2map max-dim [ >fixnum ] map - ] - [ [ gap>> ] [ children>> length 1 [-] ] bi v*n ] bi - v+ ; + ] [ gap-dim ] bi v+ ; M: track pref-dim* ( gadget -- dim ) [ track-pref-dims-1 ] diff --git a/basis/ui/tools/tools-tests.factor b/basis/ui/tools/tools-tests.factor index 2265f27cc8..5ce9e4c4a2 100644 --- a/basis/ui/tools/tools-tests.factor +++ b/basis/ui/tools/tools-tests.factor @@ -2,7 +2,7 @@ USING: ui.tools ui.tools.interactor ui.tools.listener ui.tools.search ui.tools.workspace kernel models namespaces sequences tools.test ui.gadgets ui.gadgets.buttons ui.gadgets.labelled ui.gadgets.presentations -ui.gadgets.scrollers vocabs tools.test.ui ui accessors ; +ui.gadgets.menus ui.gadgets.scrollers vocabs tools.test.ui ui accessors ; IN: ui.tools.tests [ f ] @@ -40,7 +40,10 @@ IN: ui.tools.tests [ t ] [ "p" get presentation? ] unit-test - [ ] [ "p" get gadget-child gadget-child "c" set ] unit-test + [ ] [ + "p" get [ object>> ] [ dup hook>> curry ] bi + gadget-child gadget-child "c" set + ] unit-test [ ] [ notify-queued ] unit-test