Commit | Line | Data |
---|---|---|
b0d3496e ASL |
1 | /*****************************************************************************\r |
2 | * Copyright (c) 2008 Intel Corporation.\r | |
3 | * All rights reserved. This program and the accompanying materials\r | |
4 | * are made available under the terms of the Eclipse Public License v1.0\r | |
5 | * which accompanies this distribution, and is available at\r | |
6 | * http://www.eclipse.org/legal/epl-v10.html\r | |
7 | *\r | |
8 | * Contributors:\r | |
9 | * Intel Corporation - Initial API and implementation\r | |
10 | * Ruslan A. Scherbakov, Intel - Initial API and implementation\r | |
11 | * Alvaro Sanchex-Leon - Udpated for TMF\r | |
12 | *\r | |
13 | * $Id: TraceColorScheme.java,v 1.3 2008/05/09 16:11:24 jkubasta Exp $ \r | |
14 | *****************************************************************************/\r | |
15 | \r | |
16 | package org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.widgets;\r | |
17 | \r | |
18 | import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.TmfTimeAnalysisProvider.StateColor;\r | |
19 | import org.eclipse.swt.SWT;\r | |
20 | import org.eclipse.swt.graphics.Color;\r | |
21 | \r | |
22 | \r | |
23 | public class TraceColorScheme {\r | |
24 | \r | |
25 | // elements color indices\r | |
26 | static public final int BLACK_STATE = 0;\r | |
27 | static public final int GREEN_STATE = 1;\r | |
28 | static public final int DARK_BLUE_STATE = 2;\r | |
29 | static public final int ORANGE_STATE = 3;\r | |
30 | static public final int GOLD_STATE = 4;\r | |
31 | static public final int RED_STATE = 5;\r | |
32 | static public final int GRAY_STATE = 6;\r | |
33 | static public final int DARK_GREEN_STATE = 7;\r | |
34 | static public final int DARK_YELLOW_STATE = 8;\r | |
35 | static public final int MAGENTA3_STATE = 9;\r | |
36 | static public final int PURPLE1_STATE = 10;\r | |
37 | static public final int PINK1_STATE = 11;\r | |
38 | static public final int AQUAMARINE_STATE = 12;\r | |
39 | static public final int LIGHT_BLUE_STATE = 13;\r | |
40 | static public final int CADET_BLUE_STATE = 14;\r | |
41 | static public final int OLIVE_STATE = 15;\r | |
42 | \r | |
43 | static public final int STATES0 = 0;\r | |
44 | static public final int STATES1 = 15;\r | |
45 | \r | |
46 | // State element index to name mapping, must keep the same order as above\r | |
47 | public static final StateColor stateColors[] = { StateColor.BLACK,\r | |
48 | StateColor.GREEN, StateColor.DARK_BLUE, StateColor.ORANGE,\r | |
49 | StateColor.GOLD, StateColor.RED, StateColor.GRAY, StateColor.DARK_GREEN, StateColor.DARK_YELLOW, StateColor.MAGENTA3, StateColor.PURPLE1, \r | |
50 | StateColor.PINK1, StateColor.AQUAMARINE, StateColor.LIGHT_BLUE, StateColor.CADET_BLUE, StateColor.OLIVE\r | |
51 | };\r | |
52 | \r | |
53 | // selected state elements color indices\r | |
54 | static public final int BLACK_STATE_SEL = 16;\r | |
55 | static public final int GREEN_STATE_SEL = 17;\r | |
56 | static public final int DARK_BLUE_STATE_SEL = 18;\r | |
57 | static public final int ORANGE_STATE_SEL = 19;\r | |
58 | static public final int GOLD_STATE_SEL = 20;\r | |
59 | static public final int RED_STATE_SEL = 21;\r | |
60 | static public final int GRAY_STATE_SEL = 22;\r | |
61 | static public final int DARK_GREEN_STATE_SEL = 23;\r | |
62 | static public final int DARK_YELLOW_STATE_SEL = 24;\r | |
63 | static public final int MAGENTA3_STATE_SEL = 25;\r | |
64 | static public final int PURPLE1_STATE_SEL = 26;\r | |
65 | static public final int PINK1_STATE_SEL = 27;\r | |
66 | static public final int AQUAMARINE_STATE_SEL = 28;\r | |
67 | static public final int LIGHT_BLUE_STATE_SEL = 29;\r | |
68 | static public final int CADET_BLUE_STATE_SEL = 30;\r | |
69 | static public final int OLIVE_STATE_SEL = 31;\r | |
70 | \r | |
71 | static public final int STATES_SEL0 = 16;\r | |
72 | static public final int STATES_SEL1 = 31;\r | |
73 | \r | |
74 | // colors indices for viewer controls\r | |
75 | static public final int BACKGROUND = 32;\r | |
76 | static public final int FOREGROUND = 33;\r | |
77 | static public final int BACKGROUND_SEL = 34;\r | |
78 | static public final int FOREGROUND_SEL = 35;\r | |
79 | static public final int BACKGROUND_SEL_NOFOCUS = 36;\r | |
80 | static public final int FOREGROUND_SEL_NOFOCUS = 37;\r | |
81 | static public final int TOOL_BACKGROUND = 38;\r | |
82 | static public final int TOOL_FOREGROUND = 39;\r | |
83 | \r | |
84 | // misc colors\r | |
85 | static public final int FIX_COLOR = 40;\r | |
86 | static public final int WHITE = 41;\r | |
87 | static public final int GRAY = 42;\r | |
88 | static public final int BLACK = 43;\r | |
89 | static public final int DARK_GRAY = 44;\r | |
90 | \r | |
91 | // selected border color indices\r | |
92 | static public final int BLACK_BORDER = 45;\r | |
93 | static public final int GREEN_BORDER = 46;\r | |
94 | static public final int DARK_BLUE_BORDER = 47;\r | |
95 | static public final int ORANGE_BORDER = 48;\r | |
96 | static public final int GOLD_BORDER = 49;\r | |
97 | static public final int RED_BORDER = 50;\r | |
98 | static public final int GRAY_BORDER = 51;\r | |
99 | static public final int DARK_GREEN_BORDER1 = 52;\r | |
100 | static public final int DARK_YELLOW_BORDER1 = 53;\r | |
101 | static public final int MAGENTA3_BORDER1 = 54;\r | |
102 | static public final int PURPLE1_BORDER1 = 55;\r | |
103 | static public final int PINK1_BORDER1 = 56;\r | |
104 | static public final int AQUAMARINE_BORDER1 = 57;\r | |
105 | static public final int LIGHT_BLUE_BORDER1 = 58;\r | |
106 | static public final int CADET_BLUE_STATE_BORDER = 59;\r | |
107 | static public final int OLIVE_BORDER2 = 60;\r | |
108 | \r | |
109 | static public final int STATES_BORDER0 = 45;\r | |
110 | static public final int STATES_BORDER1 = 60;\r | |
111 | \r | |
112 | static public final int MID_LINE = 61;\r | |
113 | static public final int RED = 62;\r | |
114 | static public final int GREEN = 63;\r | |
115 | static public final int BLUE = 64;\r | |
116 | static public final int YELLOW = 65;\r | |
117 | static public final int CYAN = 66;\r | |
118 | static public final int MAGENTA = 67;\r | |
119 | \r | |
120 | static public final int SELECTED_TIME = 68;\r | |
121 | static public final int LEGEND_BACKGROUND = 69;\r | |
122 | static public final int LEGEND_FOREGROUND = 70;\r | |
123 | \r | |
124 | // group items' colors\r | |
125 | static public final int GR_BACKGROUND = 71;\r | |
126 | static public final int GR_FOREGROUND = 72;\r | |
127 | static public final int GR_BACKGROUND_SEL = 73;\r | |
128 | static public final int GR_FOREGROUND_SEL = 74;\r | |
129 | static public final int GR_BACKGROUND_SEL_NOFOCUS = 75;\r | |
130 | static public final int GR_FOREGROUND_SEL_NOFOCUS = 76;\r | |
131 | \r | |
132 | static public final int LIGHT_LINE = 77;\r | |
a5823d5f ASL |
133 | static public final int BACKGROUND_NAME = 78;\r |
134 | static public final int BACKGROUND_NAME_SEL = 79;\r | |
135 | static public final int BACKGROUND_NAME_SEL_NOFOCUS = 80;\r | |
b0d3496e ASL |
136 | \r |
137 | // Interraction's colors\r | |
138 | static public final int TI_START_THREAD = BLACK;\r | |
139 | static public final int TI_HANDOFF_LOCK = BLUE;\r | |
140 | static public final int TI_NOTIFY_ALL = GREEN;\r | |
141 | static public final int TI_NOTIFY = GREEN;\r | |
142 | static public final int TI_NOTIFY_JOINED = DARK_GRAY;\r | |
143 | static public final int TI_INTERRUPT = RED;\r | |
144 | static public final int TI_WAIT_EXCEEDED = BLUE;\r | |
145 | \r | |
146 | static interface IColorProvider {\r | |
147 | public Color get();\r | |
148 | }\r | |
149 | \r | |
150 | static class SysCol implements IColorProvider {\r | |
151 | int syscol;\r | |
152 | \r | |
153 | SysCol(int syscol) {\r | |
154 | this.syscol = syscol;\r | |
155 | }\r | |
156 | \r | |
d4011df2 | 157 | @Override\r |
b0d3496e ASL |
158 | public Color get() {\r |
159 | return Utils.getSysColor(syscol);\r | |
160 | }\r | |
161 | }\r | |
162 | \r | |
163 | static class RGB implements IColorProvider {\r | |
164 | int r;\r | |
165 | int g;\r | |
166 | int b;\r | |
167 | \r | |
168 | RGB(int r, int g, int b) {\r | |
169 | this.r = r;\r | |
170 | this.g = g;\r | |
171 | this.b = b;\r | |
172 | }\r | |
173 | \r | |
d4011df2 | 174 | @Override\r |
b0d3496e ASL |
175 | public Color get() {\r |
176 | return new Color(null, r, g, b);\r | |
177 | }\r | |
178 | }\r | |
179 | \r | |
180 | static class Mix implements IColorProvider {\r | |
181 | IColorProvider cp1;\r | |
182 | IColorProvider cp2;\r | |
183 | int w1;\r | |
184 | int w2;\r | |
185 | \r | |
186 | Mix(IColorProvider cp1, IColorProvider cp2, int w1, int w2) {\r | |
187 | this.cp1 = cp1;\r | |
188 | this.cp2 = cp2;\r | |
189 | this.w1 = w1;\r | |
190 | this.w2 = w2;\r | |
191 | }\r | |
192 | \r | |
193 | Mix(IColorProvider cp1, IColorProvider cp2) {\r | |
194 | this.cp1 = cp1;\r | |
195 | this.cp2 = cp2;\r | |
196 | this.w1 = 1;\r | |
197 | this.w2 = 1;\r | |
198 | }\r | |
199 | \r | |
d4011df2 | 200 | @Override\r |
b0d3496e ASL |
201 | public Color get() {\r |
202 | Color col1 = cp1.get();\r | |
203 | Color col2 = cp2.get();\r | |
204 | Color col = Utils.mixColors(col1, col2, w1, w2);\r | |
205 | return col;\r | |
206 | }\r | |
207 | }\r | |
208 | \r | |
209 | static private final IColorProvider _providersMap[] = {\r | |
210 | //\r | |
211 | new RGB(100, 100, 100), // UNKNOWN\r | |
212 | new RGB(174, 200, 124), // RUNNING\r | |
a5823d5f | 213 | new Mix(new SysCol(SWT.COLOR_BLUE), new SysCol(SWT.COLOR_GRAY), 1, 3), // SLEEPING\r |
b0d3496e ASL |
214 | new RGB(210, 150, 60), // WAITING\r |
215 | new RGB(242, 225, 168), // BLOCKED\r | |
216 | new Mix(new SysCol(SWT.COLOR_RED), new SysCol(SWT.COLOR_GRAY), 1, 3), // DEADLOCK\r | |
217 | new RGB(200, 200, 200), // STOPPED\r | |
218 | new RGB(35, 107, 42), // STEEL BLUE\r | |
219 | new RGB(205,205,0), // DARK YELLOW\r | |
220 | new RGB(205, 0, 205), // MAGENTA\r | |
221 | new RGB(171, 130, 255), // PURPLE\r | |
222 | new RGB(255, 181, 197), // PINK\r | |
223 | new RGB(112, 219, 147), // AQUAMARINE\r | |
224 | new RGB(198, 226, 255), // SLATEGRAY\r | |
225 | new RGB(95, 158, 160), // CADET BLUE\r | |
226 | new RGB(107, 142, 35), // OLIVE\r | |
227 | \r | |
228 | \r | |
229 | //TODO: Does not seem to be used, check during clean-up\r | |
230 | new SysCol(SWT.COLOR_WHITE), // UNKNOWN_SEL\r | |
231 | new SysCol(SWT.COLOR_GREEN), // RUNNING_SEL\r | |
232 | new SysCol(SWT.COLOR_BLUE), // SLEEPING_SEL\r | |
233 | new SysCol(SWT.COLOR_CYAN), // WAITING_SEL\r | |
234 | new SysCol(SWT.COLOR_YELLOW), // BLOCKED_SEL\r | |
235 | new SysCol(SWT.COLOR_RED), // DEADLOCK_SEL\r | |
236 | new SysCol(SWT.COLOR_DARK_GRAY), // STOPPED_SEL\r | |
237 | new SysCol(SWT.COLOR_WHITE), \r | |
238 | new SysCol(SWT.COLOR_GREEN), \r | |
239 | new SysCol(SWT.COLOR_BLUE), \r | |
240 | new SysCol(SWT.COLOR_CYAN), \r | |
241 | new SysCol(SWT.COLOR_YELLOW), \r | |
242 | new SysCol(SWT.COLOR_RED), \r | |
243 | new SysCol(SWT.COLOR_DARK_GRAY), \r | |
244 | new SysCol(SWT.COLOR_WHITE), \r | |
245 | new SysCol(SWT.COLOR_GREEN), \r | |
246 | \r | |
247 | \r | |
248 | new SysCol(SWT.COLOR_LIST_BACKGROUND), // BACKGROUND\r | |
249 | new SysCol(SWT.COLOR_LIST_FOREGROUND), // FOREGROUND\r | |
a5823d5f ASL |
250 | new RGB(232, 242, 254), // BACKGROUND_SEL\r |
251 | new SysCol(SWT.COLOR_LIST_FOREGROUND), // FOREGROUND_SEL\r | |
b0d3496e ASL |
252 | new SysCol(SWT.COLOR_WIDGET_BACKGROUND), // BACKGROUND_SEL_NOFOCUS\r |
253 | new SysCol(SWT.COLOR_WIDGET_FOREGROUND), // FOREGROUND_SEL_NOFOCUS\r | |
254 | new SysCol(SWT.COLOR_WIDGET_BACKGROUND), // TOOL_BACKGROUND\r | |
255 | new SysCol(SWT.COLOR_WIDGET_DARK_SHADOW), // TOOL_FOREGROUND\r | |
256 | \r | |
257 | new SysCol(SWT.COLOR_GRAY), // FIX_COLOR\r | |
258 | new SysCol(SWT.COLOR_WHITE), // WHITE\r | |
259 | new SysCol(SWT.COLOR_GRAY), // GRAY\r | |
260 | new SysCol(SWT.COLOR_BLACK), // BLACK\r | |
261 | new SysCol(SWT.COLOR_DARK_GRAY), // DARK_GRAY\r | |
262 | \r | |
263 | new SysCol(SWT.COLOR_DARK_GRAY), // BLACK_BORDER\r | |
264 | new RGB(75, 115, 120), // GREEN_BORDER\r | |
265 | new SysCol(SWT.COLOR_DARK_BLUE), // DARK_BLUE_BORDER\r | |
266 | new RGB(242, 225, 168), // ORANGE_BORDER\r | |
267 | new RGB(210, 150, 60), // GOLD_BORDER\r | |
268 | new SysCol(SWT.COLOR_DARK_RED), // RED_BORDER\r | |
269 | new SysCol(SWT.COLOR_BLACK), // GRAY_BORDER\r | |
270 | new SysCol(SWT.COLOR_DARK_GRAY), // DARK_GREEN_BORDER\r | |
271 | new RGB(75, 115, 120), // DARK_YELLOW_BORDER\r | |
272 | new SysCol(SWT.COLOR_DARK_BLUE), // MAGENTA3_BORDER\r | |
273 | new RGB(242, 225, 168), // PURPLE1_BORDER\r | |
274 | new RGB(210, 150, 60), // PINK1_BORDER\r | |
275 | new SysCol(SWT.COLOR_DARK_RED), // AQUAMARINE_BORDER\r | |
276 | new SysCol(SWT.COLOR_BLACK), // LIGHT_BLUE_BORDER\r | |
277 | new SysCol(SWT.COLOR_DARK_GRAY), // BLUE_BORDER\r | |
278 | new RGB(75, 115, 120), // OLIVE_BORDER\r | |
279 | \r | |
280 | \r | |
281 | new SysCol(SWT.COLOR_GRAY), // MID_LINE\r | |
282 | new SysCol(SWT.COLOR_RED), // RED\r | |
283 | new SysCol(SWT.COLOR_GREEN), // GREEN\r | |
284 | new SysCol(SWT.COLOR_BLUE), // BLUE\r | |
285 | new SysCol(SWT.COLOR_YELLOW), // YELLOW\r | |
286 | new SysCol(SWT.COLOR_CYAN), // CYAN\r | |
287 | new SysCol(SWT.COLOR_MAGENTA), // MAGENTA\r | |
288 | \r | |
289 | new SysCol(SWT.COLOR_BLUE), // SELECTED_TIME\r | |
290 | new SysCol(SWT.COLOR_WIDGET_BACKGROUND), // LEGEND_BACKGROUND\r | |
291 | new SysCol(SWT.COLOR_WIDGET_DARK_SHADOW), // LEGEND_FOREGROUND\r | |
292 | \r | |
293 | new Mix(new RGB(150, 200, 240), new SysCol(\r | |
294 | SWT.COLOR_LIST_BACKGROUND)),// GR_BACKGROUND\r | |
295 | new RGB(0, 0, 50), // GR_FOREGROUND\r | |
296 | new Mix(new RGB(200, 200, 100),\r | |
297 | new SysCol(SWT.COLOR_LIST_SELECTION)), // GR_BACKGROUND_SEL\r | |
298 | new Mix(new RGB(150, 200, 240), new SysCol(\r | |
299 | SWT.COLOR_LIST_SELECTION_TEXT)), // GR_FOREGROUND_SEL\r | |
300 | new Mix(new RGB(222, 222, 155), new SysCol(\r | |
301 | SWT.COLOR_WIDGET_BACKGROUND)), // GR_BACKGROUND_SEL_NOFOCUS\r | |
302 | new RGB(0, 0, 50), // GR_FOREGROUND_SEL_NOFOCUS\r | |
303 | \r | |
304 | new Mix(new SysCol(SWT.COLOR_GRAY), new SysCol(\r | |
305 | SWT.COLOR_LIST_BACKGROUND), 1, 3), // LIGHT_LINE\r | |
a5823d5f ASL |
306 | \r |
307 | new Mix(new SysCol(SWT.COLOR_GRAY), new SysCol(SWT.COLOR_LIST_BACKGROUND), 1, 6), // BACKGROUND_NAME\r | |
308 | new Mix(new SysCol(SWT.COLOR_GRAY), new RGB(232, 242, 254), 1, 6), // BACKGROUND_NAME_SEL\r | |
309 | new Mix(new SysCol(SWT.COLOR_GRAY), new SysCol(SWT.COLOR_WIDGET_BACKGROUND), 1, 6), // BACKGROUND_NAME_SEL_NOFOCUS\r | |
b0d3496e ASL |
310 | };\r |
311 | \r | |
312 | private Color _colors[];\r | |
313 | \r | |
314 | public TraceColorScheme() {\r | |
315 | _colors = new Color[_providersMap.length];\r | |
316 | }\r | |
317 | \r | |
318 | public void dispose() {\r | |
319 | for (int i = 0; i < _colors.length; i++) {\r | |
320 | Utils.dispose(_colors[i]);\r | |
321 | _colors[i] = null;\r | |
322 | }\r | |
323 | }\r | |
324 | \r | |
325 | public Color getColor(int idx) {\r | |
326 | if (null == _colors[idx]) {\r | |
327 | if (idx >= STATES_SEL0 && idx <= STATES_SEL1) {\r | |
328 | Color col1 = getColor(idx - STATES_SEL0);\r | |
329 | Color col2 = getColor(BACKGROUND_SEL);\r | |
330 | _colors[idx] = Utils.mixColors(col1, col2, 3, 1);\r | |
331 | } else {\r | |
332 | _colors[idx] = _providersMap[idx].get();\r | |
333 | }\r | |
334 | }\r | |
335 | return _colors[idx];\r | |
336 | }\r | |
337 | \r | |
338 | public Color getBkColor(boolean selected, boolean focused, boolean name) {\r | |
a5823d5f ASL |
339 | if (name) {\r |
340 | if (selected && focused)\r | |
341 | return getColor(BACKGROUND_NAME_SEL);\r | |
342 | if (selected)\r | |
343 | return getColor(BACKGROUND_NAME_SEL_NOFOCUS);\r | |
344 | return getColor(BACKGROUND_NAME);\r | |
345 | } else {\r | |
346 | if (selected && focused)\r | |
347 | return getColor(BACKGROUND_SEL);\r | |
348 | if (selected)\r | |
349 | return getColor(BACKGROUND_SEL_NOFOCUS);\r | |
350 | return getColor(BACKGROUND);\r | |
351 | }\r | |
b0d3496e ASL |
352 | }\r |
353 | \r | |
354 | public Color getFgColor(boolean selected, boolean focused) {\r | |
355 | if (selected && focused)\r | |
356 | return getColor(FOREGROUND_SEL);\r | |
357 | if (selected)\r | |
358 | return getColor(FOREGROUND_SEL_NOFOCUS);\r | |
359 | return getColor(FOREGROUND);\r | |
360 | }\r | |
361 | \r | |
362 | public Color getBkColorGroup(boolean selected, boolean focused) {\r | |
363 | if (selected && focused)\r | |
364 | return getColor(GR_BACKGROUND_SEL);\r | |
365 | if (selected)\r | |
366 | return getColor(GR_BACKGROUND_SEL_NOFOCUS);\r | |
367 | return getColor(GR_BACKGROUND);\r | |
368 | }\r | |
369 | \r | |
370 | public Color getFgColorGroup(boolean selected, boolean focused) {\r | |
371 | if (selected && focused)\r | |
372 | return getColor(GR_FOREGROUND_SEL);\r | |
373 | if (selected)\r | |
374 | return getColor(GR_FOREGROUND_SEL_NOFOCUS);\r | |
375 | return getColor(GR_FOREGROUND);\r | |
376 | }\r | |
377 | \r | |
378 | public static StateColor[] getStateColors() {\r | |
379 | return stateColors;\r | |
380 | }\r | |
381 | }\r |