]> gitweb.factorcode.org Git - factor.git/commitdiff
charts.lines: add scale-chunks
authorAlexander Iljin <ajsoft@yandex.ru>
Fri, 20 Jan 2017 00:45:47 +0000 (03:45 +0300)
committerJohn Benediktsson <mrjbq7@gmail.com>
Mon, 17 Apr 2017 20:54:51 +0000 (13:54 -0700)
lines/lines.factor

index 79d9e8bfba73928881748deb462a2055308b0616..b00ea8eafcb98652056bcad7d69ac1e10b8b9d49 100644 (file)
@@ -214,6 +214,22 @@ SYMBOL: elt
 ! value' = (value - min) / (max - min) * width
 : scale ( width value max min -- value' ) neg [ + ] curry bi@ / * ;
 
+! Return quotation that can be used in map operation.
+: scale-mapper ( width min,max -- quot: ( value -- value' ) )
+    first2 swap '[ _ swap _ _ scale ] ; inline
+
+! Sometimes no scaling is needed.
+! : scale-mapper ( width min,max -- quot: ( value -- value' ) )
+!    first2 swap 3dup - = [
+!        3drop [ ]
+!    ] [
+!        '[ _ swap _ _ scale ]
+!    ] if ; inline
+
+: scale-chunks ( chunks xwidth xmin,xmax yheight ymin,ymax -- chunks' )
+    scale-mapper [ scale-mapper ] dip swap
+    '[ [ first2 @ swap @ swap 2array ] map ] map ;
+
 PRIVATE>
 
 : draw-line ( seq -- )
@@ -233,9 +249,12 @@ PRIVATE>
     ] if ;
 
 M: line draw-gadget*
-    dup parent>> dup chart? [
-        chart-axes swap
-        [ color>> gl-color ] [ data>> ] bi
+    dup parent>> dup chart? [| line chart |
+        chart chart-axes
+        line [ color>> gl-color ] [ data>> ] bi
         dupd clip-data swap second [ drawable-chunks ] keep
-        flip-y-axis [ [ draw-line ] each ] unless-empty
+        flip-y-axis
+        chart chart-dim first2 [ chart chart-axes first2 ] dip swap
+        scale-chunks
+        [ [ draw-line ] each ] unless-empty
     ] [ 2drop ] if ;