aboutsummaryrefslogtreecommitdiff
path: root/timechart/colors.py
blob: e41a2261a84dc1b6ee2d98c568d5df7b5f3118c1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
from enthought.traits.api import Color
from enthought.enable.colors import ColorTrait
from enthought.kiva.agg.agg import Rgba

# hint: use gcolor2 to pick up colors
# if you omit several color, it will automatically gradiant...
_tc_colors_txt = """
idle_bg			#ffdddd
irq_bg 	      		#f5ffe1
softirq_bg
work_bg
function_bg        	#80ff80
event_bg
kernel_process_bg       #F0F5A3
user_process_bg       	#E1DFFF
selected_bg		#ACD7E6
C0			#000000
C1			#bbbbff
C2			#7777ff
C3			#5555ff
C4			#3333ff
C5			#1111ff
C6			#0000ff
S0i3			#0011ff
S0i1			#0022ff
idle			#000000
waiting_for_cpu		#ffff88
running			#555555
shown_process		#111111
hidden_process		#777777

"""
_tc_colors_by_name = {}
_tc_colorname_by_id = []
_tc_colors_by_id = []
_tc_aggcolors_by_id = []

def _to_traits(color):
    r = int(color[1:3],16)/256.
    g = int(color[3:5],16)/256.
    b = int(color[5:7],16)/256.
    return r,g,b

def add_color(colorname, color):
    _tc_colors_by_name[colorname] = (color,len(_tc_colors_by_id))
    _tc_colorname_by_id.append(colorname)
    _tc_colors_by_id.append(color)
    _tc_aggcolors_by_id.append(Rgba(_to_traits(color)))

def parse_colors(color_text):
    # first parse the syntax sugared color definition table and change it to dictionary
    pending_colors = []
    last_color=0,0,0
    for line in color_text.split("\n"):
        line = line.split()
        if len(line)==2:
            colorname, color = line
            if pending_colors:
                r1,g1,b1 = last_color
                r2,g2,b2 = _to_traits(color)
                n = len(pending_colors)+2
                for i in xrange(1,n-1):
                    r = r1+(r2-r1)*i/n
                    g = g1+(g2-g1)*i/n
                    b = b1+(b2-b1)*i/n
                    add_color(pending_colors[i-1], "#%02X%02X%02X"%(255*r,255*g,255*b))
                pending_colors = []
            add_color(colorname,color)
            last_color = _to_traits(color)
        elif len(line)==1:
            pending_colors.append(line[0])

parse_colors(_tc_colors_txt)

def get_colorname_by_id(i):
    return _tc_colorname_by_id[i]

def get_color_by_name(name):
    return _tc_colors_by_name[name][0]

def get_color_id(name):
    return _tc_colors_by_name[name][1]

def get_traits_color_by_name(name):
    return _to_traits(_tc_colors_by_name[name][0])

def get_color_by_id(i):
    return _tc_colors_by_id[i]

def get_traits_color_by_id(i):
    return _to_traits(_tc_colors_by_id[i])

def get_aggcolor_by_id(i):
    return _tc_aggcolors_by_id[i]

if __name__ == '__main__':
    print get_traits_color_by_name("running"),get_traits_color_by_id(get_color_id("running"))