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"
31 #include "microvg_trace.h"
40 #define LOG_MICROVG_DRAWING_START(fn) LOG_MICROVG_START(LOG_MICROVG_DRAWING_ID, CONCAT_DEFINES(LOG_MICROVG_DRAW_, fn))
41 #define LOG_MICROVG_DRAWING_END(fn) LOG_MICROVG_END(LOG_MICROVG_DRAWING_ID, CONCAT_DEFINES(LOG_MICROVG_DRAW_, fn))
48 jint LLVG_PAINTER_IMPL_drawPath(MICROUI_GraphicsContext* gc, jbyte* pathData, jint x, jint y, jfloat* matrix, jint fillRule, jint blend, jint color) {
49 if (LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&LLVG_PAINTER_IMPL_drawPath)) {
50 LOG_MICROVG_DRAWING_START(path);
51 DRAWING_Status status = VG_DRAWING_drawPath(gc, pathData, x, y, matrix, fillRule, blend, color);
52 LLUI_DISPLAY_setDrawingStatus(status);
53 LOG_MICROVG_DRAWING_END(path);
59 jint LLVG_PAINTER_IMPL_drawGradient(MICROUI_GraphicsContext* gc, jbyte* pathData, jint x, jint y, jfloat* matrix, jint fillRule, jint alpha, jint blend, jint* gradientData, jfloat* gradientMatrix) {
60 if (LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&LLVG_PAINTER_IMPL_drawGradient)) {
61 LOG_MICROVG_DRAWING_START(pathGradient);
62 DRAWING_Status status = VG_DRAWING_drawGradient(gc, pathData, x, y, matrix, fillRule, alpha, blend, gradientData, gradientMatrix);
63 LLUI_DISPLAY_setDrawingStatus(status);
64 LOG_MICROVG_DRAWING_END(pathGradient);
70 jint LLVG_PAINTER_IMPL_drawString(MICROUI_GraphicsContext* gc, jchar* text, jint faceHandle, jfloat size, jfloat x, jfloat y, jfloat* matrix, jint alpha, jint blend, jfloat letterSpacing){
73 if (LLVG_FONT_UNLOADED == faceHandle) {
74 ret = (jint)LLVG_RESOURCE_CLOSED;
77 if (LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&(LLVG_PAINTER_IMPL_drawString))){
78 LOG_MICROVG_DRAWING_START(
string);
79 LLUI_DISPLAY_setDrawingStatus(VG_DRAWING_drawString(gc, text, faceHandle, size, x, y, matrix, alpha, blend, letterSpacing));
80 LOG_MICROVG_DRAWING_END(
string);
82 ret = (jint)LLVG_SUCCESS;
88 jint LLVG_PAINTER_IMPL_drawStringGradient(MICROUI_GraphicsContext* gc, jchar* text, jint faceHandle, jfloat size, jfloat x, jfloat y, jfloat* matrix, jint alpha, jint blend, jfloat letterSpacing, jint *gradientData, jfloat *gradientMatrix){
92 if (LLVG_FONT_UNLOADED == faceHandle) {
93 ret = (jint)LLVG_RESOURCE_CLOSED;
96 if (LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&(LLVG_PAINTER_IMPL_drawStringGradient))){
97 LOG_MICROVG_DRAWING_START(stringGradient);
98 LLUI_DISPLAY_setDrawingStatus(VG_DRAWING_drawStringGradient(gc, text, faceHandle, size, x, y, matrix, alpha, blend, letterSpacing, gradientData, gradientMatrix));
99 LOG_MICROVG_DRAWING_END(stringGradient);
101 ret = (jint)LLVG_SUCCESS;
108 jint LLVG_PAINTER_IMPL_drawStringOnCircle(MICROUI_GraphicsContext* gc, jchar* text, jint faceHandle, jfloat size, jint x, jint y, jfloat* matrix, jint alpha, jint blend, jfloat letterSpacing, jfloat radius, jint direction){
112 if (LLVG_FONT_UNLOADED == faceHandle) {
113 ret = (jint)LLVG_RESOURCE_CLOSED;
116 if (LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&(LLVG_PAINTER_IMPL_drawStringOnCircle))){
117 LOG_MICROVG_DRAWING_START(stringOnCircle);
118 LLUI_DISPLAY_setDrawingStatus(VG_DRAWING_drawStringOnCircle(gc, text, faceHandle, size, x, y, matrix, alpha, blend, letterSpacing, radius, direction));
119 LOG_MICROVG_DRAWING_END(stringOnCircle);
121 ret = (jint)LLVG_SUCCESS;
128 jint LLVG_PAINTER_IMPL_drawStringOnCircleGradient(MICROUI_GraphicsContext* gc, jchar* text, jint faceHandle, jfloat size, jint x, jint y, jfloat* matrix, jint alpha, jint blend, jfloat letterSpacing, jfloat radius, jint direction, jint *gradientData, jfloat *gradientMatrix){
132 if (LLVG_FONT_UNLOADED == faceHandle) {
133 ret = (jint)LLVG_RESOURCE_CLOSED;
136 if (LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&(LLVG_PAINTER_IMPL_drawStringOnCircleGradient))){
137 LOG_MICROVG_DRAWING_START(stringOnCircleGradient);
138 LLUI_DISPLAY_setDrawingStatus(VG_DRAWING_drawStringOnCircleGradient(gc, text, faceHandle, size, x, y, matrix, alpha, blend, letterSpacing, radius, direction, gradientData, gradientMatrix));
139 LOG_MICROVG_DRAWING_END(stringOnCircleGradient);
141 ret = (jint)LLVG_SUCCESS;
148 jint LLVG_PAINTER_IMPL_drawImage(MICROUI_GraphicsContext* gc,
void* image, jint x, jint y, jfloat *matrix, jint alpha, jlong elapsed,
const float color_matrix[]){
150 jint error = LLVG_SUCCESS;
152 if (LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&LLVG_PAINTER_IMPL_drawImage)) {
153 DRAWING_Status status;
154 LOG_MICROVG_DRAWING_START(image);
155 if (alpha > (uint32_t)0){
158 jfloat local_matrix[LLVG_MATRIX_SIZE];
159 jfloat* drawing_matrix;
161 if((0 != x) || (0 != y)) {
163 LLVG_MATRIX_IMPL_setTranslate(local_matrix, x, y);
164 LLVG_MATRIX_IMPL_concatenate(local_matrix, matrix);
165 drawing_matrix = local_matrix;
169 drawing_matrix = matrix;
172 status = VG_DRAWING_drawImage(gc, image, drawing_matrix, alpha, elapsed, color_matrix, &error);
177 if (LLVG_OUT_OF_MEMORY == error) {
178 error = LLVG_SUCCESS;
182 status = DRAWING_DONE;
184 LLUI_DISPLAY_setDrawingStatus(status);
185 LOG_MICROVG_DRAWING_END(image);