1 ! Copyright (C) 2017 Alexander Ilin.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors arrays colors kernel locals math
4 math.order opengl sequences ui.gadgets ui.gadgets.charts
5 ui.gadgets.charts.lines ui.gadgets.charts.utils ui.render ;
6 IN: ui.gadgets.charts.axes
8 TUPLE: axis < gadget color ;
9 TUPLE: vertical-axis < axis ;
10 TUPLE: horizontal-axis < axis ;
17 : axis-pos ( min,max -- value ) 0 swap first2 clamp ;
19 :: x-0y-chunk ( x y -- chunk ) x 0 2array x y 2array 2array ;
20 :: 0x-y-chunk ( x y -- chunk ) 0 y 2array x y 2array 2array ;
21 : flip-y ( axis-y xmax ymax -- xmax axis-y' ) rot - ;
23 GENERIC: axis-line ( pos xmax ymax axis -- chunk )
24 GENERIC: chart-dims ( chart axis -- pixel-width axis-min,max )
26 M: vertical-axis axis-line
29 M: horizontal-axis axis-line
30 drop flip-y 0x-y-chunk ;
32 M: vertical-axis chart-dims
33 drop [ dim>> x ] [ chart-axes x ] bi ;
35 M: horizontal-axis chart-dims
36 drop [ dim>> y ] [ chart-axes y ] bi ;
41 dup parent>> dup chart? [| axis chart |
42 COLOR: black axis default-color
43 chart axis chart-dims [ axis-pos ] keep first2 swap scale
44 chart dim>> first2 axis axis-line draw-line