23 #if defined(VG_FEATURE_PATH) && defined(VG_FEATURE_PATH_SINGLE_ARRAY) && \
24 (VG_FEATURE_PATH == VG_FEATURE_PATH_SINGLE_ARRAY)
33 #include <LLVG_PATH_impl.h>
50 static int32_t _extend_path(
VG_PATH_HEADER_t *path, jint length, jint cmd, uint32_t nb_fields) {
51 uint32_t index = VG_PATH_get_path_header_size() + path->data_size;
52 uint32_t extra_size = VG_PATH_get_path_command_size(cmd, nb_fields);
55 if (length >= (index + extra_size)) {
56 path->data_size += extra_size;
69 static int32_t _close_path(
VG_PATH_HEADER_t *path, jint length, jfloat x1, jfloat y1, jfloat x2, jfloat y2) {
70 int32_t index = _extend_path(path, length, LLVG_PATH_CMD_CLOSE, 0);
71 int32_t ret = LLVG_SUCCESS;
74 path->bounds_xmin = x1;
75 path->bounds_xmax = x2;
76 path->bounds_ymin = y1;
77 path->bounds_ymax = y2;
78 (void)VG_PATH_append_path_command0((jbyte *)path, (uint32_t)index, LLVG_PATH_CMD_CLOSE);
91 BSP_DECLARE_WEAK_FCNT
void VG_PATH_initialize(
void) {
96 BSP_DECLARE_WEAK_FCNT uint32_t VG_PATH_get_path_header_size(
void) {
101 BSP_DECLARE_WEAK_FCNT uint32_t VG_PATH_get_path_command_size(jint command, uint32_t nbParams) {
103 return (nbParams + (uint32_t)1 ) *
sizeof(uint32_t);
107 BSP_DECLARE_WEAK_FCNT uint32_t VG_PATH_append_path_command0(jbyte *path, jint offset, jint cmd) {
108 uint32_t *data = (uint32_t *)(path + offset);
109 *data = VG_PATH_convert_path_command(cmd);
110 return sizeof(uint32_t);
114 BSP_DECLARE_WEAK_FCNT uint32_t VG_PATH_append_path_command1(jbyte *path, jint offset, jint cmd, jfloat x, jfloat y) {
115 uint32_t *data = (uint32_t *)(path + offset);
116 *data = VG_PATH_convert_path_command(cmd);
118 *data = JFLOAT_TO_UINT32_t(x);
120 *data = JFLOAT_TO_UINT32_t(y);
121 return (uint32_t)3 *
sizeof(uint32_t);
125 BSP_DECLARE_WEAK_FCNT uint32_t VG_PATH_append_path_command2(jbyte *path, jint offset, jint cmd, jfloat x1, jfloat y1,
126 jfloat x2, jfloat y2) {
127 uint32_t *data = (uint32_t *)(path + offset);
128 *data = VG_PATH_convert_path_command(cmd);
130 *data = JFLOAT_TO_UINT32_t(x1);
132 *data = JFLOAT_TO_UINT32_t(y1);
134 *data = JFLOAT_TO_UINT32_t(x2);
136 *data = JFLOAT_TO_UINT32_t(y2);
137 return (uint32_t)5 *
sizeof(uint32_t);
141 BSP_DECLARE_WEAK_FCNT uint32_t VG_PATH_append_path_command3(jbyte *path, jint offset, jint cmd, jfloat x1, jfloat y1,
142 jfloat x2, jfloat y2,
143 jfloat x3, jfloat y3) {
144 uint32_t *data = (uint32_t *)(path + offset);
145 *data = VG_PATH_convert_path_command(cmd);
147 *data = JFLOAT_TO_UINT32_t(x1);
149 *data = JFLOAT_TO_UINT32_t(y1);
151 *data = JFLOAT_TO_UINT32_t(x2);
153 *data = JFLOAT_TO_UINT32_t(y2);
155 *data = JFLOAT_TO_UINT32_t(x3);
157 *data = JFLOAT_TO_UINT32_t(y3);
158 return (uint32_t)7 *
sizeof(uint32_t);
166 jint LLVG_PATH_IMPL_initializePath(jbyte *jpath, jint length) {
168 uint32_t header_size = VG_PATH_get_path_header_size();
169 jint ret = LLVG_SUCCESS;
171 if (length >= header_size) {
173 path->format = VG_PATH_get_path_encoder_format();
183 jint LLVG_PATH_IMPL_appendPathCommand1(jbyte *jpath, jint length, jint cmd, jfloat x, jfloat y) {
185 jint ret = LLVG_SUCCESS;
187 int32_t index = _extend_path(path, length, cmd, 2);
189 (void)VG_PATH_append_path_command1((jbyte *)path, (uint32_t)index, cmd, x, y);
199 jint LLVG_PATH_IMPL_appendPathCommand2(jbyte *jpath, jint length, jint cmd, jfloat x1, jfloat y1, jfloat x2,
202 jint ret = LLVG_SUCCESS;
204 if (LLVG_PATH_CMD_CLOSE == cmd) {
206 ret = _close_path(path, length, x1, y1, x2, y2);
208 int32_t index = _extend_path(path, length, cmd, 4);
210 (void)VG_PATH_append_path_command2((jbyte *)path, (uint32_t)index, cmd, x1, y1, x2, y2);
221 jint LLVG_PATH_IMPL_appendPathCommand3(jbyte *jpath, jint length, jint cmd, jfloat x1, jfloat y1, jfloat x2,
222 jfloat y2, jfloat x3, jfloat y3) {
224 jint ret = LLVG_SUCCESS;
226 int32_t index = _extend_path(path, length, cmd, 6);
228 (void)VG_PATH_append_path_command3((jbyte *)path, (uint32_t)index, cmd, x1, y1, x2, y2, x3, y3);
238 void LLVG_PATH_IMPL_reopenPath(jbyte *jpath) {
240 path->data_size -= VG_PATH_get_path_command_size(LLVG_PATH_CMD_CLOSE, 0);
MicroEJ MicroVG library low level API: enable some features according to the hardware capacities.
MicroEJ MicroVG library low level API: helper to implement library natives methods.
MicroEJ MicroVG library low level API: implementation of Path.