1 /*
2  * Copyright (c) 2000, 2016, 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 #ifndef IntArgb_h_Included
27 #define IntArgb_h_Included
28 
29 #include "IntDcm.h"
30 #include "ByteGray.h"
31 #include "UshortGray.h"
32 
33 /*
34  * This file contains macro and type definitions used by the macros in
35  * LoopMacros.h to manipulate a surface of type "IntArgb".
36  */
37 
38 typedef jint    IntArgbPixelType;
39 typedef jint    IntArgbDataType;
40 
41 #define IntArgbIsOpaque 0
42 
43 #define IntArgbPixelStride      4
44 
45 #define DeclareIntArgbLoadVars(PREFIX)
46 #define DeclareIntArgbStoreVars(PREFIX)
47 #define InitIntArgbLoadVars(PREFIX, pRasInfo)
48 #define SetIntArgbStoreVarsYPos(PREFIX, pRasInfo, y)
49 #define SetIntArgbStoreVarsXPos(PREFIX, pRasInfo, x)
50 #define InitIntArgbStoreVarsY(PREFIX, pRasInfo)
51 #define InitIntArgbStoreVarsX(PREFIX, pRasInfo)
52 #define NextIntArgbStoreVarsX(PREFIX)
53 #define NextIntArgbStoreVarsY(PREFIX)
54 #define DeclareIntArgbInitialLoadVars(pRasInfo, pRas, PREFIX, x)
55 #define InitialLoadIntArgb(pRas, PREFIX)
56 #define ShiftBitsIntArgb(PREFIX)
57 #define FinalStoreIntArgb(pRas, PREFIX)
58 
59 #define IntArgbPixelFromArgb(pixel, rgb, pRasInfo) \
60     (pixel) = (rgb)
61 
62 #define StoreIntArgbPixel(pRas, x, pixel) \
63     (pRas)[x] = (pixel)
64 
65 #define DeclareIntArgbPixelData(PREFIX)
66 
67 #define ExtractIntArgbPixelData(PIXEL, PREFIX)
68 
69 #define StoreIntArgbPixelData(pPix, x, pixel, PREFIX) \
70     (pPix)[x] = (pixel)
71 
72 
73 #define LoadIntArgbTo1IntRgb(pRas, PREFIX, x, rgb) \
74     (rgb) = (pRas)[x]
75 
76 #define LoadIntArgbTo1IntArgb(pRas, PREFIX, x, argb) \
77     (argb) = (pRas)[x]
78 
79 #define LoadIntArgbTo3ByteRgb(pRas, PREFIX, x, r, g, b) \
80     do { \
81         jint pixel = (pRas)[x]; \
82         ExtractIntDcmComponentsX123(pixel, r, g, b); \
83     } while (0)
84 
85 #define LoadIntArgbTo4ByteArgb(pRas, PREFIX, x, a, r, g, b) \
86     do { \
87         jint pixel = (pRas)[x]; \
88         ExtractIntDcmComponents1234(pixel, a, r, g, b); \
89     } while (0)
90 
91 #define StoreIntArgbFrom1IntRgb(pRas, PREFIX, x, rgb) \
92     (pRas)[x] = 0xff000000 | (rgb)
93 
94 #define StoreIntArgbFrom1IntArgb(pRas, PREFIX, x, argb) \
95     (pRas)[x] = (argb)
96 
97 #define StoreIntArgbFrom3ByteRgb(pRas, PREFIX, x, r, g, b) \
98     StoreIntArgbFrom4ByteArgb(pRas, PREFIX, x, 0xff, r, g, b)
99 
100 #define StoreIntArgbFrom4ByteArgb(pRas, PREFIX, x, a, r, g, b) \
101     (pRas)[x] = ComposeIntDcmComponents1234(a, r, g, b)
102 
103 #define CopyIntArgbToIntArgbPre(pRGB, i, PREFIX, pRow, x) \
104     do { \
105         jint argb = (pRow)[x]; \
106         jint a = URShift(argb, 24); \
107         if (a == 0) { \
108             argb = 0; \
109         } else if (a < 0xff) { \
110             jint r = (argb >> 16) & 0xff; \
111             jint g = (argb >>  8) & 0xff; \
112             jint b = (argb      ) & 0xff; \
113             r = MUL8(a, r); \
114             g = MUL8(a, g); \
115             b = MUL8(a, b); \
116             argb = ComposeIntDcmComponents1234(a, r, g, b); \
117         } \
118         (pRGB)[i] = argb; \
119     } while (0)
120 
121 
122 #define DeclareIntArgbAlphaLoadData(PREFIX) \
123     jint PREFIX;
124 
125 #define InitIntArgbAlphaLoadData(PREFIX, pRasInfo) \
126     PREFIX = 0
127 
128 #define LoadAlphaFromIntArgbFor4ByteArgb(pRas, PREFIX, COMP_PREFIX) \
129     do { \
130         PREFIX = (pRas)[0]; \
131         COMP_PREFIX ## A = ((juint) PREFIX) >> 24; \
132     } while (0)
133 
134 #define LoadAlphaFromIntArgbFor1ByteGray(pRas, PREFIX, COMP_PREFIX) \
135     LoadAlphaFromIntArgbFor4ByteArgb(pRas, PREFIX, COMP_PREFIX)
136 
137 #define LoadAlphaFromIntArgbFor1ShortGray(pRas, PREFIX, COMP_PREFIX) \
138     do { \
139         LoadAlphaFromIntArgbFor4ByteArgb(pRas, PREFIX, COMP_PREFIX); \
140         COMP_PREFIX ## A = (COMP_PREFIX ## A << 8) + COMP_PREFIX ## A; \
141     } while (0)
142 
143 #define Postload4ByteArgbFromIntArgb(pRas, PREFIX, COMP_PREFIX) \
144     do { \
145         COMP_PREFIX ## R = (PREFIX >> 16) & 0xff; \
146         COMP_PREFIX ## G = (PREFIX >>  8) & 0xff; \
147         COMP_PREFIX ## B = (PREFIX >>  0) & 0xff; \
148     } while (0)
149 
150 #define Postload1ByteGrayFromIntArgb(pRas, PREFIX, COMP_PREFIX) \
151     do { \
152         int r, g, b; \
153         ExtractIntDcmComponentsX123(PREFIX, r, g, b); \
154         COMP_PREFIX ## G = ComposeByteGrayFrom3ByteRgb(r, g, b); \
155     } while (0)
156 
157 #define Postload1ShortGrayFromIntArgb(pRas, PREFIX, COMP_PREFIX) \
158     do { \
159         int r, g, b; \
160         ExtractIntDcmComponentsX123(PREFIX, r, g, b); \
161         COMP_PREFIX ## G = ComposeUshortGrayFrom3ByteRgb(r, g, b); \
162     } while (0)
163 
164 
165 #define IntArgbIsPremultiplied  0
166 
167 #define DeclareIntArgbBlendFillVars(PREFIX)
168 
169 #define ClearIntArgbBlendFillVars(PREFIX, argb) \
170     argb = 0
171 
172 #define InitIntArgbBlendFillVarsNonPre(PREFIX, argb, COMP_PREFIX) \
173     argb = (COMP_PREFIX ## A << 24) | (argb & 0x00ffffff); \
174 
175 #define InitIntArgbBlendFillVarsPre(PREFIX, argb, COMP_PREFIX)
176 
177 #define StoreIntArgbBlendFill(pRas, PREFIX, x, argb, COMP_PREFIX) \
178     (pRas)[x] = (argb)
179 
180 #define StoreIntArgbFrom4ByteArgbComps(pRas, PREFIX, x, COMP_PREFIX) \
181     StoreIntArgbFrom4ByteArgb(pRas, PREFIX, x, \
182                               COMP_PREFIX ## A, COMP_PREFIX ## R, \
183                               COMP_PREFIX ## G, COMP_PREFIX ## B)
184 
185 
186 /*
187  * Extract ## STRATEGY ## CompsAndAlphaFromArgb(pixel, COMP_PREFIX)
188  */
189 #define Extract3ByteRgbCompsAndAlphaFromArgb(pixel, COMP_PREFIX) \
190     ExtractIntDcmComponents1234(pixel, COMP_PREFIX ## A, COMP_PREFIX ## R, \
191                                 COMP_PREFIX ## G, COMP_PREFIX ## B)
192 
193 #define Extract4ByteArgbCompsAndAlphaFromArgb(pixel, COMP_PREFIX) \
194     Extract3ByteRgbCompsAndAlphaFromArgb(pixel, COMP_PREFIX)
195 
196 #define Extract1ByteGrayCompsAndAlphaFromArgb(pixel, COMP_PREFIX) \
197     do { \
198         int r, g, b; \
199         ExtractIntDcmComponents1234(pixel, COMP_PREFIX ## A, r, g, b); \
200         COMP_PREFIX ## G = ComposeByteGrayFrom3ByteRgb(r, g, b); \
201     } while (0)
202 
203 #define Extract1ShortGrayCompsAndAlphaFromArgb(pixel, COMP_PREFIX) \
204     do { \
205         int r, g, b; \
206         ExtractIntDcmComponents1234(pixel, COMP_PREFIX ## A, r, g, b); \
207         COMP_PREFIX ## G = ComposeUshortGrayFrom3ByteRgb(r, g, b); \
208         COMP_PREFIX ## A = (COMP_PREFIX ## A << 8) + COMP_PREFIX ## A; \
209     } while (0)
210 
211 /*
212  * SrcOver ## TYPE ## BlendFactor
213  * Returns appropriate blend value for use in blending calculations.
214  */
215 #define SrcOverIntArgbBlendFactor(dF, dA) \
216     (dA)
217 
218 #endif /* IntArgb_h_Included */
219