/* * 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.common.api; import com.android.annotations.NonNull; import com.google.common.annotations.Beta; import java.util.List; /** * Represents a graphical context that rules can use to draw on the canvas. * <p/> * The wrapper GC is only valid during the context of a paint operation. * This means {@link IViewRule}s should not cache this object and call it at * just about any time, it is only valid during a call that actually receives * the GC wrapper. * <p> * <b>NOTE: This is not a public or final API; if you rely on this be prepared * to adjust your code for the next tools release.</b> * </p> */ @Beta public interface IGraphics { /** * Draws a line between 2 points, using the current foreground color and * alpha. */ void drawLine(int x1, int y1, int x2, int y2); /** * Draws a line between 2 points, using the current foreground color and * alpha. */ void drawLine(@NonNull Point p1, @NonNull Point p2); /** * Draws an arrow from (x1, y1) to (x2, y2). * * @param x1 The x coordinate of the beginning of the arrow * @param y1 The y coordinate of the beginning of the arrow * @param x2 The x coordinate of the end (point) of the arrow * @param y2 The y coordinate of the end (point) of the arrow * @param size The size of the arrowhead */ void drawArrow(int x1, int y1, int x2, int y2, int size); /** * Draws a dot at the given position. * * @param x The x coordinate of the dot * @param y The y coordinate of the dot */ void drawPoint(int x, int y); /** * Draws a rectangle outline between 2 points, using the current foreground * color and alpha. */ void drawRect(int x1, int y1, int x2, int y2); /** * Draws a rectangle outline between 2 points, using the current foreground * color and alpha. */ void drawRect(@NonNull Point p1, @NonNull Point p2); /** * Draws a rectangle outline between 2 points, using the current foreground * color and alpha. */ void drawRect(@NonNull Rect r); /** * Fills a rectangle outline between 2 points, using the current background * color and alpha. */ void fillRect(int x1, int y1, int x2, int y2); /** * Fills a rectangle outline between 2 points, using the current background * color and alpha. */ void fillRect(@NonNull Point p1, @NonNull Point p2); /** * Fills a rectangle outline between 2 points, using the current background * color and alpha. */ void fillRect(@NonNull Rect r); /** * Draws the given string, using the current foreground color. No tab * expansion or carriage return processing will be performed. * * @param string the string to be drawn. * @param x the x coordinate of the top left corner of the text. * @param y the y coordinate of the top left corner of the text. */ void drawString(@NonNull String string, int x, int y); /** * Draws the given string, using the current foreground color. No tab * expansion or carriage return processing will be performed. * * @param string the string to be drawn. * @param topLeft the top left corner of the text. */ void drawString(@NonNull String string, @NonNull Point topLeft); /** * Draw the given strings, using the current stroke color and alpha for the * text, and the current fill color and alpha for a rectangle behind the * bounding box fitting all the lines of text. Each subsequent string is * drawn on consecutive lines below the previous string. * * @param x The left edge to start each string at * @param y The top position of the first string; subsequent strings are * painted on lines below * @param strings An array of labels to be displayed (should not be null). * The actual String used is the {@link Object#toString()} value * of each list item. */ void drawBoxedStrings(int x, int y, @NonNull List<?> strings); /** * Set up the graphics context to use the given style for subsequent drawing * operations. * * @param style The drawing style to be used. May not be null. */ void useStyle(@NonNull DrawingStyle style); /** * Registers a color using 0x00rrggbb where each component is 0..0xFF. * <p/> * Transparency is handled separately using {@link #setAlpha(int)}. * <p/> * If the same color is registered twice, the same object will be returned. * <p/> * NOTE: It's preferable to use {@link #useStyle(DrawingStyle)} if possible * to ensure that your colors work properly across multiple current and * future themes. */ @NonNull IColor registerColor(int rgb); /** * Returns the height, in pixels, of the default font. */ int getFontHeight(); /** * Returns the current foreground color. * The foreground color is used for drawing operations including when text is drawn. */ @NonNull IColor getForeground(); /** * Sets the foreground color. The foreground color is used for drawing * operations including when text is drawn. */ void setForeground(@NonNull IColor color); /** * Returns the current background color. The background color is used for * fill operations. */ @NonNull IColor getBackground(); /** * Sets the background color. The background color is used for fill * operations. */ void setBackground(@NonNull IColor color); /** * Returns the current alpha value (varies between 0 for transparent and 255 * for opaque). * * @return The current alpha value in use */ int getAlpha(); /** * Sets the receiver's alpha value which must be * between 0 (transparent) and 255 (opaque). * <p> * This operation requires the operating system's advanced * graphics subsystem which may not be available on some * platforms. * <p> * TODO: Consider removing this method; it will usually be ignored because * most graphics operations apply the alpha from the current drawing style */ void setAlpha(int alpha); /** * A line style for {@link IGraphics#setLineStyle(LineStyle)}. */ enum LineStyle { /** Style for solid lines. */ LINE_SOLID, /** Style for dashed lines. */ LINE_DASH, /** Style for dotted lines. */ LINE_DOT, /** Style for alternating dash-dot lines. */ LINE_DASHDOT, /** Style for dash-dot-dot lines. */ LINE_DASHDOTDOT } /** * Sets the current line style. */ void setLineStyle(@NonNull LineStyle style); /** * Sets the width that will be used when drawing lines. * The operation is ignored if <var>width</var> is less than 1. */ void setLineWidth(int width); }