--- old/modules/graphics/src/main/java/com/sun/javafx/css/Size.java 2015-09-03 15:32:22.100076400 -0700 +++ /dev/null 2015-09-03 15:32:23.000000000 -0700 @@ -1,157 +0,0 @@ -/* - * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code 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. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code 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 in the LICENSE file that - * accompanied this code). - * - * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package com.sun.javafx.css; - -import javafx.scene.text.Font; - -/** - * Represents a size specified in a particular unit, such as 14px or 0.2em. - */ -final public class Size { - - final private double value; - final private SizeUnits units; - public Size(double value, SizeUnits units) { - this.value = value; - this.units = (units != null) ? units : SizeUnits.PX; - } - - /** */ - public double getValue() { - return value; - } - - /** */ - public SizeUnits getUnits() { - return units; - } - - /** - * Return whether or not this Size is an absolute value or a relative value. - */ - public boolean isAbsolute() { - return units.isAbsolute(); - } - - /** Convert this size into Points units, a Point is 1/72 of a inch */ - public double points(Font font) { - return points(1.0, font); - } - - /** - * Convert this size into points - * - * @param multiplier The multiplier for PERCENTAGE sizes - * @param font The font for EM sizes - */ - public double points(double multiplier, Font font) { - return units.points(value, multiplier, font); - } - - /** - * Convert this size into pixels - * - * @param multiplier The multiplier for PERCENTAGE sizes - * @param font The font for EM sizes - */ - public double pixels(double multiplier, Font font) { - return units.pixels(value, multiplier, font); - } - - /** - * If size is not an absolute size, return the product of font size in pixels - * and value. Otherwise, return the absolute value. - */ - public double pixels(Font font) { - return pixels(1.0f, font); - } - - /** - * If size is not an absolute size, return the product of multiplier - * and value. Otherwise, return the absolute value. - */ - public double pixels(double multiplier) { - return pixels(multiplier, null); - } - - /** - * A convenience method for calling pixels(1) - */ - public double pixels() { - return pixels(1.0f, null); - } - - @Override public String toString() { - return Double.toString(value) + units.toString(); - } - - @Override public int hashCode() { - long bits = 17L; - bits = 37L * bits + Double.doubleToLongBits(value); - bits = 37L * bits + units.hashCode(); - return (int) (bits ^ (bits >> 32)); - } - - @Override public boolean equals(Object obj) { - if (this == obj) return true; - - if (obj == null || obj.getClass() != this.getClass()) { - return false; - } - final Size other = (Size)obj; - - if (units != other.units) { - return false; - } - - if (value == other.value) { - return true; - } - - if ((value > 0) ? other.value > 0 : other.value < 0) { - // - // double == double is not reliable since a double is kind of - // a fuzzy value. And Double.compare is too precise. - // For javafx, most sizes are rounded to the nearest tenth - // (see SizeUnits.round) so comparing here to the nearest - // millionth is more than adequate. In the case of rads and - // percents, this is also be more than adequate. - // - // Math.abs is too slow! - final double v0 = value > 0 ? value : -value; - final double v1 = other.value > 0 ? other.value : -other.value; - final double diff = value - other.value; - if (diff < -0.000001 || 0.000001 < diff) { - return false; - } - - return true; - } - return false; - } - -} - --- /dev/null 2015-09-03 15:32:23.000000000 -0700 +++ new/modules/graphics/src/main/java/javafx/css/Size.java 2015-09-03 15:32:21.295030300 -0700 @@ -0,0 +1,160 @@ +/* + * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code 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. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code 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 in the LICENSE file that + * accompanied this code). + * + * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package javafx.css; + +import javafx.scene.text.Font; + + +/** + * Represents a size specified in a particular unit, such as 14px or 0.2em. + * + * @since 9 + */ +final public class Size { + + final private double value; + final private SizeUnits units; + public Size(double value, SizeUnits units) { + this.value = value; + this.units = (units != null) ? units : SizeUnits.PX; + } + + /** */ + public double getValue() { + return value; + } + + /** */ + public SizeUnits getUnits() { + return units; + } + + /** + * Return whether or not this Size is an absolute value or a relative value. + */ + public boolean isAbsolute() { + return units.isAbsolute(); + } + + /** Convert this size into Points units, a Point is 1/72 of a inch */ + double points(Font font) { + return points(1.0, font); + } + + /** + * Convert this size into points + * + * @param multiplier The multiplier for PERCENTAGE sizes + * @param font The font for EM sizes + */ + double points(double multiplier, Font font) { + return units.points(value, multiplier, font); + } + + /** + * Convert this size into pixels + * + * @param multiplier The multiplier for PERCENTAGE sizes + * @param font The font for EM sizes + */ + public double pixels(double multiplier, Font font) { + return units.pixels(value, multiplier, font); + } + + /** + * If size is not an absolute size, return the product of font size in pixels + * and value. Otherwise, return the absolute value. + */ + public double pixels(Font font) { + return pixels(1.0f, font); + } + + /** + * If size is not an absolute size, return the product of multiplier + * and value. Otherwise, return the absolute value. + */ + double pixels(double multiplier) { + return pixels(multiplier, null); + } + + /** + * A convenience method for calling pixels(1) + */ + public double pixels() { + return pixels(1.0f, null); + } + + @Override public String toString() { + return Double.toString(value) + units.toString(); + } + + @Override public int hashCode() { + long bits = 17L; + bits = 37L * bits + Double.doubleToLongBits(value); + bits = 37L * bits + units.hashCode(); + return (int) (bits ^ (bits >> 32)); + } + + @Override public boolean equals(Object obj) { + if (this == obj) return true; + + if (obj == null || obj.getClass() != this.getClass()) { + return false; + } + final Size other = (Size)obj; + + if (units != other.units) { + return false; + } + + if (value == other.value) { + return true; + } + + if ((value > 0) ? other.value > 0 : other.value < 0) { + // + // double == double is not reliable since a double is kind of + // a fuzzy value. And Double.compare is too precise. + // For javafx, most sizes are rounded to the nearest tenth + // (see SizeUnits.round) so comparing here to the nearest + // millionth is more than adequate. In the case of rads and + // percents, this is also be more than adequate. + // + // Math.abs is too slow! + final double v0 = value > 0 ? value : -value; + final double v1 = other.value > 0 ? other.value : -other.value; + final double diff = value - other.value; + if (diff < -0.000001 || 0.000001 < diff) { + return false; + } + + return true; + } + return false; + } + +} +