/* * Copyright (C) 2010 The Android Open Source Project * * Licensed under the Eclipse Public License, Version 1.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.eclipse.org/org/documents/epl-v10.php * * 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.ide.eclipse.adt.internal.editors.layout.gle2; import com.android.ide.common.api.DrawingStyle; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.RGB; /** * Description of the drawing styles with specific color, line style and alpha * definitions. This class corresponds to the more generic {@link DrawingStyle} * class which defines the drawing styles but does not introduce any specific * SWT values to the API clients. * <p> * TODO: This class should eventually be replaced by a scheme where the color * constants are instead coming from the theme. */ public enum SwtDrawingStyle { /** * The style definition corresponding to {@link DrawingStyle#SELECTION} */ SELECTION(new RGB(0x00, 0x99, 0xFF), 255, new RGB(0x00, 0x99, 0xFF), 64, 1, SWT.LINE_DASH), /** * The style definition corresponding to {@link DrawingStyle#GUIDELINE} */ GUIDELINE(new RGB(0x00, 0xFF, 0x00), 255, SWT.LINE_DOT), /** * The style definition corresponding to {@link DrawingStyle#HOVER} */ HOVER(null, 0, new RGB(0xFF, 0xFF, 0xFF), 64, 1, SWT.LINE_DOT), /** * The style definition corresponding to {@link DrawingStyle#ANCHOR} */ ANCHOR(new RGB(0x00, 0x99, 0xFF), 96, SWT.LINE_SOLID), /** * The style definition corresponding to {@link DrawingStyle#OUTLINE} */ OUTLINE(new RGB(0x88, 0xFF, 0x88), 160, SWT.LINE_SOLID), /** * The style definition corresponding to {@link DrawingStyle#DROP_RECIPIENT} */ DROP_RECIPIENT(new RGB(0xFF, 0x99, 0x00), 255, new RGB(0xFF, 0x99, 0x00), 160, 1, SWT.LINE_SOLID), /** * The style definition corresponding to {@link DrawingStyle#DROP_ZONE} */ DROP_ZONE(new RGB(0x00, 0xAA, 0x00), 220, new RGB(0x55, 0xAA, 0x00), 200, 1, SWT.LINE_SOLID), /** * The style definition corresponding to * {@link DrawingStyle#DROP_ZONE_ACTIVE} */ DROP_ZONE_ACTIVE(new RGB(0x00, 0xAA, 0x00), 220, new RGB(0x00, 0xAA, 0x00), 128, 2, SWT.LINE_SOLID), /** * The style definition corresponding to {@link DrawingStyle#DROP_PREVIEW} */ DROP_PREVIEW(new RGB(0xFF, 0x99, 0x00), 255, null, 0, 2, SWT.LINE_CUSTOM), /** * The style definition corresponding to {@link DrawingStyle#HELP} */ HELP(new RGB(0xFF, 0xFF, 0xFF), 255, new RGB(0x00, 0x00, 0x00), 128, 1, SWT.LINE_SOLID), /** * The style definition corresponding to {@link DrawingStyle#INVALID} */ INVALID(new RGB(0xFF, 0xFF, 0xFF), 255, new RGB(0xFF, 0x00, 0x00), 150, 2, SWT.LINE_SOLID), /** * The style definition corresponding to {@link DrawingStyle#EMPTY} */ EMPTY(new RGB(0xFF, 0xFF, 0x55), 255, new RGB(0xFF, 0xFF, 0x55), 255, 1, SWT.LINE_DASH), /** * The style definition corresponding to {@link DrawingStyle#CUSTOM1} */ CUSTOM1(new RGB(0xFF, 0x00, 0xFF), 255, null, 0, 1, SWT.LINE_SOLID), /** * The style definition corresponding to {@link DrawingStyle#CUSTOM2} */ CUSTOM2(new RGB(0x00, 0xFF, 0xFF), 255, null, 0, 1, SWT.LINE_DOT); /** * Construct a new style value with the given foreground, background, width, * linestyle and transparency. * * @param stroke A color descriptor for the foreground color, or null if no * foreground color should be set * @param fill A color descriptor for the background color, or null if no * foreground color should be set * @param lineWidth The line width, in pixels, or 0 if no line width should * be set * @param lineStyle The SWT line style - such as {@link SWT#LINE_SOLID}. * @param strokeAlpha The alpha value of the stroke, an integer in the range 0 to 255 * where 0 is fully transparent and 255 is fully opaque. * @param fillAlpha The alpha value of the fill, an integer in the range 0 to 255 * where 0 is fully transparent and 255 is fully opaque. */ private SwtDrawingStyle(RGB stroke, int strokeAlpha, RGB fill, int fillAlpha, int lineWidth, int lineStyle) { mStroke = stroke; mFill = fill; mLineWidth = lineWidth; mLineStyle = lineStyle; mStrokeAlpha = strokeAlpha; mFillAlpha = fillAlpha; } /** * Convenience constructor for typical drawing styles, which do not specify * a fill and use a standard thickness line * * @param stroke Stroke color to be used (e.g. for the border/foreground) * @param strokeAlpha Transparency to use for the stroke; 0 is transparent * and 255 is fully opaque. * @param lineStyle The SWT line style - such as {@link SWT#LINE_SOLID}. */ private SwtDrawingStyle(RGB stroke, int strokeAlpha, int lineStyle) { this(stroke, strokeAlpha, null, 255, 1, lineStyle); } /** * Return the stroke/foreground/border RGB color description to be used for * this style, or null if none */ public RGB getStrokeColor() { return mStroke; } /** * Return the fill/background/interior RGB color description to be used for * this style, or null if none */ public RGB getFillColor() { return mFill; } /** Return the line width to be used for this style */ public int getLineWidth() { return mLineWidth; } /** Return the SWT line style to be used for this style */ public int getLineStyle() { return mLineStyle; } /** * Return the stroke alpha value (in the range 0,255) to be used for this * style */ public int getStrokeAlpha() { return mStrokeAlpha; } /** * Return the fill alpha value (in the range 0,255) to be used for this * style */ public int getFillAlpha() { return mFillAlpha; } /** * Return the corresponding SwtDrawingStyle for the given * {@link DrawingStyle} * @param style The style to convert from a {@link DrawingStyle} to a {@link SwtDrawingStyle}. * @return A corresponding {@link SwtDrawingStyle}. */ public static SwtDrawingStyle of(DrawingStyle style) { switch (style) { case SELECTION: return SELECTION; case GUIDELINE: return GUIDELINE; case HOVER: return HOVER; case ANCHOR: return ANCHOR; case OUTLINE: return OUTLINE; case DROP_ZONE: return DROP_ZONE; case DROP_ZONE_ACTIVE: return DROP_ZONE_ACTIVE; case DROP_RECIPIENT: return DROP_RECIPIENT; case DROP_PREVIEW: return DROP_PREVIEW; case HELP: return HELP; case INVALID: return INVALID; case EMPTY: return EMPTY; case CUSTOM1: return CUSTOM1; case CUSTOM2: return CUSTOM2; // Internal error default: throw new IllegalArgumentException("Unknown style " + style); } } /** RGB description of the stroke/foreground/border color */ private final RGB mStroke; /** RGB description of the fill/foreground/interior color */ private final RGB mFill; /** Pixel thickness of the stroke/border */ private final int mLineWidth; /** SWT line style of the border/stroke */ private final int mLineStyle; /** Alpha (in the range 0-255) of the stroke/border */ private final int mStrokeAlpha; /** Alpha (in the range 0-255) of the fill/interior */ private final int mFillAlpha; }