acid-drop- Hacking the planet from a LilyGo T-Deck using custom firmware |
git clone git://git.acid.vegas/acid-drop.git |
Log | Files | Refs | Archive | README | LICENSE |
lv_obj_pos.h (17872B)
1 /** 2 * @file lv_obj_pos.h 3 * 4 */ 5 6 #ifndef LV_OBJ_POS_H 7 #define LV_OBJ_POS_H 8 9 #ifdef __cplusplus 10 extern "C" { 11 #endif 12 13 /********************* 14 * INCLUDES 15 *********************/ 16 #include "../misc/lv_area.h" 17 18 /********************* 19 * DEFINES 20 *********************/ 21 22 /********************** 23 * TYPEDEFS 24 **********************/ 25 struct _lv_obj_t; 26 27 typedef void (*lv_layout_update_cb_t)(struct _lv_obj_t *, void * user_data); 28 typedef struct { 29 lv_layout_update_cb_t cb; 30 void * user_data; 31 } lv_layout_dsc_t; 32 33 /********************** 34 * GLOBAL PROTOTYPES 35 **********************/ 36 37 /** 38 * Set the position of an object relative to the set alignment. 39 * @param obj pointer to an object 40 * @param x new x coordinate 41 * @param y new y coordinate 42 * @note With default alignment it's the distance from the top left corner 43 * @note E.g. LV_ALIGN_CENTER alignment it's the offset from the center of the parent 44 * @note The position is interpreted on the content area of the parent 45 * @note The values can be set in pixel or in percentage of parent size with `lv_pct(v)` 46 */ 47 void lv_obj_set_pos(struct _lv_obj_t * obj, lv_coord_t x, lv_coord_t y); 48 49 /** 50 * Set the x coordinate of an object 51 * @param obj pointer to an object 52 * @param x new x coordinate 53 * @note With default alignment it's the distance from the top left corner 54 * @note E.g. LV_ALIGN_CENTER alignment it's the offset from the center of the parent 55 * @note The position is interpreted on the content area of the parent 56 * @note The values can be set in pixel or in percentage of parent size with `lv_pct(v)` 57 */ 58 void lv_obj_set_x(struct _lv_obj_t * obj, lv_coord_t x); 59 60 /** 61 * Set the y coordinate of an object 62 * @param obj pointer to an object 63 * @param y new y coordinate 64 * @note With default alignment it's the distance from the top left corner 65 * @note E.g. LV_ALIGN_CENTER alignment it's the offset from the center of the parent 66 * @note The position is interpreted on the content area of the parent 67 * @note The values can be set in pixel or in percentage of parent size with `lv_pct(v)` 68 */ 69 void lv_obj_set_y(struct _lv_obj_t * obj, lv_coord_t y); 70 71 /** 72 * Set the size of an object. 73 * @param obj pointer to an object 74 * @param w the new width 75 * @param h the new height 76 * @note possible values are: 77 * pixel simple set the size accordingly 78 * LV_SIZE_CONTENT set the size to involve all children in the given direction 79 * LV_SIZE_PCT(x) to set size in percentage of the parent's content area size (the size without paddings). 80 * x should be in [0..1000]% range 81 */ 82 void lv_obj_set_size(struct _lv_obj_t * obj, lv_coord_t w, lv_coord_t h); 83 84 /** 85 * Recalculate the size of the object 86 * @param obj pointer to an object 87 * @return true: the size has been changed 88 */ 89 bool lv_obj_refr_size(struct _lv_obj_t * obj); 90 91 /** 92 * Set the width of an object 93 * @param obj pointer to an object 94 * @param w the new width 95 * @note possible values are: 96 * pixel simple set the size accordingly 97 * LV_SIZE_CONTENT set the size to involve all children in the given direction 98 * lv_pct(x) to set size in percentage of the parent's content area size (the size without paddings). 99 * x should be in [0..1000]% range 100 */ 101 void lv_obj_set_width(struct _lv_obj_t * obj, lv_coord_t w); 102 103 /** 104 * Set the height of an object 105 * @param obj pointer to an object 106 * @param h the new height 107 * @note possible values are: 108 * pixel simple set the size accordingly 109 * LV_SIZE_CONTENT set the size to involve all children in the given direction 110 * lv_pct(x) to set size in percentage of the parent's content area size (the size without paddings). 111 * x should be in [0..1000]% range 112 */ 113 void lv_obj_set_height(struct _lv_obj_t * obj, lv_coord_t h); 114 115 /** 116 * Set the width reduced by the left and right padding and the border width. 117 * @param obj pointer to an object 118 * @param w the width without paddings in pixels 119 */ 120 void lv_obj_set_content_width(struct _lv_obj_t * obj, lv_coord_t w); 121 122 /** 123 * Set the height reduced by the top and bottom padding and the border width. 124 * @param obj pointer to an object 125 * @param h the height without paddings in pixels 126 */ 127 void lv_obj_set_content_height(struct _lv_obj_t * obj, lv_coord_t h); 128 129 /** 130 * Set a layout for an object 131 * @param obj pointer to an object 132 * @param layout pointer to a layout descriptor to set 133 */ 134 void lv_obj_set_layout(struct _lv_obj_t * obj, uint32_t layout); 135 136 /** 137 * Test whether the and object is positioned by a layout or not 138 * @param obj pointer to an object to test 139 * @return true: positioned by a layout; false: not positioned by a layout 140 */ 141 bool lv_obj_is_layout_positioned(const struct _lv_obj_t * obj); 142 143 /** 144 * Mark the object for layout update. 145 * @param obj pointer to an object whose children needs to be updated 146 */ 147 void lv_obj_mark_layout_as_dirty(struct _lv_obj_t * obj); 148 149 /** 150 * Update the layout of an object. 151 * @param obj pointer to an object whose children needs to be updated 152 */ 153 void lv_obj_update_layout(const struct _lv_obj_t * obj); 154 155 /** 156 * Register a new layout 157 * @param cb the layout update callback 158 * @param user_data custom data that will be passed to `cb` 159 * @return the ID of the new layout 160 */ 161 uint32_t lv_layout_register(lv_layout_update_cb_t cb, void * user_data); 162 163 /** 164 * Change the alignment of an object. 165 * @param obj pointer to an object to align 166 * @param align type of alignment (see 'lv_align_t' enum) `LV_ALIGN_OUT_...` can't be used. 167 */ 168 void lv_obj_set_align(struct _lv_obj_t * obj, lv_align_t align); 169 170 /** 171 * Change the alignment of an object and set new coordinates. 172 * Equivalent to: 173 * lv_obj_set_align(obj, align); 174 * lv_obj_set_pos(obj, x_ofs, y_ofs); 175 * @param obj pointer to an object to align 176 * @param align type of alignment (see 'lv_align_t' enum) `LV_ALIGN_OUT_...` can't be used. 177 * @param x_ofs x coordinate offset after alignment 178 * @param y_ofs y coordinate offset after alignment 179 */ 180 void lv_obj_align(struct _lv_obj_t * obj, lv_align_t align, lv_coord_t x_ofs, lv_coord_t y_ofs); 181 182 /** 183 * Align an object to an other object. 184 * @param obj pointer to an object to align 185 * @param base pointer to an other object (if NULL `obj`s parent is used). 'obj' will be aligned to it. 186 * @param align type of alignment (see 'lv_align_t' enum) 187 * @param x_ofs x coordinate offset after alignment 188 * @param y_ofs y coordinate offset after alignment 189 * @note if the position or size of `base` changes `obj` needs to be aligned manually again 190 */ 191 void lv_obj_align_to(struct _lv_obj_t * obj, const struct _lv_obj_t * base, lv_align_t align, lv_coord_t x_ofs, 192 lv_coord_t y_ofs); 193 194 /** 195 * Align an object to the center on its parent. 196 * @param obj pointer to an object to align 197 * @note if the parent size changes `obj` needs to be aligned manually again 198 */ 199 static inline void lv_obj_center(struct _lv_obj_t * obj) 200 { 201 lv_obj_align(obj, LV_ALIGN_CENTER, 0, 0); 202 } 203 204 205 /** 206 * Copy the coordinates of an object to an area 207 * @param obj pointer to an object 208 * @param coords pointer to an area to store the coordinates 209 */ 210 void lv_obj_get_coords(const struct _lv_obj_t * obj, lv_area_t * coords); 211 212 /** 213 * Get the x coordinate of object. 214 * @param obj pointer to an object 215 * @return distance of `obj` from the left side of its parent plus the parent's left padding 216 * @note The position of the object is recalculated only on the next redraw. To force coordinate recalculation 217 * call `lv_obj_update_layout(obj)`. 218 * @note Zero return value means the object is on the left padding of the parent, and not on the left edge. 219 * @note Scrolling of the parent doesn't change the returned value. 220 * @note The returned value is always the distance from the parent even if `obj` is positioned by a layout. 221 */ 222 lv_coord_t lv_obj_get_x(const struct _lv_obj_t * obj); 223 224 /** 225 * Get the x2 coordinate of object. 226 * @param obj pointer to an object 227 * @return distance of `obj` from the right side of its parent plus the parent's right padding 228 * @note The position of the object is recalculated only on the next redraw. To force coordinate recalculation 229 * call `lv_obj_update_layout(obj)`. 230 * @note Zero return value means the object is on the right padding of the parent, and not on the right edge. 231 * @note Scrolling of the parent doesn't change the returned value. 232 * @note The returned value is always the distance from the parent even if `obj` is positioned by a layout. 233 */ 234 lv_coord_t lv_obj_get_x2(const struct _lv_obj_t * obj); 235 236 /** 237 * Get the y coordinate of object. 238 * @param obj pointer to an object 239 * @return distance of `obj` from the top side of its parent plus the parent's top padding 240 * @note The position of the object is recalculated only on the next redraw. To force coordinate recalculation 241 * call `lv_obj_update_layout(obj)`. 242 * @note Zero return value means the object is on the top padding of the parent, and not on the top edge. 243 * @note Scrolling of the parent doesn't change the returned value. 244 * @note The returned value is always the distance from the parent even if `obj` is positioned by a layout. 245 */ 246 lv_coord_t lv_obj_get_y(const struct _lv_obj_t * obj); 247 248 /** 249 * Get the y2 coordinate of object. 250 * @param obj pointer to an object 251 * @return distance of `obj` from the bottom side of its parent plus the parent's bottom padding 252 * @note The position of the object is recalculated only on the next redraw. To force coordinate recalculation 253 * call `lv_obj_update_layout(obj)`. 254 * @note Zero return value means the object is on the bottom padding of the parent, and not on the bottom edge. 255 * @note Scrolling of the parent doesn't change the returned value. 256 * @note The returned value is always the distance from the parent even if `obj` is positioned by a layout. 257 */ 258 lv_coord_t lv_obj_get_y2(const struct _lv_obj_t * obj); 259 260 /** 261 * Get the actually set x coordinate of object, i.e. the offset form the set alignment 262 * @param obj pointer to an object 263 * @return the set x coordinate 264 */ 265 lv_coord_t lv_obj_get_x_aligned(const struct _lv_obj_t * obj); 266 267 /** 268 * Get the actually set y coordinate of object, i.e. the offset form the set alignment 269 * @param obj pointer to an object 270 * @return the set y coordinate 271 */ 272 lv_coord_t lv_obj_get_y_aligned(const struct _lv_obj_t * obj); 273 274 /** 275 * Get the width of an object 276 * @param obj pointer to an object 277 * @note The position of the object is recalculated only on the next redraw. To force coordinate recalculation 278 * call `lv_obj_update_layout(obj)`. 279 * @return the width in pixels 280 */ 281 lv_coord_t lv_obj_get_width(const struct _lv_obj_t * obj); 282 283 /** 284 * Get the height of an object 285 * @param obj pointer to an object 286 * @note The position of the object is recalculated only on the next redraw. To force coordinate recalculation 287 * call `lv_obj_update_layout(obj)`. 288 * @return the height in pixels 289 */ 290 lv_coord_t lv_obj_get_height(const struct _lv_obj_t * obj); 291 292 /** 293 * Get the width reduced by the left and right padding and the border width. 294 * @param obj pointer to an object 295 * @note The position of the object is recalculated only on the next redraw. To force coordinate recalculation 296 * call `lv_obj_update_layout(obj)`. 297 * @return the width which still fits into its parent without causing overflow (making the parent scrollable) 298 */ 299 lv_coord_t lv_obj_get_content_width(const struct _lv_obj_t * obj); 300 301 /** 302 * Get the height reduced by the top and bottom padding and the border width. 303 * @param obj pointer to an object 304 * @note The position of the object is recalculated only on the next redraw. To force coordinate recalculation 305 * call `lv_obj_update_layout(obj)`. 306 * @return the height which still fits into the parent without causing overflow (making the parent scrollable) 307 */ 308 lv_coord_t lv_obj_get_content_height(const struct _lv_obj_t * obj); 309 310 /** 311 * Get the area reduced by the paddings and the border width. 312 * @param obj pointer to an object 313 * @note The position of the object is recalculated only on the next redraw. To force coordinate recalculation 314 * call `lv_obj_update_layout(obj)`. 315 * @param area the area which still fits into the parent without causing overflow (making the parent scrollable) 316 */ 317 void lv_obj_get_content_coords(const struct _lv_obj_t * obj, lv_area_t * area); 318 319 /** 320 * Get the width occupied by the "parts" of the widget. E.g. the width of all columns of a table. 321 * @param obj pointer to an objects 322 * @return the width of the virtually drawn content 323 * @note This size independent from the real size of the widget. 324 * It just tells how large the internal ("virtual") content is. 325 */ 326 lv_coord_t lv_obj_get_self_width(const struct _lv_obj_t * obj); 327 328 /** 329 * Get the height occupied by the "parts" of the widget. E.g. the height of all rows of a table. 330 * @param obj pointer to an objects 331 * @return the width of the virtually drawn content 332 * @note This size independent from the real size of the widget. 333 * It just tells how large the internal ("virtual") content is. 334 */ 335 lv_coord_t lv_obj_get_self_height(const struct _lv_obj_t * obj); 336 337 /** 338 * Handle if the size of the internal ("virtual") content of an object has changed. 339 * @param obj pointer to an object 340 * @return false: nothing happened; true: refresh happened 341 */ 342 bool lv_obj_refresh_self_size(struct _lv_obj_t * obj); 343 344 void lv_obj_refr_pos(struct _lv_obj_t * obj); 345 346 void lv_obj_move_to(struct _lv_obj_t * obj, lv_coord_t x, lv_coord_t y); 347 348 349 void lv_obj_move_children_by(struct _lv_obj_t * obj, lv_coord_t x_diff, lv_coord_t y_diff, bool ignore_floating); 350 351 /** 352 * Mark an area of an object as invalid. 353 * The area will be truncated to the object's area and marked for redraw. 354 * @param obj pointer to an object 355 * @param area the area to redraw 356 */ 357 void lv_obj_invalidate_area(const struct _lv_obj_t * obj, const lv_area_t * area); 358 359 /** 360 * Mark the object as invalid to redrawn its area 361 * @param obj pointer to an object 362 */ 363 void lv_obj_invalidate(const struct _lv_obj_t * obj); 364 365 /** 366 * Tell whether an area of an object is visible (even partially) now or not 367 * @param obj pointer to an object 368 * @param area the are to check. The visible part of the area will be written back here. 369 * @return true visible; false not visible (hidden, out of parent, on other screen, etc) 370 */ 371 bool lv_obj_area_is_visible(const struct _lv_obj_t * obj, lv_area_t * area); 372 373 /** 374 * Tell whether an object is visible (even partially) now or not 375 * @param obj pointer to an object 376 * @return true: visible; false not visible (hidden, out of parent, on other screen, etc) 377 */ 378 bool lv_obj_is_visible(const struct _lv_obj_t * obj); 379 380 /** 381 * Set the size of an extended clickable area 382 * @param obj pointer to an object 383 * @param size extended clickable area in all 4 directions [px] 384 */ 385 void lv_obj_set_ext_click_area(struct _lv_obj_t * obj, lv_coord_t size); 386 387 /** 388 * Get the an area where to object can be clicked. 389 * It's the object's normal area plus the extended click area. 390 * @param obj pointer to an object 391 * @param area store the result area here 392 */ 393 void lv_obj_get_click_area(const struct _lv_obj_t * obj, lv_area_t * area); 394 395 /** 396 * Hit-test an object given a particular point in screen space. 397 * @param obj object to hit-test 398 * @param point screen-space point (absolute coordinate) 399 * @return true: if the object is considered under the point 400 */ 401 bool lv_obj_hit_test(struct _lv_obj_t * obj, const lv_point_t * point); 402 403 /** 404 * Clamp a width between min and max width. If the min/max width is in percentage value use the ref_width 405 * @param width width to clamp 406 * @param min_width the minimal width 407 * @param max_width the maximal width 408 * @param ref_width the reference width used when min/max width is in percentage 409 * @return the clamped width 410 */ 411 lv_coord_t lv_clamp_width(lv_coord_t width, lv_coord_t min_width, lv_coord_t max_width, lv_coord_t ref_width); 412 413 /** 414 * Clamp a height between min and max height. If the min/max height is in percentage value use the ref_height 415 * @param height height to clamp 416 * @param min_height the minimal height 417 * @param max_height the maximal height 418 * @param ref_height the reference height used when min/max height is in percentage 419 * @return the clamped height 420 */ 421 lv_coord_t lv_clamp_height(lv_coord_t height, lv_coord_t min_height, lv_coord_t max_height, lv_coord_t ref_height); 422 423 /********************** 424 * MACROS 425 **********************/ 426 427 #ifdef __cplusplus 428 } /*extern "C"*/ 429 #endif 430 431 #endif /*LV_OBJ_POS_H*/