microui  3.1.1
microui
LLDW_PAINTER_impl.c
1 
2 /*
3  * Copyright 2020-2023 MicroEJ Corp. All rights reserved.
4  * Use of this source code is governed by a BSD-style license that can be found with this software.
5  */
6 
7 /*
8  * @file
9  * @brief This file implements all "Drawing" (MicroUI extended library) drawing native functions.
10  * @see LLDW_PAINTER_impl.h file comment
11  * @author MicroEJ Developer Team
12  * @version 3.1.1
13  * @since MicroEJ UI Pack 13.0.0
14  */
15 
16 // --------------------------------------------------------------------------------
17 // Includes
18 // --------------------------------------------------------------------------------
19 
20 // implements LLDW_PAINTER_impl functions
21 #include <LLDW_PAINTER_impl.h>
22 
23 // use graphical engine functions to synchronize drawings
24 #include <LLUI_DISPLAY.h>
25 
26 // calls ui_drawing functions
27 #include "ui_drawing.h"
28 
29 // --------------------------------------------------------------------------------
30 // Macros and Defines
31 // --------------------------------------------------------------------------------
32 
33 // macros to log a drawing
34 #define LOG_DRAW_START(fn) LLUI_DISPLAY_logDrawingStart(CONCAT_DEFINES(LOG_DRAW_, fn))
35 #define LOG_DRAW_END(fn) LLUI_DISPLAY_logDrawingEnd(CONCAT_DEFINES(LOG_DRAW_, fn))
36 
37 /*
38  * LOG_DRAW_EVENT logs identifiers
39  */
40 #define LOG_DRAW_drawThickFadedPoint 100
41 #define LOG_DRAW_drawThickFadedLine 101
42 #define LOG_DRAW_drawThickFadedCircle 102
43 #define LOG_DRAW_drawThickFadedCircleArc 103
44 #define LOG_DRAW_drawThickFadedEllipse 104
45 #define LOG_DRAW_drawThickLine 105
46 #define LOG_DRAW_drawThickCircle 106
47 #define LOG_DRAW_drawThickEllipse 107
48 #define LOG_DRAW_drawThickCircleArc 108
49 
50 #define LOG_DRAW_drawFlippedImage 200
51 #define LOG_DRAW_drawRotatedImageNearestNeighbor 201
52 #define LOG_DRAW_drawRotatedImageBilinear 202
53 #define LOG_DRAW_drawScaledImageNearestNeighbor 203
54 #define LOG_DRAW_drawScaledImageBilinear 204
55 
56 // --------------------------------------------------------------------------------
57 // LLDW_PAINTER_impl.h functions
58 // --------------------------------------------------------------------------------
59 
60 void LLDW_PAINTER_IMPL_drawThickFadedPoint(MICROUI_GraphicsContext* gc, jint x, jint y, jint thickness, jint fade) {
61  if (((thickness > 0) || (fade > 0)) && LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&LLDW_PAINTER_IMPL_drawThickFadedPoint)) {
62  LOG_DRAW_START(drawThickFadedPoint);
63  LLUI_DISPLAY_setDrawingStatus(UI_DRAWING_drawThickFadedPoint(gc, x, y, thickness, fade));
64  LOG_DRAW_END(drawThickFadedPoint);
65  }
66 }
67 
68 void LLDW_PAINTER_IMPL_drawThickFadedLine(MICROUI_GraphicsContext* gc, jint startX, jint startY, jint endX, jint endY, jint thickness, jint fade, DRAWING_Cap startCap, DRAWING_Cap endCap) {
69  if (((thickness > 0) || (fade > 0)) && LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&LLDW_PAINTER_IMPL_drawThickFadedLine)) {
70  LOG_DRAW_START(drawThickFadedLine);
71  LLUI_DISPLAY_setDrawingStatus(UI_DRAWING_drawThickFadedLine(gc, startX, startY, endX, endY, thickness, fade, startCap, endCap));
72  LOG_DRAW_END(drawThickFadedLine);
73  }
74 }
75 
76 void LLDW_PAINTER_IMPL_drawThickFadedCircle(MICROUI_GraphicsContext* gc, jint x, jint y, jint diameter, jint thickness, jint fade) {
77  if (((thickness > 0) || (fade > 0)) && (diameter > 0) && LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&LLDW_PAINTER_IMPL_drawThickFadedCircle)) {
78  LOG_DRAW_START(drawThickFadedCircle);
79  LLUI_DISPLAY_setDrawingStatus(UI_DRAWING_drawThickFadedCircle(gc, x, y, diameter, thickness, fade));
80  LOG_DRAW_END(drawThickFadedCircle);
81  }
82 }
83 
84 void LLDW_PAINTER_IMPL_drawThickFadedCircleArc(MICROUI_GraphicsContext* gc, jint x, jint y, jint diameter, jfloat startAngle, jfloat arcAngle, jint thickness, jint fade, DRAWING_Cap start, DRAWING_Cap end) {
85  if (((thickness > 0) || (fade > 0)) && (diameter > 0) && ((int32_t)arcAngle != 0) && LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&LLDW_PAINTER_IMPL_drawThickFadedCircleArc)) {
86  LOG_DRAW_START(drawThickFadedCircleArc);
87  LLUI_DISPLAY_setDrawingStatus(UI_DRAWING_drawThickFadedCircleArc(gc, x, y, diameter, startAngle, arcAngle, thickness, fade, start, end));
88  LOG_DRAW_END(drawThickFadedCircleArc);
89  }
90 }
91 
92 void LLDW_PAINTER_IMPL_drawThickFadedEllipse(MICROUI_GraphicsContext* gc, jint x, jint y, jint width, jint height, jint thickness, jint fade) {
93  if (((thickness > 0) || (fade > 0)) && (width > 0) && (height > 0) && LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&LLDW_PAINTER_IMPL_drawThickFadedEllipse)) {
94  LOG_DRAW_START(drawThickFadedEllipse);
95  LLUI_DISPLAY_setDrawingStatus(UI_DRAWING_drawThickFadedEllipse(gc, x, y, width, height, thickness, fade));
96  LOG_DRAW_END(drawThickFadedEllipse);
97  }
98 }
99 
100 void LLDW_PAINTER_IMPL_drawThickLine(MICROUI_GraphicsContext* gc, jint startX, jint startY, jint endX, jint endY, jint thickness) {
101  if ((thickness > 0) && LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&LLDW_PAINTER_IMPL_drawThickLine)) {
102  LOG_DRAW_START(drawThickLine);
103  LLUI_DISPLAY_setDrawingStatus(UI_DRAWING_drawThickLine(gc, startX, startY, endX, endY, thickness));
104  LOG_DRAW_END(drawThickLine);
105  }
106 }
107 
108 void LLDW_PAINTER_IMPL_drawThickCircle(MICROUI_GraphicsContext* gc, jint x, jint y, jint diameter, jint thickness) {
109  if ((thickness > 0) && (diameter > 0) && LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&LLDW_PAINTER_IMPL_drawThickCircle)) {
110  LOG_DRAW_START(drawThickCircle);
111  LLUI_DISPLAY_setDrawingStatus(UI_DRAWING_drawThickCircle(gc, x, y, diameter, thickness));
112  LOG_DRAW_END(drawThickCircle);
113  }
114 }
115 
116 void LLDW_PAINTER_IMPL_drawThickEllipse(MICROUI_GraphicsContext* gc, jint x, jint y, jint width, jint height, jint thickness) {
117  if ((thickness > 0) && (width > 0) && (height > 0) && LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&LLDW_PAINTER_IMPL_drawThickEllipse)) {
118  LOG_DRAW_START(drawThickEllipse);
119  LLUI_DISPLAY_setDrawingStatus(UI_DRAWING_drawThickEllipse(gc, x, y, width, height, thickness));
120  LOG_DRAW_END(drawThickEllipse);
121  }
122 }
123 
124 void LLDW_PAINTER_IMPL_drawThickCircleArc(MICROUI_GraphicsContext* gc, jint x, jint y, jint diameter, jfloat startAngle, jfloat arcAngle, jint thickness) {
125  if ((thickness > 0) && (diameter > 0) && ((int32_t)arcAngle != 0) && LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&LLDW_PAINTER_IMPL_drawThickCircleArc)) {
126  LOG_DRAW_START(drawThickCircleArc);
127  LLUI_DISPLAY_setDrawingStatus(UI_DRAWING_drawThickCircleArc(gc, x, y, diameter, startAngle, arcAngle, thickness));
128  LOG_DRAW_END(drawThickCircleArc);
129  }
130 }
131 
132 void LLDW_PAINTER_IMPL_drawFlippedImage(MICROUI_GraphicsContext* gc, MICROUI_Image* img, jint regionX, jint regionY, jint width, jint height, jint x, jint y, DRAWING_Flip transformation, jint alpha) {
133  if (!LLUI_DISPLAY_isClosed(img) && (alpha > 0) && LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&LLDW_PAINTER_IMPL_drawFlippedImage)) {
134  LOG_DRAW_START(drawFlippedImage);
135  LLUI_DISPLAY_setDrawingStatus(UI_DRAWING_drawFlippedImage(gc, img, regionX, regionY, width, height, x, y, transformation, alpha));
136  LOG_DRAW_END(drawFlippedImage);
137  }
138 }
139 
140 void LLDW_PAINTER_IMPL_drawRotatedImageNearestNeighbor(MICROUI_GraphicsContext* gc, MICROUI_Image* img, jint x, jint y, jint rotationX, jint rotationY, jfloat angle, jint alpha) {
141  if (!LLUI_DISPLAY_isClosed(img) && (alpha > 0) && LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&LLDW_PAINTER_IMPL_drawRotatedImageNearestNeighbor)) {
142  LOG_DRAW_START(drawRotatedImageNearestNeighbor);
143  LLUI_DISPLAY_setDrawingStatus(UI_DRAWING_drawRotatedImageNearestNeighbor(gc, img, x, y, rotationX, rotationY, angle, alpha));
144  LOG_DRAW_END(drawRotatedImageNearestNeighbor);
145  }
146 }
147 
148 void LLDW_PAINTER_IMPL_drawRotatedImageBilinear(MICROUI_GraphicsContext* gc, MICROUI_Image* img, jint x, jint y, jint rotationX, jint rotationY, jfloat angle, jint alpha) {
149  if (!LLUI_DISPLAY_isClosed(img) && (alpha > 0) && LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&LLDW_PAINTER_IMPL_drawRotatedImageBilinear)) {
150  LOG_DRAW_START(drawRotatedImageBilinear);
151  LLUI_DISPLAY_setDrawingStatus(UI_DRAWING_drawRotatedImageBilinear(gc, img, x, y, rotationX, rotationY, angle, alpha));
152  LOG_DRAW_END(drawRotatedImageBilinear);
153  }
154 }
155 
156 void LLDW_PAINTER_IMPL_drawScaledImageNearestNeighbor(MICROUI_GraphicsContext* gc, MICROUI_Image* img, jint x, jint y, jfloat factorX, jfloat factorY, jint alpha) {
157  if (!LLUI_DISPLAY_isClosed(img) && (alpha > 0) && (factorX > 0.f) && (factorY > 0.f) && LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&LLDW_PAINTER_IMPL_drawScaledImageNearestNeighbor)) {
158  LOG_DRAW_START(drawScaledImageNearestNeighbor);
159  LLUI_DISPLAY_setDrawingStatus(UI_DRAWING_drawScaledImageNearestNeighbor(gc, img, x, y, factorX, factorY, alpha));
160  LOG_DRAW_END(drawScaledImageNearestNeighbor);
161  }
162 }
163 
164 void LLDW_PAINTER_IMPL_drawScaledImageBilinear(MICROUI_GraphicsContext* gc, MICROUI_Image* img, jint x, jint y, jfloat factorX, jfloat factorY, jint alpha) {
165  if (!LLUI_DISPLAY_isClosed(img) && (alpha > 0) && (factorX > 0.f) && (factorY > 0.f) && LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&LLDW_PAINTER_IMPL_drawScaledImageBilinear)) {
166  LOG_DRAW_START(drawScaledImageBilinear);
167  LLUI_DISPLAY_setDrawingStatus(UI_DRAWING_drawScaledImageBilinear(gc, img, x, y, factorX, factorY, alpha));
168  LOG_DRAW_END(drawScaledImageBilinear);
169  }
170 }
171 
172 // --------------------------------------------------------------------------------
173 // EOF
174 // --------------------------------------------------------------------------------
175 
176 #ifdef __cplusplus
177 }
178 #endif