From 5e57a8258d82eb1b7bbab1a1ec4b5ef815400425 Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Mon, 24 Sep 2012 18:29:17 -0700 Subject: [PATCH] ui.gadgets.paragraphs: cache width in "line" object. --- basis/ui/gadgets/paragraphs/paragraphs.factor | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/basis/ui/gadgets/paragraphs/paragraphs.factor b/basis/ui/gadgets/paragraphs/paragraphs.factor index 8cd7468aa7..bffe7fca94 100644 --- a/basis/ui/gadgets/paragraphs/paragraphs.factor +++ b/basis/ui/gadgets/paragraphs/paragraphs.factor @@ -30,25 +30,25 @@ TUPLE: paragraph < aligned-gadget margin wrapped ; : gadget>word ( gadget -- word ) [ ] [ pref-dim first ] [ word-break? ] tri ; -TUPLE: line words height baseline ; +: line-width ( words -- n ) + [ break?>> ] trim-tail-slice [ width>> ] map-sum ; + +TUPLE: line words width height baseline ; : ( words -- line ) - dup [ key>> ] map dup pref-dims + [ ] [ line-width ] [ [ key>> ] map dup pref-dims ] tri [ measure-height ] [ measure-metrics drop ] 2bi line boa ; : wrap-paragraph ( paragraph -- wrapped-paragraph ) [ children>> [ gadget>word ] map ] [ margin>> ] bi - dup wrap-words [ ] map ; + dup wrap-words [ ] map! ; : cached-wrapped ( paragraph -- wrapped-paragraph ) dup wrapped>> [ 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 ) - [ words>> line-width ] [ max ] map-reduce ; + [ width>> ] [ max ] map-reduce ; : sum-line-heights ( wrapped-paragraph -- y ) [ height>> ] map-sum ;