23 #ifdef VG_FEATURE_PATH
32 #include <LLVG_PATH_impl.h>
50 uint32_t index = MICROVG_PATH_get_path_header_size() + path->data_size;
51 uint32_t extra_size = MICROVG_PATH_get_path_command_size(cmd, nb_fields);
54 if (length >= (index + extra_size)) {
55 path->data_size += extra_size;
69 static int32_t _close_path(
MICROVG_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)MICROVG_PATH_append_path_command0((jbyte*)path, (uint32_t)index, LLVG_PATH_CMD_CLOSE);
92 BSP_DECLARE_WEAK_FCNT
void MICROVG_PATH_initialize(
void) {
97 BSP_DECLARE_WEAK_FCNT uint32_t MICROVG_PATH_get_path_header_size(
void) {
102 BSP_DECLARE_WEAK_FCNT uint32_t MICROVG_PATH_get_path_command_size(jint command, uint32_t nbParams) {
104 return (nbParams + (uint32_t)1 ) *
sizeof(uint32_t);
108 BSP_DECLARE_WEAK_FCNT uint32_t MICROVG_PATH_append_path_command0(jbyte* path, uint32_t offset, jint cmd) {
109 uint32_t* data = (uint32_t*)(path + offset);
110 *data = MICROVG_PATH_convert_path_command(cmd);
111 return sizeof(uint32_t);
115 BSP_DECLARE_WEAK_FCNT uint32_t MICROVG_PATH_append_path_command1(jbyte* path, uint32_t offset, jint cmd, jfloat x, jfloat y) {
116 uint32_t* data = (uint32_t*)(path + offset);
117 *data = MICROVG_PATH_convert_path_command(cmd);
119 *data = JFLOAT_TO_UINT32_t(x);
121 *data = JFLOAT_TO_UINT32_t(y);
122 return (uint32_t)3 *
sizeof(uint32_t);
126 BSP_DECLARE_WEAK_FCNT uint32_t MICROVG_PATH_append_path_command2(jbyte* path, uint32_t offset, jint cmd, jfloat x1, jfloat y1, jfloat x2, jfloat y2) {
127 uint32_t* data = (uint32_t*)(path + offset);
128 *data = MICROVG_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 MICROVG_PATH_append_path_command3(jbyte* path, uint32_t offset, jint cmd, jfloat x1, jfloat y1, jfloat x2, jfloat y2,
142 jfloat x3, jfloat y3) {
143 uint32_t* data = (uint32_t*)(path + offset);
144 *data = MICROVG_PATH_convert_path_command(cmd);
146 *data = JFLOAT_TO_UINT32_t(x1);
148 *data = JFLOAT_TO_UINT32_t(y1);
150 *data = JFLOAT_TO_UINT32_t(x2);
152 *data = JFLOAT_TO_UINT32_t(y2);
154 *data = JFLOAT_TO_UINT32_t(x3);
156 *data = JFLOAT_TO_UINT32_t(y3);
157 return (uint32_t)7 *
sizeof(uint32_t);
165 jint LLVG_PATH_IMPL_initializePath(jbyte* jpath, jint length) {
168 uint32_t header_size = MICROVG_PATH_get_path_header_size();
169 jint ret = LLVG_SUCCESS;
171 if (length >= header_size) {
173 path->format = MICROVG_PATH_get_path_encoder_format();
184 jint LLVG_PATH_IMPL_appendPathCommand1(jbyte* jpath, jint length, jint cmd, jfloat x, jfloat y) {
187 jint ret = LLVG_SUCCESS;
189 int32_t index = _extend_path(path, length, cmd, 2);
191 (void)MICROVG_PATH_append_path_command1((jbyte*)path, (uint32_t)index, cmd, x, y);
202 jint LLVG_PATH_IMPL_appendPathCommand2(jbyte* jpath, jint length, jint cmd, jfloat x1, jfloat y1, jfloat x2,
206 jint ret = LLVG_SUCCESS;
208 if (LLVG_PATH_CMD_CLOSE == cmd) {
210 ret = _close_path(path, length, x1, y1, x2, y2);
213 int32_t index = _extend_path(path, length, cmd, 4);
215 (void)MICROVG_PATH_append_path_command2((jbyte*)path, (uint32_t)index, cmd, x1, y1, x2, y2);
227 jint LLVG_PATH_IMPL_appendPathCommand3(jbyte* jpath, jint length, jint cmd, jfloat x1, jfloat y1, jfloat x2,
228 jfloat y2, jfloat x3, jfloat y3) {
231 jint ret = LLVG_SUCCESS;
233 int32_t index = _extend_path(path, length, cmd, 6);
235 (void)MICROVG_PATH_append_path_command3((jbyte*)path, (uint32_t)index, cmd, x1, y1, x2, y2, x3, y3);
246 void LLVG_PATH_IMPL_reopenPath(jbyte* jpath) {
248 path->data_size -= MICROVG_PATH_get_path_command_size(LLVG_PATH_CMD_CLOSE, 0);
255 #endif // VG_FEATURE_PATH
MicroEJ MicroVG library low level API: helper to implement library natives methods.
MicroEJ MicroVG library low level API: implementation of Path.
MicroEJ MicroVG library low level API: enable some features according to the hardware capacities...