001: /**
002: * ===========================================
003: * JFreeReport : a free Java reporting library
004: * ===========================================
005: *
006: * Project Info: http://reporting.pentaho.org/
007: *
008: * (C) Copyright 2001-2007, by Object Refinery Ltd, Pentaho Corporation and Contributors.
009: *
010: * This library is free software; you can redistribute it and/or modify it under the terms
011: * of the GNU Lesser General Public License as published by the Free Software Foundation;
012: * either version 2.1 of the License, or (at your option) any later version.
013: *
014: * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
015: * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
016: * See the GNU Lesser General Public License for more details.
017: *
018: * You should have received a copy of the GNU Lesser General Public License along with this
019: * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
020: * Boston, MA 02111-1307, USA.
021: *
022: * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
023: * in the United States and other countries.]
024: *
025: * ------------
026: * StrictGeomUtility.java
027: * ------------
028: * (C) Copyright 2001-2007, by Object Refinery Ltd, Pentaho Corporation and Contributors.
029: */package org.jfree.report.util.geom;
030:
031: import java.awt.geom.Dimension2D;
032: import java.awt.geom.Rectangle2D;
033:
034: import org.jfree.ui.FloatDimension;
035:
036: /**
037: * This class is the heart of the alternative geometrics toolkit. It performs
038: * the neccessary conversions from and to the AWT classes to the Strict-classes.
039: *
040: * @author Thomas Morgner
041: */
042: public strictfp class StrictGeomUtility {
043: /**
044: * This is the correction factor used to convert points into 'Micro-Points'.
045: */
046: private static final double CORRECTION_FACTOR = 1000.0;
047:
048: /**
049: * Hidden, non usable constructor.
050: */
051: private StrictGeomUtility() {
052: }
053:
054: /**
055: * Creates a StrictDimension from the given AWT sizes.
056: *
057: * @param w the width in points (1/72th inch).
058: * @param h the height in points (1/72th inch).
059: * @return the created dimension object.
060: */
061: public static StrictDimension createDimension(final double w,
062: final double h) {
063: return new StrictDimension((long) (w * CORRECTION_FACTOR),
064: (long) (h * CORRECTION_FACTOR));
065: }
066:
067: /**
068: * Creates a StrictPoint from the given AWT coordinates.
069: *
070: * @param x the x coordinate in points (1/72th inch).
071: * @param y the y coordinate in points (1/72th inch).
072: * @return the created point object.
073: */
074: public static StrictPoint createPoint(final double x, final double y) {
075: return new StrictPoint((long) (x * CORRECTION_FACTOR),
076: (long) (y * CORRECTION_FACTOR));
077: }
078:
079: /**
080: * Creates a StrictBounds object from the given AWT sizes.
081: *
082: * @param x the x coordinate in points (1/72th inch).
083: * @param y the y coordinate in points (1/72th inch).
084: * @param width the width in points (1/72th inch).
085: * @param height the height in points (1/72th inch).
086: * @return the created dimension object.
087: */
088: public static StrictBounds createBounds(final double x,
089: final double y, final double width, final double height) {
090: return new StrictBounds((long) (x * CORRECTION_FACTOR),
091: (long) (y * CORRECTION_FACTOR),
092: (long) (width * CORRECTION_FACTOR),
093: (long) (height * CORRECTION_FACTOR));
094: }
095:
096: /**
097: * Creates an AWT-Dimension2D object from the given strict sizes.
098: *
099: * @param width the width in micro points.
100: * @param height the height in micro points.
101: * @return the created dimension object.
102: */
103: public static Dimension2D createAWTDimension(final long width,
104: final long height) {
105: return new FloatDimension((float) (width / CORRECTION_FACTOR),
106: (float) (height / CORRECTION_FACTOR));
107: }
108:
109: /**
110: * Creates an AWT rectangle object from the given strict sizes.
111: *
112: * @param x the x coordinate in micro points.
113: * @param y the y coordinate in micro points.
114: * @param width the width in micro points.
115: * @param height the height in micro points.
116: * @return the created dimension object.
117: */
118: public static Rectangle2D createAWTRectangle(final long x,
119: final long y, final long width, final long height) {
120: return new Rectangle2D.Double(x / CORRECTION_FACTOR, y
121: / CORRECTION_FACTOR, width / CORRECTION_FACTOR, height
122: / CORRECTION_FACTOR);
123: }
124:
125: /**
126: * Converts the given AWT value into a strict value.
127: *
128: * @param value the AWT point value.
129: * @return the internal micro point value.
130: */
131: public static long toInternalValue(final double value) {
132: return (long) (value * CORRECTION_FACTOR);
133: }
134:
135: /**
136: * Converts the given micro point value into an AWT value.
137: *
138: * @param value the micro point point value.
139: * @return the AWT point value.
140: */
141: public static double toExternalValue(final long value) {
142: return (value / CORRECTION_FACTOR);
143: }
144:
145: public static long multiply(final long x, final long y) {
146: if (x < y) {
147: return (long) (x * (y / CORRECTION_FACTOR));
148: }
149:
150: return (long) (y * (x / CORRECTION_FACTOR));
151: }
152: }
|