blob: 93a33283cfeaf99af740ba86828434ed42e38d27 [file] [log] [blame]
/*
* 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), 192, new RGB(0x00, 0x99, 0xFF), 192, 1, SWT.LINE_SOLID),
/**
* The style definition corresponding to {@link DrawingStyle#GUIDELINE}
*/
GUIDELINE(new RGB(0x00, 0xAA, 0x00), 192, SWT.LINE_SOLID),
/**
* The style definition corresponding to {@link DrawingStyle#GUIDELINE}
*/
GUIDELINE_SHADOW(new RGB(0x00, 0xAA, 0x00), 192, SWT.LINE_SOLID),
/**
* The style definition corresponding to {@link DrawingStyle#GUIDELINE_DASHED}
*/
GUIDELINE_DASHED(new RGB(0x00, 0xAA, 0x00), 192, SWT.LINE_CUSTOM),
/**
* The style definition corresponding to {@link DrawingStyle#DISTANCE}
*/
DISTANCE(new RGB(0xFF, 0x00, 0x00), 192 - 32, SWT.LINE_SOLID),
/**
* The style definition corresponding to {@link DrawingStyle#GRID}
*/
GRID(new RGB(0xAA, 0xAA, 0xAA), 128, SWT.LINE_SOLID),
/**
* The style definition corresponding to {@link DrawingStyle#HOVER}
*/
HOVER(null, 0, new RGB(0xFF, 0xFF, 0xFF), 40, 1, SWT.LINE_DOT),
/**
* The style definition corresponding to {@link DrawingStyle#HOVER}
*/
HOVER_SELECTION(null, 0, new RGB(0xFF, 0xFF, 0xFF), 10, 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, 2,
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#RESIZE_PREVIEW}
*/
RESIZE_PREVIEW(new RGB(0xFF, 0x99, 0x00), 255, null, 0, 2, SWT.LINE_SOLID),
/**
* The style used to show a proposed resize bound which is being rejected (for example,
* because there is no near edge to attach to in a RelativeLayout).
*/
RESIZE_FAIL(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), 64, 2, SWT.LINE_SOLID),
/**
* The style definition corresponding to {@link DrawingStyle#DEPENDENCY}
*/
DEPENDENCY(new RGB(0xFF, 0xFF, 0xFF), 255, new RGB(0xFF, 0xFF, 0x00), 24, 2, SWT.LINE_SOLID),
/**
* The style definition corresponding to {@link DrawingStyle#CYCLE}
*/
CYCLE(new RGB(0xFF, 0x00, 0x00), 192, null, 0, 1, SWT.LINE_SOLID),
/**
* The style definition corresponding to {@link DrawingStyle#DRAGGED}
*/
DRAGGED(new RGB(0xFF, 0xFF, 0xFF), 255, new RGB(0x00, 0xFF, 0x00), 16, 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 GUIDELINE_SHADOW:
return GUIDELINE_SHADOW;
case GUIDELINE_DASHED:
return GUIDELINE_DASHED;
case DISTANCE:
return DISTANCE;
case GRID:
return GRID;
case HOVER:
return HOVER;
case HOVER_SELECTION:
return HOVER_SELECTION;
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 RESIZE_PREVIEW:
return RESIZE_PREVIEW;
case RESIZE_FAIL:
return RESIZE_FAIL;
case HELP:
return HELP;
case INVALID:
return INVALID;
case DEPENDENCY:
return DEPENDENCY;
case CYCLE:
return CYCLE;
case DRAGGED:
return DRAGGED;
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;
}