/* * $RCSfile: GraphicsNode.java,v $ * * Copyright 1990-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License version * 2 only, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License version 2 for more details (a copy is * included at /legal/license.txt). * * You should have received a copy of the GNU General Public License * version 2 along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 or visit www.sun.com if you need additional * information or have any questions. */ package com.sun.perseus.model; import com.sun.perseus.j2d.GraphicsProperties; import com.sun.perseus.util.SVGConstants; /** * <code>GraphicsNode</code> is the interface that all <code>ModelNode</code> * (see {@link com.sun.perseus.model.ModelNode ModelNode}) which correspond * to graphical content implement. * <br /> * <code>GraphicsNode</code>s have a notion of visibility and display. If a * node is not <em>displayed</em>, then it does not paint and none of its * children (if present) are painted. If a node is invisible, then it does * no paint itself, but it paints it's children. In other words, it a node * is invisible, its chidren may be visible (depending on the children's * own visibility setting), but if a node is not displayed, * then its children are not displayed either, no matter what their own * display setting is. This corresponds to the CSS 2 concept of visibility * and display. * <br /> * IMPORTANT NOTE: Setting a property on a <code>GraphicsNode</code> * automatically sets the inherited and color relative flags to false. * * @see ModelNode * * @version $Id: GraphicsNode.java,v 1.5 2006/06/29 10:47:31 ln156897 Exp $ */ public interface GraphicsNode extends DecoratedNode, GraphicsProperties { /** * The fill property controls the color of the fill operation * @see com.sun.perseus.j2d.GraphicsProperties#setFill */ int PROPERTY_FILL = 1; /** * The stroke property controls the color of the stroke * @see com.sun.perseus.j2d.GraphicsProperties#setStroke */ int PROPERTY_STROKE = 1 << 1; /** * The color property controls the 'current color'. The current * color defines the value of the fill or stroke properties when they * are 'color relative'. * @see #setColorRelative * @see com.sun.perseus.j2d.GraphicsProperties#setColor */ int PROPERTY_COLOR = 1 << 2; /** * The fill rule property controls how the interior of shapes is computed. * @see com.sun.perseus.j2d.GraphicsProperties#WIND_EVEN_ODD * @see com.sun.perseus.j2d.GraphicsProperties#WIND_NON_ZERO * @see com.sun.perseus.j2d.GraphicsProperties#setFillRule */ int PROPERTY_FILL_RULE = 1 << 3; /** * The stroke width property controls how wide the stroke is. * @see com.sun.perseus.j2d.GraphicsProperties#setStrokeWidth */ int PROPERTY_STROKE_WIDTH = 1 << 4; /** * The stroke line join property defines the style of miter, i.e., * the style of elbows between segments. * * @see com.sun.perseus.j2d.GraphicsProperties#JOIN_MITER * @see com.sun.perseus.j2d.GraphicsProperties#JOIN_ROUND * @see com.sun.perseus.j2d.GraphicsProperties#JOIN_BEVEL * @see com.sun.perseus.j2d.GraphicsProperties#setStrokeLineJoin * */ int PROPERTY_STROKE_LINE_JOIN = 1 << 5; /** * The stroke line cap property defines the style of line caps, * i.e., the style of the end and begining of line strokes. * @see com.sun.perseus.j2d.GraphicsProperties#CAP_BUTT * @see com.sun.perseus.j2d.GraphicsProperties#CAP_ROUND * @see com.sun.perseus.j2d.GraphicsProperties#CAP_SQUARE * @see com.sun.perseus.j2d.GraphicsProperties#setStrokeLineCap */ int PROPERTY_STROKE_LINE_CAP = 1 << 6; /** * Provides a way to limit the extent of 'spikes' out * of angle elbows. * @see com.sun.perseus.j2d.GraphicsProperties#setStrokeMiterLimit */ int PROPERTY_STROKE_MITER_LIMIT = 1 << 7; /** * Array defining the stroke's dash pattern. * @see com.sun.perseus.j2d.GraphicsProperties#setStrokeDashArray */ int PROPERTY_STROKE_DASH_ARRAY = 1 << 8; /** * Offset in the stroke dash array * @see #PROPERTY_STROKE_DASH_ARRAY * @see com.sun.perseus.j2d.GraphicsProperties#setStrokeDashOffset */ int PROPERTY_STROKE_DASH_OFFSET = 1 << 9; /** * Controls the offset in the dash array, in * user space * @see com.sun.perseus.j2d.GraphicsProperties#setDisplay */ int PROPERTY_DISPLAY = 1 << 10; /** * Controls whether a node is visible or not. Children of * a node which is not visible can still be visible. * @see com.sun.perseus.j2d.GraphicsProperties#setVisibility */ int PROPERTY_VISIBILITY = 1 << 11; /** * Controls the opacity used in a fill operation. * @see com.sun.perseus.j2d.GraphicsProperties#setFillOpacity */ int PROPERTY_FILL_OPACITY = 1 << 12; /** * Controls the opacity used in a stroking operation. * @see com.sun.perseus.j2d.GraphicsProperties#setStrokeOpacity */ int PROPERTY_STROKE_OPACITY = 1 << 13; /** * Controls the opacity used in blending the offscreen image * into the current background. * @see com.sun.perseus.j2d.GraphicsProperties#setOpacity */ int PROPERTY_OPACITY = 1 << 14; /** * @param propertyIndex index of the property to check * @return true if the input property is color relative. False * otherwise * @see #setColorRelative */ boolean isColorRelative(int propertyIndex); /** * Returns true if the input property can be color-relative. * * @param propertyIndex the index of the property which may be * color-relative. * @return true if the input property can be color relative. False * otherwise. */ boolean isColorRelativeProperty(final int propertyIndex); /** * Sets the input property as a color-relative property. There are * two color-relative properties on a <code>GraphicsNode</code>: * <code>fill</code> and <code>stroke</code>. For all other properties, * setting the property as color relative should not have effect. * For <code>fill</code> and <code>stroke</code>, setting them as * color relative means that the <code>color</code> property should * be used for the corresponding fill or draw operations. * * @param propertyIndex index of the property * @param isColorRelative the new state fot the property's color relative * value. */ void setColorRelative(int propertyIndex, boolean isColorRelative); /** * Default inheritance setting (Y=yes, N=no): * <pre> * - Y fill * - Y stroke * - Y color * - Y fill rule * * - Y stroke width * - Y line join * - Y line cap * - Y miter limit * * - Y dash array * - Y dash offset * - N display * - Y visibility * * - Y fill opacity * - Y stroke opacity * - N opacity * </pre> */ int DEFAULT_INHERITANCE = 0x3BFF; /** * Default color relative (Y=yes, N=no): * <pre> * - N fill * - N stroke * - N color * - N fill rule * * - N stroke width * - N line join * - N line cap * - N miter limit * * - N dash array * - N dash offset * - N display * - N visibility * * - N fill opacity * - N stroke opacity * - N opacity * </pre> */ int DEFAULT_COLOR_RELATIVE = 0x0000; /** * Number of properties in a GraphicsNode */ int NUMBER_OF_PROPERTIES = 15; }