root/widgets/pie-chart.r

Revision 110, 2.1 kB (checked in by ashley, 10 months ago)

Added RebDOC app and heading widget
scroll-panel.r and tree.r fixes
Removed unmaintained widgets

Line 
1pie-chart: make rebface [
2        tip:    {
3                USAGE:
4                        pie-chart data ["Red" red 60 "Green" green 30 "Blue" blue 10]
5
6                DESCRIPTION:
7                        A pie-chart.
8
9                OPTIONS:
10                        'no-label to turn labels off
11                        [start n] where n is the degrees value
12                        [explode n] when n is the number of pixels
13        }
14        size:   50x50
15        feel:   make default-feel [
16                redraw: make function! [face act pos /local plot total angle pie-size label-offset label-distance label-size] [
17                        if act = 'show [
18                                clear plot: skip last face/effect 4
19                                total: face/degrees
20                                pie-size: face/size / 2 - 1x1 - as-pair face/explode face/explode
21                                label-distance: pie-size * .75
22                                foreach [label color val] face/data [
23                                        angle: 360 * val / face/sum
24                                        insert plot reduce [
25                                                'fill-pen color
26                                                'arc face/size / 2 + as-pair face/explode * (cosine (total + (angle / 2))) - 1 face/explode * (sine (total + (angle / 2))) - 1 pie-size total angle
27                                                'closed
28                                        ]
29                                        ;       insert text label at tail so it appears on top of pie slices
30                                        unless find face/options 'no-label [
31                                                default-text/text: label
32                                                label-size: size-text default-text
33                                                label-offset: as-pair label-distance/x * (cosine (total + (angle / 2))) face/explode + label-distance/y * (sine (total + (angle / 2)))
34                                                ;       adjust text offset
35                                                label-offset/x: label-offset/x - (label-size/x / 2)
36                                                label-offset/y: label-offset/y - (label-size/y / 2)
37                                                insert tail plot reduce ['text 'anti-aliased form label face/size / 2 + label-offset]
38                                        ]
39                                        total: total + angle
40                                        if total >= 360 [total: total - 360]
41                                ]
42                        ]
43                ]
44        ]
45        effect:         [draw [pen black font default-font]]
46        sum:            0               ;       sum of values
47        explode:        0               ;       explode distance
48        degrees:        270             ;       default start angle (note that 0 is horizontal)
49        init: make function! [] [
50                data: reduce data
51                explode: any [select options 'explode 0]
52                if select options 'start [
53                        degrees: 270 + select options 'start
54                        if degrees >= 360 [degrees: degrees - 360]
55                        if degrees < 0 [degrees: degrees + 360]
56                ]
57                foreach [label color val] data [sum: sum + val]
58        ]
59]
Note: See TracBrowser for help on using the browser.