microvg  8.0.0
microvg
vg_drawing.c
1 /*
2  * C
3  *
4  * Copyright 2023-2026 MicroEJ Corp. All rights reserved.
5  * MicroEJ Corp. PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
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 8.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 // (the function names differ according to the available number of destination formats)
258 // --------------------------------------------------------------------------------
259 
260 // See the header file for the function documentation
261 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_DEFAULT_drawPath(MICROUI_GraphicsContext *gc, jbyte *path,
262  jfloat *matrix, jint fillRule, jint blend,
263  jint color) {
264  return VG_DRAWING_STUB_drawPath(gc, path, matrix, fillRule, blend, color);
265 }
266 
267 // See the header file for the function documentation
268 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_DEFAULT_drawGradient(MICROUI_GraphicsContext *gc, jbyte *path,
269  jfloat *matrix, jint fillRule, jint alpha,
270  jint blend, jint *gradient,
271  jfloat *gradientMatrix) {
272  return VG_DRAWING_STUB_drawGradient(gc, path, matrix, fillRule, alpha, blend, gradient, gradientMatrix);
273 }
274 
275 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_DEFAULT_drawString(MICROUI_GraphicsContext *gc, jchar *text,
276  jint length, jint faceHandle, jfloat size,
277  jfloat *matrix, jint alpha, jint blend,
278  jfloat letterSpacing) {
279  return VG_DRAWING_STUB_drawString(gc, text, length, faceHandle, size, matrix, alpha, blend, letterSpacing);
280 }
281 
282 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_DEFAULT_drawStringGradient(MICROUI_GraphicsContext *gc, jchar *text,
283  jint length, jint faceHandle, jfloat size,
284  jfloat *matrix, jint alpha, jint blend,
285  jfloat letterSpacing, jint *gradientData,
286  jfloat *gradientMatrix) {
287  return VG_DRAWING_STUB_drawStringGradient(gc, text, length, faceHandle, size, matrix, alpha, blend, letterSpacing,
288  gradientData, gradientMatrix);
289 }
290 
291 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_DEFAULT_drawStringOnCircle(MICROUI_GraphicsContext *gc, jchar *text,
292  jint length, jint faceHandle, jfloat size,
293  jfloat *matrix, jint alpha, jint blend,
294  jfloat letterSpacing, jfloat radius,
295  jint direction) {
296  return VG_DRAWING_STUB_drawStringOnCircle(gc, text, length, faceHandle, size, matrix, alpha, blend, letterSpacing,
297  radius, direction);
298 }
299 
300 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_DEFAULT_drawStringOnCircleGradient(MICROUI_GraphicsContext *gc,
301  jchar *text, jint length,
302  jint faceHandle, jfloat size,
303  jfloat *matrix, jint alpha,
304  jint blend, jfloat letterSpacing,
305  jfloat radius, jint direction,
306  jint *gradientData,
307  jfloat *gradientMatrix) {
308  return VG_DRAWING_STUB_drawStringOnCircleGradient(gc, text, length, faceHandle, size, matrix, alpha, blend,
309  letterSpacing, radius, direction, gradientData, gradientMatrix);
310 }
311 
312 // See the header file for the function documentation
313 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_DEFAULT_drawImage(MICROUI_GraphicsContext *gc, void *sni_context,
314  jfloat *matrix, jint alpha, jlong elapsed,
315  const float color_matrix[], jint *errno) {
316  return VG_DRAWING_STUB_drawImage(gc, sni_context, matrix, alpha, elapsed, color_matrix, errno);
317 }
318 
319 #if defined(UI_GC_SUPPORTED_FORMATS) && (UI_GC_SUPPORTED_FORMATS > 1)
320 
321 /*
322  * The VEE port supports several destination formats. All drawing functions use a
323  * dedicated table to redirect to the right implementation.
324  *
325  * The "DEFAULT" functions (see upper) are used as element "0" of the tables (== display
326  * buffer format).
327  */
328 
329 // See the header file for the function documentation
330 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_drawPath(MICROUI_GraphicsContext *gc, jbyte *path, jfloat *matrix,
331  jint fillRule, jint blend, jint color) {
332  return (*VG_DRAWER_drawPath[gc->drawer])(gc, path, matrix, fillRule, blend, color);
333 }
334 
335 // See the header file for the function documentation
336 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_drawGradient(MICROUI_GraphicsContext *gc, jbyte *path, jfloat *matrix,
337  jint fillRule, jint alpha, jint blend, jint *gradient,
338  jfloat *gradientMatrix) {
339  return (*VG_DRAWER_drawGradient[gc->drawer])(gc, path, matrix, fillRule, alpha, blend, gradient, gradientMatrix);
340 }
341 
342 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_drawString(MICROUI_GraphicsContext *gc, jchar *text, jint length,
343  jint faceHandle, jfloat size, jfloat *matrix, jint alpha,
344  jint blend, jfloat letterSpacing) {
345  return (*VG_DRAWER_drawString[gc->drawer])(gc, text, length, faceHandle, size, matrix, alpha, blend, letterSpacing);
346 }
347 
348 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_drawStringGradient(MICROUI_GraphicsContext *gc, jchar *text,
349  jint length, jint faceHandle, jfloat size,
350  jfloat *matrix, jint alpha, jint blend,
351  jfloat letterSpacing, jint *gradientData,
352  jfloat *gradientMatrix) {
353  return (*VG_DRAWER_drawStringGradient[gc->drawer])(gc, text, length, faceHandle, size, matrix, alpha, blend,
354  letterSpacing, gradientData, gradientMatrix);
355 }
356 
357 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_drawStringOnCircle(MICROUI_GraphicsContext *gc, jchar *text,
358  jint length, jint faceHandle, jfloat size,
359  jfloat *matrix, jint alpha, jint blend,
360  jfloat letterSpacing, jfloat radius,
361  jint direction) {
362  return (*VG_DRAWER_drawStringOnCircle[gc->drawer])(gc, text, length, faceHandle, size, matrix, alpha, blend,
363  letterSpacing, radius, direction);
364 }
365 
366 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_drawStringOnCircleGradient(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, jint *gradientData,
371  jfloat *gradientMatrix) {
372  return (*VG_DRAWER_drawStringOnCircleGradient[gc->drawer])(gc, text, length, faceHandle, size, matrix, alpha, blend,
373  letterSpacing, radius, direction, gradientData,
374  gradientMatrix);
375 }
376 
377 // See the header file for the function documentation
378 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_drawImage(MICROUI_GraphicsContext *gc, void *image, jfloat *matrix,
379  jint alpha, jlong elapsed, const float color_matrix[],
380  jint *errno) {
381  return (*VG_DRAWER_drawImage[gc->drawer])(gc, image, matrix, alpha, elapsed, color_matrix, errno);
382 }
383 
384 /*
385  * The next functions are used as elements "1" of the tables. They call STUB functions and should be
386  * overridden by the drawer that manages the format "1".
387  */
388 
389 // See the header file for the function documentation
390 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_drawPath_1(MICROUI_GraphicsContext *gc, jbyte *path, jfloat *matrix,
391  jint fillRule, jint blend, jint color) {
392  return VG_DRAWING_STUB_drawPath(gc, path, matrix, fillRule, blend, color);
393 }
394 
395 // See the header file for the function documentation
396 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_drawGradient_1(MICROUI_GraphicsContext *gc, jbyte *path, jfloat *matrix,
397  jint fillRule, jint alpha, jint blend, jint *gradient,
398  jfloat *gradientMatrix) {
399  return VG_DRAWING_STUB_drawGradient(gc, path, matrix, fillRule, alpha, blend, gradient, gradientMatrix);
400 }
401 
402 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_drawString_1(MICROUI_GraphicsContext *gc, jchar *text, jint length,
403  jint faceHandle, jfloat size, jfloat *matrix, jint alpha,
404  jint blend, jfloat letterSpacing) {
405  return VG_DRAWING_STUB_drawString(gc, text, length, faceHandle, size, matrix, alpha, blend, letterSpacing);
406 }
407 
408 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_drawStringGradient_1(MICROUI_GraphicsContext *gc, jchar *text,
409  jint length, jint faceHandle, jfloat size,
410  jfloat *matrix, jint alpha, jint blend,
411  jfloat letterSpacing, jint *gradientData,
412  jfloat *gradientMatrix) {
413  return VG_DRAWING_STUB_drawStringGradient(gc, text, length, faceHandle, size, matrix, alpha, blend, letterSpacing,
414  gradientData, gradientMatrix);
415 }
416 
417 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_drawStringOnCircle_1(MICROUI_GraphicsContext *gc, jchar *text,
418  jint length, jint faceHandle, jfloat size,
419  jfloat *matrix, jint alpha, jint blend,
420  jfloat letterSpacing, jfloat radius,
421  jint direction) {
422  return VG_DRAWING_STUB_drawStringOnCircle(gc, text, length, faceHandle, size, matrix, alpha, blend, letterSpacing,
423  radius, direction);
424 }
425 
426 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_drawStringOnCircleGradient_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, jint *gradientData,
431  jfloat *gradientMatrix) {
432  return VG_DRAWING_STUB_drawStringOnCircleGradient(gc, text, length, faceHandle, size, matrix, alpha, blend,
433  letterSpacing, radius, direction, gradientData, gradientMatrix);
434 }
435 
436 // See the header file for the function documentation
437 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_drawImage_1(MICROUI_GraphicsContext *gc, void *sni_context,
438  jfloat *matrix, jint alpha, jlong elapsed,
439  const float color_matrix[], jint *errno) {
440  return VG_DRAWING_STUB_drawImage(gc, sni_context, matrix, alpha, elapsed, color_matrix, errno);
441 }
442 
443 #if (UI_GC_SUPPORTED_FORMATS > 2)
444 
445 /*
446  * The next functions are used as elements "2" of the tables. They call STUB functions and should be
447  * overridden by the drawer that manages the format "2".
448  */
449 
450 // See the header file for the function documentation
451 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_drawPath_2(MICROUI_GraphicsContext *gc, jbyte *path, jfloat *matrix,
452  jint fillRule, jint blend, jint color) {
453  return VG_DRAWING_STUB_drawPath(gc, path, matrix, fillRule, blend, color);
454 }
455 
456 // See the header file for the function documentation
457 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_drawGradient_2(MICROUI_GraphicsContext *gc, jbyte *path, jfloat *matrix,
458  jint fillRule, jint alpha, jint blend, jint *gradient,
459  jfloat *gradientMatrix) {
460  return VG_DRAWING_STUB_drawGradient(gc, path, matrix, fillRule, alpha, blend, gradient, gradientMatrix);
461 }
462 
463 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_drawString_2(MICROUI_GraphicsContext *gc, jchar *text, jint length,
464  jint faceHandle, jfloat size, jfloat *matrix, jint alpha,
465  jint blend, jfloat letterSpacing) {
466  return VG_DRAWING_STUB_drawString(gc, text, length, faceHandle, size, matrix, alpha, blend, letterSpacing);
467 }
468 
469 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_drawStringGradient_2(MICROUI_GraphicsContext *gc, jchar *text,
470  jint length, jint faceHandle, jfloat size,
471  jfloat *matrix, jint alpha, jint blend,
472  jfloat letterSpacing, jint *gradientData,
473  jfloat *gradientMatrix) {
474  return VG_DRAWING_STUB_drawStringGradient(gc, text, length, faceHandle, size, matrix, alpha, blend, letterSpacing,
475  gradientData, gradientMatrix);
476 }
477 
478 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_drawStringOnCircle_2(MICROUI_GraphicsContext *gc, jchar *text,
479  jint length, jint faceHandle, jfloat size,
480  jfloat *matrix, jint alpha, jint blend,
481  jfloat letterSpacing, jfloat radius,
482  jint direction) {
483  return VG_DRAWING_STUB_drawStringOnCircle(gc, text, length, faceHandle, size, matrix, alpha, blend, letterSpacing,
484  radius, direction);
485 }
486 
487 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_drawStringOnCircleGradient_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, jint *gradientData,
492  jfloat *gradientMatrix) {
493  return VG_DRAWING_STUB_drawStringOnCircleGradient(gc, text, length, faceHandle, size, matrix, alpha, blend,
494  letterSpacing, radius, direction, gradientData, gradientMatrix);
495 }
496 
497 // See the header file for the function documentation
498 BSP_DECLARE_WEAK_FCNT DRAWING_Status VG_DRAWING_drawImage_2(MICROUI_GraphicsContext *gc, void *sni_context,
499  jfloat *matrix, jint alpha, jlong elapsed,
500  const float color_matrix[], jint *errno) {
501  return VG_DRAWING_STUB_drawImage(gc, sni_context, matrix, alpha, elapsed, color_matrix, errno);
502 }
503 
504 #endif // (UI_GC_SUPPORTED_FORMATS > 2)
505 
506 #else // #if defined(UI_GC_SUPPORTED_FORMATS) && (UI_GC_SUPPORTED_FORMATS > 1)
507 
508 /*
509  * The VEE port supports only one destination format: the display buffer format. All
510  * drawing functions are redirected to the stub implementation by default. A
511  * third party implementation (often on a GPU) should replace each weak function independently.
512  */
513 
514 #endif // #if defined(UI_GC_SUPPORTED_FORMATS) && (UI_GC_SUPPORTED_FORMATS > 1)
515 
516 // -----------------------------------------------------------------------------
517 // EOF
518 // -----------------------------------------------------------------------------