30 } |
32 } |
31 |
33 |
32 .panel { |
34 .panel { |
33 width: 30em; |
35 width: 30em; |
34 margin: 1em auto; |
36 margin: 1em auto; |
35 } |
37 } |
|
38 |
|
39 input.color-control { |
|
40 width: 5em; |
|
41 } |
|
42 |
|
43 div#color { |
|
44 width: 5em; |
|
45 height: 5em; |
|
46 |
|
47 margin: 1em auto; |
|
48 } |
|
49 |
|
50 div.color-slider { |
|
51 margin: 1em; |
|
52 } |
|
53 |
|
54 div.color-slider#slider-r .ui-slider-range { |
|
55 background: #ff0000; |
|
56 } |
|
57 |
|
58 div.color-slider#slider-g .ui-slider-range { |
|
59 background: #00ff00; |
|
60 } |
|
61 |
|
62 div.color-slider#slider-b .ui-slider-range { |
|
63 background: #0000ff; |
|
64 } |
36 """ |
65 """ |
37 |
66 |
38 # test |
67 # test |
39 TITLE = u"Hello World" |
68 TITLE = u"DMX Control" |
40 |
69 |
41 def process (self) : |
70 def process (self) : |
42 if self.request.method == 'POST' : |
71 if self.request.method == 'POST' : |
43 self.color = tuple((int(x, 16) if x else 0) for x in ( |
72 self.color = tuple((int(x, 16) if x else 0) for x in ( |
44 self.request.form.get('r'), |
73 self.request.form.get('r'), |
59 if self.color : |
88 if self.color : |
60 r, g, b = self.color |
89 r, g, b = self.color |
61 else : |
90 else : |
62 r = g = b = None |
91 r = g = b = None |
63 |
92 |
|
93 def color_swatch () : |
|
94 return html.div(id='color', |
|
95 style='background-color: rgb({r}, {g}, {b})'.format(r=r, g=g, b=b) |
|
96 )(' '), |
|
97 |
64 def color_input (name, value) : |
98 def color_input (name, value) : |
65 color = dict(r=0, g=0, b=0) |
99 color = dict(r=0, g=0, b=0) |
66 bgcolor = dict(r=0, g=0, b=0) |
100 bgcolor = dict(r=0, g=0, b=0) |
67 |
101 |
68 if value : |
102 if value : |
69 color[name] = value |
103 color[name] = value |
70 alpha = value / 2 |
104 alpha = value / 255.0 |
71 else : |
105 else : |
72 alpha = 0 |
106 alpha = 0 |
73 |
107 |
74 bgcolor[name] = 255 |
108 bgcolor[name] = 255 |
75 |
109 |
76 return html.input(type='text', name=name, class_='form-control', placeholder=name, |
110 return html.input(type='text', name=name, |
|
111 class_ = 'form-control color-control', |
|
112 placeholder = name, |
|
113 id = name, |
|
114 |
77 value = '{v:02x}'.format(v=value) if value else None, |
115 value = '{v:02x}'.format(v=value) if value else None, |
78 #style = 'background-color: #{r:02x}{g:02x}{b:02x}'.format(**color), |
116 style = 'background-color: rgba({r}, {g}, {b}, {a:0.2f})'.format(a=alpha, **bgcolor), |
79 style = 'background-color: rgba({r}, {g}, {b}, {a})'.format(a=alpha, **bgcolor), |
|
80 ) |
117 ) |
81 |
118 |
82 return html.div(class_='container')( |
119 return html.div(class_='container')( |
83 html.div(class_='panel')( |
120 html.div(class_='panel')( |
84 html.form(action='.', method='POST', class_='form-horizontal')( |
121 color_swatch(), |
|
122 html.div(id='slider-r', class_='color-slider')(' '), |
|
123 html.div(id='slider-g', class_='color-slider')(' '), |
|
124 html.div(id='slider-b', class_='color-slider')(' '), |
|
125 html.form(action='.', method='POST', class_='form-inline')( |
|
126 #html.label(for_='color', class_='control-label')("Color"), |
85 html.div(class_='form-group')( |
127 html.div(class_='form-group')( |
86 html.label(for_='color', class_='control-label')("Color"), |
|
87 color_input('r', r), |
128 color_input('r', r), |
|
129 ), |
|
130 html.div(class_='form-group')( |
88 color_input('g', g), |
131 color_input('g', g), |
|
132 ), |
|
133 html.div(class_='form-group')( |
89 color_input('b', b), |
134 color_input('b', b), |
90 ), |
135 ), |
91 html.div(class_='form-group')( |
136 html.div(class_='form-group')( |
92 html.button(type='submit', class_='btn btn-primary')("Go"), |
137 html.button(type='submit', class_='btn btn-primary')("Go"), |
93 ), |
138 ), |
105 |
150 |
106 self.dmx = dmx |
151 self.dmx = dmx |
107 |
152 |
108 def dmx_color (self, r, g, b, a=255) : |
153 def dmx_color (self, r, g, b, a=255) : |
109 for c in (1, 30) : |
154 for c in (1, 30) : |
110 # XXX: this is four separate commands... each one flushes... |
155 # XXX: separate commands... each one flushes... |
111 self.dmx[c + 0:c + 26:3] = r |
156 self.dmx[c + 0:c + 26] = (r, g, b) |
112 self.dmx[c + 1:c + 26:3] = g |
157 self.dmx[c + 27] = (0, a) |
113 self.dmx[c + 2:c + 26:3] = b |
|
114 self.dmx[c + 28] = 255 |
|
115 |
158 |