microui  1.1.1
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 1.1.1
13  * @date 27 April 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 #define DRAWING_PAINTER_NATIVE_NAME(fn) (CONCAT_DEFINES(DRAWING_PAINTER_NATIVE_PREFIX, fn))
43 
44 /*
45  * LOG_DRAW_EVENT logs identifiers
46  */
47 #define LOG_DRAW_drawThickFadedPoint 100
48 #define LOG_DRAW_drawThickFadedLine 101
49 #define LOG_DRAW_drawThickFadedCircle 102
50 #define LOG_DRAW_drawThickFadedCircleArc 103
51 #define LOG_DRAW_drawThickFadedEllipse 104
52 #define LOG_DRAW_drawThickLine 105
53 #define LOG_DRAW_drawThickCircle 106
54 #define LOG_DRAW_drawThickEllipse 107
55 #define LOG_DRAW_drawThickCircleArc 108
56 
57 #define LOG_DRAW_drawFlippedImage 200
58 #define LOG_DRAW_drawRotatedImageNearestNeighbor 201
59 #define LOG_DRAW_drawRotatedImageBilinear 202
60 #define LOG_DRAW_drawScaledImageNearestNeighbor 203
61 #define LOG_DRAW_drawScaledImageBilinear 204
62 
63 // --------------------------------------------------------------------------------
64 // LLDW_PAINTER_impl.h functions
65 // --------------------------------------------------------------------------------
66 
67 void DRAWING_PAINTER_NATIVE(drawThickFadedPoint, MICROUI_GraphicsContext* gc, jint x, jint y, jint thickness, jint fade) {
68  if (LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&DRAWING_PAINTER_NATIVE_NAME(drawThickFadedPoint))) {
69  LOG_DRAW_START(drawThickFadedPoint);
70  LLUI_DISPLAY_setDrawingStatus(DW_DRAWING_drawThickFadedPoint(gc, x, y, thickness, fade));
71  LOG_DRAW_END(drawThickFadedPoint);
72  }
73 }
74 
75 void DRAWING_PAINTER_NATIVE(drawThickFadedLine, MICROUI_GraphicsContext* gc, jint startX, jint startY, jint endX, jint endY, jint thickness, jint fade, DRAWING_Cap startCap, DRAWING_Cap endCap) {
76  if (LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&DRAWING_PAINTER_NATIVE_NAME(drawThickFadedLine))) {
77  LOG_DRAW_START(drawThickFadedLine);
78  LLUI_DISPLAY_setDrawingStatus(DW_DRAWING_drawThickFadedLine(gc, startX, startY, endX, endY, thickness, fade, startCap, endCap));
79  LOG_DRAW_END(drawThickFadedLine);
80  }
81 }
82 
83 void DRAWING_PAINTER_NATIVE(drawThickFadedCircle, MICROUI_GraphicsContext* gc, jint x, jint y, jint diameter, jint thickness, jint fade) {
84  if ((diameter > 0) && LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&DRAWING_PAINTER_NATIVE_NAME(drawThickFadedCircle))) {
85  LOG_DRAW_START(drawThickFadedCircle);
86  LLUI_DISPLAY_setDrawingStatus(DW_DRAWING_drawThickFadedCircle(gc, x, y, diameter, thickness, fade));
87  LOG_DRAW_END(drawThickFadedCircle);
88  }
89 }
90 
91 void DRAWING_PAINTER_NATIVE(drawThickFadedCircleArc, MICROUI_GraphicsContext* gc, jint x, jint y, jint diameter, jfloat startAngle, jfloat arcAngle, jint thickness, jint fade, DRAWING_Cap start, DRAWING_Cap end) {
92  if ((diameter > 0) && (int32_t)arcAngle != 0 && LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&DRAWING_PAINTER_NATIVE_NAME(drawThickFadedCircleArc))) {
93  LOG_DRAW_START(drawThickFadedCircleArc);
94  LLUI_DISPLAY_setDrawingStatus(DW_DRAWING_drawThickFadedCircleArc(gc, x, y, diameter, startAngle, arcAngle, thickness, fade, start, end));
95  LOG_DRAW_END(drawThickFadedCircleArc);
96  }
97 }
98 
99 void DRAWING_PAINTER_NATIVE(drawThickFadedEllipse, MICROUI_GraphicsContext* gc, jint x, jint y, jint width, jint height, jint thickness, jint fade) {
100  if ((width > 0) && (height > 0) && LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&DRAWING_PAINTER_NATIVE_NAME(drawThickFadedEllipse))) {
101  LOG_DRAW_START(drawThickFadedEllipse);
102  LLUI_DISPLAY_setDrawingStatus(DW_DRAWING_drawThickFadedEllipse(gc, x, y, width, height, thickness, fade));
103  LOG_DRAW_END(drawThickFadedEllipse);
104  }
105 }
106 
107 void DRAWING_PAINTER_NATIVE(drawThickLine, MICROUI_GraphicsContext* gc, jint startX, jint startY, jint endX, jint endY, jint thickness) {
108  if (LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&DRAWING_PAINTER_NATIVE_NAME(drawThickLine))) {
109  LOG_DRAW_START(drawThickLine);
110  LLUI_DISPLAY_setDrawingStatus(DW_DRAWING_drawThickLine(gc, startX, startY, endX, endY, thickness));
111  LOG_DRAW_END(drawThickLine);
112  }
113 }
114 
115 void DRAWING_PAINTER_NATIVE(drawThickCircle, MICROUI_GraphicsContext* gc, jint x, jint y, jint diameter, jint thickness) {
116  if ((diameter > 0) && LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&DRAWING_PAINTER_NATIVE_NAME(drawThickCircle))) {
117  LOG_DRAW_START(drawThickCircle);
118  LLUI_DISPLAY_setDrawingStatus(DW_DRAWING_drawThickCircle(gc, x, y, diameter, thickness));
119  LOG_DRAW_END(drawThickCircle);
120  }
121 }
122 
123 void DRAWING_PAINTER_NATIVE(drawThickEllipse, MICROUI_GraphicsContext* gc, jint x, jint y, jint width, jint height, jint thickness) {
124  if ((width > 0) && (height > 0) && LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&DRAWING_PAINTER_NATIVE_NAME(drawThickEllipse))) {
125  LOG_DRAW_START(drawThickEllipse);
126  LLUI_DISPLAY_setDrawingStatus(DW_DRAWING_drawThickEllipse(gc, x, y, width, height, thickness));
127  LOG_DRAW_END(drawThickEllipse);
128  }
129 }
130 
131 void DRAWING_PAINTER_NATIVE(drawThickCircleArc, MICROUI_GraphicsContext* gc, jint x, jint y, jint diameter, jfloat startAngle, jfloat arcAngle, jint thickness) {
132  if ((diameter > 0) && ((int32_t)arcAngle != 0) && LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&DRAWING_PAINTER_NATIVE_NAME(drawThickCircleArc))) {
133  LOG_DRAW_START(drawThickCircleArc);
134  LLUI_DISPLAY_setDrawingStatus(DW_DRAWING_drawThickCircleArc(gc, x, y, diameter, startAngle, arcAngle, thickness));
135  LOG_DRAW_END(drawThickCircleArc);
136  }
137 }
138 
139 void DRAWING_PAINTER_NATIVE(drawFlippedImage, MICROUI_GraphicsContext* gc, MICROUI_Image* img, jint regionX, jint regionY, jint width, jint height, jint x, jint y, DRAWING_Flip transformation, jint alpha) {
140  if (!LLUI_DISPLAY_isClosed(img) && (alpha > 0) && LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&DRAWING_PAINTER_NATIVE_NAME(drawFlippedImage))) {
141  LOG_DRAW_START(drawFlippedImage);
142  LLUI_DISPLAY_setDrawingStatus(DW_DRAWING_drawFlippedImage(gc, img, regionX, regionY, width, height, x, y, transformation, alpha));
143  LOG_DRAW_END(drawFlippedImage);
144  }
145 }
146 
147 void DRAWING_PAINTER_NATIVE(drawRotatedImageNearestNeighbor, MICROUI_GraphicsContext* gc, MICROUI_Image* img, jint x, jint y, jint rotationX, jint rotationY, jfloat angle, jint alpha) {
148  if (!LLUI_DISPLAY_isClosed(img) && (alpha > 0) && LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&DRAWING_PAINTER_NATIVE_NAME(drawRotatedImageNearestNeighbor))) {
149  LOG_DRAW_START(drawRotatedImageNearestNeighbor);
150  LLUI_DISPLAY_setDrawingStatus(DW_DRAWING_drawRotatedImageNearestNeighbor(gc, img, x, y, rotationX, rotationY, angle, alpha));
151  LOG_DRAW_END(drawRotatedImageNearestNeighbor);
152  }
153 }
154 
155 void DRAWING_PAINTER_NATIVE(drawRotatedImageBilinear, MICROUI_GraphicsContext* gc, MICROUI_Image* img, jint x, jint y, jint rotationX, jint rotationY, jfloat angle, jint alpha) {
156  if (!LLUI_DISPLAY_isClosed(img) && (alpha > 0) && LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&DRAWING_PAINTER_NATIVE_NAME(drawRotatedImageBilinear))) {
157  LOG_DRAW_START(drawRotatedImageBilinear);
158  LLUI_DISPLAY_setDrawingStatus(DW_DRAWING_drawRotatedImageBilinear(gc, img, x, y, rotationX, rotationY, angle, alpha));
159  LOG_DRAW_END(drawRotatedImageBilinear);
160  }
161 }
162 
163 void DRAWING_PAINTER_NATIVE(drawScaledImageNearestNeighbor, MICROUI_GraphicsContext* gc, MICROUI_Image* img, jint x, jint y, jfloat factorX, jfloat factorY, jint alpha) {
164  if (!LLUI_DISPLAY_isClosed(img) && (alpha > 0) && (factorX > 0.f) && (factorY > 0.f) && LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&DRAWING_PAINTER_NATIVE_NAME(drawScaledImageNearestNeighbor))) {
165  LOG_DRAW_START(drawScaledImageNearestNeighbor);
166  LLUI_DISPLAY_setDrawingStatus(DW_DRAWING_drawScaledImageNearestNeighbor(gc, img, x, y, factorX, factorY, alpha));
167  LOG_DRAW_END(drawScaledImageNearestNeighbor);
168  }
169 }
170 
171 void DRAWING_PAINTER_NATIVE(drawScaledImageBilinear, MICROUI_GraphicsContext* gc, MICROUI_Image* img, jint x, jint y, jfloat factorX, jfloat factorY, jint alpha) {
172  if (!LLUI_DISPLAY_isClosed(img) && (alpha > 0) && (factorX > 0.f) && (factorY > 0.f) && LLUI_DISPLAY_requestDrawing(gc, (SNI_callback)&DRAWING_PAINTER_NATIVE_NAME(drawScaledImageBilinear))) {
173  LOG_DRAW_START(drawScaledImageBilinear);
174  LLUI_DISPLAY_setDrawingStatus(DW_DRAWING_drawScaledImageBilinear(gc, img, x, y, factorX, factorY, alpha));
175  LOG_DRAW_END(drawScaledImageBilinear);
176  }
177 }
178 
179 // --------------------------------------------------------------------------------
180 // EOF
181 // --------------------------------------------------------------------------------
182 
183 #ifdef __cplusplus
184 }
185 #endif