aboutsummaryrefslogtreecommitdiff
path: root/src/solaris/classes/sun/java2d/xr/XRMaskFill.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/solaris/classes/sun/java2d/xr/XRMaskFill.java')
-rw-r--r--src/solaris/classes/sun/java2d/xr/XRMaskFill.java115
1 files changed, 115 insertions, 0 deletions
diff --git a/src/solaris/classes/sun/java2d/xr/XRMaskFill.java b/src/solaris/classes/sun/java2d/xr/XRMaskFill.java
new file mode 100644
index 000000000..5ec6c28a4
--- /dev/null
+++ b/src/solaris/classes/sun/java2d/xr/XRMaskFill.java
@@ -0,0 +1,115 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc. 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. Sun designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+package sun.java2d.xr;
+
+import static sun.java2d.loops.CompositeType.SrcNoEa;
+
+import static sun.java2d.loops.CompositeType.SrcOver;
+import static sun.java2d.loops.SurfaceType.AnyColor;
+import static sun.java2d.loops.SurfaceType.GradientPaint;
+import static sun.java2d.loops.SurfaceType.LinearGradientPaint;
+import static sun.java2d.loops.SurfaceType.OpaqueColor;
+import static sun.java2d.loops.SurfaceType.OpaqueGradientPaint;
+import static sun.java2d.loops.SurfaceType.OpaqueLinearGradientPaint;
+import static sun.java2d.loops.SurfaceType.OpaqueRadialGradientPaint;
+import static sun.java2d.loops.SurfaceType.OpaqueTexturePaint;
+import static sun.java2d.loops.SurfaceType.RadialGradientPaint;
+import static sun.java2d.loops.SurfaceType.TexturePaint;
+
+import java.awt.*;
+import sun.awt.*;
+import sun.java2d.*;
+import sun.java2d.loops.*;
+
+public class XRMaskFill extends MaskFill {
+ static void register() {
+ GraphicsPrimitive[] primitives = {
+ new XRMaskFill(AnyColor, SrcOver, XRSurfaceData.IntRgbX11),
+ new XRMaskFill(OpaqueColor, SrcNoEa, XRSurfaceData.IntRgbX11),
+ new XRMaskFill(GradientPaint, SrcOver, XRSurfaceData.IntRgbX11),
+ new XRMaskFill(OpaqueGradientPaint, SrcNoEa,
+ XRSurfaceData.IntRgbX11),
+ new XRMaskFill(LinearGradientPaint, SrcOver,
+ XRSurfaceData.IntRgbX11),
+ new XRMaskFill(OpaqueLinearGradientPaint, SrcNoEa,
+ XRSurfaceData.IntRgbX11),
+ new XRMaskFill(RadialGradientPaint, SrcOver,
+ XRSurfaceData.IntRgbX11),
+ new XRMaskFill(OpaqueRadialGradientPaint, SrcNoEa,
+ XRSurfaceData.IntRgbX11),
+ new XRMaskFill(TexturePaint, SrcOver, XRSurfaceData.IntRgbX11),
+ new XRMaskFill(OpaqueTexturePaint, SrcNoEa,
+ XRSurfaceData.IntRgbX11),
+
+ new XRMaskFill(AnyColor, SrcOver, XRSurfaceData.IntArgbPreX11),
+ new XRMaskFill(OpaqueColor, SrcNoEa, XRSurfaceData.IntArgbPreX11),
+ new XRMaskFill(GradientPaint, SrcOver, XRSurfaceData.IntArgbPreX11),
+ new XRMaskFill(OpaqueGradientPaint, SrcNoEa,
+ XRSurfaceData.IntArgbPreX11),
+ new XRMaskFill(LinearGradientPaint, SrcOver,
+ XRSurfaceData.IntArgbPreX11),
+ new XRMaskFill(OpaqueLinearGradientPaint, SrcNoEa,
+ XRSurfaceData.IntArgbPreX11),
+ new XRMaskFill(RadialGradientPaint, SrcOver,
+ XRSurfaceData.IntArgbPreX11),
+ new XRMaskFill(OpaqueRadialGradientPaint, SrcNoEa,
+ XRSurfaceData.IntArgbPreX11),
+ new XRMaskFill(TexturePaint, SrcOver, XRSurfaceData.IntArgbPreX11),
+ new XRMaskFill(OpaqueTexturePaint, SrcNoEa,
+ XRSurfaceData.IntArgbPreX11)
+ };
+
+ GraphicsPrimitiveMgr.register(primitives);
+ }
+
+ protected XRMaskFill(SurfaceType srcType, CompositeType compType,
+ SurfaceType surfaceType) {
+ super(srcType, compType, surfaceType);
+ }
+
+ protected native void maskFill(long xsdo, int x, int y, int w, int h,
+ int maskoff, int maskscan, int masklen, byte[] mask);
+
+ public void MaskFill(SunGraphics2D sg2d, SurfaceData sData, Composite comp,
+ final int x, final int y, final int w, final int h,
+ final byte[] mask, final int maskoff, final int maskscan) {
+ try {
+ SunToolkit.awtLock();
+
+ XRSurfaceData x11sd = (XRSurfaceData) sData;
+ x11sd.validateAsDestination(null, sg2d.getCompClip());
+
+ XRCompositeManager maskBuffer = x11sd.maskBuffer;
+ maskBuffer.validateCompositeState(comp, sg2d.transform, sg2d.paint, sg2d);
+
+ int maskPict = maskBuffer.getMaskBuffer().uploadMask(w, h, maskscan, maskoff, mask);
+ maskBuffer.XRComposite(XRUtils.None, maskPict, x11sd.picture, x, y, 0, 0, x, y, w, h);
+ maskBuffer.getMaskBuffer().clearUploadMask(maskPict, w, h);
+ } finally {
+ SunToolkit.awtUnlock();
+ }
+ }
+}