]> gitweb.factorcode.org Git - factor.git/blob - extra/ui/gadgets/charts/axes/axes.factor
fa93951e2899df604c04850cd0486a5c9040ce20
[factor.git] / extra / ui / gadgets / charts / axes / axes.factor
1 ! Copyright (C) 2017 Alexander Ilin.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors arrays colors.constants 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
7
8 TUPLE: axis < gadget color ;
9 TUPLE: vertical-axis < axis ;
10 TUPLE: horizontal-axis < axis ;
11
12 <PRIVATE
13
14 ALIAS: x first
15 ALIAS: y second
16
17 : axis-pos ( min,max -- value ) 0 swap first2 clamp ;
18
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 - ;
22
23 GENERIC: axis-line ( pos xmax ymax axis -- chunk )
24 GENERIC: chart-dims ( chart axis -- pixel-width axis-min,max )
25
26 M: vertical-axis axis-line
27     drop nip x-0y-chunk ;
28
29 M: horizontal-axis axis-line
30     drop flip-y 0x-y-chunk ;
31
32 M: vertical-axis chart-dims
33     drop [ dim>> x ] [ chart-axes x ] bi ;
34
35 M: horizontal-axis chart-dims
36     drop [ dim>> y ] [ chart-axes y ] bi ;
37
38 PRIVATE>
39
40 M: axis draw-gadget*
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
45     ] [ 2drop ] if ;