Mercurial > projects > dwt-addons
view dwtx/draw2d/Shape.d @ 98:95307ad235d9
Added Draw2d code, still work in progress
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Sun, 03 Aug 2008 00:52:14 +0200 |
parents | |
children |
line wrap: on
line source
/******************************************************************************* * Copyright (c) 2000, 2005 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation * Port to the D programming language: * Frank Benoit <benoit@tionex.de> *******************************************************************************/ module dwtx.draw2d.Shape; import dwt.dwthelper.utils; import dwtx.draw2d.Figure; import dwtx.draw2d.Graphics; import dwtx.draw2d.ColorConstants; /** * Provides abstract support for a variety of shapes. * <p> * When customizing shapes, you shouldn't override paintFigure(). Override fillShape() * and outlineShape() methods instead. */ public abstract class Shape : Figure { /** The width of this shape's outline. */ protected int lineWidth = 1; /** The line style to be used for this shape's outline. */ protected int lineStyle; private bool fill = true, outline = true, xorFill, xorOutline; /** * Default constructor. * * @since 2.0 */ public this() { lineStyle = Graphics.LINE_SOLID; } /** * Fills the interior of the shape with the background color. * @param graphics the graphics object */ protected abstract void fillShape(Graphics graphics); /** * Returns the line style used to outline this shape. * @return the line style */ public int getLineStyle() { return lineStyle; } /** * Returns the line width of this shape's outline. * @return the line width */ public int getLineWidth() { return lineWidth; } /** * Returns <code>false</code> as shapes only draw themselves onto other figures, and * generally dont have rectangular dimensions. * * @see Figure#isOpaque() * @since 2.0 */ public bool isOpaque() { return false; } /** * Outlines this shape using the foreground color. * @param graphics the graphics object */ protected abstract void outlineShape(Graphics graphics); /** * Paints the shape. Each shape has an outline to draw, and a region to fill within that * outline. Disabled shapes must visually depict the disabled state. * * @see Figure#paintFigure(Graphics) */ public void paintFigure(Graphics graphics) { if (!isEnabled()) { graphics.translate(1, 1); graphics.setBackgroundColor(ColorConstants.buttonLightest); graphics.setForegroundColor(ColorConstants.buttonLightest); if (fill) { graphics.setXORMode(xorFill); fillShape(graphics); } if (outline) { graphics.setXORMode(xorOutline); graphics.setLineStyle(lineStyle); graphics.setLineWidth(lineWidth); outlineShape(graphics); } graphics.setBackgroundColor(ColorConstants.buttonDarker); graphics.setForegroundColor(ColorConstants.buttonDarker); graphics.translate(-1, -1); } if (fill) { graphics.setXORMode(xorFill); fillShape(graphics); } if (outline) { graphics.setXORMode(xorOutline); graphics.setLineStyle(lineStyle); graphics.setLineWidth(lineWidth); outlineShape(graphics); } } /** * Sets whether this shape should fill its region or not. It repaints this figure. * * @param b fill state * @since 2.0 */ public void setFill(bool b) { if (fill is b) return; fill = b; repaint(); } /** * Sets whether XOR based fill should be used by the shape. It repaints this figure. * * @param b XOR fill state * @since 2.0 */ public void setFillXOR(bool b) { if (xorFill is b) return; xorFill = b; repaint(); } /** * Sets the line width to be used to outline the shape. * * @param w the new width * @since 2.0 */ public void setLineWidth(int w) { if (lineWidth is w) return; lineWidth = w; repaint(); } /** * Sets the style of line to be used by this shape. * * @param s the new line style * @since 2.0 */ public void setLineStyle(int s) { if (lineStyle is s) return; lineStyle = s; repaint(); } /** * Sets whether the outline should be drawn for this shape. * * @param b <code>true</code> if the shape should be outlined * @since 2.0 */ public void setOutline(bool b) { if (outline is b) return; outline = b; repaint(); } /** * Sets whether XOR based outline should be used for this shape. * * @param b <code>true</code> if the outline should be XOR'ed * @since 2.0 */ public void setOutlineXOR(bool b) { if (xorOutline is b) return; xorOutline = b; repaint(); } /** * Sets whether XOR based fill and XOR based outline should be used for this shape. * * @param b <code>true</code> if the outline and fill should be XOR'ed * @since 2.0 */ public void setXOR(bool b) { xorOutline = xorFill = b; repaint(); } }