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 int length = (int)SNI_getArrayLength(text);
89 LLUI_DISPLAY_setDrawingStatus(VG_DRAWING_drawString(gc, text, length, faceHandle, size, translated_matrix,
90 alpha, blend, letterSpacing));
91 LOG_MICROVG_DRAWING_END(
string);
93 ret = (jint)LLVG_SUCCESS;
99 jint LLVG_PAINTER_IMPL_drawStringGradient(MICROUI_GraphicsContext *gc, jchar *text, jint faceHandle, jfloat size,
100 jfloat x, jfloat y, jfloat *matrix, jint alpha, jint blend,
101 jfloat letterSpacing, jint *gradientData, jfloat *gradientMatrix) {
104 if (LLVG_FONT_UNLOADED == faceHandle) {
105 ret = (jint)LLVG_RESOURCE_CLOSED;
107 if (LLUI_DISPLAY_requestDrawing(gc, (SNI_callback) & (LLVG_PAINTER_IMPL_drawStringGradient))) {
108 LOG_MICROVG_DRAWING_START(stringGradient);
109 jfloat translated_matrix[LLVG_MATRIX_SIZE];
110 VG_HELPER_prepare_matrix(translated_matrix, x, y, matrix);
111 int length = (int)SNI_getArrayLength(text);
112 LLUI_DISPLAY_setDrawingStatus(VG_DRAWING_drawStringGradient(gc, text, length, faceHandle, size,
113 translated_matrix, alpha, blend, letterSpacing,
114 gradientData, gradientMatrix));
115 LOG_MICROVG_DRAWING_END(stringGradient);
117 ret = (jint)LLVG_SUCCESS;
124 jint LLVG_PAINTER_IMPL_drawStringOnCircle(MICROUI_GraphicsContext *gc, jchar *text, jint faceHandle, jfloat size,
125 jint x, jint y, jfloat *matrix, jint alpha, jint blend, jfloat letterSpacing,
126 jfloat radius, jint direction) {
129 if (LLVG_FONT_UNLOADED == faceHandle) {
130 ret = (jint)LLVG_RESOURCE_CLOSED;
132 if (LLUI_DISPLAY_requestDrawing(gc, (SNI_callback) & (LLVG_PAINTER_IMPL_drawStringOnCircle))) {
133 LOG_MICROVG_DRAWING_START(stringOnCircle);
134 jfloat translated_matrix[LLVG_MATRIX_SIZE];
135 VG_HELPER_prepare_matrix(translated_matrix, x, y, matrix);
136 int length = (int)SNI_getArrayLength(text);
137 LLUI_DISPLAY_setDrawingStatus(VG_DRAWING_drawStringOnCircle(gc, text, length, faceHandle, size,
138 translated_matrix, alpha, blend, letterSpacing,
140 LOG_MICROVG_DRAWING_END(stringOnCircle);
142 ret = (jint)LLVG_SUCCESS;
149 jint LLVG_PAINTER_IMPL_drawStringOnCircleGradient(MICROUI_GraphicsContext *gc, jchar *text, jint faceHandle,
150 jfloat size, jint x, jint y, jfloat *matrix, jint alpha, jint blend,
151 jfloat letterSpacing, jfloat radius, jint direction,
152 jint *gradientData, jfloat *gradientMatrix) {
155 if (LLVG_FONT_UNLOADED == faceHandle) {
156 ret = (jint)LLVG_RESOURCE_CLOSED;
158 if (LLUI_DISPLAY_requestDrawing(gc, (SNI_callback) & (LLVG_PAINTER_IMPL_drawStringOnCircleGradient))) {
159 LOG_MICROVG_DRAWING_START(stringOnCircleGradient);
160 jfloat translated_matrix[LLVG_MATRIX_SIZE];
161 VG_HELPER_prepare_matrix(translated_matrix, x, y, matrix);
162 int length = (int)SNI_getArrayLength(text);
163 LLUI_DISPLAY_setDrawingStatus(VG_DRAWING_drawStringOnCircleGradient(gc, text, length, faceHandle, size,
164 translated_matrix, alpha, blend,
165 letterSpacing, radius, direction,
166 gradientData, gradientMatrix));
167 LOG_MICROVG_DRAWING_END(stringOnCircleGradient);
169 ret = (jint)LLVG_SUCCESS;
176 jint LLVG_PAINTER_IMPL_drawImage(MICROUI_GraphicsContext *gc, MICROVG_Image *image, jint x, jint y, jfloat *matrix,
177 jint alpha, jlong elapsed,
const float color_matrix[]) {
178 jint error = LLVG_SUCCESS;
180 if (LLUI_DISPLAY_requestDrawing(gc, (SNI_callback) & LLVG_PAINTER_IMPL_drawImage)) {
181 DRAWING_Status status;
182 LOG_MICROVG_DRAWING_START(image);
183 if (!VG_DRAWING_image_is_closed(image) && (alpha > (jint)0)) {
185 jfloat translated_matrix[LLVG_MATRIX_SIZE];
186 VG_HELPER_prepare_matrix(translated_matrix, x, y, matrix);
188 status = VG_DRAWING_drawImage(gc, image, translated_matrix, alpha, elapsed, color_matrix, &error);
193 if (LLVG_OUT_OF_MEMORY == error) {
194 error = LLVG_SUCCESS;
197 status = DRAWING_DONE;
199 LLUI_DISPLAY_setDrawingStatus(status);
200 LOG_MICROVG_DRAWING_END(image);
MicroEJ MicroVG library low level API: helper to implement library natives methods.