21 #include <LLVG_PAINTER_impl.h>
24 #include <LLUI_DISPLAY.h>
26 #include <LLVG_FONT_impl.h>
27 #include <LLVG_MATRIX_impl.h>
39 jint LLVG_PAINTER_IMPL_drawPath(MICROUI_GraphicsContext *gc, jbyte *pathData, jint x, jint y, jfloat *matrix,
40 jint fillRule, jint blend, jint color) {
41 if (LLUI_DISPLAY_requestDrawing(gc, (SNI_callback) & LLVG_PAINTER_IMPL_drawPath)) {
42 VG_TRACE_DRAW_START(drawPathColor, gc, x, y);
43 jfloat translated_matrix[LLVG_MATRIX_SIZE];
45 DRAWING_Status status =
VG_DRAWING_drawPath(gc, pathData, translated_matrix, fillRule, blend, color);
46 LLUI_DISPLAY_setDrawingStatus(status);
47 VG_TRACE_DRAW_END(drawPathColor, status);
53 jint LLVG_PAINTER_IMPL_drawGradient(MICROUI_GraphicsContext *gc, jbyte *pathData, jint x, jint y, jfloat *matrix,
54 jint fillRule, jint alpha, jint blend, jint *gradientData, jfloat *gradientMatrix) {
55 if (LLUI_DISPLAY_requestDrawing(gc, (SNI_callback) & LLVG_PAINTER_IMPL_drawGradient)) {
56 VG_TRACE_DRAW_START(drawPathGradient, gc, x, y);
57 jfloat translated_matrix[LLVG_MATRIX_SIZE];
60 gradientData, gradientMatrix);
61 LLUI_DISPLAY_setDrawingStatus(status);
62 VG_TRACE_DRAW_END(drawPathGradient, status);
68 jint LLVG_PAINTER_IMPL_drawString(MICROUI_GraphicsContext *gc, jchar *text, jint faceHandle, jfloat size, jfloat x,
69 jfloat y, jfloat *matrix, jint alpha, jint blend, jfloat letterSpacing) {
72 if (LLUI_DISPLAY_requestDrawing(gc, (SNI_callback) & (LLVG_PAINTER_IMPL_drawString))) {
73 DRAWING_Status status;
74 int length = (int)SNI_getArrayLength(text);
75 VG_TRACE_DRAW_START(drawStringColor, gc, length, (jint)x, (jint)y);
77 if (LLVG_FONT_UNLOADED != faceHandle) {
78 jfloat translated_matrix[LLVG_MATRIX_SIZE];
82 ret = (jint)LLVG_SUCCESS;
84 status = DRAWING_DONE;
85 ret = (jint)LLVG_RESOURCE_CLOSED;
88 LLUI_DISPLAY_setDrawingStatus(status);
89 VG_TRACE_DRAW_END(drawStringColor, status);
96 jint LLVG_PAINTER_IMPL_drawStringGradient(MICROUI_GraphicsContext *gc, jchar *text, jint faceHandle, jfloat size,
97 jfloat x, jfloat y, jfloat *matrix, jint alpha, jint blend,
98 jfloat letterSpacing, jint *gradientData, jfloat *gradientMatrix) {
101 if (LLUI_DISPLAY_requestDrawing(gc, (SNI_callback) & (LLVG_PAINTER_IMPL_drawStringGradient))) {
102 DRAWING_Status status;
103 int length = (int)SNI_getArrayLength(text);
104 VG_TRACE_DRAW_START(drawStringGradient, gc, length, (jint)x, (jint)y);
106 if (LLVG_FONT_UNLOADED != faceHandle) {
107 jfloat translated_matrix[LLVG_MATRIX_SIZE];
110 translated_matrix, alpha, blend, letterSpacing, gradientData,
112 ret = (jint)LLVG_SUCCESS;
114 status = DRAWING_DONE;
115 ret = (jint)LLVG_RESOURCE_CLOSED;
118 LLUI_DISPLAY_setDrawingStatus(status);
119 VG_TRACE_DRAW_END(drawStringGradient, status);
126 jint LLVG_PAINTER_IMPL_drawStringOnCircle(MICROUI_GraphicsContext *gc, jchar *text, jint faceHandle, jfloat size,
127 jint x, jint y, jfloat *matrix, jint alpha, jint blend, jfloat letterSpacing,
128 jfloat radius, jint direction) {
131 if (LLUI_DISPLAY_requestDrawing(gc, (SNI_callback) & (LLVG_PAINTER_IMPL_drawStringOnCircle))) {
132 DRAWING_Status status;
133 int length = (int)SNI_getArrayLength(text);
134 VG_TRACE_DRAW_START(drawStringOnCircleColor, gc, length, x, y, (uint32_t)radius, direction);
136 if (LLVG_FONT_UNLOADED != faceHandle) {
137 jfloat translated_matrix[LLVG_MATRIX_SIZE];
140 translated_matrix, alpha, blend, letterSpacing, radius, direction);
141 ret = (jint)LLVG_SUCCESS;
143 status = DRAWING_DONE;
144 ret = (jint)LLVG_RESOURCE_CLOSED;
147 LLUI_DISPLAY_setDrawingStatus(status);
148 VG_TRACE_DRAW_END(drawStringOnCircleColor, status);
155 jint LLVG_PAINTER_IMPL_drawStringOnCircleGradient(MICROUI_GraphicsContext *gc, jchar *text, jint faceHandle,
156 jfloat size, jint x, jint y, jfloat *matrix, jint alpha, jint blend,
157 jfloat letterSpacing, jfloat radius, jint direction,
158 jint *gradientData, jfloat *gradientMatrix) {
161 if (LLUI_DISPLAY_requestDrawing(gc, (SNI_callback) & (LLVG_PAINTER_IMPL_drawStringOnCircleGradient))) {
162 DRAWING_Status status;
163 int length = (int)SNI_getArrayLength(text);
164 VG_TRACE_DRAW_START(drawStringOnCircleGradient, gc, length, x, y, (uint32_t)radius, direction);
166 if (LLVG_FONT_UNLOADED != faceHandle) {
167 jfloat translated_matrix[LLVG_MATRIX_SIZE];
170 translated_matrix, alpha, blend, letterSpacing, radius,
171 direction, gradientData, gradientMatrix);
172 ret = (jint)LLVG_SUCCESS;
174 status = DRAWING_DONE;
175 ret = (jint)LLVG_RESOURCE_CLOSED;
178 LLUI_DISPLAY_setDrawingStatus(status);
179 VG_TRACE_DRAW_END(drawStringOnCircleGradient, status);
186 jint LLVG_PAINTER_IMPL_drawImage(MICROUI_GraphicsContext *gc, MICROVG_Image *image, jint x, jint y, jfloat *matrix,
187 jint alpha, jlong elapsed,
const float color_matrix[]) {
188 jint error = LLVG_SUCCESS;
190 if (LLUI_DISPLAY_requestDrawing(gc, (SNI_callback) & LLVG_PAINTER_IMPL_drawImage)) {
191 DRAWING_Status status;
192 VG_TRACE_DRAW_START(drawImage, gc, VG_TRACE_IMAGE(image), x, y);
195 jfloat translated_matrix[LLVG_MATRIX_SIZE];
197 status =
VG_DRAWING_drawImage(gc, image, translated_matrix, alpha, elapsed, color_matrix, &error);
200 if (LLVG_OUT_OF_MEMORY == error) {
201 error = LLVG_SUCCESS;
204 status = DRAWING_DONE;
206 LLUI_DISPLAY_setDrawingStatus(status);
207 VG_TRACE_DRAW_END(drawImage, status);
Provides drawing functions called by MicroVG native drawing functions.
DRAWING_Status VG_DRAWING_drawStringOnCircleGradient(MICROUI_GraphicsContext *gc, jchar *text, jint length, jint faceHandle, jfloat size, jfloat *matrix, jint alpha, jint blend, jfloat letterSpacing, jfloat radius, jint direction, jint *gradientData, jfloat *gradientMatrix)
Draws a string along a circle, with a linear gradient.
bool VG_DRAWING_image_is_closed(const MICROVG_Image *image)
Tells if the image is closed (closed just before calling the native function).
DRAWING_Status VG_DRAWING_drawString(MICROUI_GraphicsContext *gc, jchar *text, jint length, jint faceHandle, jfloat size, jfloat *matrix, jint alpha, jint blend, jfloat letterSpacing)
Draws a string with the color of the Graphics Context.
DRAWING_Status VG_DRAWING_drawImage(MICROUI_GraphicsContext *gc, void *image, jfloat *matrix, jint alpha, jlong elapsed, const float color_matrix[], jint *errno)
Draws an image with transformation and opacity. Optionally apply an animation and / or a color filter...
DRAWING_Status VG_DRAWING_drawPath(MICROUI_GraphicsContext *gc, jbyte *path, jfloat *matrix, jint fillRule, jint blend, jint color)
Draws a path filled with the specified color (not the one of the Graphics Context).
DRAWING_Status VG_DRAWING_drawStringOnCircle(MICROUI_GraphicsContext *gc, jchar *text, jint length, jint faceHandle, jfloat size, jfloat *matrix, jint alpha, jint blend, jfloat letterSpacing, jfloat radius, jint direction)
Draws a string along a circle, with the color of the Graphics Context.
DRAWING_Status VG_DRAWING_drawGradient(MICROUI_GraphicsContext *gc, jbyte *path, jfloat *matrix, jint fillRule, jint alpha, jint blend, jint *gradient, jfloat *gradientMatrix)
Draws a path filled with a linear gradient.
DRAWING_Status VG_DRAWING_drawStringGradient(MICROUI_GraphicsContext *gc, jchar *text, jint length, jint faceHandle, jfloat size, jfloat *matrix, jint alpha, jint blend, jfloat letterSpacing, jint *gradientData, jfloat *gradientMatrix)
Draws a string with a linear gradient.
MicroEJ MicroVG library low level API: helper to implement library natives methods.
void VG_HELPER_prepare_matrix(jfloat *dest, jfloat x, jfloat y, const jfloat *matrix)
Converts a MicroVG matrix in another MicroVG matrix applying a translation.