History

My first initial commit with all of mine experimental changes.

Dmitry Kabak (userdima committed 13 years ago

Commit d37b88d1 parent 3f5b46618352 files · +2598093 −-8690Browse files

Showing the changes to java/pkg/sun/java2d/SunCompositeContext.java (1 of 18352 files). Show all

Unified · Split

java/pkg/sun/java2d/SunCompositeContext.java+129−0
@@ -0,0 +1,129 @@
1/*
2 * Copyright (c) 1997, 2002, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26package sun.java2d;
27
28import java.awt.Composite;
29import java.awt.CompositeContext;
30import java.awt.AlphaComposite;
31import java.awt.image.ColorModel;
32import java.awt.image.BufferedImage;
33import java.awt.image.Raster;
34import java.awt.image.WritableRaster;
35import sun.awt.image.BufImgSurfaceData;
36import sun.java2d.loops.XORComposite;
37import sun.java2d.loops.CompositeType;
38import sun.java2d.loops.Blit;
39
40public class SunCompositeContext implements CompositeContext {
41 ColorModel srcCM;
42 ColorModel dstCM;
43 Composite composite;
44 CompositeType comptype;
45
46 public SunCompositeContext(AlphaComposite ac,
47 ColorModel s, ColorModel d)
48 {
49 if (s == null) {
50 throw new NullPointerException("Source color model cannot be null");
51 }
52 if (d == null) {
53 throw new NullPointerException("Destination color model cannot be null");
54 }
55 srcCM = s;
56 dstCM = d;
57 this.composite = ac;
58 this.comptype = CompositeType.forAlphaComposite(ac);
59 }
60
61 public SunCompositeContext(XORComposite xc,
62 ColorModel s, ColorModel d)
63 {
64 if (s == null) {
65 throw new NullPointerException("Source color model cannot be null");
66 }
67 if (d == null) {
68 throw new NullPointerException("Destination color model cannot be null");
69 }
70 srcCM = s;
71 dstCM = d;
72 this.composite = xc;
73 this.comptype = CompositeType.Xor;
74 }
75
76 /**
77 * Release resources allocated for context.
78 */
79 public void dispose() {
80 }
81
82 /**
83 * This method composes the two source tiles
84 * and places the result in the destination tile. Note that
85 * the destination can be the same object as either
86 * the first or second source.
87 * @param src1 The first source tile for the compositing operation.
88 * @param src2 The second source tile for the compositing operation.
89 * @param dst The tile where the result of the operation is stored.
90 */
91 public void compose(Raster srcArg, Raster dstIn, WritableRaster dstOut) {
92 WritableRaster src;
93 int w;
94 int h;
95
96 if (dstIn != dstOut) {
97 dstOut.setDataElements(0, 0, dstIn);
98 }
99
100 // REMIND: We should be able to create a SurfaceData from just
101 // a non-writable Raster and a ColorModel. Since we need to
102 // create a SurfaceData from a BufferedImage then we need to
103 // make a WritableRaster since it is needed to construct a
104 // BufferedImage.
105 if (srcArg instanceof WritableRaster) {
106 src = (WritableRaster) srcArg;
107 } else {
108 src = srcArg.createCompatibleWritableRaster();
109 src.setDataElements(0, 0, srcArg);
110 }
111
112 w = Math.min(src.getWidth(), dstIn.getWidth());
113 h = Math.min(src.getHeight(), dstIn.getHeight());
114
115 BufferedImage srcImg = new BufferedImage(srcCM, src,
116 srcCM.isAlphaPremultiplied(),
117 null);
118 BufferedImage dstImg = new BufferedImage(dstCM, dstOut,
119 dstCM.isAlphaPremultiplied(),
120 null);
121
122 SurfaceData srcData = BufImgSurfaceData.createData(srcImg);
123 SurfaceData dstData = BufImgSurfaceData.createData(dstImg);
124 Blit blit = Blit.getFromCache(srcData.getSurfaceType(),
125 comptype,
126 dstData.getSurfaceType());
127 blit.Blit(srcData, dstData, composite, null, 0, 0, 0, 0, w, h);
128 }
129}