ui.gadgets.paragraphs: cache width in "line" object.

db4
John Benediktsson 2012-09-24 18:29:17 -07:00
parent e1b8eaa9fa
commit 5e57a8258d
1 changed files with 7 additions and 7 deletions

View File

@ -30,25 +30,25 @@ TUPLE: paragraph < aligned-gadget margin wrapped ;
: gadget>word ( gadget -- word ) : gadget>word ( gadget -- word )
[ ] [ pref-dim first ] [ word-break? ] tri <word> ; [ ] [ pref-dim first ] [ word-break? ] tri <word> ;
TUPLE: line words height baseline ; : line-width ( words -- n )
[ break?>> ] trim-tail-slice [ width>> ] map-sum ;
TUPLE: line words width height baseline ;
: <line> ( words -- line ) : <line> ( words -- line )
dup [ key>> ] map dup pref-dims [ ] [ line-width ] [ [ key>> ] map dup pref-dims ] tri
[ measure-height ] [ measure-metrics drop ] 2bi line boa ; [ measure-height ] [ measure-metrics drop ] 2bi line boa ;
: wrap-paragraph ( paragraph -- wrapped-paragraph ) : wrap-paragraph ( paragraph -- wrapped-paragraph )
[ children>> [ gadget>word ] map ] [ margin>> ] bi [ children>> [ gadget>word ] map ] [ margin>> ] bi
dup wrap-words [ <line> ] map ; dup wrap-words [ <line> ] map! ;
: cached-wrapped ( paragraph -- wrapped-paragraph ) : cached-wrapped ( paragraph -- wrapped-paragraph )
dup wrapped>> dup wrapped>>
[ nip ] [ [ wrap-paragraph dup ] keep wrapped<< ] if* ; [ nip ] [ [ wrap-paragraph dup ] keep wrapped<< ] if* ;
: line-width ( wrapped-line -- n )
[ break?>> ] trim-tail-slice [ width>> ] map-sum ;
: max-line-width ( wrapped-paragraph -- x ) : max-line-width ( wrapped-paragraph -- x )
[ words>> line-width ] [ max ] map-reduce ; [ width>> ] [ max ] map-reduce ;
: sum-line-heights ( wrapped-paragraph -- y ) : sum-line-heights ( wrapped-paragraph -- y )
[ height>> ] map-sum ; [ height>> ] map-sum ;