Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/src/solaris/classes/sun/java2d/xr/XRUtils.java
32288 views
1
/*
2
* Copyright (c) 2010, 2013, 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
26
package sun.java2d.xr;
27
28
import java.awt.*;
29
import java.awt.MultipleGradientPaint.*;
30
import java.awt.geom.AffineTransform;
31
import java.awt.image.*;
32
import sun.java2d.loops.*;
33
import static java.awt.AlphaComposite.*;
34
35
/**
36
* XRender constants and utility methods.
37
*
38
* @author Clemens Eisserer
39
*/
40
41
public class XRUtils {
42
public static final int None = 0;
43
44
/* Composition Operators */
45
public static final byte PictOpClear = 0;
46
public static final byte PictOpSrc = 1;
47
public static final byte PictOpDst = 2;
48
public static final byte PictOpOver = 3;
49
public static final byte PictOpOverReverse = 4;
50
public static final byte PictOpIn = 5;
51
public static final byte PictOpInReverse = 6;
52
public static final byte PictOpOut = 7;
53
public static final byte PictOpOutReverse = 8;
54
public static final byte PictOpAtop = 9;
55
public static final byte PictOpAtopReverse = 10;
56
public static final byte PictOpXor = 11;
57
public static final byte PictOpAdd = 12;
58
public static final byte PictOpSaturate = 13;
59
60
/* Repeats */
61
public static final int RepeatNone = 0;
62
public static final int RepeatNormal = 1;
63
public static final int RepeatPad = 2;
64
public static final int RepeatReflect = 3;
65
66
/* Interpolation qualities */
67
public static final int FAST = 0;
68
public static final int GOOD = 1;
69
public static final int BEST = 2;
70
public static final byte[] FAST_NAME = "fast".getBytes();
71
public static final byte[] GOOD_NAME = "good".getBytes();
72
public static final byte[] BEST_NAME = "best".getBytes();
73
74
/* PictFormats */
75
public static final int PictStandardARGB32 = 0;
76
public static final int PictStandardRGB24 = 1;
77
public static final int PictStandardA8 = 2;
78
public static final int PictStandardA4 = 3;
79
public static final int PictStandardA1 = 4;
80
81
/**
82
* Maps the specified affineTransformOp to the corresponding XRender image
83
* filter.
84
*/
85
public static int ATransOpToXRQuality(int affineTranformOp) {
86
87
switch (affineTranformOp) {
88
case AffineTransformOp.TYPE_NEAREST_NEIGHBOR:
89
return FAST;
90
91
case AffineTransformOp.TYPE_BILINEAR:
92
return GOOD;
93
94
case AffineTransformOp.TYPE_BICUBIC:
95
return BEST;
96
}
97
98
return -1;
99
}
100
101
/**
102
* Maps the specified affineTransformOp to the corresponding XRender image
103
* filter.
104
*/
105
public static byte[] ATransOpToXRQualityName(int affineTranformOp) {
106
107
switch (affineTranformOp) {
108
case AffineTransformOp.TYPE_NEAREST_NEIGHBOR:
109
return FAST_NAME;
110
111
case AffineTransformOp.TYPE_BILINEAR:
112
return GOOD_NAME;
113
114
case AffineTransformOp.TYPE_BICUBIC:
115
return BEST_NAME;
116
}
117
118
return null;
119
}
120
121
122
public static byte[] getFilterName(int filterType) {
123
switch (filterType) {
124
case FAST:
125
return FAST_NAME;
126
case GOOD:
127
return GOOD_NAME;
128
case BEST:
129
return BEST_NAME;
130
}
131
132
return null;
133
}
134
135
136
/**
137
* Returns the XRender picture Format which is required to fullfill the
138
* Java2D transparency requirement.
139
*/
140
public static int getPictureFormatForTransparency(int transparency) {
141
switch (transparency) {
142
case Transparency.OPAQUE:
143
return PictStandardRGB24;
144
145
case Transparency.BITMASK:
146
case Transparency.TRANSLUCENT:
147
return PictStandardARGB32;
148
}
149
150
return -1;
151
}
152
153
154
public static SurfaceType getXRSurfaceTypeForTransparency(int transparency) {
155
if (transparency == Transparency.OPAQUE) {
156
return SurfaceType.IntRgb;
157
}else {
158
return SurfaceType.IntArgbPre;
159
}
160
}
161
162
/**
163
* Maps Java2D CycleMethod to XRender's Repeat property.
164
*/
165
public static int getRepeatForCycleMethod(CycleMethod cycleMethod) {
166
if (cycleMethod.equals(CycleMethod.NO_CYCLE)) {
167
return RepeatPad;
168
} else if (cycleMethod.equals(CycleMethod.REFLECT)) {
169
return RepeatReflect;
170
} else if (cycleMethod.equals(CycleMethod.REPEAT)) {
171
return RepeatNormal;
172
}
173
174
return RepeatNone;
175
}
176
177
/**
178
* Converts a double into an XFixed.
179
*/
180
public static int XDoubleToFixed(double dbl) {
181
return (int) (dbl * 65536);
182
}
183
184
public static double XFixedToDouble(int fixed) {
185
return ((double) fixed) / 65536;
186
}
187
188
public static int[] convertFloatsToFixed(float[] values) {
189
int[] fixed = new int[values.length];
190
191
for (int i = 0; i < values.length; i++) {
192
fixed[i] = XDoubleToFixed(values[i]);
193
}
194
195
return fixed;
196
}
197
198
public static long intToULong(int signed) {
199
if (signed < 0) {
200
return ((long) signed) + (((long) Integer.MAX_VALUE) -
201
((long) Integer.MIN_VALUE) + 1);
202
}
203
204
return signed;
205
}
206
207
/**
208
* Maps the specified Java2D composition rule, to the corresponding XRender
209
* composition rule.
210
*/
211
public static byte j2dAlphaCompToXR(int j2dRule) {
212
switch (j2dRule) {
213
case CLEAR:
214
return PictOpClear;
215
216
case SRC:
217
return PictOpSrc;
218
219
case DST:
220
return PictOpDst;
221
222
case SRC_OVER:
223
return PictOpOver;
224
225
case DST_OVER:
226
return PictOpOverReverse;
227
228
case SRC_IN:
229
return PictOpIn;
230
231
case DST_IN:
232
return PictOpInReverse;
233
234
case SRC_OUT:
235
return PictOpOut;
236
237
case DST_OUT:
238
return PictOpOutReverse;
239
240
case SRC_ATOP:
241
return PictOpAtop;
242
243
case DST_ATOP:
244
return PictOpAtopReverse;
245
246
case XOR:
247
return PictOpXor;
248
}
249
250
throw new InternalError("No XRender equivalent available for requested java2d composition rule: "+j2dRule);
251
}
252
253
public static short clampToShort(int x) {
254
return (short) (x > Short.MAX_VALUE
255
? Short.MAX_VALUE
256
: (x < Short.MIN_VALUE ? Short.MIN_VALUE : x));
257
}
258
259
public static int clampToUShort(int x) {
260
return (x > 65535 ? 65535 : (x < 0) ? 0 : x);
261
}
262
263
public static boolean isTransformQuadrantRotated(AffineTransform tr) {
264
return ((tr.getType() & (AffineTransform.TYPE_GENERAL_ROTATION |
265
AffineTransform.TYPE_GENERAL_TRANSFORM)) == 0);
266
}
267
268
public static boolean isMaskEvaluated(byte xrCompRule) {
269
switch (xrCompRule) {
270
case PictOpOver:
271
case PictOpOverReverse:
272
case PictOpAtop:
273
case PictOpXor:
274
return true;
275
}
276
277
return false;
278
}
279
}
280
281