/*******************************************************************************
* Copyright (c) 2000, 2015 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.jface.resource;
import org.eclipse.jface.preference.JFacePreferences;
import org.eclipse.jface.util.Util;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
/**
* JFaceColors is the class that stores references
* to all of the colors used by JFace.
*/
public class JFaceColors {
/**
* @param display the display the color is from
* @return the Color used for banner backgrounds
* @see SWT#COLOR_LIST_BACKGROUND
* @see Display#getSystemColor(int)
*/
public static Color getBannerBackground(Display display) {
return display.getSystemColor(SWT.COLOR_LIST_BACKGROUND);
}
/**
* @param display the display the color is from
* @return the Color used for banner foregrounds
* @see SWT#COLOR_LIST_FOREGROUND
* @see Display#getSystemColor(int)
*/
public static Color getBannerForeground(Display display) {
return display.getSystemColor(SWT.COLOR_LIST_FOREGROUND);
}
/**
* @param display the display the color is from
* @return the background Color for widgets that display errors.
* @see SWT#COLOR_WIDGET_BACKGROUND
* @see Display#getSystemColor(int)
*/
public static Color getErrorBackground(Display display) {
return display.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND);
}
/**
* @param display the display the color is from
* @return the border Color for widgets that display errors.
* @see SWT#COLOR_WIDGET_DARK_SHADOW
* @see Display#getSystemColor(int)
*/
public static Color getErrorBorder(Display display) {
return display.getSystemColor(SWT.COLOR_WIDGET_DARK_SHADOW);
}
/**
* @param display the display the color is from
* @return the default color to use for displaying errors.
* @see ColorRegistry#get(String)
* @see JFacePreferences#ERROR_COLOR
*/
public static Color getErrorText(Display display) {
return JFaceResources.getColorRegistry().get(
JFacePreferences.ERROR_COLOR);
}
/**
* @param display the display the color is from
* @return the default color to use for displaying hyperlinks.
* @see ColorRegistry#get(String)
* @see JFacePreferences#HYPERLINK_COLOR
*/
public static Color getHyperlinkText(Display display) {
return JFaceResources.getColorRegistry().get(
JFacePreferences.HYPERLINK_COLOR);
}
/**
* @param display the display the color is from
* @return the default color to use for displaying active hyperlinks.
* @see ColorRegistry#get(String)
* @see JFacePreferences#ACTIVE_HYPERLINK_COLOR
*/
public static Color getActiveHyperlinkText(Display display) {
return JFaceResources.getColorRegistry().get(
JFacePreferences.ACTIVE_HYPERLINK_COLOR);
}
/**
* Background color intended for widgets that display text.
* This color is compatible with with Gtk system themes, for example
* on the white theme this color is white and on the dark theme it is dark.
* <p>
* Note, there is no need to free this color because it's a color managed by
* the system not the application.
* </p>
*
* @param display
* the display the color is from
* @return Color most suitable for presenting text background depending on
* the platform, to match the rest of the environment.
*
* @since 3.13
*/
public static Color getInformationViewerBackgroundColor(Display display) {
if (Util.isWin32() || Util.isCocoa()) {
// Technically COLOR_INFO_* should only be used for tooltips. But on
// Windows/Cocoa COLOR_INFO_* gives info viewers/hovers a
// yellow background which is very suitable for information
// presentation.
return display.getSystemColor(SWT.COLOR_INFO_BACKGROUND);
}
// Technically, COLOR_LIST_* is not the best system color for this
// because it is only supposed to be used for Tree/List controls. But at
// the moment COLOR_TEXT_* is not implemented, so this should work for
// now. See Bug 508612.
return display.getSystemColor(SWT.COLOR_LIST_BACKGROUND);
}
/**
* Foreground color intended for widgets that display text.
* This color is compatible with with Gtk system themes, for example
* on the white theme this color is black and on the dark theme it is bright.
* <p>
* Note, there is no need to free this color because it's a color managed by
* the system not the application.
* </p>
*
* @param display
* the display the color is from
* @return Color most suitable for presenting text foreground depending on
* the platform, to match the rest of the environment.
*
* @since 3.13
*/
public static Color getInformationViewerForegroundColor(Display display) {
if (Util.isWin32() || Util.isCocoa()) {
// Technically COLOR_INFO_* should only be used for tooltips. But on
// Windows/Cocoa COLOR_INFO_* gives info viewers/hovers a
// yellow background which is very suitable for information
// presentation.
return display.getSystemColor(SWT.COLOR_INFO_FOREGROUND);
}
// Technically, COLOR_LIST_* is not the best system color for this
// because it is only supposed to be used for Tree/List controls. But at
// the moment COLOR_TEXT_* is not implemented, so this should work for
// now. See Bug 508612.
return display.getSystemColor(SWT.COLOR_LIST_FOREGROUND);
}
/**
* Clear out the cached color for name. This is generally
* done when the color preferences changed and any cached colors
* may be disposed. Users of the colors in this class should add a IPropertyChangeListener
* to detect when any of these colors change.
* @param colorName name of the color
*
* @deprecated JFaceColors no longer maintains a cache of colors. This job
* is now handled by the ColorRegistry.
*/
@Deprecated
public static void clearColor(String colorName) {
//no-op
}
/**
* Dispose of all allocated colors. Called on workbench
* shutdown.
*
* @deprecated JFaceColors no longer maintains a cache of colors. This job
* is now handled by the ColorRegistry.
*/
@Deprecated
public static void disposeColors() {
//no-op
}
/**
* Set the foreground and background colors of the
* control to the specified values. If the values are
* null than ignore them.
* @param control the control the foreground and/or background color should be set
*
* @param foreground Color the foreground color (maybe <code>null</code>)
* @param background Color the background color (maybe <code>null</code>)
*/
public static void setColors(Control control, Color foreground,
Color background) {
if (foreground != null) {
control.setForeground(foreground);
}
if (background != null) {
control.setBackground(background);
}
}
}