# HG changeset patch # User Frank Benoit # Date 1201265721 -3600 # Node ID 6696f884b8a65f7ac3a9d5bce7c57894435e650b # Parent f136c8bc7b106590e3363c61f7cef0623e6291a2 RGB, LineAttributes diff -r f136c8bc7b10 -r 6696f884b8a6 .hgignore --- a/.hgignore Fri Jan 25 13:02:25 2008 +0100 +++ b/.hgignore Fri Jan 25 13:55:21 2008 +0100 @@ -3,6 +3,7 @@ *.obj *.a *.swp +*.proto syntax: regexp diff -r f136c8bc7b10 -r 6696f884b8a6 dwt/graphics/LineAttributes.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwt/graphics/LineAttributes.d Fri Jan 25 13:55:21 2008 +0100 @@ -0,0 +1,123 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 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 + *******************************************************************************/ +module dwt.graphics.LineAttributes; + +import dwt.DWT; + +/** + * LineAttributes defines a set of line attributes that + * can be modified in a GC. + *

+ * Application code does not need to explicitly release the + * resources managed by each instance when those instances are no longer + * required, and thus no dispose() method is provided. + *

+ * + * @see GC#getLineAttributes() + * @see GC#setLineAttributes(LineAttributes) + * + * @since 3.3 + */ +public class LineAttributes { + + /** + * The line width. + */ + public float width; + + /** + * The line style. + * + * @see dwt.DWT#LINE_CUSTOM + * @see dwt.DWT#LINE_DASH + * @see dwt.DWT#LINE_DASHDOT + * @see dwt.DWT#LINE_DASHDOTDOT + * @see dwt.DWT#LINE_DOT + * @see dwt.DWT#LINE_SOLID + */ + public int style; + + /** + * The line cap style. + * + * @see dwt.DWT#CAP_FLAT + * @see dwt.DWT#CAP_ROUND + * @see dwt.DWT#CAP_SQUARE + */ + public int cap; + + /** + * The line join style. + * + * @see dwt.DWT#JOIN_BEVEL + * @see dwt.DWT#JOIN_MITER + * @see dwt.DWT#JOIN_ROUND + */ + public int join; + + /** + * The line dash style for DWT.LINE_CUSTOM. + */ + public float[] dash; + + /** + * The line dash style offset for DWT.LINE_CUSTOM. + */ + public float dashOffset; + + /** + * The line miter limit. + */ + public float miterLimit; + +/** + * Create a new line attributes with the specified line width. + * + * @param width the line width + */ +public this(float width) { + this(width, DWT.CAP_FLAT, DWT.JOIN_MITER, DWT.LINE_SOLID, null, 0, 10); +} + +/** + * Create a new line attributes with the specified line cap, join and width. + * + * @param width the line width + * @param cap the line cap style + * @param join the line join style + */ +public this(float width, int cap, int join) { + this(width, cap, join, DWT.LINE_SOLID, null, 0, 10); +} + +/** + * Create a new line attributes with the specified arguments. + * + * @param width the line width + * @param cap the line cap style + * @param join the line join style + * @param style the line style + * @param dash the line dash style + * @param dashOffset the line dash style offset + * @param miterLimit the line miter limit + */ +public this(float width, int cap, int join, int style, float[] dash, float dashOffset, float miterLimit) { + this.width = width; + this.cap = cap; + this.join = join; + this.style = style; + this.dash = dash; + this.dashOffset = dashOffset; + this.miterLimit = miterLimit; +} +} diff -r f136c8bc7b10 -r 6696f884b8a6 dwt/graphics/RGB.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwt/graphics/RGB.d Fri Jan 25 13:55:21 2008 +0100 @@ -0,0 +1,230 @@ +/******************************************************************************* + * 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 + *******************************************************************************/ +module dwt.graphics.RGB; + +public import dwt.internal.SerializableCompatibility; + +import dwt.DWT; +import Math = tango.math.Math : min, max; +import tango.text.convert.Format; + +/** + * Instances of this class are descriptions of colors in + * terms of the primary additive color model (red, green and + * blue). A color may be described in terms of the relative + * intensities of these three primary colors. The brightness + * of each color is specified by a value in the range 0 to 255, + * where 0 indicates no color (blackness) and 255 indicates + * maximum intensity. + *

+ * The hashCode() method in this class uses the values of the public + * fields to compute the hash value. When storing instances of the + * class in hashed collections, do not modify these fields after the + * object has been inserted. + *

+ *

+ * Application code does not need to explicitly release the + * resources managed by each instance when those instances are no longer + * required, and thus no dispose() method is provided. + *

+ * + * @see Color + */ + +public final class RGB : SerializableCompatibility { + + /** + * the red component of the RGB + */ + public int red; + + /** + * the green component of the RGB + */ + public int green; + + /** + * the blue component of the RGB + */ + public int blue; + + //static final long serialVersionUID = 3258415023461249074L; + +/** + * Constructs an instance of this class with the given + * red, green and blue values. + * + * @param red the red component of the new instance + * @param green the green component of the new instance + * @param blue the blue component of the new instance + * + * @exception IllegalArgumentException
    + *
  • ERROR_INVALID_ARGUMENT - if the red, green or blue argument is not between 0 and 255
  • + *
+ */ +public this (int red, int green, int blue) { + if ((red > 255) || (red < 0) || + (green > 255) || (green < 0) || + (blue > 255) || (blue < 0)) + DWT.error(DWT.ERROR_INVALID_ARGUMENT); + this.red = red; + this.green = green; + this.blue = blue; +} + +/** +* Constructs an instance of this class with the given +* hue, saturation, and brightness. +* +* @param hue the hue value for the HSB color (from 0 to 360) +* @param saturation the saturation value for the HSB color (from 0 to 1) +* @param brightness the brightness value for the HSB color (from 0 to 1) +* +* @exception IllegalArgumentException
    +*
  • ERROR_INVALID_ARGUMENT - if the hue is not between 0 and 360 or +* the saturation or brightness is not between 0 and 1
  • +*
+* +* @since 3.2 +*/ +public this (float hue, float saturation, float brightness) { + if (hue < 0 || hue > 360 || saturation < 0 || saturation > 1 || + brightness < 0 || brightness > 1) { + DWT.error(DWT.ERROR_INVALID_ARGUMENT); + } + float r, g, b; + if (saturation == 0) { + r = g = b = brightness; + } else { + if (hue == 360) hue = 0; + hue /= 60; + int i = cast(int)hue; + float f = hue - i; + float p = brightness * (1 - saturation); + float q = brightness * (1 - saturation * f); + float t = brightness * (1 - saturation * (1 - f)); + switch(i) { + case 0: + r = brightness; + g = t; + b = p; + break; + case 1: + r = q; + g = brightness; + b = p; + break; + case 2: + r = p; + g = brightness; + b = t; + break; + case 3: + r = p; + g = q; + b = brightness; + break; + case 4: + r = t; + g = p; + b = brightness; + break; + case 5: + default: + r = brightness; + g = p; + b = q; + break; + } + } + red = cast(int)(r * 255 + 0.5); + green = cast(int)(g * 255 + 0.5); + blue = cast(int)(b * 255 + 0.5); +} + +/** + * Returns the hue, saturation, and brightness of the color. + * + * @return color space values in float format (hue, saturation, brightness) + * + * @since 3.2 + */ +public float[] getHSB() { + float r = red / 255f; + float g = green / 255f; + float b = blue / 255f; + float max = Math.max(Math.max(r, g), b); + float min = Math.min(Math.min(r, g), b); + float delta = max - min; + float hue = 0; + float brightness = max; + float saturation = max == 0 ? 0 : (max - min) / max; + if (delta != 0) { + if (r == max) { + hue = (g - b) / delta; + } else { + if (g == max) { + hue = 2 + (b - r) / delta; + } else { + hue = 4 + (r - g) / delta; + } + } + hue *= 60; + if (hue < 0) hue += 360; + } + return [ hue, saturation, brightness ]; +} + +/** + * Compares the argument to the receiver, and returns true + * if they represent the same object using a class + * specific comparison. + * + * @param object the object to compare with this object + * @return true if the object is the same as this object and false otherwise + * + * @see #hashCode() + */ +public override int opEquals(Object object) { + if (object is this) return true; + if( auto rgb = cast(RGB) object ){ + return (rgb.red == this.red) && (rgb.green == this.green) && (rgb.blue == this.blue); + } + return false; +} + +/** + * Returns an integer hash code for the receiver. Any two + * objects that return true when passed to + * equals must return the same value for this + * method. + * + * @return the receiver's hash + * + * @see #equals(Object) + */ +public hash_t toHash() { + return (blue << 16) | (green << 8) | red; +} + +/** + * Returns a String containing a concise, human-readable + * description of the receiver. + * + * @return a String representation of the RGB + */ +public override char[] toString() { + return Format( "RGB {{{}, {}, {}}", red, green, blue ); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ +} + +}