Mercurial > projects > dwt-addons
diff dwtx/draw2d/ImageFigure.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 diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtx/draw2d/ImageFigure.d Sun Aug 03 00:52:14 2008 +0200 @@ -0,0 +1,172 @@ +/******************************************************************************* + * 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.ImageFigure; + +import dwt.dwthelper.utils; + + + +import dwt.graphics.Image; +import dwtx.draw2d.geometry.Dimension; +import dwtx.draw2d.geometry.Insets; +import dwtx.draw2d.geometry.Rectangle; +import dwtx.draw2d.IFigure; +import dwtx.draw2d.Figure; +import dwtx.draw2d.Graphics; +import dwtx.draw2d.PositionConstants; + +/** + * A Figure that simply contains an Image. Use this Figure, instead of a Label, when + * displaying Images without any accompanying text. This figure is not intended to have a + * layout mananger or children. + * <P> + * Note that it is the client's responsibility to dispose the given image. There is no + * "free" resource management in draw2d. + * + * @author Pratik Shah + */ +public class ImageFigure + : Figure +{ + +private Image img; +private Dimension size; +private int alignment; + +/** + * Constructor<br> + * The default alignment is <code>PositionConstants.CENTER</code>. + */ +public this() { + this(null, PositionConstants.CENTER); +} + +/** + * Constructor<br> + * The default alignment is <code>PositionConstants.CENTER</code>. + * + * @param image The Image to be displayed + */ +public this(Image image) { + this(image, PositionConstants.CENTER); +} + +/** + * Constructor + * + * @param image The Image to be displayed + * @param alignment A PositionConstant indicating the alignment + * + * @see ImageFigure#setImage(Image) + * @see ImageFigure#setAlignment(int) + */ +public this(Image image, int alignment) { + size = new Dimension(); + setImage(image); + setAlignment(alignment); +} + +/** + * @return The Image that this Figure displays + */ +public Image getImage() { + return img; +} + +/** + * Calculates the necessary size to display the Image within the figure's client area. + * + * @see dwtx.draw2d.Figure#getPreferredSize(int, int) + */ +public Dimension getPreferredSize(int wHint, int hHint) { + if (getInsets() is IFigure_NO_INSETS) + return size; + Insets i = getInsets(); + return size.getExpanded(i.getWidth(), i.getHeight()); +} + +/** + * @see dwtx.draw2d.Figure#paintFigure(Graphics) + */ +protected void paintFigure(Graphics graphics) { + super.paintFigure(graphics); + + if (getImage() is null) + return; + + int x, y; + Rectangle area = getClientArea(); + switch (alignment & PositionConstants.NORTH_SOUTH) { + case PositionConstants.NORTH: + y = area.y; + break; + case PositionConstants.SOUTH: + y = area.y + area.height - size.height; + break; + default: + y = (area.height - size.height) / 2 + area.y; + break; + } + switch (alignment & PositionConstants.EAST_WEST) { + case PositionConstants.EAST: + x = area.x + area.width - size.width; + break; + case PositionConstants.WEST: + x = area.x; + break; + default: + x = (area.width - size.width) / 2 + area.x; + break; + } + graphics.drawImage(getImage(), x, y); +} + +/** + * Sets the alignment of the Image within this Figure. The alignment comes into play + * when the ImageFigure is larger than the Image. The alignment could be any valid + * combination of the following: + * + * <UL> + * <LI>PositionConstants.NORTH</LI> + * <LI>PositionConstants.SOUTH</LI> + * <LI>PositionConstants.EAST</LI> + * <LI>PositionConstants.WEST</LI> + * <LI>PositionConstants.CENTER or PositionConstants.NONE</LI> + * </UL> + * + * @param flag A constant indicating the alignment + */ +public void setAlignment(int flag) { + alignment = flag; +} + +/** + * Sets the Image that this ImageFigure displays. + * <p> + * IMPORTANT: Note that it is the client's responsibility to dispose the given image. + * + * @param image The Image to be displayed. It can be <code>null</code>. + */ +public void setImage(Image image) { + if (img is image) + return; + img = image; + if (img !is null) + size = (new Rectangle(image.getBounds())).getSize(); + else + size = new Dimension(); + revalidate(); + repaint(); +} + +}