From ee6f94a9a1668597292e08889436f2bba8652de3 Mon Sep 17 00:00:00 2001 From: slava Date: Tue, 30 May 2006 22:57:34 +0000 Subject: [PATCH] Track fixes --- TODO.FACTOR.txt | 2 +- library/syntax/see.factor | 4 +++- library/ui/gadgets/tracks.factor | 38 +++++++++++++++++++++++++------- library/ui/tools/browser.factor | 2 +- 4 files changed, 35 insertions(+), 11 deletions(-) diff --git a/TODO.FACTOR.txt b/TODO.FACTOR.txt index e815d6fa9f..8273de6d5a 100644 --- a/TODO.FACTOR.txt +++ b/TODO.FACTOR.txt @@ -11,10 +11,10 @@ - browser responder doesn't work - code walker & exceptions -- test and debug problems - another i/o bug: on factorcode eventually all i/o times out + - bug in pound? - x11 title bars are funny - if the listener is running a command when the image is saved, it restores to an unresponsive gadget -- track: don't allow negative dimensions - fix top level window positioning - services do not launch if factor not running - when scrolling wheel, or moving mouse out of window, rollover is not diff --git a/library/syntax/see.factor b/library/syntax/see.factor index 4d73eed358..ef0519dc55 100644 --- a/library/syntax/see.factor +++ b/library/syntax/see.factor @@ -16,7 +16,9 @@ sequences strings styles words ; } [ declaration. ] each-with ; : in. ( word -- ) - r 0 -rot set-nth r> ; + +: +nth ( delta n seq -- ) swap [ + ] change-nth ; + +: clamp-nth ( i j sizes -- ) [ set-nth-0 swap ] keep +nth ; + +: clamp-up? ( delta n sizes -- ? ) nth + 0 < ; + +: clamp-down? ( delta n sizes -- ? ) >r 1+ r> nth swap - 0 < ; + +: change-last-size ( delta n sizes -- ) + #! Its a bit simpler to resize the last divider since we + #! don't have to adjust the next one. + 3dup clamp-up? [ set-nth-0 2drop ] [ +nth ] if ; + +: change-inner-size ( delta n sizes -- ) + #! When changing a divider which isn't the last, we have to + #! resize the next area, too. + { + { [ 3dup clamp-up? ] [ >r dup 1+ swap r> clamp-nth drop ] } + { [ 3dup clamp-down? ] [ >r dup 1+ r> clamp-nth drop ] } + { [ t ] [ pick neg pick 1+ pick +nth +nth ] } + } cond ; + +: change-size ( delta n sizes -- ) + over 1+ over length = + [ change-last-size ] [ change-inner-size ] if ; + : change-divider ( delta n track -- ) - [ - dup restore-sizes - track-sizes - [ +nth ] 3keep - >r 1+ >r neg r> r> 2dup length = [ 3drop ] [ +nth ] if - ] keep relayout-1 ; + [ dup restore-sizes track-sizes change-size ] keep + relayout-1 ; : divider-motion ( divider -- ) dup gadget-parent divider-delta diff --git a/library/ui/tools/browser.factor b/library/ui/tools/browser.factor index 7df62d4176..913df95eff 100644 --- a/library/ui/tools/browser.factor +++ b/library/ui/tools/browser.factor @@ -88,7 +88,7 @@ DEFER: show-vocab browser-vocab-track showing-asset? ; : show-vocab ( vocab browser -- ) - browser-vocab-track show-asset ; + over [ browser-vocab-track show-asset ] [ 2drop ] if ; : hide-vocab-words ( vocab browser -- ) [