--- old/modules/graphics/src/main/java/com/sun/javafx/css/converters/EffectConverter.java 2015-09-03 15:33:50.536134600 -0700 +++ /dev/null 2015-09-03 15:33:51.000000000 -0700 @@ -1,218 +0,0 @@ -/* - * Copyright (c) 2011, 2014, 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.converters; - -import com.sun.javafx.css.Size; -import com.sun.javafx.css.StyleConverterImpl; -import javafx.css.ParsedValue; -import javafx.css.StyleConverter; -import javafx.scene.effect.BlurType; -import javafx.scene.effect.DropShadow; -import javafx.scene.effect.Effect; -import javafx.scene.effect.InnerShadow; -import javafx.scene.paint.Color; -import javafx.scene.text.Font; - -import java.util.Map; - -public class EffectConverter extends StyleConverterImpl { - - // lazy, thread-safe instatiation - private static class Holder { - static final EffectConverter EFFECT_CONVERTER = - new EffectConverter(); - static final DropShadowConverter DROP_SHADOW_INSTANCE = - new DropShadowConverter(); - static final InnerShadowConverter INNER_SHADOW_INSTANCE = - new InnerShadowConverter(); - } - - public static StyleConverter getInstance() { - return Holder.EFFECT_CONVERTER; - } - - @Override - public Effect convert(ParsedValue value, Font font) { - throw new IllegalArgumentException("Parsed value is not an Effect"); - } - - protected EffectConverter() { - super(); - } - - @Override - public String toString() { - return "EffectConverter"; - } - - public static final class DropShadowConverter extends EffectConverter { - - public static DropShadowConverter getInstance() { - return Holder.DROP_SHADOW_INSTANCE; - } - - private DropShadowConverter() { - super(); - } - - // dropshadow( , , , , , ) - // = [ gaussian | one-pass-box | three-pass-box | two-pass-box ] - // The shadow Color. - // The radius of the shadow blur kernel. In the range - // [0.0 ... 127.0], typical value 10. - // he spread of the shadow. The spread is the portion of - // the radius where the contribution of the source material - // will be 100%. The remaining portion of the radius will - // have a contribution controlled by the blur kernel. A - // spread of 0.0 will result in a distribution of the shadow - // determined entirely by the blur algorithm. A spread of - // 1.0 will result in a solid growth outward of the source - // material opacity to the limit of the radius with a very - // sharp cutoff to transparency at the radius. In the range - // [0.0 ... 1.0] a value of 0.0 is no spread. - // The shadow offset in the x direction, in pixels. - // The shadow offset in the y direction, in pixels. - @Override - public Effect convert(ParsedValue value, Font font) { - - Effect effect = super.getCachedValue(value); - if (effect != null) return effect; - - final ParsedValue[] values = value.getValue(); - final BlurType blurType = (BlurType) values[0].convert(font); - final Color color = (Color) values[1].convert(font); - final Double radius = ((Size) values[2].convert(font)).pixels(font); - final Double spread = ((Size) values[3].convert(font)).pixels(font); - final Double offsetX = ((Size) values[4].convert(font)).pixels(font); - final Double offsetY = ((Size) values[5].convert(font)).pixels(font); - DropShadow dropShadow = new DropShadow(); - if (blurType != null) { - dropShadow.setBlurType(blurType); - } - if (color != null) { - dropShadow.setColor(color); - } - if (spread != null) { - dropShadow.setSpread(spread); - } - if (radius != null) { - dropShadow.setRadius(radius); - } - if (offsetX != null) { - dropShadow.setOffsetX(offsetX); - } - if (offsetY != null) { - dropShadow.setOffsetY(offsetY); - } - - super.cacheValue(value, dropShadow); - - return dropShadow; - } - - @Override - public String toString() { - return "DropShadowConverter"; - } - } - - public static final class InnerShadowConverter extends EffectConverter { - - public static InnerShadowConverter getInstance() { - return Holder.INNER_SHADOW_INSTANCE; - } - - private InnerShadowConverter() { - super(); - } - - // innershadow( , , , , , ) - // = [ gaussian | one-pass-box | three-pass-box | two-pass-box ] - // The shadow Color. - // The radius of the shadow blur kernel. In the range - // [0.0 ... 127.0], typical value 10. - // The choke of the shadow. The choke is the portion of the - // radius where the contribution of the source material will - // be 100%. The remaining portion of the radius will have a - // contribution controlled by the blur kernel. A choke of 0.0 - // will result in a distribution of the shadow determined - // entirely by the blur algorithm. A choke of 1.0 will result - // in a solid growth inward of the shadow from the edges to - // the limit of the radius with a very sharp cutoff to - // transparency inside the radius. In the range [0.0 ... 1.0] - // a value of 0.0 is no spread. - // The shadow offset in the x direction, in pixels. - // The shadow offset in the y direction, in pixels. - @Override - public Effect convert(ParsedValue value, Font font) { - - Effect effect = super.getCachedValue(value); - if (effect != null) return effect; - - final ParsedValue[] values = value.getValue(); - final BlurType blurType = (BlurType) values[0].convert(font); - final Color color = (Color) values[1].convert(font); - final Double radius = ((Size) values[2].convert(font)).pixels(font); - final Double choke = ((Size) values[3].convert(font)).pixels(font); - final Double offsetX = ((Size) values[4].convert(font)).pixels(font); - final Double offsetY = ((Size) values[5].convert(font)).pixels(font); - InnerShadow innerShadow = new InnerShadow(); - if (blurType != null) { - innerShadow.setBlurType(blurType); - } - if (color != null) { - innerShadow.setColor(color); - } - if (radius != null) { - innerShadow.setRadius(radius); - } - if (choke != null) { - innerShadow.setChoke(choke); - } - if (offsetX != null) { - innerShadow.setOffsetX(offsetX); - } - if (offsetY != null) { - innerShadow.setOffsetY(offsetY); - } - - super.cacheValue(value, innerShadow); - - return innerShadow; - } - - @Override - public String toString() { - return "InnerShadowConverter"; - } - } - - private static Map, Effect> cache; - - public static void clearCache() { if (cache != null) cache.clear(); } - -} - --- /dev/null 2015-09-03 15:33:51.000000000 -0700 +++ new/modules/graphics/src/main/java/javafx/css/converter/EffectConverter.java 2015-09-03 15:33:49.867096300 -0700 @@ -0,0 +1,220 @@ +/* + * Copyright (c) 2011, 2014, 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.converter; + +import javafx.css.Size; +import javafx.css.ParsedValue; +import javafx.css.StyleConverter; +import javafx.scene.effect.BlurType; +import javafx.scene.effect.DropShadow; +import javafx.scene.effect.Effect; +import javafx.scene.effect.InnerShadow; +import javafx.scene.paint.Color; +import javafx.scene.text.Font; + +import java.util.Map; + +/** + * @since 9 + */ +public class EffectConverter extends StyleConverter { + + // lazy, thread-safe instatiation + private static class Holder { + static final EffectConverter EFFECT_CONVERTER = + new EffectConverter(); + static final DropShadowConverter DROP_SHADOW_INSTANCE = + new DropShadowConverter(); + static final InnerShadowConverter INNER_SHADOW_INSTANCE = + new InnerShadowConverter(); + } + + public static StyleConverter getInstance() { + return Holder.EFFECT_CONVERTER; + } + + @Override + public Effect convert(ParsedValue value, Font font) { + throw new IllegalArgumentException("Parsed value is not an Effect"); + } + + protected EffectConverter() { + super(); + } + + @Override + public String toString() { + return "EffectConverter"; + } + + public static final class DropShadowConverter extends EffectConverter { + + public static DropShadowConverter getInstance() { + return Holder.DROP_SHADOW_INSTANCE; + } + + private DropShadowConverter() { + super(); + } + + // dropshadow( , , , , , ) + // = [ gaussian | one-pass-box | three-pass-box | two-pass-box ] + // The shadow Color. + // The radius of the shadow blur kernel. In the range + // [0.0 ... 127.0], typical value 10. + // he spread of the shadow. The spread is the portion of + // the radius where the contribution of the source material + // will be 100%. The remaining portion of the radius will + // have a contribution controlled by the blur kernel. A + // spread of 0.0 will result in a distribution of the shadow + // determined entirely by the blur algorithm. A spread of + // 1.0 will result in a solid growth outward of the source + // material opacity to the limit of the radius with a very + // sharp cutoff to transparency at the radius. In the range + // [0.0 ... 1.0] a value of 0.0 is no spread. + // The shadow offset in the x direction, in pixels. + // The shadow offset in the y direction, in pixels. + @Override + public Effect convert(ParsedValue value, Font font) { + + Effect effect = super.getCachedValue(value); + if (effect != null) return effect; + + final ParsedValue[] values = value.getValue(); + final BlurType blurType = (BlurType) values[0].convert(font); + final Color color = (Color) values[1].convert(font); + final Double radius = ((Size) values[2].convert(font)).pixels(font); + final Double spread = ((Size) values[3].convert(font)).pixels(font); + final Double offsetX = ((Size) values[4].convert(font)).pixels(font); + final Double offsetY = ((Size) values[5].convert(font)).pixels(font); + DropShadow dropShadow = new DropShadow(); + if (blurType != null) { + dropShadow.setBlurType(blurType); + } + if (color != null) { + dropShadow.setColor(color); + } + if (spread != null) { + dropShadow.setSpread(spread); + } + if (radius != null) { + dropShadow.setRadius(radius); + } + if (offsetX != null) { + dropShadow.setOffsetX(offsetX); + } + if (offsetY != null) { + dropShadow.setOffsetY(offsetY); + } + + super.cacheValue(value, dropShadow); + + return dropShadow; + } + + @Override + public String toString() { + return "DropShadowConverter"; + } + } + + public static final class InnerShadowConverter extends EffectConverter { + + public static InnerShadowConverter getInstance() { + return Holder.INNER_SHADOW_INSTANCE; + } + + private InnerShadowConverter() { + super(); + } + + // innershadow( , , , , , ) + // = [ gaussian | one-pass-box | three-pass-box | two-pass-box ] + // The shadow Color. + // The radius of the shadow blur kernel. In the range + // [0.0 ... 127.0], typical value 10. + // The choke of the shadow. The choke is the portion of the + // radius where the contribution of the source material will + // be 100%. The remaining portion of the radius will have a + // contribution controlled by the blur kernel. A choke of 0.0 + // will result in a distribution of the shadow determined + // entirely by the blur algorithm. A choke of 1.0 will result + // in a solid growth inward of the shadow from the edges to + // the limit of the radius with a very sharp cutoff to + // transparency inside the radius. In the range [0.0 ... 1.0] + // a value of 0.0 is no spread. + // The shadow offset in the x direction, in pixels. + // The shadow offset in the y direction, in pixels. + @Override + public Effect convert(ParsedValue value, Font font) { + + Effect effect = super.getCachedValue(value); + if (effect != null) return effect; + + final ParsedValue[] values = value.getValue(); + final BlurType blurType = (BlurType) values[0].convert(font); + final Color color = (Color) values[1].convert(font); + final Double radius = ((Size) values[2].convert(font)).pixels(font); + final Double choke = ((Size) values[3].convert(font)).pixels(font); + final Double offsetX = ((Size) values[4].convert(font)).pixels(font); + final Double offsetY = ((Size) values[5].convert(font)).pixels(font); + InnerShadow innerShadow = new InnerShadow(); + if (blurType != null) { + innerShadow.setBlurType(blurType); + } + if (color != null) { + innerShadow.setColor(color); + } + if (radius != null) { + innerShadow.setRadius(radius); + } + if (choke != null) { + innerShadow.setChoke(choke); + } + if (offsetX != null) { + innerShadow.setOffsetX(offsetX); + } + if (offsetY != null) { + innerShadow.setOffsetY(offsetY); + } + + super.cacheValue(value, innerShadow); + + return innerShadow; + } + + @Override + public String toString() { + return "InnerShadowConverter"; + } + } + + private static Map, Effect> cache; + + public static void clearCache() { if (cache != null) cache.clear(); } + +} +