| /******************************************************************************* |
| * Copyright (c) 2004, 2006 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.ui.themes; |
| |
| import java.util.Hashtable; |
| |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.runtime.IConfigurationElement; |
| import org.eclipse.core.runtime.IExecutableExtension; |
| import org.eclipse.swt.graphics.RGB; |
| |
| /** |
| * A resuable <code>IColorFactory</code> that may be used to blend two colors. |
| * The colors to blend are specified as per method number two in |
| * {@link org.eclipse.core.runtime.IExecutableExtension}. |
| * <p> |
| * Example usage: |
| * <br/> |
| * <code> |
| * <colorDefinition |
| * label="Red/Blue Blend" |
| * id="example.redblueblend"> |
| * <colorFactory |
| * plugin="org.eclipse.ui" |
| * class="org.eclipse.ui.themes.RGBBlendColorFactory"> |
| * <parameter name="color1" value="255,0,0" /> |
| * <parameter name="color2" value="COLOR_BLUE" /> |
| * </colorFactory> |
| * </colorDefinition> |
| * </code> |
| * </p> |
| * |
| * <p> |
| * The color values may be specified as RGB triples or as SWT constants. |
| * </p> |
| * |
| * @see org.eclipse.swt.SWT |
| * @since 1.1 |
| */ |
| public class RGBBlendColorFactory implements IColorFactory, |
| IExecutableExtension { |
| |
| private String color1, color2; |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.themes.IColorFactory#createColor() |
| */ |
| public RGB createColor() { |
| if (color1 == null && color2 == null) { |
| return new RGB(0, 0, 0); |
| } else if (color1 != null && color2 == null) { |
| return ColorUtil.getColorValue(color1); |
| } else if (color1 == null && color2 != null) { |
| return ColorUtil.getColorValue(color2); |
| } else { |
| RGB rgb1 = ColorUtil.getColorValue(color1); |
| RGB rgb2 = ColorUtil.getColorValue(color2); |
| return ColorUtil.blend(rgb1, rgb2); |
| } |
| } |
| |
| /** |
| * This executable extension requires parameters to be explicitly declared |
| * via the second method described in the <code>IExecutableExtension</code> |
| * documentation. This class expects that there will be two parameters, |
| * <code>color1</code> and <code>color2</code>, that describe the two colors |
| * to be blended. These values may either be RGB triples or SWT constants. |
| * |
| * @see org.eclipse.core.runtime.IExecutableExtension#setInitializationData(org.eclipse.core.runtime.IConfigurationElement, java.lang.String, java.lang.Object) |
| */ |
| public void setInitializationData(IConfigurationElement config, |
| String propertyName, Object data) throws CoreException { |
| |
| if (data instanceof Hashtable) { |
| Hashtable table = (Hashtable) data; |
| color1 = (String) table.get("color1"); //$NON-NLS-1$ |
| color2 = (String) table.get("color2"); //$NON-NLS-1$ |
| } |
| } |
| } |