21 #include <LLVG_PAINTER_impl.h>
24 #include <LLUI_DISPLAY.h>
26 #include <LLVG_FONT_impl.h>
27 #include <LLVG_MATRIX_impl.h>
30 #include "vg_drawing.h"
41 #define LOG_MICROVG_DRAWING_START(fn) LOG_MICROVG_START(LOG_MICROVG_DRAWING_ID, CONCAT_DEFINES(LOG_MICROVG_DRAW_, fn))
42 #define LOG_MICROVG_DRAWING_END(fn) LOG_MICROVG_END(LOG_MICROVG_DRAWING_ID, CONCAT_DEFINES(LOG_MICROVG_DRAW_, fn))
49 jint LLVG_PAINTER_IMPL_drawPath(MICROUI_GraphicsContext *gc, jbyte *pathData, jint x, jint y, jfloat *matrix,
50 jint fillRule, jint blend, jint color) {
51 if (LLUI_DISPLAY_requestDrawing(gc, (SNI_callback) & LLVG_PAINTER_IMPL_drawPath)) {
52 LOG_MICROVG_DRAWING_START(path);
53 jfloat translated_matrix[LLVG_MATRIX_SIZE];
54 VG_HELPER_prepare_matrix(translated_matrix, x, y, matrix);
55 DRAWING_Status status = VG_DRAWING_drawPath(gc, pathData, translated_matrix, fillRule, blend, color);
56 LLUI_DISPLAY_setDrawingStatus(status);
57 LOG_MICROVG_DRAWING_END(path);
63 jint LLVG_PAINTER_IMPL_drawGradient(MICROUI_GraphicsContext *gc, jbyte *pathData, jint x, jint y, jfloat *matrix,
64 jint fillRule, jint alpha, jint blend, jint *gradientData, jfloat *gradientMatrix) {
65 if (LLUI_DISPLAY_requestDrawing(gc, (SNI_callback) & LLVG_PAINTER_IMPL_drawGradient)) {
66 LOG_MICROVG_DRAWING_START(pathGradient);
67 jfloat translated_matrix[LLVG_MATRIX_SIZE];
68 VG_HELPER_prepare_matrix(translated_matrix, x, y, matrix);
69 DRAWING_Status status = VG_DRAWING_drawGradient(gc, pathData, translated_matrix, fillRule, alpha, blend,
70 gradientData, gradientMatrix);
71 LLUI_DISPLAY_setDrawingStatus(status);
72 LOG_MICROVG_DRAWING_END(pathGradient);
78 jint LLVG_PAINTER_IMPL_drawString(MICROUI_GraphicsContext *gc, jchar *text, jint faceHandle, jfloat size, jfloat x,
79 jfloat y, jfloat *matrix, jint alpha, jint blend, jfloat letterSpacing) {
81 if (LLVG_FONT_UNLOADED == faceHandle) {
82 ret = (jint)LLVG_RESOURCE_CLOSED;
84 if (LLUI_DISPLAY_requestDrawing(gc, (SNI_callback) & (LLVG_PAINTER_IMPL_drawString))) {
85 LOG_MICROVG_DRAWING_START(
string);
86 jfloat translated_matrix[LLVG_MATRIX_SIZE];
87 VG_HELPER_prepare_matrix(translated_matrix, x, y, matrix);
88 LLUI_DISPLAY_setDrawingStatus(VG_DRAWING_drawString(gc, text, faceHandle, size, translated_matrix, alpha,
89 blend, letterSpacing));
90 LOG_MICROVG_DRAWING_END(
string);
92 ret = (jint)LLVG_SUCCESS;
98 jint LLVG_PAINTER_IMPL_drawStringGradient(MICROUI_GraphicsContext *gc, jchar *text, jint faceHandle, jfloat size,
99 jfloat x, jfloat y, jfloat *matrix, jint alpha, jint blend,
100 jfloat letterSpacing, jint *gradientData, jfloat *gradientMatrix) {
103 if (LLVG_FONT_UNLOADED == faceHandle) {
104 ret = (jint)LLVG_RESOURCE_CLOSED;
106 if (LLUI_DISPLAY_requestDrawing(gc, (SNI_callback) & (LLVG_PAINTER_IMPL_drawStringGradient))) {
107 LOG_MICROVG_DRAWING_START(stringGradient);
108 jfloat translated_matrix[LLVG_MATRIX_SIZE];
109 VG_HELPER_prepare_matrix(translated_matrix, x, y, matrix);
110 LLUI_DISPLAY_setDrawingStatus(VG_DRAWING_drawStringGradient(gc, text, faceHandle, size, translated_matrix,
111 alpha, blend, letterSpacing, gradientData,
113 LOG_MICROVG_DRAWING_END(stringGradient);
115 ret = (jint)LLVG_SUCCESS;
122 jint LLVG_PAINTER_IMPL_drawStringOnCircle(MICROUI_GraphicsContext *gc, jchar *text, jint faceHandle, jfloat size,
123 jint x, jint y, jfloat *matrix, jint alpha, jint blend, jfloat letterSpacing,
124 jfloat radius, jint direction) {
127 if (LLVG_FONT_UNLOADED == faceHandle) {
128 ret = (jint)LLVG_RESOURCE_CLOSED;
130 if (LLUI_DISPLAY_requestDrawing(gc, (SNI_callback) & (LLVG_PAINTER_IMPL_drawStringOnCircle))) {
131 LOG_MICROVG_DRAWING_START(stringOnCircle);
132 jfloat translated_matrix[LLVG_MATRIX_SIZE];
133 VG_HELPER_prepare_matrix(translated_matrix, x, y, matrix);
134 LLUI_DISPLAY_setDrawingStatus(VG_DRAWING_drawStringOnCircle(gc, text, faceHandle, size, translated_matrix,
135 alpha, blend, letterSpacing, radius,
137 LOG_MICROVG_DRAWING_END(stringOnCircle);
139 ret = (jint)LLVG_SUCCESS;
146 jint LLVG_PAINTER_IMPL_drawStringOnCircleGradient(MICROUI_GraphicsContext *gc, jchar *text, jint faceHandle,
147 jfloat size, jint x, jint y, jfloat *matrix, jint alpha, jint blend,
148 jfloat letterSpacing, jfloat radius, jint direction,
149 jint *gradientData, jfloat *gradientMatrix) {
152 if (LLVG_FONT_UNLOADED == faceHandle) {
153 ret = (jint)LLVG_RESOURCE_CLOSED;
155 if (LLUI_DISPLAY_requestDrawing(gc, (SNI_callback) & (LLVG_PAINTER_IMPL_drawStringOnCircleGradient))) {
156 LOG_MICROVG_DRAWING_START(stringOnCircleGradient);
157 jfloat translated_matrix[LLVG_MATRIX_SIZE];
158 VG_HELPER_prepare_matrix(translated_matrix, x, y, matrix);
159 LLUI_DISPLAY_setDrawingStatus(VG_DRAWING_drawStringOnCircleGradient(gc, text, faceHandle, size,
160 translated_matrix, alpha, blend,
161 letterSpacing, radius, direction,
162 gradientData, gradientMatrix));
163 LOG_MICROVG_DRAWING_END(stringOnCircleGradient);
165 ret = (jint)LLVG_SUCCESS;
172 jint LLVG_PAINTER_IMPL_drawImage(MICROUI_GraphicsContext *gc, MICROVG_Image *image, jint x, jint y, jfloat *matrix,
174 jlong elapsed,
const float color_matrix[]) {
175 jint error = LLVG_SUCCESS;
177 if (LLUI_DISPLAY_requestDrawing(gc, (SNI_callback) & LLVG_PAINTER_IMPL_drawImage)) {
178 DRAWING_Status status;
179 LOG_MICROVG_DRAWING_START(image);
180 if (!VG_DRAWING_image_is_closed(image) && alpha > (uint32_t)0) {
182 jfloat translated_matrix[LLVG_MATRIX_SIZE];
183 VG_HELPER_prepare_matrix(translated_matrix, x, y, matrix);
185 status = VG_DRAWING_drawImage(gc, image, translated_matrix, alpha, elapsed, color_matrix, &error);
190 if (LLVG_OUT_OF_MEMORY == error) {
191 error = LLVG_SUCCESS;
194 status = DRAWING_DONE;
196 LLUI_DISPLAY_setDrawingStatus(status);
197 LOG_MICROVG_DRAWING_END(image);
MicroEJ MicroVG library low level API: helper to implement library natives methods.