Track gadgets compute correct preferred size

slava 2006-05-23 05:43:08 +00:00
parent aa2c3eaf73
commit 357cdab15b
3 changed files with 17 additions and 5 deletions

View File

@ -32,7 +32,6 @@
- new browser: - new browser:
- browse generic words and classes - browse generic words and classes
- initial size sucks
- need actions for reloading the source file and opening word in jEdit - need actions for reloading the source file and opening word in jEdit
- toggle/radio buttons/tabs or something - toggle/radio buttons/tabs or something
- inspector: less clutter when browsing words - inspector: less clutter when browsing words

View File

@ -1,5 +1,5 @@
! Copyright (C) 2006 Slava Pestov. ! Copyright (C) 2006 Slava Pestov.
! See http://factor.sf.net/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
IN: gadgets IN: gadgets
USING: gadgets gadgets-labels gadgets-layouts gadgets-theme USING: gadgets gadgets-labels gadgets-layouts gadgets-theme
hashtables kernel math namespaces queues sequences threads ; hashtables kernel math namespaces queues sequences threads ;

View File

@ -22,19 +22,32 @@ C: track ( orientation -- track )
: <y-track> { 1 0 0 } <track> ; : <y-track> { 1 0 0 } <track> ;
: divider-sizes ( seq -- dim )
length 1- 0 max divider-size n*v ;
: track-dim ( track -- dim ) : track-dim ( track -- dim )
#! Space available for content (minus dividers) #! Space available for content (minus dividers)
dup rect-dim swap track-sizes length 1- dup rect-dim swap track-sizes divider-sizes v- ;
divider-size n*v v- ;
: track-layout ( track -- sizes ) : track-layout ( track -- sizes )
dup track-dim swap track-sizes dup track-dim swap track-sizes
[ [ over n*v , ] [ divider-size , ] interleave ] { } make [ [ over n*v , ] [ divider-size , ] interleave ] { } make
nip ; nip ;
M: track layout* ( splitter -- ) M: track layout* ( track -- )
dup track-layout packed-layout ; dup track-layout packed-layout ;
: track-pref-dims ( dims sizes -- dims )
[ [ dup zero? [ nip ] [ v/n ] if ] 2map max-dim ] keep
divider-sizes v+ ;
M: track pref-dim* ( track -- dim )
[
dup gadget-children
2 swap group [ first ] map pref-dims
dup rot track-sizes track-pref-dims >r max-dim r>
] keep gadget-orientation set-axis ;
: divider-delta ( track -- delta ) : divider-delta ( track -- delta )
#! How far the divider has moved along the track? #! How far the divider has moved along the track?
drag-loc over track-dim { 1 1 1 } vmax v/ drag-loc over track-dim { 1 1 1 } vmax v/