/* |
|
* Copyright (c) 2005, 2006, 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 javax.swing.plaf.nimbus; |
|
import sun.awt.AppContext; |
|
import java.awt.image.BufferedImage; |
|
import java.lang.ref.SoftReference; |
|
/** |
|
* Effect |
|
* |
|
* @author Created by Jasper Potts (Jun 18, 2007) |
|
*/ |
|
abstract class Effect { |
|
enum EffectType { |
|
UNDER, BLENDED, OVER |
|
} |
|
// ================================================================================================================= |
|
// Abstract Methods |
|
/** |
|
* Get the type of this effect, one of UNDER,BLENDED,OVER. UNDER means the result of apply effect should be painted |
|
* under the src image. BLENDED means the result of apply sffect contains a modified src image so just it should be |
|
* painted. OVER means the result of apply effect should be painted over the src image. |
|
* |
|
* @return The effect type |
|
*/ |
|
abstract EffectType getEffectType(); |
|
/** |
|
* Get the opacity to use to paint the result effected image if the EffectType is UNDER or OVER. |
|
* |
|
* @return The opactity for the effect, 0.0f -> 1.0f |
|
*/ |
|
abstract float getOpacity(); |
|
/** |
|
* Apply the effect to the src image generating the result . The result image may or may not contain the source |
|
* image depending on what the effect type is. |
|
* |
|
* @param src The source image for applying the effect to |
|
* @param dst The dstination image to paint effect result into. If this is null then a new image will be created |
|
* @param w The width of the src image to apply effect to, this allow the src and dst buffers to be bigger than |
|
* the area the need effect applied to it |
|
* @param h The height of the src image to apply effect to, this allow the src and dst buffers to be bigger than |
|
* the area the need effect applied to it |
|
* @return The result of appl |
|
*/ |
|
abstract BufferedImage applyEffect(BufferedImage src, BufferedImage dst, int w, int h); |
|
// ================================================================================================================= |
|
// Static data cache |
|
protected static ArrayCache getArrayCache() { |
|
ArrayCache cache = (ArrayCache)AppContext.getAppContext().get(ArrayCache.class); |
|
if (cache == null){ |
|
cache = new ArrayCache(); |
|
AppContext.getAppContext().put(ArrayCache.class,cache); |
|
} |
|
return cache; |
|
} |
|
protected static class ArrayCache { |
|
private SoftReference<int[]> tmpIntArray = null; |
|
private SoftReference<byte[]> tmpByteArray1 = null; |
|
private SoftReference<byte[]> tmpByteArray2 = null; |
|
private SoftReference<byte[]> tmpByteArray3 = null; |
|
protected int[] getTmpIntArray(int size) { |
|
int[] tmp; |
|
if (tmpIntArray == null || (tmp = tmpIntArray.get()) == null || tmp.length < size) { |
|
// create new array |
|
tmp = new int[size]; |
|
tmpIntArray = new SoftReference<int[]>(tmp); |
|
} |
|
return tmp; |
|
} |
|
protected byte[] getTmpByteArray1(int size) { |
|
byte[] tmp; |
|
if (tmpByteArray1 == null || (tmp = tmpByteArray1.get()) == null || tmp.length < size) { |
|
// create new array |
|
tmp = new byte[size]; |
|
tmpByteArray1 = new SoftReference<byte[]>(tmp); |
|
} |
|
return tmp; |
|
} |
|
protected byte[] getTmpByteArray2(int size) { |
|
byte[] tmp; |
|
if (tmpByteArray2 == null || (tmp = tmpByteArray2.get()) == null || tmp.length < size) { |
|
// create new array |
|
tmp = new byte[size]; |
|
tmpByteArray2 = new SoftReference<byte[]>(tmp); |
|
} |
|
return tmp; |
|
} |
|
protected byte[] getTmpByteArray3(int size) { |
|
byte[] tmp; |
|
if (tmpByteArray3 == null || (tmp = tmpByteArray3.get()) == null || tmp.length < size) { |
|
// create new array |
|
tmp = new byte[size]; |
|
tmpByteArray3 = new SoftReference<byte[]>(tmp); |
|
} |
|
return tmp; |
|
} |
|
} |
|
} |