Home | History | Annotate | Download | only in gle2
      1 /*
      2  * Copyright (C) 2010 The Android Open Source Project
      3  *
      4  * Licensed under the Eclipse Public License, Version 1.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.eclipse.org/org/documents/epl-v10.php
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.ide.eclipse.adt.internal.editors.layout.gle2;
     18 
     19 import com.android.ide.common.api.DrawingStyle;
     20 
     21 import org.eclipse.swt.SWT;
     22 import org.eclipse.swt.graphics.RGB;
     23 
     24 /**
     25  * Description of the drawing styles with specific color, line style and alpha
     26  * definitions. This class corresponds to the more generic {@link DrawingStyle}
     27  * class which defines the drawing styles but does not introduce any specific
     28  * SWT values to the API clients.
     29  * <p>
     30  * TODO: This class should eventually be replaced by a scheme where the color
     31  * constants are instead coming from the theme.
     32  */
     33 public enum SwtDrawingStyle {
     34     /**
     35      * The style definition corresponding to {@link DrawingStyle#SELECTION}
     36      */
     37     SELECTION(new RGB(0x00, 0x99, 0xFF), 192, new RGB(0x00, 0x99, 0xFF), 192, 1, SWT.LINE_SOLID),
     38 
     39     /**
     40      * The style definition corresponding to {@link DrawingStyle#GUIDELINE}
     41      */
     42     GUIDELINE(new RGB(0x00, 0xAA, 0x00), 192, SWT.LINE_SOLID),
     43 
     44     /**
     45      * The style definition corresponding to {@link DrawingStyle#GUIDELINE}
     46      */
     47     GUIDELINE_SHADOW(new RGB(0x00, 0xAA, 0x00), 192, SWT.LINE_SOLID),
     48 
     49     /**
     50      * The style definition corresponding to {@link DrawingStyle#GUIDELINE_DASHED}
     51      */
     52     GUIDELINE_DASHED(new RGB(0x00, 0xAA, 0x00), 192, SWT.LINE_CUSTOM),
     53 
     54     /**
     55      * The style definition corresponding to {@link DrawingStyle#DISTANCE}
     56      */
     57     DISTANCE(new RGB(0xFF, 0x00, 0x00), 192 - 32, SWT.LINE_SOLID),
     58 
     59     /**
     60      * The style definition corresponding to {@link DrawingStyle#GRID}
     61      */
     62     GRID(new RGB(0xAA, 0xAA, 0xAA), 128, SWT.LINE_SOLID),
     63 
     64     /**
     65      * The style definition corresponding to {@link DrawingStyle#HOVER}
     66      */
     67     HOVER(null, 0, new RGB(0xFF, 0xFF, 0xFF), 40, 1, SWT.LINE_DOT),
     68 
     69     /**
     70      * The style definition corresponding to {@link DrawingStyle#HOVER}
     71      */
     72     HOVER_SELECTION(null, 0, new RGB(0xFF, 0xFF, 0xFF), 10, 1, SWT.LINE_DOT),
     73 
     74     /**
     75      * The style definition corresponding to {@link DrawingStyle#ANCHOR}
     76      */
     77     ANCHOR(new RGB(0x00, 0x99, 0xFF), 96, SWT.LINE_SOLID),
     78 
     79     /**
     80      * The style definition corresponding to {@link DrawingStyle#OUTLINE}
     81      */
     82     OUTLINE(new RGB(0x88, 0xFF, 0x88), 160, SWT.LINE_SOLID),
     83 
     84     /**
     85      * The style definition corresponding to {@link DrawingStyle#DROP_RECIPIENT}
     86      */
     87     DROP_RECIPIENT(new RGB(0xFF, 0x99, 0x00), 255, new RGB(0xFF, 0x99, 0x00), 160, 2,
     88             SWT.LINE_SOLID),
     89 
     90     /**
     91      * The style definition corresponding to {@link DrawingStyle#DROP_ZONE}
     92      */
     93     DROP_ZONE(new RGB(0x00, 0xAA, 0x00), 220, new RGB(0x55, 0xAA, 0x00), 200, 1, SWT.LINE_SOLID),
     94 
     95     /**
     96      * The style definition corresponding to
     97      * {@link DrawingStyle#DROP_ZONE_ACTIVE}
     98      */
     99     DROP_ZONE_ACTIVE(new RGB(0x00, 0xAA, 0x00), 220, new RGB(0x00, 0xAA, 0x00), 128, 2,
    100             SWT.LINE_SOLID),
    101 
    102     /**
    103      * The style definition corresponding to {@link DrawingStyle#DROP_PREVIEW}
    104      */
    105     DROP_PREVIEW(new RGB(0xFF, 0x99, 0x00), 255, null, 0, 2, SWT.LINE_CUSTOM),
    106 
    107     /**
    108      * The style definition corresponding to {@link DrawingStyle#RESIZE_PREVIEW}
    109      */
    110     RESIZE_PREVIEW(new RGB(0xFF, 0x99, 0x00), 255, null, 0, 2, SWT.LINE_SOLID),
    111 
    112     /**
    113      * The style used to show a proposed resize bound which is being rejected (for example,
    114      * because there is no near edge to attach to in a RelativeLayout).
    115      */
    116     RESIZE_FAIL(new RGB(0xFF, 0x99, 0x00), 255, null, 0, 2, SWT.LINE_CUSTOM),
    117 
    118     /**
    119      * The style definition corresponding to {@link DrawingStyle#HELP}
    120      */
    121     HELP(new RGB(0xFF, 0xFF, 0xFF), 255, new RGB(0x00, 0x00, 0x00), 128, 1, SWT.LINE_SOLID),
    122 
    123     /**
    124      * The style definition corresponding to {@link DrawingStyle#INVALID}
    125      */
    126     INVALID(new RGB(0xFF, 0xFF, 0xFF), 255, new RGB(0xFF, 0x00, 0x00), 64, 2, SWT.LINE_SOLID),
    127 
    128     /**
    129      * The style definition corresponding to {@link DrawingStyle#DEPENDENCY}
    130      */
    131     DEPENDENCY(new RGB(0xFF, 0xFF, 0xFF), 255, new RGB(0xFF, 0xFF, 0x00), 24, 2, SWT.LINE_SOLID),
    132 
    133     /**
    134      * The style definition corresponding to {@link DrawingStyle#CYCLE}
    135      */
    136     CYCLE(new RGB(0xFF, 0x00, 0x00), 192, null, 0, 1, SWT.LINE_SOLID),
    137 
    138     /**
    139      * The style definition corresponding to {@link DrawingStyle#DRAGGED}
    140      */
    141     DRAGGED(new RGB(0xFF, 0xFF, 0xFF), 255, new RGB(0x00, 0xFF, 0x00), 16, 2, SWT.LINE_SOLID),
    142 
    143     /**
    144      * The style definition corresponding to {@link DrawingStyle#EMPTY}
    145      */
    146     EMPTY(new RGB(0xFF, 0xFF, 0x55), 255, new RGB(0xFF, 0xFF, 0x55), 255, 1, SWT.LINE_DASH),
    147 
    148     /**
    149      * The style definition corresponding to {@link DrawingStyle#CUSTOM1}
    150      */
    151     CUSTOM1(new RGB(0xFF, 0x00, 0xFF), 255, null, 0, 1, SWT.LINE_SOLID),
    152 
    153     /**
    154      * The style definition corresponding to {@link DrawingStyle#CUSTOM2}
    155      */
    156     CUSTOM2(new RGB(0x00, 0xFF, 0xFF), 255, null, 0, 1, SWT.LINE_DOT);
    157 
    158     /**
    159      * Construct a new style value with the given foreground, background, width,
    160      * linestyle and transparency.
    161      *
    162      * @param stroke A color descriptor for the foreground color, or null if no
    163      *            foreground color should be set
    164      * @param fill A color descriptor for the background color, or null if no
    165      *            foreground color should be set
    166      * @param lineWidth The line width, in pixels, or 0 if no line width should
    167      *            be set
    168      * @param lineStyle The SWT line style - such as {@link SWT#LINE_SOLID}.
    169      * @param strokeAlpha The alpha value of the stroke, an integer in the range 0 to 255
    170      *            where 0 is fully transparent and 255 is fully opaque.
    171      * @param fillAlpha The alpha value of the fill, an integer in the range 0 to 255
    172      *            where 0 is fully transparent and 255 is fully opaque.
    173      */
    174     private SwtDrawingStyle(RGB stroke, int strokeAlpha, RGB fill, int fillAlpha, int lineWidth,
    175             int lineStyle) {
    176         mStroke = stroke;
    177         mFill = fill;
    178         mLineWidth = lineWidth;
    179         mLineStyle = lineStyle;
    180         mStrokeAlpha = strokeAlpha;
    181         mFillAlpha = fillAlpha;
    182     }
    183 
    184     /**
    185      * Convenience constructor for typical drawing styles, which do not specify
    186      * a fill and use a standard thickness line
    187      *
    188      * @param stroke Stroke color to be used (e.g. for the border/foreground)
    189      * @param strokeAlpha Transparency to use for the stroke; 0 is transparent
    190      *            and 255 is fully opaque.
    191      * @param lineStyle The SWT line style - such as {@link SWT#LINE_SOLID}.
    192      */
    193     private SwtDrawingStyle(RGB stroke, int strokeAlpha, int lineStyle) {
    194         this(stroke, strokeAlpha, null, 255, 1, lineStyle);
    195     }
    196 
    197     /**
    198      * Return the stroke/foreground/border RGB color description to be used for
    199      * this style, or null if none
    200      */
    201     public RGB getStrokeColor() {
    202         return mStroke;
    203     }
    204 
    205     /**
    206      * Return the fill/background/interior RGB color description to be used for
    207      * this style, or null if none
    208      */
    209     public RGB getFillColor() {
    210         return mFill;
    211     }
    212 
    213     /** Return the line width to be used for this style */
    214     public int getLineWidth() {
    215         return mLineWidth;
    216     }
    217 
    218     /** Return the SWT line style to be used for this style */
    219     public int getLineStyle() {
    220         return mLineStyle;
    221     }
    222 
    223     /**
    224      * Return the stroke alpha value (in the range 0,255) to be used for this
    225      * style
    226      */
    227     public int getStrokeAlpha() {
    228         return mStrokeAlpha;
    229     }
    230 
    231     /**
    232      * Return the fill alpha value (in the range 0,255) to be used for this
    233      * style
    234      */
    235     public int getFillAlpha() {
    236         return mFillAlpha;
    237     }
    238 
    239     /**
    240      * Return the corresponding SwtDrawingStyle for the given
    241      * {@link DrawingStyle}
    242      * @param style The style to convert from a {@link DrawingStyle} to a {@link SwtDrawingStyle}.
    243      * @return A corresponding {@link SwtDrawingStyle}.
    244      */
    245     public static SwtDrawingStyle of(DrawingStyle style) {
    246         switch (style) {
    247             case SELECTION:
    248                 return SELECTION;
    249             case GUIDELINE:
    250                 return GUIDELINE;
    251             case GUIDELINE_SHADOW:
    252                 return GUIDELINE_SHADOW;
    253             case GUIDELINE_DASHED:
    254                 return GUIDELINE_DASHED;
    255             case DISTANCE:
    256                 return DISTANCE;
    257             case GRID:
    258                 return GRID;
    259             case HOVER:
    260                 return HOVER;
    261             case HOVER_SELECTION:
    262                 return HOVER_SELECTION;
    263             case ANCHOR:
    264                 return ANCHOR;
    265             case OUTLINE:
    266                 return OUTLINE;
    267             case DROP_ZONE:
    268                 return DROP_ZONE;
    269             case DROP_ZONE_ACTIVE:
    270                 return DROP_ZONE_ACTIVE;
    271             case DROP_RECIPIENT:
    272                 return DROP_RECIPIENT;
    273             case DROP_PREVIEW:
    274                 return DROP_PREVIEW;
    275             case RESIZE_PREVIEW:
    276                 return RESIZE_PREVIEW;
    277             case RESIZE_FAIL:
    278                 return RESIZE_FAIL;
    279             case HELP:
    280                 return HELP;
    281             case INVALID:
    282                 return INVALID;
    283             case DEPENDENCY:
    284                 return DEPENDENCY;
    285             case CYCLE:
    286                 return CYCLE;
    287             case DRAGGED:
    288                 return DRAGGED;
    289             case EMPTY:
    290                 return EMPTY;
    291             case CUSTOM1:
    292                 return CUSTOM1;
    293             case CUSTOM2:
    294                 return CUSTOM2;
    295 
    296                 // Internal error
    297             default:
    298                 throw new IllegalArgumentException("Unknown style " + style);
    299         }
    300     }
    301 
    302     /** RGB description of the stroke/foreground/border color */
    303     private final RGB mStroke;
    304 
    305     /** RGB description of the fill/foreground/interior color */
    306     private final RGB mFill;
    307 
    308     /** Pixel thickness of the stroke/border */
    309     private final int mLineWidth;
    310 
    311     /** SWT line style of the border/stroke */
    312     private final int mLineStyle;
    313 
    314     /** Alpha (in the range 0-255) of the stroke/border */
    315     private final int mStrokeAlpha;
    316 
    317     /** Alpha (in the range 0-255) of the fill/interior */
    318     private final int mFillAlpha;
    319 }
    320