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