microvg  7.0.0
microvg
vg_drawing.c
1 /*
2  * C
3  *
4  * Copyright 2023-2024 MicroEJ Corp. All rights reserved.
5  * Use of this source code is governed by a BSD-style license that can be found with this software.
6  */
7 
8 /*
9  * @file
10  * @brief Redirection of all MicroVG library drawing functions. This file is required
11  * (must be compiled in the C project) but should not be modified (except when the VEE
12  * port uses more than 3 destination formats, see below).
13  *
14  * This file follows strictly the same concept as ui_drawing.c but for MicroVG
15  * library.
16  *
17  * @author MicroEJ Developer Team
18  * @version 7.0.0
19  * @see ui_drawing.c
20  */
21 
22 // -----------------------------------------------------------------------------
23 // Includes
24 // -----------------------------------------------------------------------------
25 
26 #include "vg_drawing.h"
27 #include "vg_drawing_stub.h"
28 #include "ui_configuration.h"
29 #include "bsp_util.h"
30 
31 // --------------------------------------------------------------------------------
32 // Defines
33 // --------------------------------------------------------------------------------
34 
35 #if !defined(UI_GC_SUPPORTED_FORMATS) || (UI_GC_SUPPORTED_FORMATS <= 1)
36 
37 /*
38  * The function VG_DRAWING_DEFAULT_xxx() are directly called by LLVG_PAINTER_impl.c
39  * Another file can override each weak function independently to use a GPU.
40  */
41 
42 #define VG_DRAWING_DEFAULT_drawPath VG_DRAWING_drawPath
43 #define VG_DRAWING_DEFAULT_drawGradient VG_DRAWING_drawGradient
44 #define VG_DRAWING_DEFAULT_drawString VG_DRAWING_drawString
45 #define VG_DRAWING_DEFAULT_drawStringGradient VG_DRAWING_drawStringGradient
46 #define VG_DRAWING_DEFAULT_drawStringOnCircle VG_DRAWING_drawStringOnCircle
47 #define VG_DRAWING_DEFAULT_drawStringOnCircleGradient VG_DRAWING_drawStringOnCircleGradient
48 #define VG_DRAWING_DEFAULT_drawImage VG_DRAWING_drawImage
49 
50 #else // !defined(UI_GC_SUPPORTED_FORMATS) || (UI_GC_SUPPORTED_FORMATS <= 1)
51 
52 /*
53  * The functions VG_DRAWING_DEFAULT_xxx() are indirectly called through some tables.
54  * The functions have got the identifier "0" as suffix. Another file can override
55  * each weak function independently to use a GPU.
56  */
57 
58 #define VG_DRAWING_DEFAULT_drawPath VG_DRAWING_drawPath_0
59 #define VG_DRAWING_DEFAULT_drawGradient VG_DRAWING_drawGradient_0
60 #define VG_DRAWING_DEFAULT_drawString VG_DRAWING_drawString_0
61 #define VG_DRAWING_DEFAULT_drawStringGradient VG_DRAWING_drawStringGradient_0
62 #define VG_DRAWING_DEFAULT_drawStringOnCircle VG_DRAWING_drawStringOnCircle_0
63 #define VG_DRAWING_DEFAULT_drawStringOnCircleGradient VG_DRAWING_drawStringOnCircleGradient_0
64 #define VG_DRAWING_DEFAULT_drawImage VG_DRAWING_drawImage_0
65 
66 #endif // !defined(UI_GC_SUPPORTED_FORMATS) || (UI_GC_SUPPORTED_FORMATS <= 1)
67 
68 // --------------------------------------------------------------------------------
69 // Extern functions
70 // --------------------------------------------------------------------------------
71 
72 #if defined(UI_GC_SUPPORTED_FORMATS) && (UI_GC_SUPPORTED_FORMATS > 1)
73 
74 /*
75  * @brief Set of drawing functions according to the index of the destination format in
76  * the drawing tables ("0", "1" or "2").
77  *
78  * These functions must be declared in other H files.
79  */
80 
81 #if (UI_GC_SUPPORTED_FORMATS > 3)
82 #error "Increase the number of following functions and update the next tables"
83 #endif
84 
85 extern DRAWING_Status VG_DRAWING_drawPath_0(MICROUI_GraphicsContext *gc, jbyte *path, jfloat *matrix, jint fillRule,
86  jint blend, jint color);
87 extern DRAWING_Status VG_DRAWING_drawGradient_0(MICROUI_GraphicsContext *gc, jbyte *path, jfloat *matrix, jint fillRule,
88  jint alpha, jint blend, jint *gradient, jfloat *gradientMatrix);
89 extern DRAWING_Status VG_DRAWING_drawString_0(MICROUI_GraphicsContext *gc, jchar *text, jint length, jint faceHandle,
90  jfloat size, jfloat *matrix, jint alpha, jint blend,
91  jfloat letterSpacing);
92 extern DRAWING_Status VG_DRAWING_drawStringGradient_0(MICROUI_GraphicsContext *gc, jchar *text, jint length,
93  jint faceHandle, jfloat size, jfloat *matrix, jint alpha,
94  jint blend, jfloat letterSpacing, jint *gradientData,
95  jfloat *gradientMatrix);
96 extern DRAWING_Status VG_DRAWING_drawStringOnCircle_0(MICROUI_GraphicsContext *gc, jchar *text, jint length,
97  jint faceHandle, jfloat size, jfloat *matrix, jint alpha,
98  jint blend, jfloat letterSpacing, jfloat radius, jint direction);
99 extern DRAWING_Status VG_DRAWING_drawStringOnCircleGradient_0(MICROUI_GraphicsContext *gc, jchar *text, jint length,
100  jint faceHandle, jfloat size, jfloat *matrix, jint alpha,
101  jint blend, jfloat letterSpacing, jfloat radius,
102  jint direction, jint *gradientData,
103  jfloat *gradientMatrix);
104 extern DRAWING_Status VG_DRAWING_drawImage_0(MICROUI_GraphicsContext *gc, void *image, jfloat *matrix, jint alpha,
105  jlong elapsed, const float color_matrix[], jint *errno);
106 
107 extern DRAWING_Status VG_DRAWING_drawPath_1(MICROUI_GraphicsContext *gc, jbyte *path, jfloat *matrix, jint fillRule,
108  jint blend, jint color);
109 extern DRAWING_Status VG_DRAWING_drawGradient_1(MICROUI_GraphicsContext *gc, jbyte *path, jfloat *matrix, jint fillRule,
110  jint alpha, jint blend, jint *gradient, jfloat *gradientMatrix);
111 extern DRAWING_Status VG_DRAWING_drawString_1(MICROUI_GraphicsContext *gc, jchar *text, jint length, jint faceHandle,
112  jfloat size, jfloat *matrix, jint alpha, jint blend,
113  jfloat letterSpacing);
114 extern DRAWING_Status VG_DRAWING_drawStringGradient_1(MICROUI_GraphicsContext *gc, jchar *text, jint length,
115  jint faceHandle, jfloat size, jfloat *matrix, jint alpha,
116  jint blend, jfloat letterSpacing, jint *gradientData,
117  jfloat *gradientMatrix);
118 extern DRAWING_Status VG_DRAWING_drawStringOnCircle_1(MICROUI_GraphicsContext *gc, jchar *text, jint length,
119  jint faceHandle, jfloat size, jfloat *matrix, jint alpha,
120  jint blend, jfloat letterSpacing, jfloat radius, jint direction);
121 extern DRAWING_Status VG_DRAWING_drawStringOnCircleGradient_1(MICROUI_GraphicsContext *gc, jchar *text, jint length,
122  jint faceHandle, jfloat size, jfloat *matrix, jint alpha,
123  jint blend, jfloat letterSpacing, jfloat radius,
124  jint direction, jint *gradientData,
125  jfloat *gradientMatrix);
126 extern DRAWING_Status VG_DRAWING_drawImage_1(MICROUI_GraphicsContext *gc, void *image, jfloat *matrix, jint alpha,
127  jlong elapsed, const float color_matrix[], jint *errno);
128 
129 #if (UI_GC_SUPPORTED_FORMATS > 2)
130 extern DRAWING_Status VG_DRAWING_drawPath_2(MICROUI_GraphicsContext *gc, jbyte *path, jfloat *matrix, jint fillRule,
131  jint blend, jint color);
132 extern DRAWING_Status VG_DRAWING_drawGradient_2(MICROUI_GraphicsContext *gc, jbyte *path, jfloat *matrix, jint fillRule,
133  jint alpha, jint blend, jint *gradient, jfloat *gradientMatrix);
134 extern DRAWING_Status VG_DRAWING_drawString_2(MICROUI_GraphicsContext *gc, jchar *text, jint length, jint faceHandle,
135  jfloat size, jfloat *matrix, jint alpha, jint blend,
136  jfloat letterSpacing);
137 extern DRAWING_Status VG_DRAWING_drawStringGradient_2(MICROUI_GraphicsContext *gc, jchar *text, jint length,
138  jint faceHandle, jfloat size, jfloat *matrix, jint alpha,
139  jint blend, jfloat letterSpacing, jint *gradientData,
140  jfloat *gradientMatrix);
141 extern DRAWING_Status VG_DRAWING_drawStringOnCircle_2(MICROUI_GraphicsContext *gc, jchar *text, jint length,
142  jint faceHandle, jfloat size, jfloat *matrix, jint alpha,
143  jint blend, jfloat letterSpacing, jfloat radius, jint direction);
144 extern DRAWING_Status VG_DRAWING_drawStringOnCircleGradient_2(MICROUI_GraphicsContext *gc, jchar *text, jint length,
145  jint faceHandle, jfloat size, jfloat *matrix, jint alpha,
146  jint blend, jfloat letterSpacing, jfloat radius,
147  jint direction, jint *gradientData,
148  jfloat *gradientMatrix);
149 extern DRAWING_Status VG_DRAWING_drawImage_2(MICROUI_GraphicsContext *gc, void *image, jfloat *matrix, jint alpha,
150  jlong elapsed, const float color_matrix[], jint *errno);
151 #endif // (UI_GC_SUPPORTED_FORMATS > 2)
152 
153 #endif // defined(UI_GC_SUPPORTED_FORMATS) && (UI_GC_SUPPORTED_FORMATS > 1)
154 
155 // --------------------------------------------------------------------------------
156 // Typedef of drawing functions
157 // --------------------------------------------------------------------------------
158 
159 #if defined(UI_GC_SUPPORTED_FORMATS) && (UI_GC_SUPPORTED_FORMATS > 1)
160 
161 /*
162  * @brief Typedef used by next tables. See the functions comments in vg_drawing.h
163  */
164 
165 typedef DRAWING_Status (* VG_DRAWING_drawPath_t) (MICROUI_GraphicsContext *gc, jbyte *path, jfloat *matrix,
166  jint fillRule, jint blend, jint color);
167 typedef DRAWING_Status (* VG_DRAWING_drawGradient_t) (MICROUI_GraphicsContext *gc, jbyte *path, jfloat *matrix,
168  jint fillRule, jint alpha, jint blend, jint *gradient,
169  jfloat *gradientMatrix);
170 typedef DRAWING_Status (* VG_DRAWING_drawString_t) (MICROUI_GraphicsContext *gc, jchar *text, jint length,
171  jint faceHandle, jfloat size, jfloat *matrix, jint alpha,
172  jint blend, jfloat letterSpacing);
173 typedef DRAWING_Status (* VG_DRAWING_drawStringGradient_t) (MICROUI_GraphicsContext *gc, jchar *text, jint length,
174  jint faceHandle, jfloat size, jfloat *matrix, jint alpha,
175  jint blend, jfloat letterSpacing, jint *gradientData,
176  jfloat *gradientMatrix);
177 typedef DRAWING_Status (* VG_DRAWING_drawStringOnCircle_t) (MICROUI_GraphicsContext *gc, jchar *text, jint length,
178  jint faceHandle, jfloat size, jfloat *matrix, jint alpha,
179  jint blend, jfloat letterSpacing, jfloat radius,
180  jint direction);
181 typedef DRAWING_Status (* VG_DRAWING_drawStringOnCircleGradient_t) (MICROUI_GraphicsContext *gc, jchar *text,
182  jint length, jint faceHandle, jfloat size,
183  jfloat *matrix, jint alpha, jint blend,
184  jfloat letterSpacing, jfloat radius, jint direction,
185  jint *gradientData, jfloat *gradientMatrix);
186 typedef DRAWING_Status (* VG_DRAWING_drawImage_t) (MICROUI_GraphicsContext *gc, void *image, jfloat *matrix, jint alpha,
187  jlong elapsed, const float color_matrix[], jint *errno);
188 
189 #endif // #if defined(UI_GC_SUPPORTED_FORMATS) && (UI_GC_SUPPORTED_FORMATS > 1)
190 
191 // --------------------------------------------------------------------------------
192 // Tables according to the destination format.
193 // --------------------------------------------------------------------------------
194 
195 #if defined(UI_GC_SUPPORTED_FORMATS) && (UI_GC_SUPPORTED_FORMATS > 1)
196 
197 static const VG_DRAWING_drawPath_t VG_DRAWER_drawPath[] = {
198  &VG_DRAWING_drawPath_0,
199  &VG_DRAWING_drawPath_1,
200 #if (UI_GC_SUPPORTED_FORMATS > 2)
201  &VG_DRAWING_drawPath_2,
202 #endif
203 };
204 
205 static const VG_DRAWING_drawGradient_t VG_DRAWER_drawGradient[] = {
206  &VG_DRAWING_drawGradient_0,
207  &VG_DRAWING_drawGradient_1,
208 #if (UI_GC_SUPPORTED_FORMATS > 2)
209  &VG_DRAWING_drawGradient_2,
210 #endif
211 };
212 
213 static const VG_DRAWING_drawString_t VG_DRAWER_drawString[] = {
214  &VG_DRAWING_drawString_0,
215  &VG_DRAWING_drawString_1,
216 #if (UI_GC_SUPPORTED_FORMATS > 2)
217  &VG_DRAWING_drawString_2,
218 #endif
219 };
220 
221 static const VG_DRAWING_drawStringGradient_t VG_DRAWER_drawStringGradient[] = {
222  &VG_DRAWING_drawStringGradient_0,
223  &VG_DRAWING_drawStringGradient_1,
224 #if (UI_GC_SUPPORTED_FORMATS > 2)
225  &VG_DRAWING_drawStringGradient_2,
226 #endif
227 };
228 
229 static const VG_DRAWING_drawStringOnCircle_t VG_DRAWER_drawStringOnCircle[] = {
230  &VG_DRAWING_drawStringOnCircle_0,
231  &VG_DRAWING_drawStringOnCircle_1,
232 #if (UI_GC_SUPPORTED_FORMATS > 2)
233  &VG_DRAWING_drawStringOnCircle_2,
234 #endif
235 };
236 
237 static const VG_DRAWING_drawStringOnCircleGradient_t VG_DRAWER_drawStringOnCircleGradient[] = {
238  &VG_DRAWING_drawStringOnCircleGradient_0,
239  &VG_DRAWING_drawStringOnCircleGradient_1,
240 #if (UI_GC_SUPPORTED_FORMATS > 2)
241  &VG_DRAWING_drawStringOnCircleGradient_2,
242 #endif
243 };
244 
245 static const VG_DRAWING_drawImage_t VG_DRAWER_drawImage[] = {
246  &VG_DRAWING_drawImage_0,
247  &VG_DRAWING_drawImage_1,
248 #if (UI_GC_SUPPORTED_FORMATS > 2)
249  &VG_DRAWING_drawImage_2,
250 #endif
251 };
252 
253 #endif /* if defined(UI_GC_SUPPORTED_FORMATS) && (UI_GC_SUPPORTED_FORMATS > 1) */
254 
255 // --------------------------------------------------------------------------------
256 // vg_drawing.h functions
257 // --------------------------------------------------------------------------------
258 
259 // See the header file for the function documentation
260 BSP_DECLARE_WEAK_FCNT void VG_DRAWING_initialize() {
261  // Nothing to do
262 }
263 
264 // --------------------------------------------------------------------------------
265 // vg_drawing.h functions
266 // (the function names differ according to the available number of destination formats)
267 // --------------------------------------------------------------------------------
268 
269 // See the header file for the function documentation
270 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_DEFAULT_drawPath(MICROUI_GraphicsContext *gc, jbyte *path,
271  jfloat *matrix, jint fillRule, jint blend,
272  jint color) {
273  return VG_DRAWING_STUB_drawPath(gc, path, matrix, fillRule, blend, color);
274 }
275 
276 // See the header file for the function documentation
277 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_DEFAULT_drawGradient(MICROUI_GraphicsContext *gc, jbyte *path,
278  jfloat *matrix, jint fillRule, jint alpha,
279  jint blend, jint *gradient,
280  jfloat *gradientMatrix) {
281  return VG_DRAWING_STUB_drawGradient(gc, path, matrix, fillRule, alpha, blend, gradient, gradientMatrix);
282 }
283 
284 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_DEFAULT_drawString(MICROUI_GraphicsContext *gc, jchar *text,
285  jint length, jint faceHandle, jfloat size,
286  jfloat *matrix, jint alpha, jint blend,
287  jfloat letterSpacing) {
288  return VG_DRAWING_STUB_drawString(gc, text, length, faceHandle, size, matrix, alpha, blend, letterSpacing);
289 }
290 
291 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_DEFAULT_drawStringGradient(MICROUI_GraphicsContext *gc, jchar *text,
292  jint length, jint faceHandle, jfloat size,
293  jfloat *matrix, jint alpha, jint blend,
294  jfloat letterSpacing, jint *gradientData,
295  jfloat *gradientMatrix) {
296  return VG_DRAWING_STUB_drawStringGradient(gc, text, length, faceHandle, size, matrix, alpha, blend, letterSpacing,
297  gradientData, gradientMatrix);
298 }
299 
300 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_DEFAULT_drawStringOnCircle(MICROUI_GraphicsContext *gc, jchar *text,
301  jint length, jint faceHandle, jfloat size,
302  jfloat *matrix, jint alpha, jint blend,
303  jfloat letterSpacing, jfloat radius,
304  jint direction) {
305  return VG_DRAWING_STUB_drawStringOnCircle(gc, text, length, faceHandle, size, matrix, alpha, blend, letterSpacing,
306  radius, direction);
307 }
308 
309 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_DEFAULT_drawStringOnCircleGradient(MICROUI_GraphicsContext *gc,
310  jchar *text, jint length,
311  jint faceHandle, jfloat size,
312  jfloat *matrix, jint alpha,
313  jint blend, jfloat letterSpacing,
314  jfloat radius, jint direction,
315  jint *gradientData,
316  jfloat *gradientMatrix) {
317  return VG_DRAWING_STUB_drawStringOnCircleGradient(gc, text, length, faceHandle, size, matrix, alpha, blend,
318  letterSpacing, radius, direction, gradientData, gradientMatrix);
319 }
320 
321 // See the header file for the function documentation
322 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_DEFAULT_drawImage(MICROUI_GraphicsContext *gc, void *sni_context,
323  jfloat *matrix, jint alpha, jlong elapsed,
324  const float color_matrix[], jint *errno) {
325  return VG_DRAWING_STUB_drawImage(gc, sni_context, matrix, alpha, elapsed, color_matrix, errno);
326 }
327 
328 #if defined(UI_GC_SUPPORTED_FORMATS) && (UI_GC_SUPPORTED_FORMATS > 1)
329 
330 /*
331  * The VEE port supports several destination formats. All drawing functions use a
332  * dedicated table to redirect to the right implementation.
333  *
334  * The "DEFAULT" functions (see upper) are used as element "0" of the tables (== display
335  * buffer format).
336  */
337 
338 // See the header file for the function documentation
339 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_drawPath(MICROUI_GraphicsContext *gc, jbyte *path, jfloat *matrix,
340  jint fillRule, jint blend, jint color) {
341  return (*VG_DRAWER_drawPath[gc->drawer])(gc, path, matrix, fillRule, blend, color);
342 }
343 
344 // See the header file for the function documentation
345 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_drawGradient(MICROUI_GraphicsContext *gc, jbyte *path, jfloat *matrix,
346  jint fillRule, jint alpha, jint blend, jint *gradient,
347  jfloat *gradientMatrix) {
348  return (*VG_DRAWER_drawGradient[gc->drawer])(gc, path, matrix, fillRule, alpha, blend, gradient, gradientMatrix);
349 }
350 
351 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_drawString(MICROUI_GraphicsContext *gc, jchar *text, jint length,
352  jint faceHandle, jfloat size, jfloat *matrix, jint alpha,
353  jint blend, jfloat letterSpacing) {
354  return (*VG_DRAWER_drawString[gc->drawer])(gc, text, length, faceHandle, size, matrix, alpha, blend, letterSpacing);
355 }
356 
357 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_drawStringGradient(MICROUI_GraphicsContext *gc, jchar *text,
358  jint length, jint faceHandle, jfloat size,
359  jfloat *matrix, jint alpha, jint blend,
360  jfloat letterSpacing, jint *gradientData,
361  jfloat *gradientMatrix) {
362  return (*VG_DRAWER_drawStringGradient[gc->drawer])(gc, text, length, faceHandle, size, matrix, alpha, blend,
363  letterSpacing, gradientData, gradientMatrix);
364 }
365 
366 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_drawStringOnCircle(MICROUI_GraphicsContext *gc, jchar *text,
367  jint length, jint faceHandle, jfloat size,
368  jfloat *matrix, jint alpha, jint blend,
369  jfloat letterSpacing, jfloat radius,
370  jint direction) {
371  return (*VG_DRAWER_drawStringOnCircle[gc->drawer])(gc, text, length, faceHandle, size, matrix, alpha, blend,
372  letterSpacing, radius, direction);
373 }
374 
375 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_drawStringOnCircleGradient(MICROUI_GraphicsContext *gc, jchar *text,
376  jint length, jint faceHandle, jfloat size,
377  jfloat *matrix, jint alpha, jint blend,
378  jfloat letterSpacing, jfloat radius,
379  jint direction, jint *gradientData,
380  jfloat *gradientMatrix) {
381  return (*VG_DRAWER_drawStringOnCircleGradient[gc->drawer])(gc, text, length, faceHandle, size, matrix, alpha, blend,
382  letterSpacing, radius, direction, gradientData,
383  gradientMatrix);
384 }
385 
386 // See the header file for the function documentation
387 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_drawImage(MICROUI_GraphicsContext *gc, void *image, jfloat *matrix,
388  jint alpha, jlong elapsed, const float color_matrix[],
389  jint *errno) {
390  return (*VG_DRAWER_drawImage[gc->drawer])(gc, image, matrix, alpha, elapsed, color_matrix, errno);
391 }
392 
393 /*
394  * The next functions are used as elements "1" of the tables. They call STUB functions and should be
395  * overridden by the drawer that manages the format "1".
396  */
397 
398 // See the header file for the function documentation
399 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_drawPath_1(MICROUI_GraphicsContext *gc, jbyte *path, jfloat *matrix,
400  jint fillRule, jint blend, jint color) {
401  return VG_DRAWING_STUB_drawPath(gc, path, matrix, fillRule, blend, color);
402 }
403 
404 // See the header file for the function documentation
405 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_drawGradient_1(MICROUI_GraphicsContext *gc, jbyte *path, jfloat *matrix,
406  jint fillRule, jint alpha, jint blend, jint *gradient,
407  jfloat *gradientMatrix) {
408  return VG_DRAWING_STUB_drawGradient(gc, path, matrix, fillRule, alpha, blend, gradient, gradientMatrix);
409 }
410 
411 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_drawString_1(MICROUI_GraphicsContext *gc, jchar *text, jint length,
412  jint faceHandle, jfloat size, jfloat *matrix, jint alpha,
413  jint blend, jfloat letterSpacing) {
414  return VG_DRAWING_STUB_drawString(gc, text, length, faceHandle, size, matrix, alpha, blend, letterSpacing);
415 }
416 
417 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_drawStringGradient_1(MICROUI_GraphicsContext *gc, jchar *text,
418  jint length, jint faceHandle, jfloat size,
419  jfloat *matrix, jint alpha, jint blend,
420  jfloat letterSpacing, jint *gradientData,
421  jfloat *gradientMatrix) {
422  return VG_DRAWING_STUB_drawStringGradient(gc, text, length, faceHandle, size, matrix, alpha, blend, letterSpacing,
423  gradientData, gradientMatrix);
424 }
425 
426 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_drawStringOnCircle_1(MICROUI_GraphicsContext *gc, jchar *text,
427  jint length, jint faceHandle, jfloat size,
428  jfloat *matrix, jint alpha, jint blend,
429  jfloat letterSpacing, jfloat radius,
430  jint direction) {
431  return VG_DRAWING_STUB_drawStringOnCircle(gc, text, length, faceHandle, size, matrix, alpha, blend, letterSpacing,
432  radius, direction);
433 }
434 
435 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_drawStringOnCircleGradient_1(MICROUI_GraphicsContext *gc, jchar *text,
436  jint length, jint faceHandle, jfloat size,
437  jfloat *matrix, jint alpha, jint blend,
438  jfloat letterSpacing, jfloat radius,
439  jint direction, jint *gradientData,
440  jfloat *gradientMatrix) {
441  return VG_DRAWING_STUB_drawStringOnCircleGradient(gc, text, length, faceHandle, size, matrix, alpha, blend,
442  letterSpacing, radius, direction, gradientData, gradientMatrix);
443 }
444 
445 // See the header file for the function documentation
446 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_drawImage_1(MICROUI_GraphicsContext *gc, void *sni_context,
447  jfloat *matrix, jint alpha, jlong elapsed,
448  const float color_matrix[], jint *errno) {
449  return VG_DRAWING_STUB_drawImage(gc, sni_context, matrix, alpha, elapsed, color_matrix, errno);
450 }
451 
452 #if (UI_GC_SUPPORTED_FORMATS > 2)
453 
454 /*
455  * The next functions are used as elements "2" of the tables. They call STUB functions and should be
456  * overridden by the drawer that manages the format "2".
457  */
458 
459 // See the header file for the function documentation
460 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_drawPath_2(MICROUI_GraphicsContext *gc, jbyte *path, jfloat *matrix,
461  jint fillRule, jint blend, jint color) {
462  return VG_DRAWING_STUB_drawPath(gc, path, matrix, fillRule, blend, color);
463 }
464 
465 // See the header file for the function documentation
466 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_drawGradient_2(MICROUI_GraphicsContext *gc, jbyte *path, jfloat *matrix,
467  jint fillRule, jint alpha, jint blend, jint *gradient,
468  jfloat *gradientMatrix) {
469  return VG_DRAWING_STUB_drawGradient(gc, path, matrix, fillRule, alpha, blend, gradient, gradientMatrix);
470 }
471 
472 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_drawString_2(MICROUI_GraphicsContext *gc, jchar *text, jint length,
473  jint faceHandle, jfloat size, jfloat *matrix, jint alpha,
474  jint blend, jfloat letterSpacing) {
475  return VG_DRAWING_STUB_drawString(gc, text, length, faceHandle, size, matrix, alpha, blend, letterSpacing);
476 }
477 
478 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_drawStringGradient_2(MICROUI_GraphicsContext *gc, jchar *text,
479  jint length, jint faceHandle, jfloat size,
480  jfloat *matrix, jint alpha, jint blend,
481  jfloat letterSpacing, jint *gradientData,
482  jfloat *gradientMatrix) {
483  return VG_DRAWING_STUB_drawStringGradient(gc, text, length, faceHandle, size, matrix, alpha, blend, letterSpacing,
484  gradientData, gradientMatrix);
485 }
486 
487 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_drawStringOnCircle_2(MICROUI_GraphicsContext *gc, jchar *text,
488  jint length, jint faceHandle, jfloat size,
489  jfloat *matrix, jint alpha, jint blend,
490  jfloat letterSpacing, jfloat radius,
491  jint direction) {
492  return VG_DRAWING_STUB_drawStringOnCircle(gc, text, length, faceHandle, size, matrix, alpha, blend, letterSpacing,
493  radius, direction);
494 }
495 
496 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_drawStringOnCircleGradient_2(MICROUI_GraphicsContext *gc, jchar *text,
497  jint length, jint faceHandle, jfloat size,
498  jfloat *matrix, jint alpha, jint blend,
499  jfloat letterSpacing, jfloat radius,
500  jint direction, jint *gradientData,
501  jfloat *gradientMatrix) {
502  return VG_DRAWING_STUB_drawStringOnCircleGradient(gc, text, length, faceHandle, size, matrix, alpha, blend,
503  letterSpacing, radius, direction, gradientData, gradientMatrix);
504 }
505 
506 // See the header file for the function documentation
507 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_drawImage_2(MICROUI_GraphicsContext *gc, void *sni_context,
508  jfloat *matrix, jint alpha, jlong elapsed,
509  const float color_matrix[], jint *errno) {
510  return VG_DRAWING_STUB_drawImage(gc, sni_context, matrix, alpha, elapsed, color_matrix, errno);
511 }
512 
513 #endif // (UI_GC_SUPPORTED_FORMATS > 2)
514 
515 #else // #if defined(UI_GC_SUPPORTED_FORMATS) && (UI_GC_SUPPORTED_FORMATS > 1)
516 
517 /*
518  * The VEE port supports only one destination format: the display buffer format. All
519  * drawing functions are redirected to the stub implementation by default. A
520  * third party implementation (often on a GPU) should replace each weak function independently.
521  */
522 
523 #endif // #if defined(UI_GC_SUPPORTED_FORMATS) && (UI_GC_SUPPORTED_FORMATS > 1)
524 
525 // -----------------------------------------------------------------------------
526 // EOF
527 // -----------------------------------------------------------------------------