From 97de5ac682be5591b50e4f712fdcf28da63d12ef Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Fri, 26 Aug 2005 00:28:56 +0000 Subject: [PATCH] frame layout fixes --- TODO.FACTOR.txt | 1 - library/ui/frames.factor | 20 +++++++++++++++----- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/TODO.FACTOR.txt b/TODO.FACTOR.txt index 8d891ad79e..b42562bf6d 100644 --- a/TODO.FACTOR.txt +++ b/TODO.FACTOR.txt @@ -15,7 +15,6 @@ - gaps in pack layout - find out why so many small bignums get consed - faster mouse tracking -- rewrite frame layout for new style - an interior paint that is only painted on rollover and mouse press; use it for menu items. give menus a gradient background - scroll bar: more intuitive behavior when clicking inside the elevator diff --git a/library/ui/frames.factor b/library/ui/frames.factor index 12b0386292..640ce439ea 100644 --- a/library/ui/frames.factor +++ b/library/ui/frames.factor @@ -44,7 +44,9 @@ M: frame pref-dim ( frame -- dim ) [ swap [ swap 0 3vector ] map-with ] map-with ; : do-grid ( dim-grid gadget-grid quot -- ) - -rot [ [ pick call ] 2each ] 2each drop ; + -rot [ + [ dup [ pick call ] [ 2drop ] ifte ] 2each + ] 2each drop ; inline : position-grid ( gadgets horiz vert -- ) >r 0 [ + ] accumulate r> 0 [ + ] accumulate @@ -53,8 +55,16 @@ M: frame pref-dim ( frame -- dim ) : resize-grid ( gadgets horiz vert -- ) frame-layout swap [ set-gadget-dim ] do-grid ; +: (fill-center) ( vec n -- ) + over first pick third + - 0 max 1 rot set-nth ; + +: fill-center ( horiz vert dim -- ) + tuck second (fill-center) first (fill-center) ; + M: frame layout* ( frame -- dim ) - frame-grid dup pref-dim-grid - dup reduce-grid [ first ] map - swap flip reduce-grid [ second ] map - 3dup position-grid resize-grid ; + [ + frame-grid dup pref-dim-grid + dup reduce-grid [ first ] map + swap flip reduce-grid [ second ] map + 2dup + ] keep rect-dim fill-center 3dup position-grid resize-grid ;