microui  2.0.0
microui
LLDW_PAINTER_impl.c
1 
2 /*
3  * Copyright 2020-2022 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 2.0.0
13  * @date 31 August 2022
14  * @since MicroEJ UI Pack 13.0.0
15  */
16 
17 // --------------------------------------------------------------------------------
18 // Includes
19 // --------------------------------------------------------------------------------
20 
21 // implements LLDW_PAINTER_impl functions
22 #include "LLDW_PAINTER_impl.h"
23 
24 // calls dw_drawing functions
25 #include "dw_drawing.h"
26 
27 // use graphical engine functions to synchronize drawings
28 #include "LLUI_DISPLAY.h"
29 
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33 
34 // --------------------------------------------------------------------------------
35 // Macros and Defines
36 // --------------------------------------------------------------------------------
37 
38 // macros to log a drawing
39 #define LOG_DRAW_START(fn) LLUI_DISPLAY_logDrawingStart(CONCAT_DEFINES(LOG_DRAW_, fn))
40 #define LOG_DRAW_END(fn) LLUI_DISPLAY_logDrawingEnd(CONCAT_DEFINES(LOG_DRAW_, fn))
41 
42 /*
43  * LOG_DRAW_EVENT logs identifiers
44  */
45 #define LOG_DRAW_drawThickFadedPoint 100
46 #define LOG_DRAW_drawThickFadedLine 101
47 #define LOG_DRAW_drawThickFadedCircle 102
48 #define LOG_DRAW_drawThickFadedCircleArc 103
49 #define LOG_DRAW_drawThickFadedEllipse 104
50 #define LOG_DRAW_drawThickLine 105
51 #define LOG_DRAW_drawThickCircle 106
52 #define LOG_DRAW_drawThickEllipse 107
53 #define LOG_DRAW_drawThickCircleArc 108
54 
55 #define LOG_DRAW_drawFlippedImage 200
56 #define LOG_DRAW_drawRotatedImageNearestNeighbor 201
57 #define LOG_DRAW_drawRotatedImageBilinear 202
58 #define LOG_DRAW_drawScaledImageNearestNeighbor 203
59 #define LOG_DRAW_drawScaledImageBilinear 204
60 
61 // --------------------------------------------------------------------------------
62 // LLDW_PAINTER_impl.h functions
63 // --------------------------------------------------------------------------------
64 
65 void LLDW_PAINTER_IMPL_drawThickFadedPoint(MICROUI_GraphicsContext* gc, jint x, jint y, jint thickness, jint fade) {
66  if (LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&LLDW_PAINTER_IMPL_drawThickFadedPoint)) {
67  LOG_DRAW_START(drawThickFadedPoint);
68  LLUI_DISPLAY_setDrawingStatus(DW_DRAWING_drawThickFadedPoint(gc, x, y, thickness, fade));
69  LOG_DRAW_END(drawThickFadedPoint);
70  }
71 }
72 
73 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) {
74  if (LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&LLDW_PAINTER_IMPL_drawThickFadedLine)) {
75  LOG_DRAW_START(drawThickFadedLine);
76  LLUI_DISPLAY_setDrawingStatus(DW_DRAWING_drawThickFadedLine(gc, startX, startY, endX, endY, thickness, fade, startCap, endCap));
77  LOG_DRAW_END(drawThickFadedLine);
78  }
79 }
80 
81 void LLDW_PAINTER_IMPL_drawThickFadedCircle(MICROUI_GraphicsContext* gc, jint x, jint y, jint diameter, jint thickness, jint fade) {
82  if ((diameter > 0) && LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&LLDW_PAINTER_IMPL_drawThickFadedCircle)) {
83  LOG_DRAW_START(drawThickFadedCircle);
84  LLUI_DISPLAY_setDrawingStatus(DW_DRAWING_drawThickFadedCircle(gc, x, y, diameter, thickness, fade));
85  LOG_DRAW_END(drawThickFadedCircle);
86  }
87 }
88 
89 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) {
90  if ((diameter > 0) && (int32_t)arcAngle != 0 && LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&LLDW_PAINTER_IMPL_drawThickFadedCircleArc)) {
91  LOG_DRAW_START(drawThickFadedCircleArc);
92  LLUI_DISPLAY_setDrawingStatus(DW_DRAWING_drawThickFadedCircleArc(gc, x, y, diameter, startAngle, arcAngle, thickness, fade, start, end));
93  LOG_DRAW_END(drawThickFadedCircleArc);
94  }
95 }
96 
97 void LLDW_PAINTER_IMPL_drawThickFadedEllipse(MICROUI_GraphicsContext* gc, jint x, jint y, jint width, jint height, jint thickness, jint fade) {
98  if ((width > 0) && (height > 0) && LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&LLDW_PAINTER_IMPL_drawThickFadedEllipse)) {
99  LOG_DRAW_START(drawThickFadedEllipse);
100  LLUI_DISPLAY_setDrawingStatus(DW_DRAWING_drawThickFadedEllipse(gc, x, y, width, height, thickness, fade));
101  LOG_DRAW_END(drawThickFadedEllipse);
102  }
103 }
104 
105 void LLDW_PAINTER_IMPL_drawThickLine(MICROUI_GraphicsContext* gc, jint startX, jint startY, jint endX, jint endY, jint thickness) {
106  if (LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&LLDW_PAINTER_IMPL_drawThickLine)) {
107  LOG_DRAW_START(drawThickLine);
108  LLUI_DISPLAY_setDrawingStatus(DW_DRAWING_drawThickLine(gc, startX, startY, endX, endY, thickness));
109  LOG_DRAW_END(drawThickLine);
110  }
111 }
112 
113 void LLDW_PAINTER_IMPL_drawThickCircle(MICROUI_GraphicsContext* gc, jint x, jint y, jint diameter, jint thickness) {
114  if ((diameter > 0) && LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&LLDW_PAINTER_IMPL_drawThickCircle)) {
115  LOG_DRAW_START(drawThickCircle);
116  LLUI_DISPLAY_setDrawingStatus(DW_DRAWING_drawThickCircle(gc, x, y, diameter, thickness));
117  LOG_DRAW_END(drawThickCircle);
118  }
119 }
120 
121 void LLDW_PAINTER_IMPL_drawThickEllipse(MICROUI_GraphicsContext* gc, jint x, jint y, jint width, jint height, jint thickness) {
122  if ((width > 0) && (height > 0) && LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&LLDW_PAINTER_IMPL_drawThickEllipse)) {
123  LOG_DRAW_START(drawThickEllipse);
124  LLUI_DISPLAY_setDrawingStatus(DW_DRAWING_drawThickEllipse(gc, x, y, width, height, thickness));
125  LOG_DRAW_END(drawThickEllipse);
126  }
127 }
128 
129 void LLDW_PAINTER_IMPL_drawThickCircleArc(MICROUI_GraphicsContext* gc, jint x, jint y, jint diameter, jfloat startAngle, jfloat arcAngle, jint thickness) {
130  if ((diameter > 0) && ((int32_t)arcAngle != 0) && LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&LLDW_PAINTER_IMPL_drawThickCircleArc)) {
131  LOG_DRAW_START(drawThickCircleArc);
132  LLUI_DISPLAY_setDrawingStatus(DW_DRAWING_drawThickCircleArc(gc, x, y, diameter, startAngle, arcAngle, thickness));
133  LOG_DRAW_END(drawThickCircleArc);
134  }
135 }
136 
137 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) {
138  if (!LLUI_DISPLAY_isClosed(img) && (alpha > 0) && LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&LLDW_PAINTER_IMPL_drawFlippedImage)) {
139  LOG_DRAW_START(drawFlippedImage);
140  LLUI_DISPLAY_setDrawingStatus(DW_DRAWING_drawFlippedImage(gc, img, regionX, regionY, width, height, x, y, transformation, alpha));
141  LOG_DRAW_END(drawFlippedImage);
142  }
143 }
144 
145 void LLDW_PAINTER_IMPL_drawRotatedImageNearestNeighbor(MICROUI_GraphicsContext* gc, MICROUI_Image* img, jint x, jint y, jint rotationX, jint rotationY, jfloat angle, jint alpha) {
146  if (!LLUI_DISPLAY_isClosed(img) && (alpha > 0) && LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&LLDW_PAINTER_IMPL_drawRotatedImageNearestNeighbor)) {
147  LOG_DRAW_START(drawRotatedImageNearestNeighbor);
148  LLUI_DISPLAY_setDrawingStatus(DW_DRAWING_drawRotatedImageNearestNeighbor(gc, img, x, y, rotationX, rotationY, angle, alpha));
149  LOG_DRAW_END(drawRotatedImageNearestNeighbor);
150  }
151 }
152 
153 void LLDW_PAINTER_IMPL_drawRotatedImageBilinear(MICROUI_GraphicsContext* gc, MICROUI_Image* img, jint x, jint y, jint rotationX, jint rotationY, jfloat angle, jint alpha) {
154  if (!LLUI_DISPLAY_isClosed(img) && (alpha > 0) && LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&LLDW_PAINTER_IMPL_drawRotatedImageBilinear)) {
155  LOG_DRAW_START(drawRotatedImageBilinear);
156  LLUI_DISPLAY_setDrawingStatus(DW_DRAWING_drawRotatedImageBilinear(gc, img, x, y, rotationX, rotationY, angle, alpha));
157  LOG_DRAW_END(drawRotatedImageBilinear);
158  }
159 }
160 
161 void LLDW_PAINTER_IMPL_drawScaledImageNearestNeighbor(MICROUI_GraphicsContext* gc, MICROUI_Image* img, jint x, jint y, jfloat factorX, jfloat factorY, jint alpha) {
162  if (!LLUI_DISPLAY_isClosed(img) && (alpha > 0) && (factorX > 0.f) && (factorY > 0.f) && LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&LLDW_PAINTER_IMPL_drawScaledImageNearestNeighbor)) {
163  LOG_DRAW_START(drawScaledImageNearestNeighbor);
164  LLUI_DISPLAY_setDrawingStatus(DW_DRAWING_drawScaledImageNearestNeighbor(gc, img, x, y, factorX, factorY, alpha));
165  LOG_DRAW_END(drawScaledImageNearestNeighbor);
166  }
167 }
168 
169 void LLDW_PAINTER_IMPL_drawScaledImageBilinear(MICROUI_GraphicsContext* gc, MICROUI_Image* img, jint x, jint y, jfloat factorX, jfloat factorY, jint alpha) {
170  if (!LLUI_DISPLAY_isClosed(img) && (alpha > 0) && (factorX > 0.f) && (factorY > 0.f) && LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&LLDW_PAINTER_IMPL_drawScaledImageBilinear)) {
171  LOG_DRAW_START(drawScaledImageBilinear);
172  LLUI_DISPLAY_setDrawingStatus(DW_DRAWING_drawScaledImageBilinear(gc, img, x, y, factorX, factorY, alpha));
173  LOG_DRAW_END(drawScaledImageBilinear);
174  }
175 }
176 
177 // --------------------------------------------------------------------------------
178 // EOF
179 // --------------------------------------------------------------------------------
180 
181 #ifdef __cplusplus
182 }
183 #endif