connectivity/com.nokia.carbide.remoteConnections/src/com/nokia/carbide/remoteconnections/internal/ui/mylyn/NotificationPopupColors.java
author dadubrow
Fri, 12 Mar 2010 14:47:52 -0600
changeset 1104 e84724c7f393
permissions -rw-r--r--
copy in required mylyn code
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1104
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
     1
/*******************************************************************************
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
     2
 * Copyright (c) 2004, 2009 Tasktop Technologies and others.
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
     3
 * All rights reserved. This program and the accompanying materials
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
     4
 * are made available under the terms of the Eclipse Public License v1.0
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
     5
 * which accompanies this distribution, and is available at
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
     6
 * http://www.eclipse.org/legal/epl-v10.html
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
     7
 *
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
     8
 * Contributors:
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
     9
 *     Benjamin Pasero - initial API and implementation
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    10
 *     Tasktop Technologies - improvements
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    11
 *******************************************************************************/
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    12
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    13
package com.nokia.carbide.remoteconnections.internal.ui.mylyn;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    14
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    15
import org.eclipse.jface.resource.DeviceResourceException;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    16
import org.eclipse.jface.resource.ResourceManager;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    17
import org.eclipse.swt.SWT;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    18
import org.eclipse.swt.graphics.Color;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    19
import org.eclipse.swt.graphics.RGB;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    20
import org.eclipse.swt.widgets.Display;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    21
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    22
/**
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    23
 * Helper Class to create the colors for the {@link AbstractNotificationPopup}.
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    24
 * <p>
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    25
 * Note: Copied from FormColors of UI Forms.
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    26
 * </p>
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    27
 * 
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    28
 * @author Benjamin Pasero (initial contribution from RSSOwl, see bug 177974)
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    29
 * @author Mik Kersten
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    30
 */
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    31
public class NotificationPopupColors {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    32
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    33
	private final Display display;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    34
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    35
	private Color titleText;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    36
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    37
	private Color gradientBegin;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    38
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    39
	private Color gradientEnd;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    40
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    41
	private Color border;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    42
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    43
	private final ResourceManager resourceManager;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    44
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    45
	public NotificationPopupColors(Display display, ResourceManager resourceManager) {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    46
		this.display = display;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    47
		this.resourceManager = resourceManager;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    48
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    49
		createColors();
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    50
	}
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    51
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    52
	private void createColors() {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    53
		createBorderColor();
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    54
		createGradientColors();
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    55
		// previously used SWT.COLOR_TITLE_INACTIVE_FOREGROUND, but too light on Windows XP
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    56
		titleText = getColor(resourceManager, getSystemColor(SWT.COLOR_WIDGET_DARK_SHADOW));
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    57
	}
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    58
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    59
	public Color getGradientBegin() {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    60
		return gradientBegin;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    61
	}
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    62
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    63
	public Color getGradientEnd() {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    64
		return gradientEnd;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    65
	}
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    66
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    67
	public Color getBorder() {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    68
		return border;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    69
	}
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    70
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    71
	public Color getTitleText() {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    72
		return titleText;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    73
	}
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    74
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    75
	private void createBorderColor() {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    76
		RGB tbBorder = getSystemColor(SWT.COLOR_TITLE_BACKGROUND);
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    77
		RGB bg = getImpliedBackground().getRGB();
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    78
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    79
		// Group 1
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    80
		// Rule: If at least 2 of the RGB values are equal to or between 180 and
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    81
		// 255, then apply specified opacity for Group 1
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    82
		// Examples: Vista, XP Silver, Wn High Con #2
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    83
		// Keyline = TITLE_BACKGROUND @ 70% Opacity over LIST_BACKGROUND
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    84
		if (testTwoPrimaryColors(tbBorder, 179, 256)) {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    85
			tbBorder = blend(tbBorder, bg, 70);
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    86
		} else if (testTwoPrimaryColors(tbBorder, 120, 180)) {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    87
			tbBorder = blend(tbBorder, bg, 50);
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    88
		} else {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    89
			tbBorder = blend(tbBorder, bg, 30);
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    90
		}
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    91
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    92
		border = getColor(resourceManager, tbBorder);
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    93
	}
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    94
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    95
	private void createGradientColors() {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    96
		RGB titleBg = getSystemColor(SWT.COLOR_TITLE_BACKGROUND);
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    97
		Color bgColor = getImpliedBackground();
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    98
		RGB bg = bgColor.getRGB();
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
    99
		RGB bottom, top;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   100
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   101
		// Group 1
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   102
		// Rule: If at least 2 of the RGB values are equal to or between 180 and
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   103
		// 255, then apply specified opacity for Group 1
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   104
		// Examples: Vista, XP Silver, Wn High Con #2
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   105
		// Gradient Bottom = TITLE_BACKGROUND @ 30% Opacity over LIST_BACKGROUND
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   106
		// Gradient Top = TITLE BACKGROUND @ 0% Opacity over LIST_BACKGROUND
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   107
		if (testTwoPrimaryColors(titleBg, 179, 256)) {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   108
			bottom = blend(titleBg, bg, 30);
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   109
			top = bg;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   110
		}
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   111
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   112
		// Group 2
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   113
		// Rule: If at least 2 of the RGB values are equal to or between 121 and
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   114
		// 179, then apply specified opacity for Group 2
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   115
		// Examples: XP Olive, OSX Graphite, Linux GTK, Wn High Con Black
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   116
		// Gradient Bottom = TITLE_BACKGROUND @ 20% Opacity over LIST_BACKGROUND
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   117
		// Gradient Top = TITLE BACKGROUND @ 0% Opacity over LIST_BACKGROUND
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   118
		else if (testTwoPrimaryColors(titleBg, 120, 180)) {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   119
			bottom = blend(titleBg, bg, 20);
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   120
			top = bg;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   121
		}
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   122
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   123
		// Group 3
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   124
		// Rule: If at least 2 of the RGB values are equal to or between 0 and
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   125
		// 120, then apply specified opacity for Group 3
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   126
		// Examples: XP Default, Wn Classic Standard, Wn Marine, Wn Plum, OSX
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   127
		// Aqua, Wn High Con White, Wn High Con #1
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   128
		// Gradient Bottom = TITLE_BACKGROUND @ 10% Opacity over LIST_BACKGROUND
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   129
		// Gradient Top = TITLE BACKGROUND @ 0% Opacity over LIST_BACKGROUND
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   130
		else {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   131
			bottom = blend(titleBg, bg, 10);
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   132
			top = bg;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   133
		}
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   134
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   135
		gradientBegin = getColor(resourceManager, top);
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   136
		gradientEnd = getColor(resourceManager, bottom);
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   137
	}
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   138
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   139
	private RGB blend(RGB c1, RGB c2, int ratio) {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   140
		int r = blend(c1.red, c2.red, ratio);
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   141
		int g = blend(c1.green, c2.green, ratio);
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   142
		int b = blend(c1.blue, c2.blue, ratio);
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   143
		return new RGB(r, g, b);
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   144
	}
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   145
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   146
	private int blend(int v1, int v2, int ratio) {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   147
		int b = (ratio * v1 + (100 - ratio) * v2) / 100;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   148
		return Math.min(255, b);
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   149
	}
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   150
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   151
	private boolean testTwoPrimaryColors(RGB rgb, int from, int to) {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   152
		int total = 0;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   153
		if (testPrimaryColor(rgb.red, from, to)) {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   154
			total++;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   155
		}
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   156
		if (testPrimaryColor(rgb.green, from, to)) {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   157
			total++;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   158
		}
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   159
		if (testPrimaryColor(rgb.blue, from, to)) {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   160
			total++;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   161
		}
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   162
		return total >= 2;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   163
	}
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   164
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   165
	private boolean testPrimaryColor(int value, int from, int to) {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   166
		return value > from && value < to;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   167
	}
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   168
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   169
	private RGB getSystemColor(int code) {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   170
		return getDisplay().getSystemColor(code).getRGB();
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   171
	}
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   172
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   173
	private Color getImpliedBackground() {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   174
		return display.getSystemColor(SWT.COLOR_LIST_BACKGROUND);
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   175
	}
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   176
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   177
	private Display getDisplay() {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   178
		return display;
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   179
	}
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   180
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   181
	private Color getColor(ResourceManager manager, RGB rgb) {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   182
		try {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   183
			return manager.createColor(rgb);
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   184
		} catch (DeviceResourceException e) {
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   185
			return manager.getDevice().getSystemColor(SWT.COLOR_BLACK);
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   186
		}
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   187
	}
e84724c7f393 copy in required mylyn code
dadubrow
parents:
diff changeset
   188
}