| /* |
| * Copyright (C) 2006 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.traceview; |
| |
| import java.util.HashMap; |
| |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.graphics.Color; |
| import org.eclipse.swt.graphics.GC; |
| import org.eclipse.swt.graphics.Image; |
| import org.eclipse.swt.graphics.RGB; |
| import org.eclipse.swt.widgets.Display; |
| |
| public class ColorController { |
| private static final int[] systemColors = { SWT.COLOR_BLUE, SWT.COLOR_RED, |
| SWT.COLOR_GREEN, SWT.COLOR_CYAN, SWT.COLOR_MAGENTA, SWT.COLOR_DARK_BLUE, |
| SWT.COLOR_DARK_RED, SWT.COLOR_DARK_GREEN, SWT.COLOR_DARK_YELLOW, |
| SWT.COLOR_DARK_CYAN, SWT.COLOR_DARK_MAGENTA, SWT.COLOR_BLACK }; |
| |
| private static RGB[] rgbColors = { new RGB(90, 90, 255), // blue |
| new RGB(0, 240, 0), // green |
| new RGB(255, 0, 0), // red |
| new RGB(0, 255, 255), // cyan |
| new RGB(255, 80, 255), // magenta |
| new RGB(200, 200, 0), // yellow |
| new RGB(40, 0, 200), // dark blue |
| new RGB(150, 255, 150), // light green |
| new RGB(150, 0, 0), // dark red |
| new RGB(30, 150, 150), // dark cyan |
| new RGB(200, 200, 255), // light blue |
| new RGB(0, 120, 0), // dark green |
| new RGB(255, 150, 150), // light red |
| new RGB(140, 80, 140), // dark magenta |
| new RGB(150, 100, 50), // brown |
| new RGB(70, 70, 70), // dark grey |
| }; |
| |
| private static HashMap<Integer, Color> colorCache = new HashMap<Integer, Color>(); |
| private static HashMap<Integer, Image> imageCache = new HashMap<Integer, Image>(); |
| |
| public ColorController() { |
| } |
| |
| public static Color requestColor(Display display, RGB rgb) { |
| return requestColor(display, rgb.red, rgb.green, rgb.blue); |
| } |
| |
| public static Image requestColorSquare(Display display, RGB rgb) { |
| return requestColorSquare(display, rgb.red, rgb.green, rgb.blue); |
| } |
| |
| public static Color requestColor(Display display, int red, int green, int blue) { |
| int key = (red << 16) | (green << 8) | blue; |
| Color color = colorCache.get(key); |
| if (color == null) { |
| color = new Color(display, red, green, blue); |
| colorCache.put(key, color); |
| } |
| return color; |
| } |
| |
| public static Image requestColorSquare(Display display, int red, int green, int blue) { |
| int key = (red << 16) | (green << 8) | blue; |
| Image image = imageCache.get(key); |
| if (image == null) { |
| image = new Image(display, 8, 14); |
| GC gc = new GC(image); |
| Color color = requestColor(display, red, green, blue); |
| gc.setBackground(color); |
| gc.fillRectangle(image.getBounds()); |
| gc.dispose(); |
| imageCache.put(key, image); |
| } |
| return image; |
| } |
| |
| public static void assignMethodColors(Display display, MethodData[] methods) { |
| int nextColorIndex = 0; |
| for (MethodData md : methods) { |
| RGB rgb = rgbColors[nextColorIndex]; |
| if (++nextColorIndex == rgbColors.length) |
| nextColorIndex = 0; |
| Color color = requestColor(display, rgb); |
| Image image = requestColorSquare(display, rgb); |
| md.setColor(color); |
| md.setImage(image); |
| |
| // Compute and set a faded color |
| int fadedRed = 150 + rgb.red / 4; |
| int fadedGreen = 150 + rgb.green / 4; |
| int fadedBlue = 150 + rgb.blue / 4; |
| RGB faded = new RGB(fadedRed, fadedGreen, fadedBlue); |
| color = requestColor(display, faded); |
| image = requestColorSquare(display, faded); |
| md.setFadedColor(color); |
| md.setFadedImage(image); |
| } |
| } |
| } |