「App:Library:LVGL:docs:Overview:Input devices」の版間の差分

提供: robot-jp wiki
ナビゲーションに移動検索に移動
65行目: 65行目:
 
Note that, gestures are not triggered if an object is being scrolled.
 
Note that, gestures are not triggered if an object is being scrolled.
  
 +
 +
 +
== Keypad and encoder ==
 +
You can fully control the user interface without a touchpad or mouse by using a keypad or encoder(s). It works similar to the ''TAB'' key on the PC to select an element in an application or a web page.
 +
 +
=== Groups ===
 +
Objects you want to control with a keypad or encoder need to be added to a ''Group''. In every group there is exactly one focused object which receives the pressed keys or the encoder actions. For example, if a Text area is focused and you press some letter on a keyboard, the keys will be sent and inserted into the text area. Similarly, if a Slider is focused and you press the left or right arrows, the slider's value will be changed.
 +
 +
You need to associate an input device with a group. An input device can send key events to only one group but a group can receive data from more than one input device.
 +
 +
To create a group use <code>lv_group_t * g = lv_group_create()</code> and to add an object to the group use <code>lv_group_add_obj(g, obj)</code>.
 +
 +
To associate a group with an input device use <code>lv_indev_set_group(indev, g)</code>, where <code>indev</code> is the return value of <code>lv_indev_drv_register()</code>
 +
 +
==== Keys ====
 +
There are some predefined keys which have special meaning:
 +
 +
* LV_KEY_NEXT Focus on the next object
 +
* LV_KEY_PREV Focus on the previous object
 +
* LV_KEY_ENTER Triggers <code>LV_EVENT_PRESSED/CLICKED/LONG_PRESSED</code> etc. events
 +
* LV_KEY_UP Increase value or move upwards
 +
* LV_KEY_DOWN Decrease value or move downwards
 +
* LV_KEY_RIGHT Increase value or move to the right
 +
* LV_KEY_LEFT Decrease value or move to the left
 +
* LV_KEY_ESC Close or exit (E.g. close a Drop down list)
 +
* LV_KEY_DEL Delete (E.g. a character on the right in a Text area)
 +
* LV_KEY_BACKSPACE Delete a character on the left (E.g. in a Text area)
 +
* LV_KEY_HOME Go to the beginning/top (E.g. in a Text area)
 +
* LV_KEY_END Go to the end (E.g. in a Text area)
 +
 +
The most important special keys are <code>LV_KEY_NEXT/PREV</code>, <code>LV_KEY_ENTER</code> and <code>LV_KEY_UP/DOWN/LEFT/RIGHT</code>. In your <code>read_cb</code> function, you should translate some of your keys to these special keys to support navigation in a group and interact with selected objects.
 +
 +
Usually, it's enough to use only <code>LV_KEY_LEFT/RIGHT</code> because most objects can be fully controlled with them.
 +
 +
With an encoder you should use only <code>LV_KEY_LEFT</code>, <code>LV_KEY_RIGHT</code>, and <code>LV_KEY_ENTER</code>.
 +
 +
==== Edit and navigate mode ====
 +
Since a keypad has plenty of keys, it's easy to navigate between objects and edit them using the keypad. But encoders have a limited number of "keys" and hence it is difficult to navigate using the default options. ''Navigate'' and ''Edit'' modes are used to avoid this problem with encoders.
 +
 +
In ''Navigate'' mode, an encoder's <code>LV_KEY_LEFT/RIGHT</code> is translated to <code>LV_KEY_NEXT/PREV</code>. Therefore, the next or previous object will be selected by turning the encoder. Pressing <code>LV_KEY_ENTER</code> will change to ''Edit'' mode.
 +
 +
In ''Edit'' mode, <code>LV_KEY_NEXT/PREV</code> is usually used to modify an object. Depending on the object's type, a short or long press of <code>LV_KEY_ENTER</code> changes back to ''Navigate'' mode. Usually, an object which cannot be pressed (like a Slider) leaves ''Edit'' mode upon a short click. But with objects where a short click has meaning (e.g. Button), a long press is required.
 +
 +
==== Default group ====
 +
Interactive widgets - such as buttons, checkboxes, sliders, etc. - can be automatically added to a default group. Just create a group with <code>lv_group_t * g = lv_group_create();</code> and set the default group with <code>lv_group_set_default(g);</code>
 +
 +
Don't forget to assign one or more input devices to the default group with <code>lv_indev_set_group(my_indev, g);</code>.
 +
 +
=== Styling ===
 +
If an object is focused either by clicking it via touchpad or focused via an encoder or keypad it goes to the <code>LV_STATE_FOCUSED</code> state. Hence, focused styles will be applied to it.
 +
 +
If an object switches to edit mode it enters the <code>LV_STATE_FOCUSED | LV_STATE_EDITED</code> states so these style properties will be shown.
 +
 +
For a more detailed description read the Style section.
 +
 +
== API ==
 +
 +
=== Input device ===
 +
Functions
 +
 +
; <span id="_CPPv322lv_indev_read_timer_cbP10lv_timer_t"></span><span id="_CPPv222lv_indev_read_timer_cbP10lv_timer_t"></span><span id="lv_indev_read_timer_cb__lv_timer_tP"></span><span id="lv__indev_8h_1a92840edd1f8c0ae2d32906db9f196355" class="target"></span>void lv_indev_read_timer_cb(lv_timer_t *timer)[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv422lv_indev_read_timer_cbP10lv_timer_t] <span id="_CPPv322lv_indev_read_timer_cbP10lv_timer_t"></span><span id="_CPPv222lv_indev_read_timer_cbP10lv_timer_t"></span><span id="lv_indev_read_timer_cb__lv_timer_tP"></span><span id="lv__indev_8h_1a92840edd1f8c0ae2d32906db9f196355" class="target"></span>
 +
: Called periodically to read the input devi[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv422lv_indev_read_timer_cbP10lv_timer_t]ces
 +
:; Parameters
 +
:: timer -- pointer to a timer to read
 +
 +
; <span id="_CPPv315lv_indev_enableP10lv_indev_tb"></span><span id="_CPPv215lv_indev_enableP10lv_indev_tb"></span><span id="lv_indev_enable__lv_indev_tP.b"></span><span id="lv__indev_8h_1ae6a3c34a4ff7928a9395757d109d4621" class="target"></span>void lv_indev_enable(lv_indev_t *indev, bool en)[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv415lv_indev_enableP10lv_indev_tb] <span id="_CPPv315lv_indev_enableP10lv_indev_tb"></span><span id="_CPPv215lv_indev_enableP10lv_indev_tb"></span><span id="lv_indev_enable__lv_indev_tP.b"></span><span id="lv__indev_8h_1ae6a3c34a4ff7928a9395757d109d4621" class="target"></span>
 +
:
 +
 +
; <span id="_CPPv316lv_indev_get_actv"></span><span id="_CPPv216lv_indev_get_actv"></span><span id="lv_indev_get_act__void"></span><span id="lv__indev_8h_1a7371c50b9253f035dbd1991ffb3dd46e" class="target"></span>lv_indev_t *lv_indev_get_act(void)[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv416lv_indev_get_actv] <span id="_CPPv316lv_indev_get_actv"></span><span id="_CPPv216lv_indev_get_actv"></span><span id="lv_indev_get_act__void"></span><span id="lv__indev_8h_1a7371c50b9253f035dbd1991ffb3dd46e" class="target"></span>
 +
[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv415lv_indev_enableP10lv_indev_tb]
 +
: Get the currently processed in[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv416lv_indev_get_actv]put device. Can be used in action functions too.
 +
:; Returns
 +
:: pointer to the currently processed input device or NULL if no input device processing right now
 +
 +
; <span id="_CPPv317lv_indev_get_typePK10lv_indev_t"></span><span id="_CPPv217lv_indev_get_typePK10lv_indev_t"></span><span id="lv_indev_get_type__lv_indev_tCP"></span><span id="lv__indev_8h_1a95c3bddace5c8c574705340580365145" class="target"></span>lv_indev_type_t lv_indev_get_type(const lv_indev_t *indev)[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv417lv_indev_get_typePK10lv_indev_t] <span id="_CPPv317lv_indev_get_typePK10lv_indev_t"></span><span id="_CPPv217lv_indev_get_typePK10lv_indev_t"></span><span id="lv_indev_get_type__lv_indev_tCP"></span><span id="lv__indev_8h_1a95c3bddace5c8c574705340580365145" class="target"></span>
 +
: Get the type of an input device
 +
:; Parameters
 +
:: indev[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv417lv_indev_get_typePK10lv_indev_t] -- pointer to an input device
 +
:; Returns
 +
:: the type of the input device from <code>lv_hal_indev_type_t</code> (<code>LV_INDEV_TYPE_...</code>)
 +
 +
; <span id="_CPPv314lv_indev_resetP10lv_indev_tP8lv_obj_t"></span><span id="_CPPv214lv_indev_resetP10lv_indev_tP8lv_obj_t"></span><span id="lv_indev_reset__lv_indev_tP.lv_obj_tP"></span><span id="lv__indev_8h_1a716dec0e5e4bf06011027bacaee81183" class="target"></span>void lv_indev_reset(lv_indev_t *indev, lv_obj_t *obj)[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv414lv_indev_resetP10lv_indev_tP8lv_obj_t] <span id="_CPPv314lv_indev_resetP10lv_indev_tP8lv_obj_t"></span><span id="_CPPv214lv_indev_resetP10lv_indev_tP8lv_obj_t"></span><span id="lv_indev_reset__lv_indev_tP.lv_obj_tP"></span><span id="lv__indev_8h_1a716dec0e5e4bf06011027bacaee81183" class="target"></span>
 +
: Reset one or all input devices
 +
:; Parameters
 +
::* [https://docs.lvgl.io/8.2/overview/indev.html#_CPPv414lv_indev_resetP10lv_indev_tP8lv_obj_t] indev -- pointer to an input device to reset or NULL to reset all of them
 +
::* obj -- pointer to an object which triggers the reset.
 +
 +
; <span id="_CPPv325lv_indev_reset_long_pressP10lv_indev_t"></span><span id="_CPPv225lv_indev_reset_long_pressP10lv_indev_t"></span><span id="lv_indev_reset_long_press__lv_indev_tP"></span><span id="lv__indev_8h_1ae3e5517ee080bf69e058b820f5117153" class="target"></span>void lv_indev_reset_long_press(lv_indev_t *indev)[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv425lv_indev_reset_long_pressP10lv_indev_t] <span id="_CPPv325lv_indev_reset_long_pressP10lv_indev_t"></span><span id="_CPPv225lv_indev_reset_long_pressP10lv_indev_t"></span><span id="lv_indev_reset_long_press__lv_indev_tP"></span><span id="lv__indev_8h_1ae3e5517ee080bf69e058b820f5117153" class="target"></span>
 +
: Reset the long press state of an input device[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv425lv_indev_reset_long_pressP10lv_indev_t]
 +
:; Parameters
 +
:: indev -- pointer to an input device
 +
 +
; <span id="_CPPv319lv_indev_set_cursorP10lv_indev_tP8lv_obj_t"></span><span id="_CPPv219lv_indev_set_cursorP10lv_indev_tP8lv_obj_t"></span><span id="lv_indev_set_cursor__lv_indev_tP.lv_obj_tP"></span><span id="lv__indev_8h_1a007c53b2a7d206c77bc1d30ad03bb18e" class="target"></span>void lv_indev_set_cursor(lv_indev_t *indev, lv_obj_t *cur_obj)[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv419lv_indev_set_cursorP10lv_indev_tP8lv_obj_t] <span id="_CPPv319lv_indev_set_cursorP10lv_indev_tP8lv_obj_t"></span><span id="_CPPv219lv_indev_set_cursorP10lv_indev_tP8lv_obj_t"></span><span id="lv_indev_set_cursor__lv_indev_tP.lv_obj_tP"></span><span id="lv__indev_8h_1a007c53b2a7d206c77bc1d30ad03bb18e" class="target"></span>
 +
: Set a cursor for a pointer input device (for LV_INPUT_TYPE[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv419lv_indev_set_cursorP10lv_indev_tP8lv_obj_t]_POINTER and LV_INPUT_TYPE_BUTTON)
 +
:; Parameters
 +
::* indev -- pointer to an input device
 +
::* cur_obj -- pointer to an object to be used as cursor
 +
 +
; <span id="_CPPv318lv_indev_set_groupP10lv_indev_tP10lv_group_t"></span><span id="_CPPv218lv_indev_set_groupP10lv_indev_tP10lv_group_t"></span><span id="lv_indev_set_group__lv_indev_tP.lv_group_tP"></span><span id="lv__indev_8h_1aa6f0e316052745e71c1b482ac85861cf" class="target"></span>void lv_indev_set_group(lv_indev_t *indev, lv_group_t *group)[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv418lv_indev_set_groupP10lv_indev_tP10lv_group_t] <span id="_CPPv318lv_indev_set_groupP10lv_indev_tP10lv_group_t"></span><span id="_CPPv218lv_indev_set_groupP10lv_indev_tP10lv_group_t"></span><span id="lv_indev_set_group__lv_indev_tP.lv_group_tP"></span><span id="lv__indev_8h_1aa6f0e316052745e71c1b482ac85861cf" class="target"></span>
 +
: Set a destination group for a keypad input device (for LV[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv418lv_indev_set_groupP10lv_indev_tP10lv_group_t]_INDEV_TYPE_KEYPAD)
 +
:; Parameters
 +
::* indev -- pointer to an input device
 +
::* group -- point to a group
 +
 +
; <span id="_CPPv326lv_indev_set_button_pointsP10lv_indev_tA_K10lv_point_t"></span><span id="_CPPv226lv_indev_set_button_pointsP10lv_indev_tA_K10lv_point_t"></span><span id="lv_indev_set_button_points__lv_indev_tP.lv_point_tCA"></span><span id="lv__indev_8h_1ab3ce6a0dada92f59f10108127acbb206" class="target"></span>void lv_indev_set_button_points(lv_indev_t *indev, const lv_point_t points[])[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv426lv_indev_set_button_pointsP10lv_indev_tA_K10lv_point_t] <span id="_CPPv326lv_indev_set_button_pointsP10lv_indev_tA_K10lv_point_t"></span><span id="_CPPv226lv_indev_set_button_pointsP10lv_indev_tA_K10lv_point_t"></span><span id="lv_indev_set_button_points__lv_indev_tP.lv_point_tCA"></span><span id="lv__indev_8h_1ab3ce6a0dada92f59f10108127acbb206" class="target"></span>
 +
: Set the an array of points for LV_INDEV_TYPE_BUTTON. These points will be[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv426lv_indev_set_button_pointsP10lv_indev_tA_K10lv_point_t] assigned to the buttons to press a specific point on the screen
 +
:; Parameters
 +
::* indev -- pointer to an input device
 +
::* group -- point to a group
 +
 +
; <span id="_CPPv318lv_indev_get_pointPK10lv_indev_tP10lv_point_t"></span><span id="_CPPv218lv_indev_get_pointPK10lv_indev_tP10lv_point_t"></span><span id="lv_indev_get_point__lv_indev_tCP.lv_point_tP"></span><span id="lv__indev_8h_1a0b8a336a876a82dbb2d24583197792a9" class="target"></span>void lv_indev_get_point(const lv_indev_t *indev, lv_point_t *point)[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv418lv_indev_get_pointPK10lv_indev_tP10lv_point_t] <span id="_CPPv318lv_indev_get_pointPK10lv_indev_tP10lv_point_t"></span><span id="_CPPv218lv_indev_get_pointPK10lv_indev_tP10lv_point_t"></span><span id="lv_indev_get_point__lv_indev_tCP.lv_point_tP"></span><span id="lv__indev_8h_1a0b8a336a876a82dbb2d24583197792a9" class="target"></span>
 +
: Get the last point of an input device (for LV_INDEV_TYPE_POINTE[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv418lv_indev_get_pointPK10lv_indev_tP10lv_point_t]R and LV_INDEV_TYPE_BUTTON)
 +
:; Parameters
 +
::* indev -- pointer to an input device
 +
::* point -- pointer to a point to store the result
 +
 +
; <span id="_CPPv324lv_indev_get_gesture_dirPK10lv_indev_t"></span><span id="_CPPv224lv_indev_get_gesture_dirPK10lv_indev_t"></span><span id="lv_indev_get_gesture_dir__lv_indev_tCP"></span><span id="lv__indev_8h_1a7475d50eee3654103c4b0ff57f97b45f" class="target"></span>lv_dir_t lv_indev_get_gesture_dir(const lv_indev_t *indev)[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv424lv_indev_get_gesture_dirPK10lv_indev_t] <span id="_CPPv324lv_indev_get_gesture_dirPK10lv_indev_t"></span><span id="_CPPv224lv_indev_get_gesture_dirPK10lv_indev_t"></span><span id="lv_indev_get_gesture_dir__lv_indev_tCP"></span><span id="lv__indev_8h_1a7475d50eee3654103c4b0ff57f97b45f" class="target"></span>
 +
: Get the current gesture direct
 +
:; Parameters
 +
:: indev [https://docs.lvgl.io/8.2/overview/indev.html#_CPPv424lv_indev_get_gesture_dirPK10lv_indev_t]-- pointer to an input device
 +
:; Returns
 +
:: current gesture direct
 +
 +
; <span id="_CPPv316lv_indev_get_keyPK10lv_indev_t"></span><span id="_CPPv216lv_indev_get_keyPK10lv_indev_t"></span><span id="lv_indev_get_key__lv_indev_tCP"></span><span id="lv__indev_8h_1ab14bdb02be684b1c900a56d7cf0e634c" class="target"></span>uint32_t lv_indev_get_key(const lv_indev_t *indev)[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv416lv_indev_get_keyPK10lv_indev_t] <span id="_CPPv316lv_indev_get_keyPK10lv_indev_t"></span><span id="_CPPv216lv_indev_get_keyPK10lv_indev_t"></span><span id="lv_indev_get_key__lv_indev_tCP"></span><span id="lv__indev_8h_1ab14bdb02be684b1c900a56d7cf0e634c" class="target"></span>
 +
: Get the last pressed key of an input device (f[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv416lv_indev_get_keyPK10lv_indev_t]or LV_INDEV_TYPE_KEYPAD)
 +
:; Parameters
 +
:: indev -- pointer to an input device
 +
:; Returns
 +
:: the last pressed key (0 on error)
 +
 +
; <span id="_CPPv323lv_indev_get_scroll_dirPK10lv_indev_t"></span><span id="_CPPv223lv_indev_get_scroll_dirPK10lv_indev_t"></span><span id="lv_indev_get_scroll_dir__lv_indev_tCP"></span><span id="lv__indev_8h_1a44ac7ca3610ee9da61529a2f0de88bb0" class="target"></span>lv_dir_t lv_indev_get_scroll_dir(const lv_indev_t *indev)[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv423lv_indev_get_scroll_dirPK10lv_indev_t] <span id="_CPPv323lv_indev_get_scroll_dirPK10lv_indev_t"></span><span id="_CPPv223lv_indev_get_scroll_dirPK10lv_indev_t"></span><span id="lv_indev_get_scroll_dir__lv_indev_tCP"></span><span id="lv__indev_8h_1a44ac7ca3610ee9da61529a2f0de88bb0" class="target"></span>
 +
: Check the current scroll direction of an input device[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv423lv_indev_get_scroll_dirPK10lv_indev_t] (for LV_INDEV_TYPE_POINTER and LV_INDEV_TYPE_BUTTON)
 +
:; Parameters
 +
:: indev -- pointer to an input device
 +
:; Returns
 +
:: LV_DIR_NONE: no scrolling now LV_DIR_HOR/VER
 +
 +
; <span id="_CPPv323lv_indev_get_scroll_objPK10lv_indev_t"></span><span id="_CPPv223lv_indev_get_scroll_objPK10lv_indev_t"></span><span id="lv_indev_get_scroll_obj__lv_indev_tCP"></span><span id="lv__indev_8h_1a71758cdba79e84c614d8bc2437b1b7fc" class="target"></span>lv_obj_t *lv_indev_get_scroll_obj(const lv_indev_t *indev)[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv423lv_indev_get_scroll_objPK10lv_indev_t] <span id="_CPPv323lv_indev_get_scroll_objPK10lv_indev_t"></span><span id="_CPPv223lv_indev_get_scroll_objPK10lv_indev_t"></span><span id="lv_indev_get_scroll_obj__lv_indev_tCP"></span><span id="lv__indev_8h_1a71758cdba79e84c614d8bc2437b1b7fc" class="target"></span>
 +
: Get the currently scrolled object (for LV_INDEV_TYPE_P[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv423lv_indev_get_scroll_objPK10lv_indev_t]OINTER and LV_INDEV_TYPE_BUTTON)
 +
:; Parameters
 +
:: indev -- pointer to an input device
 +
:; Returns
 +
:: pointer to the currently scrolled object or NULL if no scrolling by this indev
 +
 +
; <span id="_CPPv317lv_indev_get_vectPK10lv_indev_tP10lv_point_t"></span><span id="_CPPv217lv_indev_get_vectPK10lv_indev_tP10lv_point_t"></span><span id="lv_indev_get_vect__lv_indev_tCP.lv_point_tP"></span><span id="lv__indev_8h_1a1f9296166ded7fef0b5f84cc62751d23" class="target"></span>void lv_indev_get_vect(const lv_indev_t *indev, lv_point_t *point)[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv417lv_indev_get_vectPK10lv_indev_tP10lv_point_t] <span id="_CPPv317lv_indev_get_vectPK10lv_indev_tP10lv_point_t"></span><span id="_CPPv217lv_indev_get_vectPK10lv_indev_tP10lv_point_t"></span><span id="lv_indev_get_vect__lv_indev_tCP.lv_point_tP"></span><span id="lv__indev_8h_1a1f9296166ded7fef0b5f84cc62751d23" class="target"></span>
 +
: Get the movement vector of an input device (for LV_INDEV_TYPE_[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv417lv_indev_get_vectPK10lv_indev_tP10lv_point_t]POINTER and LV_INDEV_TYPE_BUTTON)
 +
:; Parameters
 +
::* indev -- pointer to an input device
 +
::* point -- pointer to a point to store the types.pointer.vector
 +
 +
; <span id="_CPPv321lv_indev_wait_releaseP10lv_indev_t"></span><span id="_CPPv221lv_indev_wait_releaseP10lv_indev_t"></span><span id="lv_indev_wait_release__lv_indev_tP"></span><span id="lv__indev_8h_1acafef51429b0390becb80d9f940cc3f4" class="target"></span>void lv_indev_wait_release(lv_indev_t *indev)[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv421lv_indev_wait_releaseP10lv_indev_t] <span id="_CPPv321lv_indev_wait_releaseP10lv_indev_t"></span><span id="_CPPv221lv_indev_wait_releaseP10lv_indev_t"></span><span id="lv_indev_wait_release__lv_indev_tP"></span><span id="lv__indev_8h_1acafef51429b0390becb80d9f940cc3f4" class="target"></span>
 +
: Do nothing until the next release
 +
:; Para[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv421lv_indev_wait_releaseP10lv_indev_t]meters
 +
:: indev -- pointer to an input device
 +
 +
; <span id="_CPPv320lv_indev_get_obj_actv"></span><span id="_CPPv220lv_indev_get_obj_actv"></span><span id="lv_indev_get_obj_act__void"></span><span id="lv__indev_8h_1a3a9ef3ccf4c5a9fca86be0414b693045" class="target"></span>lv_obj_t *lv_indev_get_obj_act(void)[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv420lv_indev_get_obj_actv] <span id="_CPPv320lv_indev_get_obj_actv"></span><span id="_CPPv220lv_indev_get_obj_actv"></span><span id="lv_indev_get_obj_act__void"></span><span id="lv__indev_8h_1a3a9ef3ccf4c5a9fca86be0414b693045" class="target"></span>
 +
: Gets a pointer to the currently [https://docs.lvgl.io/8.2/overview/indev.html#_CPPv420lv_indev_get_obj_actv]active object in the currently processed input device.
 +
:; Returns
 +
:: pointer to currently active object or NULL if no active object
 +
 +
; <span id="_CPPv323lv_indev_get_read_timerP9lv_disp_t"></span><span id="_CPPv223lv_indev_get_read_timerP9lv_disp_t"></span><span id="lv_indev_get_read_timer__lv_disp_tP"></span><span id="lv__indev_8h_1a0ef800c1e8765ec8cb93fd1a974b0fe0" class="target"></span>lv_timer_t *lv_indev_get_read_timer(lv_disp_t *indev)[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv423lv_indev_get_read_timerP9lv_disp_t] <span id="_CPPv323lv_indev_get_read_timerP9lv_disp_t"></span><span id="_CPPv223lv_indev_get_read_timerP9lv_disp_t"></span><span id="lv_indev_get_read_timer__lv_disp_tP"></span><span id="lv__indev_8h_1a0ef800c1e8765ec8cb93fd1a974b0fe0" class="target"></span>
 +
: Get a pointer to the indev read timer to modify i[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv423lv_indev_get_read_timerP9lv_disp_t]ts parameters with <code>lv_timer_...</code> functions.
 +
:; Parameters
 +
:: indev -- pointer to an input device
 +
:; Returns
 +
:: pointer to the indev read refresher timer. (NULL on error)
 +
 +
; <span id="_CPPv319lv_indev_search_objP8lv_obj_tP10lv_point_t"></span><span id="_CPPv219lv_indev_search_objP8lv_obj_tP10lv_point_t"></span><span id="lv_indev_search_obj__lv_obj_tP.lv_point_tP"></span><span id="lv__indev_8h_1aca903267178eeeded6390da8752a2729" class="target"></span>lv_obj_t *lv_indev_search_obj(lv_obj_t *obj, lv_point_t *point)[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv419lv_indev_search_objP8lv_obj_tP10lv_point_t] <span id="_CPPv319lv_indev_search_objP8lv_obj_tP10lv_point_t"></span><span id="_CPPv219lv_indev_search_objP8lv_obj_tP10lv_point_t"></span><span id="lv_indev_search_obj__lv_obj_tP.lv_point_tP"></span><span id="lv__indev_8h_1aca903267178eeeded6390da8752a2729" class="target"></span>
 +
: Search the most top, clickable object by a point
 +
:; Paramet[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv419lv_indev_search_objP8lv_obj_tP10lv_point_t]ers
 +
::* obj -- pointer to a start object, typically the screen
 +
::* point -- pointer to a point for searching the most top child
 +
:; Returns
 +
:: pointer to the found object or NULL if there was no suitable object
 +
 +
=== Groups ===
 +
Typedefs
 +
 +
; <span id="_CPPv38lv_key_t"></span><span id="_CPPv28lv_key_t"></span><span id="lv_key_t"></span><span id="lv__group_8h_1af2d430e99ac2f4c614085d7f7fae6829" class="target"></span>typedef uint8_t lv_key_t[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv48lv_key_t] <span id="_CPPv38lv_key_t"></span><span id="_CPPv28lv_key_t"></span><span id="lv_key_t"></span><span id="lv__group_8h_1af2d430e99ac2f4c614085d7f7fae6829" class="target"></span>
 +
:
 +
 +
; <span id="_CPPv319lv_group_focus_cb_t"></span><span id="_CPPv219lv_group_focus_cb_t"></span><span id="lv_group_focus_cb_t"></span><span id="lv__group_8h_1a9d87bb6ed2406d3ea8ee2c83dc449401" class="target"></span>typedef void ([https://docs.lvgl.io/8.2/overview/indev.html#_CPPv48lv_key_t]*lv_group_focus_cb_t)(struct _lv_group_t*)[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv419lv_group_focus_cb_t] <span id="_CPPv319lv_group_focus_cb_t"></span><span id="_CPPv219lv_group_focus_cb_t"></span><span id="lv_group_focus_cb_t"></span><span id="lv__group_8h_1a9d87bb6ed2406d3ea8ee2c83dc449401" class="target"></span>
 +
:
 +
 +
; <span id="_CPPv310lv_group_t"></span><span id="_CPPv210lv_group_t"></span><span id="lv_group_t"></span><span id="lv__group_8h_1a0fa2dbb9ed984eb2abdfc8c0b1990d00" class="target"></span>typedef struct _lv_group_t lv_group_t[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv410lv_group_t] <span id="_CPPv310lv_group_t"></span><span id="_CPPv210lv_group_t"></span><span id="lv_group_t"></span><span id="lv__group_8h_1a0fa2dbb9ed984eb2abdfc8c0b1990d00" class="target"></span>
 +
: Gro[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv419lv_group_focus_cb_t]ups can be used to logically h[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv410lv_group_t]old objects so that they can be individually focused. They are NOT for laying out objects on a screen (try layouts for that).
 +
 +
Enums
 +
 +
; <span id="_CPPv3Ut1_0"></span><span id="lv__group_8h_1a06fc87d81c62e9abb8790b6e5713c55b" class="target"></span>enum [anonymous][https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4Ut1_0] <span id="_CPPv3Ut1_0"></span><span id="lv__group_8h_1a06fc87d81c62e9abb8790b6e5713c55b" class="target"></span>
 +
: ''Values:''
 +
:; <span id="_CPPv3NUt1_09LV_KEY_UPE"></span><span id="lv__group_8h_1a06fc87d81c62e9abb8790b6e5713c55ba82eb5e1cae7704a974f4974f3021d1ef" class="target"></span>e[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4Ut1_0]numerator LV_KEY_UP[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4NUt1_09LV_KEY_UPE] <span id="_CPPv3NUt1_09LV_KEY_UPE"></span><span id="lv__group_8h_1a06fc87d81c62e9abb8790b6e5713c55ba82eb5e1cae7704a974f4974f3021d1ef" class="target"></span>
 +
::
 +
:; <span id="_CPPv3NUt1_011LV_KEY_DOWNE"></span><span id="lv__group_8h_1a06fc87d81c62e9abb8790b6e5713c55ba1b104023df6a6857b1450edeaf07fced" class="target"></span>enumerator[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4NUt1_09LV_KEY_UPE] LV_KEY_DOWN[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4NUt1_011LV_KEY_DOWNE] <span id="_CPPv3NUt1_011LV_KEY_DOWNE"></span><span id="lv__group_8h_1a06fc87d81c62e9abb8790b6e5713c55ba1b104023df6a6857b1450edeaf07fced" class="target"></span>
 +
::
 +
:; <span id="_CPPv3NUt1_012LV_KEY_RIGHTE"></span><span id="lv__group_8h_1a06fc87d81c62e9abb8790b6e5713c55bad77cbb92e03b53f89e7933fadaf38ab2" class="target"></span>enumerator L[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4NUt1_011LV_KEY_DOWNE]V_KEY_RIGHT[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4NUt1_012LV_KEY_RIGHTE] <span id="_CPPv3NUt1_012LV_KEY_RIGHTE"></span><span id="lv__group_8h_1a06fc87d81c62e9abb8790b6e5713c55bad77cbb92e03b53f89e7933fadaf38ab2" class="target"></span>
 +
::
 +
:; <span id="_CPPv3NUt1_011LV_KEY_LEFTE"></span><span id="lv__group_8h_1a06fc87d81c62e9abb8790b6e5713c55ba087a04c571deda9bd82386057bd4313a" class="target"></span>enumerator LV[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4NUt1_012LV_KEY_RIGHTE]_KEY_LEFT[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4NUt1_011LV_KEY_LEFTE] <span id="_CPPv3NUt1_011LV_KEY_LEFTE"></span><span id="lv__group_8h_1a06fc87d81c62e9abb8790b6e5713c55ba087a04c571deda9bd82386057bd4313a" class="target"></span>
 +
::
 +
:; <span id="_CPPv3NUt1_010LV_KEY_ESCE"></span><span id="lv__group_8h_1a06fc87d81c62e9abb8790b6e5713c55bac4b1d01e3260ac11d6489c9aa0b2422e" class="target"></span>enumerator L[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4NUt1_011LV_KEY_LEFTE]V_KEY_ESC[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4NUt1_010LV_KEY_ESCE] <span id="_CPPv3NUt1_010LV_KEY_ESCE"></span><span id="lv__group_8h_1a06fc87d81c62e9abb8790b6e5713c55bac4b1d01e3260ac11d6489c9aa0b2422e" class="target"></span>
 +
::
 +
:; <span id="_CPPv3NUt1_010LV_KEY_DELE"></span><span id="lv__group_8h_1a06fc87d81c62e9abb8790b6e5713c55ba798af263a85b6730224a4132d45db135" class="target"></span>enumerator [https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4NUt1_010LV_KEY_ESCE]LV_KEY_DEL[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4NUt1_010LV_KEY_DELE] <span id="_CPPv3NUt1_010LV_KEY_DELE"></span><span id="lv__group_8h_1a06fc87d81c62e9abb8790b6e5713c55ba798af263a85b6730224a4132d45db135" class="target"></span>
 +
::
 +
:; <span id="_CPPv3NUt1_016LV_KEY_BACKSPACEE"></span><span id="lv__group_8h_1a06fc87d81c62e9abb8790b6e5713c55ba7400777a83c342237eff06e1138185da" class="target"></span>enumerator [https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4NUt1_010LV_KEY_DELE]LV_KEY_BACKSPACE[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4NUt1_016LV_KEY_BACKSPACEE] <span id="_CPPv3NUt1_016LV_KEY_BACKSPACEE"></span><span id="lv__group_8h_1a06fc87d81c62e9abb8790b6e5713c55ba7400777a83c342237eff06e1138185da" class="target"></span>
 +
::
 +
:; <span id="_CPPv3NUt1_012LV_KEY_ENTERE"></span><span id="lv__group_8h_1a06fc87d81c62e9abb8790b6e5713c55bade5cf66b4e8a3a21f8dee3c359b0005b" class="target"></span>enumerator LV_KEY[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4NUt1_016LV_KEY_BACKSPACEE]_ENTER[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4NUt1_012LV_KEY_ENTERE] <span id="_CPPv3NUt1_012LV_KEY_ENTERE"></span><span id="lv__group_8h_1a06fc87d81c62e9abb8790b6e5713c55bade5cf66b4e8a3a21f8dee3c359b0005b" class="target"></span>
 +
::
 +
:; <span id="_CPPv3NUt1_011LV_KEY_NEXTE"></span><span id="lv__group_8h_1a06fc87d81c62e9abb8790b6e5713c55babd46589ff90ce03de97362565601fabe" class="target"></span>enumerator LV[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4NUt1_012LV_KEY_ENTERE]_KEY_NEXT[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4NUt1_011LV_KEY_NEXTE] <span id="_CPPv3NUt1_011LV_KEY_NEXTE"></span><span id="lv__group_8h_1a06fc87d81c62e9abb8790b6e5713c55babd46589ff90ce03de97362565601fabe" class="target"></span>
 +
::
 +
:; <span id="_CPPv3NUt1_011LV_KEY_PREVE"></span><span id="lv__group_8h_1a06fc87d81c62e9abb8790b6e5713c55ba46c855b0f8769f68b80f88323f59c805" class="target"></span>enumerator L[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4NUt1_011LV_KEY_NEXTE]V_KEY_PREV[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4NUt1_011LV_KEY_PREVE] <span id="_CPPv3NUt1_011LV_KEY_PREVE"></span><span id="lv__group_8h_1a06fc87d81c62e9abb8790b6e5713c55ba46c855b0f8769f68b80f88323f59c805" class="target"></span>
 +
::
 +
:; <span id="_CPPv3NUt1_011LV_KEY_HOMEE"></span><span id="lv__group_8h_1a06fc87d81c62e9abb8790b6e5713c55bad0059702787e44499656a96280ae7244" class="target"></span>enumerator L[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4NUt1_011LV_KEY_PREVE]V_KEY_HOME[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4NUt1_011LV_KEY_HOMEE] <span id="_CPPv3NUt1_011LV_KEY_HOMEE"></span><span id="lv__group_8h_1a06fc87d81c62e9abb8790b6e5713c55bad0059702787e44499656a96280ae7244" class="target"></span>
 +
::
 +
:; <span id="_CPPv3NUt1_010LV_KEY_ENDE"></span><span id="lv__group_8h_1a06fc87d81c62e9abb8790b6e5713c55ba1f1940fcc3e093c3356a0255d6357dd3" class="target"></span>enumerator L[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4NUt1_011LV_KEY_HOMEE]V_KEY_END[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4NUt1_010LV_KEY_ENDE] <span id="_CPPv3NUt1_010LV_KEY_ENDE"></span><span id="lv__group_8h_1a06fc87d81c62e9abb8790b6e5713c55ba1f1940fcc3e093c3356a0255d6357dd3" class="target"></span>
 +
::
 +
 +
; <span id="_CPPv325lv_group_refocus_policy_t"></span><span id="_CPPv225lv_group_refocus_policy_t"></span><span id="lv__group_8h_1a10d4ce12656b513694be63bc97b43e96" class="target"></span>enum lv_g[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4NUt1_010LV_KEY_ENDE]roup_refocus_policy_t[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv425lv_group_refocus_policy_t] <span id="_CPPv325lv_group_refocus_policy_t"></span><span id="_CPPv225lv_group_refocus_policy_t"></span><span id="lv__group_8h_1a10d4ce12656b513694be63bc97b43e96" class="target"></span>
 +
: ''Values:''
 +
:; <span id="_CPPv3N25lv_group_refocus_policy_t28LV_GROUP_REFOCUS_POLICY_NEXTE"></span><span id="_CPPv2N25lv_group_refocus_policy_t28LV_GROUP_REFOCUS_POLICY_NEXTE"></span><span id="lv__group_8h_1a10d4ce12656b513694be63bc97b43e96a453d40b1c8028392985f078ff687802d" class="target"></span>enumerator LV_G[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv425lv_group_refocus_policy_t]ROUP_REFOCUS_POLICY_NEXT[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4N25lv_group_refocus_policy_t28LV_GROUP_REFOCUS_POLICY_NEXTE] <span id="_CPPv3N25lv_group_refocus_policy_t28LV_GROUP_REFOCUS_POLICY_NEXTE"></span><span id="_CPPv2N25lv_group_refocus_policy_t28LV_GROUP_REFOCUS_POLICY_NEXTE"></span><span id="lv__group_8h_1a10d4ce12656b513694be63bc97b43e96a453d40b1c8028392985f078ff687802d" class="target"></span>
 +
::
 +
:; <span id="_CPPv3N25lv_group_refocus_policy_t28LV_GROUP_REFOCUS_POLICY_PREVE"></span><span id="_CPPv2N25lv_group_refocus_policy_t28LV_GROUP_REFOCUS_POLICY_PREVE"></span><span id="lv__group_8h_1a10d4ce12656b513694be63bc97b43e96a8cf92e57ba3f13978436dc64c508364f" class="target"></span>enumerator LV_GROUP_REFOCUS_P[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4N25lv_group_refocus_policy_t28LV_GROUP_REFOCUS_POLICY_NEXTE]OLICY_PREV[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4N25lv_group_refocus_policy_t28LV_GROUP_REFOCUS_POLICY_PREVE] <span id="_CPPv3N25lv_group_refocus_policy_t28LV_GROUP_REFOCUS_POLICY_PREVE"></span><span id="_CPPv2N25lv_group_refocus_policy_t28LV_GROUP_REFOCUS_POLICY_PREVE"></span><span id="lv__group_8h_1a10d4ce12656b513694be63bc97b43e96a8cf92e57ba3f13978436dc64c508364f" class="target"></span>
 +
::
 +
 +
Functions
 +
 +
; <span id="_CPPv314_lv_group_initv"></span><span id="_CPPv214_lv_group_initv"></span><span id="_lv_group_init__void"></span><span id="lv__group_8h_1a00bed49b53f432c3b3819882b4fb7755" class="target"></span>void _lv_group_i[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4N25lv_group_refocus_policy_t28LV_GROUP_REFOCUS_POLICY_PREVE]nit(void)[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv414_lv_group_initv] <span id="_CPPv314_lv_group_initv"></span><span id="_CPPv214_lv_group_initv"></span><span id="_lv_group_init__void"></span><span id="lv__group_8h_1a00bed49b53f432c3b3819882b4fb7755" class="target"></span>
 +
: Init. the group modul[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv414_lv_group_initv]e
 +
:; Remark
 +
:: Internal function, do not call directly.
 +
 +
; <span id="_CPPv315lv_group_createv"></span><span id="_CPPv215lv_group_createv"></span><span id="lv_group_create__void"></span><span id="lv__group_8h_1a21d48e09cb050a0030b131274e017beb" class="target"></span>lv_group_t *lv_group_create(void)[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv415lv_group_createv] <span id="_CPPv315lv_group_createv"></span><span id="_CPPv215lv_group_createv"></span><span id="lv_group_create__void"></span><span id="lv__group_8h_1a21d48e09cb050a0030b131274e017beb" class="target"></span>
 +
: Create a new object group
 +
:; [https://docs.lvgl.io/8.2/overview/indev.html#_CPPv415lv_group_createv]Returns
 +
:: pointer to the new object group
 +
 +
; <span id="_CPPv312lv_group_delP10lv_group_t"></span><span id="_CPPv212lv_group_delP10lv_group_t"></span><span id="lv_group_del__lv_group_tP"></span><span id="lv__group_8h_1abce2efdec2202109914ba5866f295823" class="target"></span>void lv_group_del(lv_group_t *group)[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv412lv_group_delP10lv_group_t] <span id="_CPPv312lv_group_delP10lv_group_t"></span><span id="_CPPv212lv_group_delP10lv_group_t"></span><span id="lv_group_del__lv_group_tP"></span><span id="lv__group_8h_1abce2efdec2202109914ba5866f295823" class="target"></span>
 +
: Delete a group object
 +
:; Paramet[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv412lv_group_delP10lv_group_t]ers
 +
:: group -- pointer to a group
 +
 +
; <span id="_CPPv320lv_group_set_defaultP10lv_group_t"></span><span id="_CPPv220lv_group_set_defaultP10lv_group_t"></span><span id="lv_group_set_default__lv_group_tP"></span><span id="lv__group_8h_1ac3c7c582c324f2501ed585d683fd69e2" class="target"></span>void lv_group_set_default(lv_group_t *group)[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv420lv_group_set_defaultP10lv_group_t] <span id="_CPPv320lv_group_set_defaultP10lv_group_t"></span><span id="_CPPv220lv_group_set_defaultP10lv_group_t"></span><span id="lv_group_set_default__lv_group_tP"></span><span id="lv__group_8h_1ac3c7c582c324f2501ed585d683fd69e2" class="target"></span>
 +
: Set a default group. New object are adde[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv420lv_group_set_defaultP10lv_group_t]d to this group if it's enabled in their class with <code>add_to_def_group = true</code>
 +
:; Parameters
 +
:: group -- pointer to a group (can be <code>NULL</code>)
 +
 +
; <span id="_CPPv320lv_group_get_defaultv"></span><span id="_CPPv220lv_group_get_defaultv"></span><span id="lv_group_get_default__void"></span><span id="lv__group_8h_1a9a2360a00e31112fd62783ac707c6412" class="target"></span>lv_group_t *lv_group_get_default(void)[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv420lv_group_get_defaultv] <span id="_CPPv320lv_group_get_defaultv"></span><span id="_CPPv220lv_group_get_defaultv"></span><span id="lv_group_get_default__void"></span><span id="lv__group_8h_1a9a2360a00e31112fd62783ac707c6412" class="target"></span>
 +
: Get the default group
 +
:; Returns
 +
[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv420lv_group_get_defaultv]
 +
:: pointer to the default group
 +
 +
; <span id="_CPPv316lv_group_add_objP10lv_group_tP9_lv_obj_t"></span><span id="_CPPv216lv_group_add_objP10lv_group_tP9_lv_obj_t"></span><span id="lv_group_add_obj__lv_group_tP._lv_obj_tP"></span><span id="lv__group_8h_1a8b4ba32dc67c555aca0677ab91c20a89" class="target"></span>void lv_group_add_obj(lv_group_t *group, struct _lv_obj_t *obj)[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv416lv_group_add_objP10lv_group_tP9_lv_obj_t] <span id="_CPPv316lv_group_add_objP10lv_group_tP9_lv_obj_t"></span><span id="_CPPv216lv_group_add_objP10lv_group_tP9_lv_obj_t"></span><span id="lv_group_add_obj__lv_group_tP._lv_obj_tP"></span><span id="lv__group_8h_1a8b4ba32dc67c555aca0677ab91c20a89" class="target"></span>
 +
: Add an object to a group
 +
:; Parameters
 +
::* group -- pointe[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv416lv_group_add_objP10lv_group_tP9_lv_obj_t]r to a group
 +
::* obj -- pointer to an object to add
 +
 +
; <span id="_CPPv317lv_group_swap_objP9_lv_obj_tP9_lv_obj_t"></span><span id="_CPPv217lv_group_swap_objP9_lv_obj_tP9_lv_obj_t"></span><span id="lv_group_swap_obj___lv_obj_tP._lv_obj_tP"></span><span id="lv__group_8h_1aef4c600bd0157a1b1ea6650bfb261f76" class="target"></span>void lv_group_swap_obj(struct _lv_obj_t *obj1, struct _lv_obj_t *obj2)[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv417lv_group_swap_objP9_lv_obj_tP9_lv_obj_t] <span id="_CPPv317lv_group_swap_objP9_lv_obj_tP9_lv_obj_t"></span><span id="_CPPv217lv_group_swap_objP9_lv_obj_tP9_lv_obj_t"></span><span id="lv_group_swap_obj___lv_obj_tP._lv_obj_tP"></span><span id="lv__group_8h_1aef4c600bd0157a1b1ea6650bfb261f76" class="target"></span>
 +
: Swap 2 object in a group. The object must be in the same group
 +
:; [https://docs.lvgl.io/8.2/overview/indev.html#_CPPv417lv_group_swap_objP9_lv_obj_tP9_lv_obj_t]Parameters
 +
::* obj1 -- pointer to an object
 +
::* obj2 -- pointer to an other object
 +
 +
; <span id="_CPPv319lv_group_remove_objP9_lv_obj_t"></span><span id="_CPPv219lv_group_remove_objP9_lv_obj_t"></span><span id="lv_group_remove_obj___lv_obj_tP"></span><span id="lv__group_8h_1abce478377015b854f92e2f38da5a2bfb" class="target"></span>void lv_group_remove_obj(struct _lv_obj_t *obj)[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv419lv_group_remove_objP9_lv_obj_t] <span id="_CPPv319lv_group_remove_objP9_lv_obj_t"></span><span id="_CPPv219lv_group_remove_objP9_lv_obj_t"></span><span id="lv_group_remove_obj___lv_obj_tP"></span><span id="lv__group_8h_1abce478377015b854f92e2f38da5a2bfb" class="target"></span>
 +
: Remove an object from its group
 +
:; Paramete[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv419lv_group_remove_objP9_lv_obj_t]rs
 +
:: obj -- pointer to an object to remove
 +
 +
; <span id="_CPPv324lv_group_remove_all_objsP10lv_group_t"></span><span id="_CPPv224lv_group_remove_all_objsP10lv_group_t"></span><span id="lv_group_remove_all_objs__lv_group_tP"></span><span id="lv__group_8h_1a1c6a83ae23426121b9b5920e0b2c9447" class="target"></span>void lv_group_remove_all_objs(lv_group_t *group)[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv424lv_group_remove_all_objsP10lv_group_t] <span id="_CPPv324lv_group_remove_all_objsP10lv_group_t"></span><span id="_CPPv224lv_group_remove_all_objsP10lv_group_t"></span><span id="lv_group_remove_all_objs__lv_group_tP"></span><span id="lv__group_8h_1a1c6a83ae23426121b9b5920e0b2c9447" class="target"></span>
 +
: Remove all objects from a group
 +
:; Parameter[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv424lv_group_remove_all_objsP10lv_group_t]s
 +
:: group -- pointer to a group
 +
 +
; <span id="_CPPv318lv_group_focus_objP9_lv_obj_t"></span><span id="_CPPv218lv_group_focus_objP9_lv_obj_t"></span><span id="lv_group_focus_obj___lv_obj_tP"></span><span id="lv__group_8h_1a69232f9836e57dcff1182b0c8e5dc992" class="target"></span>void lv_group_focus_obj(struct _lv_obj_t *obj)[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv418lv_group_focus_objP9_lv_obj_t] <span id="_CPPv318lv_group_focus_objP9_lv_obj_t"></span><span id="_CPPv218lv_group_focus_objP9_lv_obj_t"></span><span id="lv_group_focus_obj___lv_obj_tP"></span><span id="lv__group_8h_1a69232f9836e57dcff1182b0c8e5dc992" class="target"></span>
 +
: Focus on an object (defocus the current)
 +
: [https://docs.lvgl.io/8.2/overview/indev.html#_CPPv418lv_group_focus_objP9_lv_obj_t]
 +
:; Parameters
 +
:: obj -- pointer to an object to focus on
 +
 +
; <span id="_CPPv319lv_group_focus_nextP10lv_group_t"></span><span id="_CPPv219lv_group_focus_nextP10lv_group_t"></span><span id="lv_group_focus_next__lv_group_tP"></span><span id="lv__group_8h_1ad5479089f9d9554f88428bf63241515f" class="target"></span>void lv_group_focus_next(lv_group_t *group)[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv419lv_group_focus_nextP10lv_group_t] <span id="_CPPv319lv_group_focus_nextP10lv_group_t"></span><span id="_CPPv219lv_group_focus_nextP10lv_group_t"></span><span id="lv_group_focus_next__lv_group_tP"></span><span id="lv__group_8h_1ad5479089f9d9554f88428bf63241515f" class="target"></span>
 +
: Focus the next object in a group (defoc[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv419lv_group_focus_nextP10lv_group_t]us the current)
 +
:; Parameters
 +
:: group -- pointer to a group
 +
 +
; <span id="_CPPv319lv_group_focus_prevP10lv_group_t"></span><span id="_CPPv219lv_group_focus_prevP10lv_group_t"></span><span id="lv_group_focus_prev__lv_group_tP"></span><span id="lv__group_8h_1a6d5b7b4a734589a68a03ed93addc17fd" class="target"></span>void lv_group_focus_prev(lv_group_t *group)[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv419lv_group_focus_prevP10lv_group_t] <span id="_CPPv319lv_group_focus_prevP10lv_group_t"></span><span id="_CPPv219lv_group_focus_prevP10lv_group_t"></span><span id="lv_group_focus_prev__lv_group_tP"></span><span id="lv__group_8h_1a6d5b7b4a734589a68a03ed93addc17fd" class="target"></span>
 +
: Focus the previous object in a group (d[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv419lv_group_focus_prevP10lv_group_t]efocus the current)
 +
:; Parameters
 +
:: group -- pointer to a group
 +
 +
; <span id="_CPPv321lv_group_focus_freezeP10lv_group_tb"></span><span id="_CPPv221lv_group_focus_freezeP10lv_group_tb"></span><span id="lv_group_focus_freeze__lv_group_tP.b"></span><span id="lv__group_8h_1a95552390442529a311a425259348c707" class="target"></span>void lv_group_focus_freeze(lv_group_t *group, bool en)[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv421lv_group_focus_freezeP10lv_group_tb] <span id="_CPPv321lv_group_focus_freezeP10lv_group_tb"></span><span id="_CPPv221lv_group_focus_freezeP10lv_group_tb"></span><span id="lv_group_focus_freeze__lv_group_tP.b"></span><span id="lv__group_8h_1a95552390442529a311a425259348c707" class="target"></span>
 +
: Do not let to change the focus from the current ob[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv421lv_group_focus_freezeP10lv_group_tb]ject
 +
:; Parameters
 +
::* group -- pointer to a group
 +
::* en -- true: freeze, false: release freezing (normal mode)
 +
 +
; <span id="_CPPv318lv_group_send_dataP10lv_group_t8uint32_t"></span><span id="_CPPv218lv_group_send_dataP10lv_group_t8uint32_t"></span><span id="lv_group_send_data__lv_group_tP.uint32_t"></span><span id="lv__group_8h_1a8c1fda9413187c7c1b7ba52fd29e9ac0" class="target"></span>lv_res_t lv_group_send_data(lv_group_t *group, uint32_t c)[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv418lv_group_send_dataP10lv_group_t8uint32_t] <span id="_CPPv318lv_group_send_dataP10lv_group_t8uint32_t"></span><span id="_CPPv218lv_group_send_dataP10lv_group_t8uint32_t"></span><span id="lv_group_send_data__lv_group_tP.uint32_t"></span><span id="lv__group_8h_1a8c1fda9413187c7c1b7ba52fd29e9ac0" class="target"></span>
 +
: Send a control character to the focuses object of a gr[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv418lv_group_send_dataP10lv_group_t8uint32_t]oup
 +
:; Parameters
 +
::* group -- pointer to a group
 +
::* c -- a character (use LV_KEY_.. to navigate)
 +
:; Returns
 +
:: result of focused object in group.
 +
 +
; <span id="_CPPv321lv_group_set_focus_cbP10lv_group_t19lv_group_focus_cb_t"></span><span id="_CPPv221lv_group_set_focus_cbP10lv_group_t19lv_group_focus_cb_t"></span><span id="lv_group_set_focus_cb__lv_group_tP.lv_group_focus_cb_t"></span><span id="lv__group_8h_1adfb0a96484ca6f6d4691c257f25eb273" class="target"></span>void lv_group_set_focus_cb(lv_group_t *group, lv_group_focus_cb_t focus_cb)[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv421lv_group_set_focus_cbP10lv_group_t19lv_group_focus_cb_t] <span id="_CPPv321lv_group_set_focus_cbP10lv_group_t19lv_group_focus_cb_t"></span><span id="_CPPv221lv_group_set_focus_cbP10lv_group_t19lv_group_focus_cb_t"></span><span id="lv_group_set_focus_cb__lv_group_tP.lv_group_focus_cb_t"></span><span id="lv__group_8h_1adfb0a96484ca6f6d4691c257f25eb273" class="target"></span>
 +
: Set a function for a group which will be called when a new object is fo[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv421lv_group_set_focus_cbP10lv_group_t19lv_group_focus_cb_t]cused
 +
:; Parameters
 +
::* group -- pointer to a group
 +
::* focus_cb -- the call back function or NULL if unused
 +
 +
; <span id="_CPPv327lv_group_set_refocus_policyP10lv_group_t25lv_group_refocus_policy_t"></span><span id="_CPPv227lv_group_set_refocus_policyP10lv_group_t25lv_group_refocus_policy_t"></span><span id="lv_group_set_refocus_policy__lv_group_tP.lv_group_refocus_policy_t"></span><span id="lv__group_8h_1aa666a2561be02d6dc630d346fe1a5a30" class="target"></span>void lv_group_set_refocus_policy(lv_group_t *group, lv_group_refocus_policy_t policy)[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv427lv_group_set_refocus_policyP10lv_group_t25lv_group_refocus_policy_t] <span id="_CPPv327lv_group_set_refocus_policyP10lv_group_t25lv_group_refocus_policy_t"></span><span id="_CPPv227lv_group_set_refocus_policyP10lv_group_t25lv_group_refocus_policy_t"></span><span id="lv_group_set_refocus_policy__lv_group_tP.lv_group_refocus_policy_t"></span><span id="lv__group_8h_1aa666a2561be02d6dc630d346fe1a5a30" class="target"></span>
 +
: Set whether the next or previous item in a group is focused if the currently focu[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv427lv_group_set_refocus_policyP10lv_group_t25lv_group_refocus_policy_t]sed obj is deleted.
 +
:; Parameters
 +
::* group -- pointer to a group
 +
::* policy -- new refocus policy enum
 +
 +
; <span id="_CPPv320lv_group_set_editingP10lv_group_tb"></span><span id="_CPPv220lv_group_set_editingP10lv_group_tb"></span><span id="lv_group_set_editing__lv_group_tP.b"></span><span id="lv__group_8h_1a823ad3a59540394774e86316f9c4b690" class="target"></span>void lv_group_set_editing(lv_group_t *group, bool edit)[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv420lv_group_set_editingP10lv_group_tb] <span id="_CPPv320lv_group_set_editingP10lv_group_tb"></span><span id="_CPPv220lv_group_set_editingP10lv_group_tb"></span><span id="lv_group_set_editing__lv_group_tP.b"></span><span id="lv__group_8h_1a823ad3a59540394774e86316f9c4b690" class="target"></span>
 +
: Manually set the current mode (edit or navigate).
 +
: [https://docs.lvgl.io/8.2/overview/indev.html#_CPPv420lv_group_set_editingP10lv_group_tb]
 +
:; Parameters
 +
::* group -- pointer to group
 +
::* edit -- true: edit mode; false: navigate mode
 +
 +
; <span id="_CPPv317lv_group_set_wrapP10lv_group_tb"></span><span id="_CPPv217lv_group_set_wrapP10lv_group_tb"></span><span id="lv_group_set_wrap__lv_group_tP.b"></span><span id="lv__group_8h_1a18dcc5be6193ff5ca2281edae8fcf3af" class="target"></span>void lv_group_set_wrap(lv_group_t *group, bool en)[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv417lv_group_set_wrapP10lv_group_tb] <span id="_CPPv317lv_group_set_wrapP10lv_group_tb"></span><span id="_CPPv217lv_group_set_wrapP10lv_group_tb"></span><span id="lv_group_set_wrap__lv_group_tP.b"></span><span id="lv__group_8h_1a18dcc5be6193ff5ca2281edae8fcf3af" class="target"></span>
 +
: Set whether focus next/prev will allow wrappin[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv417lv_group_set_wrapP10lv_group_tb]g from first->last or last->first object.
 +
:; Parameters
 +
::* group -- pointer to group
 +
::* en -- true: wrapping enabled; false: wrapping disabled
 +
 +
; <span id="_CPPv320lv_group_get_focusedPK10lv_group_t"></span><span id="_CPPv220lv_group_get_focusedPK10lv_group_t"></span><span id="lv_group_get_focused__lv_group_tCP"></span><span id="lv__group_8h_1a0281eea79ea9fb0a1492716d8859b432" class="target"></span>struct _lv_obj_t *lv_group_get_focused(const lv_group_t *group)[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv420lv_group_get_focusedPK10lv_group_t] <span id="_CPPv320lv_group_get_focusedPK10lv_group_t"></span><span id="_CPPv220lv_group_get_focusedPK10lv_group_t"></span><span id="lv_group_get_focused__lv_group_tCP"></span><span id="lv__group_8h_1a0281eea79ea9fb0a1492716d8859b432" class="target"></span>
 +
: Get the focused object or NULL if there isn't one
 +
:; Parame[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv420lv_group_get_focusedPK10lv_group_t]ters
 +
:: group -- pointer to a group
 +
:; Returns
 +
:: pointer to the focused object
 +
 +
; <span id="_CPPv321lv_group_get_focus_cbPK10lv_group_t"></span><span id="_CPPv221lv_group_get_focus_cbPK10lv_group_t"></span><span id="lv_group_get_focus_cb__lv_group_tCP"></span><span id="lv__group_8h_1a44d1bd48f901ea2dab301e50e4983825" class="target"></span>lv_group_focus_cb_t lv_group_get_focus_cb(const lv_group_t *group)[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv421lv_group_get_focus_cbPK10lv_group_t] <span id="_CPPv321lv_group_get_focus_cbPK10lv_group_t"></span><span id="_CPPv221lv_group_get_focus_cbPK10lv_group_t"></span><span id="lv_group_get_focus_cb__lv_group_tCP"></span><span id="lv__group_8h_1a44d1bd48f901ea2dab301e50e4983825" class="target"></span>
 +
: Get the focus callback function of a group
 +
:; Parameters
 +
:: gr[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv421lv_group_get_focus_cbPK10lv_group_t]oup -- pointer to a group
 +
:; Returns
 +
:: the call back function or NULL if not set
 +
 +
; <span id="_CPPv320lv_group_get_editingPK10lv_group_t"></span><span id="_CPPv220lv_group_get_editingPK10lv_group_t"></span><span id="lv_group_get_editing__lv_group_tCP"></span><span id="lv__group_8h_1a06dd3f21e367415bd7845cbb9a0acc1c" class="target"></span>bool lv_group_get_editing(const lv_group_t *group)[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv420lv_group_get_editingPK10lv_group_t] <span id="_CPPv320lv_group_get_editingPK10lv_group_t"></span><span id="_CPPv220lv_group_get_editingPK10lv_group_t"></span><span id="lv_group_get_editing__lv_group_tCP"></span><span id="lv__group_8h_1a06dd3f21e367415bd7845cbb9a0acc1c" class="target"></span>
 +
: Get the current mode (edit or navigate).
 +
:; Pa[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv420lv_group_get_editingPK10lv_group_t]rameters
 +
:: group -- pointer to group
 +
:; Returns
 +
:: true: edit mode; false: navigate mode
 +
 +
; <span id="_CPPv317lv_group_get_wrapP10lv_group_t"></span><span id="_CPPv217lv_group_get_wrapP10lv_group_t"></span><span id="lv_group_get_wrap__lv_group_tP"></span><span id="lv__group_8h_1a3746b6bf277dc31b7888986d7683ee7b" class="target"></span>bool lv_group_get_wrap(lv_group_t *group)[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv417lv_group_get_wrapP10lv_group_t] <span id="_CPPv317lv_group_get_wrapP10lv_group_t"></span><span id="_CPPv217lv_group_get_wrapP10lv_group_t"></span><span id="lv_group_get_wrap__lv_group_tP"></span><span id="lv__group_8h_1a3746b6bf277dc31b7888986d7683ee7b" class="target"></span>
 +
: Get whether focus next/prev will allo[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv417lv_group_get_wrapP10lv_group_t]w wrapping from first->last or last->first object.
 +
:; Parameters
 +
::* group -- pointer to group
 +
::* en -- true: wrapping enabled; false: wrapping disabled
 +
 +
; <span id="_CPPv322lv_group_get_obj_countP10lv_group_t"></span><span id="_CPPv222lv_group_get_obj_countP10lv_group_t"></span><span id="lv_group_get_obj_count__lv_group_tP"></span><span id="lv__group_8h_1a7482be16fb7de1689f73df46a51807e2" class="target"></span>uint32_t lv_group_get_obj_count(lv_group_t *group)[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv422lv_group_get_obj_countP10lv_group_t] <span id="_CPPv322lv_group_get_obj_countP10lv_group_t"></span><span id="_CPPv222lv_group_get_obj_countP10lv_group_t"></span><span id="lv_group_get_obj_count__lv_group_tP"></span><span id="lv__group_8h_1a7482be16fb7de1689f73df46a51807e2" class="target"></span>
 +
: Get the number of object in the group
 +
:; Param[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv422lv_group_get_obj_countP10lv_group_t]eters
 +
:: group -- pointer to a group
 +
:; Returns
 +
:: number of objects in the group
 +
 +
; <span id="_CPPv311_lv_group_t"></span><span id="_CPPv211_lv_group_t"></span><span id="_lv_group_t"></span><span id="struct__lv__group__t" class="target"></span>struct _lv_group_t[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv411_lv_group_t] <span id="_CPPv311_lv_group_t"></span><span id="_CPPv211_lv_group_t"></span><span id="_lv_group_t"></span><span id="struct__lv__group__t" class="target"></span>
 +
: ''#include <lv_g''[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv411_lv_group_t]''roup.h>'' Groups can be used to logically hold objects so that they can be individually focused. They are NOT for laying out objects on a screen (try layouts for that).  Public Members
 +
:; <span id="_CPPv3N11_lv_group_t6obj_llE"></span><span id="_CPPv2N11_lv_group_t6obj_llE"></span><span id="_lv_group_t::obj_ll__lv_ll_t"></span><span id="struct__lv__group__t_1a3e17edeb69f746e7836b192688b42bf9" class="target"></span>lv_ll_t obj_ll[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4N11_lv_group_t6obj_llE] <span id="_CPPv3N11_lv_group_t6obj_llE"></span><span id="_CPPv2N11_lv_group_t6obj_llE"></span><span id="_lv_group_t::obj_ll__lv_ll_t"></span><span id="struct__lv__group__t_1a3e17edeb69f746e7836b192688b42bf9" class="target"></span>
 +
:: Linked lis[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4N11_lv_group_t6obj_llE]t to store the objects in the group
 +
:; <span id="_CPPv3N11_lv_group_t9obj_focusE"></span><span id="_CPPv2N11_lv_group_t9obj_focusE"></span><span id="_lv_group_t::obj_focus___lv_obj_tPP"></span><span id="struct__lv__group__t_1a2a31a8ae6da7c3545cd3a6f6d56cc724" class="target"></span>struct _lv_obj_t **obj_focus[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4N11_lv_group_t9obj_focusE] <span id="_CPPv3N11_lv_group_t9obj_focusE"></span><span id="_CPPv2N11_lv_group_t9obj_focusE"></span><span id="_lv_group_t::obj_focus___lv_obj_tPP"></span><span id="struct__lv__group__t_1a2a31a8ae6da7c3545cd3a6f6d56cc724" class="target"></span>
 +
:: The object in focus
 +
:; [https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4N11_lv_group_t9obj_focusE]<span id="_CPPv3N11_lv_group_t8focus_cbE"></span><span id="_CPPv2N11_lv_group_t8focus_cbE"></span><span id="_lv_group_t::focus_cb__lv_group_focus_cb_t"></span><span id="struct__lv__group__t_1a0827156771bb68671288ccc913bb0156" class="target"></span>lv_group_focus_cb_t focus_cb[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4N11_lv_group_t8focus_cbE] <span id="_CPPv3N11_lv_group_t8focus_cbE"></span><span id="_CPPv2N11_lv_group_t8focus_cbE"></span><span id="_lv_group_t::focus_cb__lv_group_focus_cb_t"></span><span id="struct__lv__group__t_1a0827156771bb68671288ccc913bb0156" class="target"></span>
 +
:: A function to call when [https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4N11_lv_group_t8focus_cbE]a new object is focused (optional)
 +
:; <span id="_CPPv3N11_lv_group_t9user_dataE"></span><span id="_CPPv2N11_lv_group_t9user_dataE"></span><span id="_lv_group_t::user_data__voidP"></span><span id="struct__lv__group__t_1ac73c377063106d76ca1f12101072a63d" class="target"></span>void *user_data[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4N11_lv_group_t9user_dataE] <span id="_CPPv3N11_lv_group_t9user_dataE"></span><span id="_CPPv2N11_lv_group_t9user_dataE"></span><span id="_lv_group_t::user_data__voidP"></span><span id="struct__lv__group__t_1ac73c377063106d76ca1f12101072a63d" class="target"></span>
 +
::
 +
:; <span id="_CPPv3N11_lv_group_t6frozenE"></span><span id="_CPPv2N11_lv_group_t6frozenE"></span><span id="_lv_group_t::frozen__uint8_t"></span><span id="struct__lv__group__t_1a9bee9a1af52bbbd474caaa763de86793" class="target"></span>uint8[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4N11_lv_group_t9user_dataE]_t frozen[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4N11_lv_group_t6frozenE] <span id="_CPPv3N11_lv_group_t6frozenE"></span><span id="_CPPv2N11_lv_group_t6frozenE"></span><span id="_lv_group_t::frozen__uint8_t"></span><span id="struct__lv__group__t_1a9bee9a1af52bbbd474caaa763de86793" class="target"></span>
 +
:: 1: can't f[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4N11_lv_group_t6frozenE]ocus to new object
 +
:; <span id="_CPPv3N11_lv_group_t7editingE"></span><span id="_CPPv2N11_lv_group_t7editingE"></span><span id="_lv_group_t::editing__uint8_t"></span><span id="struct__lv__group__t_1ada9687b664ac571dbf3488ec74ee1694" class="target"></span>uint8_t editing[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4N11_lv_group_t7editingE] <span id="_CPPv3N11_lv_group_t7editingE"></span><span id="_CPPv2N11_lv_group_t7editingE"></span><span id="_lv_group_t::editing__uint8_t"></span><span id="struct__lv__group__t_1ada9687b664ac571dbf3488ec74ee1694" class="target"></span>
 +
:: 1: Edit mod[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4N11_lv_group_t7editingE]e, 0: Navigate mode
 +
:; <span id="_CPPv3N11_lv_group_t14refocus_policyE"></span><span id="_CPPv2N11_lv_group_t14refocus_policyE"></span><span id="_lv_group_t::refocus_policy__uint8_t"></span><span id="struct__lv__group__t_1a3f3ab676489c054f33e287b2b23adb33" class="target"></span>uint8_t refocus_policy[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4N11_lv_group_t14refocus_policyE] <span id="_CPPv3N11_lv_group_t14refocus_policyE"></span><span id="_CPPv2N11_lv_group_t14refocus_policyE"></span><span id="_lv_group_t::refocus_policy__uint8_t"></span><span id="struct__lv__group__t_1a3f3ab676489c054f33e287b2b23adb33" class="target"></span>
 +
:: 1: Focus prev if f[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4N11_lv_group_t14refocus_policyE]ocused on deletion. 0: Focus next if focused on deletion.
 +
:; <span id="_CPPv3N11_lv_group_t4wrapE"></span><span id="_CPPv2N11_lv_group_t4wrapE"></span><span id="_lv_group_t::wrap__uint8_t"></span><span id="struct__lv__group__t_1a9be7897b37b9557f669ea4465db79db2" class="target"></span>uint8_t wrap[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4N11_lv_group_t4wrapE] <span id="_CPPv3N11_lv_group_t4wrapE"></span><span id="_CPPv2N11_lv_group_t4wrapE"></span><span id="_lv_group_t::wrap__uint8_t"></span><span id="struct__lv__group__t_1a9be7897b37b9557f669ea4465db79db2" class="target"></span>
 +
:: 1: Focus[https://docs.lvgl.io/8.2/overview/indev.html#_CPPv4N11_lv_group_t4wrapE] next/prev can wrap at end of list. 0: Focus next/prev stops at end of list.
  
  

2022年6月27日 (月) 10:31時点における版

https://docs.lvgl.io/8.2/overview/style.html

英文 自動翻訳


Input devices

An input device usually means:

  • Pointer-like input device like touchpad or mouse
  • Keypads like a normal keyboard or simple numeric keypad
  • Encoders with left/right turn and push options
  • External hardware buttons which are assigned to specific points on the screen

Important

Before reading further, please read the [Porting](/porting/indev) section of Input devices

Pointers

Cursor

Pointer input devices (like a mouse) can have a cursor.

...
lv_indev_t * mouse_indev = lv_indev_drv_register(&indev_drv);

LV_IMG_DECLARE(mouse_cursor_icon);                          /*Declare the image source.*/
lv_obj_t * cursor_obj = lv_img_create(lv_scr_act());       /*Create an image object for the cursor */
lv_img_set_src(cursor_obj, &mouse_cursor_icon);             /*Set the image source*/
lv_indev_set_cursor(mouse_indev, cursor_obj);               /*Connect the image  object to the driver*/

Note that the cursor object should have lv_obj_clear_flag(cursor_obj, LV_OBJ_FLAG_CLICKABLE). For images, clicking is disabled by default.

Gestures

Pointer input devices can detect basic gestures. By default, most of the widgets send the gestures to its parent, so finally the gestures can be detected on the screen object in a form of an LV_EVENT_GESTURE event. For example:

void my_event(lv_event_t * e)
{
  lv_obj_t * screen = lv_event_get_current_target(e);
  lv_dir_t dir = lv_indev_get_gesture_dir(lv_indev_act());
  switch(dir) {
    case LV_DIR_LEFT:
      ...
      break;
    case LV_DIR_RIGHT:
      ...
      break;
    case LV_DIR_TOP:
      ...
      break;
    case LV_DIR_BOTTOM:
      ...
      break;
  }
}

...

lv_obj_add_event_cb(screen1, my_event, LV_EVENT_GESTURE, NULL);

To prevent passing the gesture event to the parent from an object use lv_obj_clear_flag(obj, LV_OBJ_FLAG_GESTURE_BUBBLE).

Note that, gestures are not triggered if an object is being scrolled.


Keypad and encoder

You can fully control the user interface without a touchpad or mouse by using a keypad or encoder(s). It works similar to the TAB key on the PC to select an element in an application or a web page.

Groups

Objects you want to control with a keypad or encoder need to be added to a Group. In every group there is exactly one focused object which receives the pressed keys or the encoder actions. For example, if a Text area is focused and you press some letter on a keyboard, the keys will be sent and inserted into the text area. Similarly, if a Slider is focused and you press the left or right arrows, the slider's value will be changed.

You need to associate an input device with a group. An input device can send key events to only one group but a group can receive data from more than one input device.

To create a group use lv_group_t * g = lv_group_create() and to add an object to the group use lv_group_add_obj(g, obj).

To associate a group with an input device use lv_indev_set_group(indev, g), where indev is the return value of lv_indev_drv_register()

Keys

There are some predefined keys which have special meaning:

  • LV_KEY_NEXT Focus on the next object
  • LV_KEY_PREV Focus on the previous object
  • LV_KEY_ENTER Triggers LV_EVENT_PRESSED/CLICKED/LONG_PRESSED etc. events
  • LV_KEY_UP Increase value or move upwards
  • LV_KEY_DOWN Decrease value or move downwards
  • LV_KEY_RIGHT Increase value or move to the right
  • LV_KEY_LEFT Decrease value or move to the left
  • LV_KEY_ESC Close or exit (E.g. close a Drop down list)
  • LV_KEY_DEL Delete (E.g. a character on the right in a Text area)
  • LV_KEY_BACKSPACE Delete a character on the left (E.g. in a Text area)
  • LV_KEY_HOME Go to the beginning/top (E.g. in a Text area)
  • LV_KEY_END Go to the end (E.g. in a Text area)

The most important special keys are LV_KEY_NEXT/PREV, LV_KEY_ENTER and LV_KEY_UP/DOWN/LEFT/RIGHT. In your read_cb function, you should translate some of your keys to these special keys to support navigation in a group and interact with selected objects.

Usually, it's enough to use only LV_KEY_LEFT/RIGHT because most objects can be fully controlled with them.

With an encoder you should use only LV_KEY_LEFT, LV_KEY_RIGHT, and LV_KEY_ENTER.

Edit and navigate mode

Since a keypad has plenty of keys, it's easy to navigate between objects and edit them using the keypad. But encoders have a limited number of "keys" and hence it is difficult to navigate using the default options. Navigate and Edit modes are used to avoid this problem with encoders.

In Navigate mode, an encoder's LV_KEY_LEFT/RIGHT is translated to LV_KEY_NEXT/PREV. Therefore, the next or previous object will be selected by turning the encoder. Pressing LV_KEY_ENTER will change to Edit mode.

In Edit mode, LV_KEY_NEXT/PREV is usually used to modify an object. Depending on the object's type, a short or long press of LV_KEY_ENTER changes back to Navigate mode. Usually, an object which cannot be pressed (like a Slider) leaves Edit mode upon a short click. But with objects where a short click has meaning (e.g. Button), a long press is required.

Default group

Interactive widgets - such as buttons, checkboxes, sliders, etc. - can be automatically added to a default group. Just create a group with lv_group_t * g = lv_group_create(); and set the default group with lv_group_set_default(g);

Don't forget to assign one or more input devices to the default group with lv_indev_set_group(my_indev, g);.

Styling

If an object is focused either by clicking it via touchpad or focused via an encoder or keypad it goes to the LV_STATE_FOCUSED state. Hence, focused styles will be applied to it.

If an object switches to edit mode it enters the LV_STATE_FOCUSED | LV_STATE_EDITED states so these style properties will be shown.

For a more detailed description read the Style section.

API

Input device

Functions

void lv_indev_read_timer_cb(lv_timer_t *timer)[1]
Called periodically to read the input devi[2]ces
Parameters
timer -- pointer to a timer to read
void lv_indev_enable(lv_indev_t *indev, bool en)[3]
lv_indev_t *lv_indev_get_act(void)[4]

[5]

Get the currently processed in[6]put device. Can be used in action functions too.
Returns
pointer to the currently processed input device or NULL if no input device processing right now
lv_indev_type_t lv_indev_get_type(const lv_indev_t *indev)[7]
Get the type of an input device
Parameters
indev[8] -- pointer to an input device
Returns
the type of the input device from lv_hal_indev_type_t (LV_INDEV_TYPE_...)
void lv_indev_reset(lv_indev_t *indev, lv_obj_t *obj)[9]
Reset one or all input devices
Parameters
  • [10] indev -- pointer to an input device to reset or NULL to reset all of them
  • obj -- pointer to an object which triggers the reset.
void lv_indev_reset_long_press(lv_indev_t *indev)[11]
Reset the long press state of an input device[12]
Parameters
indev -- pointer to an input device
void lv_indev_set_cursor(lv_indev_t *indev, lv_obj_t *cur_obj)[13]
Set a cursor for a pointer input device (for LV_INPUT_TYPE[14]_POINTER and LV_INPUT_TYPE_BUTTON)
Parameters
  • indev -- pointer to an input device
  • cur_obj -- pointer to an object to be used as cursor
void lv_indev_set_group(lv_indev_t *indev, lv_group_t *group)[15]
Set a destination group for a keypad input device (for LV[16]_INDEV_TYPE_KEYPAD)
Parameters
  • indev -- pointer to an input device
  • group -- point to a group
void lv_indev_set_button_points(lv_indev_t *indev, const lv_point_t points[])[17]
Set the an array of points for LV_INDEV_TYPE_BUTTON. These points will be[18] assigned to the buttons to press a specific point on the screen
Parameters
  • indev -- pointer to an input device
  • group -- point to a group
void lv_indev_get_point(const lv_indev_t *indev, lv_point_t *point)[19]
Get the last point of an input device (for LV_INDEV_TYPE_POINTE[20]R and LV_INDEV_TYPE_BUTTON)
Parameters
  • indev -- pointer to an input device
  • point -- pointer to a point to store the result
lv_dir_t lv_indev_get_gesture_dir(const lv_indev_t *indev)[21]
Get the current gesture direct
Parameters
indev [22]-- pointer to an input device
Returns
current gesture direct
uint32_t lv_indev_get_key(const lv_indev_t *indev)[23]
Get the last pressed key of an input device (f[24]or LV_INDEV_TYPE_KEYPAD)
Parameters
indev -- pointer to an input device
Returns
the last pressed key (0 on error)
lv_dir_t lv_indev_get_scroll_dir(const lv_indev_t *indev)[25]
Check the current scroll direction of an input device[26] (for LV_INDEV_TYPE_POINTER and LV_INDEV_TYPE_BUTTON)
Parameters
indev -- pointer to an input device
Returns
LV_DIR_NONE: no scrolling now LV_DIR_HOR/VER
lv_obj_t *lv_indev_get_scroll_obj(const lv_indev_t *indev)[27]
Get the currently scrolled object (for LV_INDEV_TYPE_P[28]OINTER and LV_INDEV_TYPE_BUTTON)
Parameters
indev -- pointer to an input device
Returns
pointer to the currently scrolled object or NULL if no scrolling by this indev
void lv_indev_get_vect(const lv_indev_t *indev, lv_point_t *point)[29]
Get the movement vector of an input device (for LV_INDEV_TYPE_[30]POINTER and LV_INDEV_TYPE_BUTTON)
Parameters
  • indev -- pointer to an input device
  • point -- pointer to a point to store the types.pointer.vector
void lv_indev_wait_release(lv_indev_t *indev)[31]
Do nothing until the next release
Para[32]meters
indev -- pointer to an input device
lv_obj_t *lv_indev_get_obj_act(void)[33]
Gets a pointer to the currently [34]active object in the currently processed input device.
Returns
pointer to currently active object or NULL if no active object
lv_timer_t *lv_indev_get_read_timer(lv_disp_t *indev)[35]
Get a pointer to the indev read timer to modify i[36]ts parameters with lv_timer_... functions.
Parameters
indev -- pointer to an input device
Returns
pointer to the indev read refresher timer. (NULL on error)
lv_obj_t *lv_indev_search_obj(lv_obj_t *obj, lv_point_t *point)[37]
Search the most top, clickable object by a point
Paramet[38]ers
  • obj -- pointer to a start object, typically the screen
  • point -- pointer to a point for searching the most top child
Returns
pointer to the found object or NULL if there was no suitable object

Groups

Typedefs

typedef uint8_t lv_key_t[39]
typedef void ([40]*lv_group_focus_cb_t)(struct _lv_group_t*)[41]
typedef struct _lv_group_t lv_group_t[42]
Gro[43]ups can be used to logically h[44]old objects so that they can be individually focused. They are NOT for laying out objects on a screen (try layouts for that).

Enums

enum [anonymous][45]
Values:
e[46]numerator LV_KEY_UP[47]
enumerator[48] LV_KEY_DOWN[49]
enumerator L[50]V_KEY_RIGHT[51]
enumerator LV[52]_KEY_LEFT[53]
enumerator L[54]V_KEY_ESC[55]
enumerator [56]LV_KEY_DEL[57]
enumerator [58]LV_KEY_BACKSPACE[59]
enumerator LV_KEY[60]_ENTER[61]
enumerator LV[62]_KEY_NEXT[63]
enumerator L[64]V_KEY_PREV[65]
enumerator L[66]V_KEY_HOME[67]
enumerator L[68]V_KEY_END[69]
enum lv_g[70]roup_refocus_policy_t[71]
Values:
enumerator LV_G[72]ROUP_REFOCUS_POLICY_NEXT[73]
enumerator LV_GROUP_REFOCUS_P[74]OLICY_PREV[75]

Functions

void _lv_group_i[76]nit(void)[77]
Init. the group modul[78]e
Remark
Internal function, do not call directly.
lv_group_t *lv_group_create(void)[79]
Create a new object group
[80]Returns
pointer to the new object group
void lv_group_del(lv_group_t *group)[81]
Delete a group object
Paramet[82]ers
group -- pointer to a group
void lv_group_set_default(lv_group_t *group)[83]
Set a default group. New object are adde[84]d to this group if it's enabled in their class with add_to_def_group = true
Parameters
group -- pointer to a group (can be NULL)
lv_group_t *lv_group_get_default(void)[85]
Get the default group
Returns

[86]

pointer to the default group
void lv_group_add_obj(lv_group_t *group, struct _lv_obj_t *obj)[87]
Add an object to a group
Parameters
  • group -- pointe[88]r to a group
  • obj -- pointer to an object to add
void lv_group_swap_obj(struct _lv_obj_t *obj1, struct _lv_obj_t *obj2)[89]
Swap 2 object in a group. The object must be in the same group
[90]Parameters
  • obj1 -- pointer to an object
  • obj2 -- pointer to an other object
void lv_group_remove_obj(struct _lv_obj_t *obj)[91]
Remove an object from its group
Paramete[92]rs
obj -- pointer to an object to remove
void lv_group_remove_all_objs(lv_group_t *group)[93]
Remove all objects from a group
Parameter[94]s
group -- pointer to a group
void lv_group_focus_obj(struct _lv_obj_t *obj)[95]
Focus on an object (defocus the current)
[96]
Parameters
obj -- pointer to an object to focus on
void lv_group_focus_next(lv_group_t *group)[97]
Focus the next object in a group (defoc[98]us the current)
Parameters
group -- pointer to a group
void lv_group_focus_prev(lv_group_t *group)[99]
Focus the previous object in a group (d[100]efocus the current)
Parameters
group -- pointer to a group
void lv_group_focus_freeze(lv_group_t *group, bool en)[101]
Do not let to change the focus from the current ob[102]ject
Parameters
  • group -- pointer to a group
  • en -- true: freeze, false: release freezing (normal mode)
lv_res_t lv_group_send_data(lv_group_t *group, uint32_t c)[103]
Send a control character to the focuses object of a gr[104]oup
Parameters
  • group -- pointer to a group
  • c -- a character (use LV_KEY_.. to navigate)
Returns
result of focused object in group.
void lv_group_set_focus_cb(lv_group_t *group, lv_group_focus_cb_t focus_cb)[105]
Set a function for a group which will be called when a new object is fo[106]cused
Parameters
  • group -- pointer to a group
  • focus_cb -- the call back function or NULL if unused
void lv_group_set_refocus_policy(lv_group_t *group, lv_group_refocus_policy_t policy)[107]
Set whether the next or previous item in a group is focused if the currently focu[108]sed obj is deleted.
Parameters
  • group -- pointer to a group
  • policy -- new refocus policy enum
void lv_group_set_editing(lv_group_t *group, bool edit)[109]
Manually set the current mode (edit or navigate).
[110]
Parameters
  • group -- pointer to group
  • edit -- true: edit mode; false: navigate mode
void lv_group_set_wrap(lv_group_t *group, bool en)[111]
Set whether focus next/prev will allow wrappin[112]g from first->last or last->first object.
Parameters
  • group -- pointer to group
  • en -- true: wrapping enabled; false: wrapping disabled
struct _lv_obj_t *lv_group_get_focused(const lv_group_t *group)[113]
Get the focused object or NULL if there isn't one
Parame[114]ters
group -- pointer to a group
Returns
pointer to the focused object
lv_group_focus_cb_t lv_group_get_focus_cb(const lv_group_t *group)[115]
Get the focus callback function of a group
Parameters
gr[116]oup -- pointer to a group
Returns
the call back function or NULL if not set
bool lv_group_get_editing(const lv_group_t *group)[117]
Get the current mode (edit or navigate).
Pa[118]rameters
group -- pointer to group
Returns
true: edit mode; false: navigate mode
bool lv_group_get_wrap(lv_group_t *group)[119]
Get whether focus next/prev will allo[120]w wrapping from first->last or last->first object.
Parameters
  • group -- pointer to group
  • en -- true: wrapping enabled; false: wrapping disabled
uint32_t lv_group_get_obj_count(lv_group_t *group)[121]
Get the number of object in the group
Param[122]eters
group -- pointer to a group
Returns
number of objects in the group
struct _lv_group_t[123]
#include <lv_g[124]roup.h> Groups can be used to logically hold objects so that they can be individually focused. They are NOT for laying out objects on a screen (try layouts for that). Public Members
lv_ll_t obj_ll[125]
Linked lis[126]t to store the objects in the group
struct _lv_obj_t **obj_focus[127]
The object in focus
[128]lv_group_focus_cb_t focus_cb[129]
A function to call when [130]a new object is focused (optional)
void *user_data[131]
uint8[132]_t frozen[133]
1: can't f[134]ocus to new object
uint8_t editing[135]
1: Edit mod[136]e, 0: Navigate mode
uint8_t refocus_policy[137]
1: Focus prev if f[138]ocused on deletion. 0: Focus next if focused on deletion.
uint8_t wrap[139]
1: Focus[140] next/prev can wrap at end of list. 0: Focus next/prev stops at end of list.






戻る : Previous