# lv_observer.h (/api/public/core/lv_observer_h)



<RelatedHeaders name="lv_observer_private.h" isPrivate="false" />

<ApiSummary functions="70" enums="1" structs="2" typedefs="7" />

Functions [#functions]

<ApiTabs items="[&#x22;Setters (19)&#x22;,&#x22;Getters (14)&#x22;,&#x22;Other (37)&#x22;]">
  <ApiTab value="Setters (19)">
    <ApiMember kind="function" name="lv_subject_set_int" file="public/core/lv_observer.h" line="158" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L158">
      lv_subject_set_int [#lv_subject_set_int]

      Set value of an integer Subject and notify Observers.

      ```c title=" " lineNumbers=1
      void lv_subject_set_int(lv_subject_t *subject, int32_t value)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name      | Type                                                     | Description        |
      | --------- | -------------------------------------------------------- | ------------------ |
      | `subject` | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject |
      | `value`   | `int32_t`                                                | new value          |
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_set_min_value_int" file="public/core/lv_observer.h" line="180" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L180">
      lv_subject_set_min_value_int [#lv_subject_set_min_value_int]

      Set a minimum value for an integer subject

      ```c title=" " lineNumbers=1
      void lv_subject_set_min_value_int(lv_subject_t *subject, int32_t min_value)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name        | Type                                                     | Description        |
      | ----------- | -------------------------------------------------------- | ------------------ |
      | `subject`   | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject |
      | `min_value` | `int32_t`                                                | the minimum value  |
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_set_max_value_int" file="public/core/lv_observer.h" line="187" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L187">
      lv_subject_set_max_value_int [#lv_subject_set_max_value_int]

      Set a maximum value for an integer subject

      ```c title=" " lineNumbers=1
      void lv_subject_set_max_value_int(lv_subject_t *subject, int32_t max_value)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name        | Type                                                     | Description        |
      | ----------- | -------------------------------------------------------- | ------------------ |
      | `subject`   | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject |
      | `max_value` | `int32_t`                                                | the maximum value  |
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_set_float" file="public/core/lv_observer.h" line="205" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L205">
      lv_subject_set_float [#lv_subject_set_float]

      Set value of an float Subject and notify Observers.

      ```c title=" " lineNumbers=1
      void lv_subject_set_float(lv_subject_t *subject, float value)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name      | Type                                                     | Description        |
      | --------- | -------------------------------------------------------- | ------------------ |
      | `subject` | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject |
      | `value`   | `float`                                                  | new value          |
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_set_min_value_float" file="public/core/lv_observer.h" line="226" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L226">
      lv_subject_set_min_value_float [#lv_subject_set_min_value_float]

      Set a minimum value for a float subject

      ```c title=" " lineNumbers=1
      void lv_subject_set_min_value_float(lv_subject_t *subject, float min_value)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name        | Type                                                     | Description        |
      | ----------- | -------------------------------------------------------- | ------------------ |
      | `subject`   | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject |
      | `min_value` | `float`                                                  | the minimum value  |
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_set_max_value_float" file="public/core/lv_observer.h" line="233" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L233">
      lv_subject_set_max_value_float [#lv_subject_set_max_value_float]

      Set a maximum value for a float subject

      ```c title=" " lineNumbers=1
      void lv_subject_set_max_value_float(lv_subject_t *subject, float max_value)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name        | Type                                                     | Description        |
      | ----------- | -------------------------------------------------------- | ------------------ |
      | `subject`   | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject |
      | `max_value` | `float`                                                  | the maximum value  |
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_set_string_buffer_static" file="public/core/lv_observer.h" line="262" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L262">
      lv_subject_set_string_buffer_static [#lv_subject_set_string_buffer_static]

      Set the buffers where a string subject will store its value The buffers must out-live the subject

      ```c title=" " lineNumbers=1
      void lv_subject_set_string_buffer_static(lv_subject_t *subject, char *buf, char *prev_buf, size_t size)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name       | Type                                                     | Description                                                                                                  |
      | ---------- | -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ |
      | `subject`  | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject                                                                                           |
      | `buf`      | `char *`                                                 | pointer to buffer to store string                                                                            |
      | `prev_buf` | `char *`                                                 | pointer to buffer to store previous string. **May** be `NULL`. When NULL the previous string is not tracked. |
      | `size`     | `size_t`                                                 | size of buffer(s)                                                                                            |

      <Callout type="info">
        A string Subject stores its own copy of the string, not just the pointer.
      </Callout>
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_set_string" file="public/core/lv_observer.h" line="270" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L270">
      lv_subject_set_string [#lv_subject_set_string]

      Set a Subject's string value and notify Observers if it changed.

      ```c title=" " lineNumbers=1
      void lv_subject_set_string(lv_subject_t *subject, const char *buf)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name      | Type                                                     | Description        |
      | --------- | -------------------------------------------------------- | ------------------ |
      | `subject` | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject |
      | `buf`     | `const char *`                                           | new string         |

      <Callout type="info">
        The Subject stores its own copy of the string, not just the pointer.
      </Callout>
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_set_pointer" file="public/core/lv_observer.h" line="307" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L307">
      lv_subject_set_pointer [#lv_subject_set_pointer]

      Set value of a pointer Subject and notify Observers (regardless of whether it changed).

      ```c title=" " lineNumbers=1
      void lv_subject_set_pointer(lv_subject_t *subject, void *ptr)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name      | Type                                                     | Description                  |
      | --------- | -------------------------------------------------------- | ---------------------------- |
      | `subject` | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject           |
      | `ptr`     | `void *`                                                 | new value **May** be `NULL`. |
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_set_color" file="public/core/lv_observer.h" line="337" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L337">
      lv_subject_set_color [#lv_subject_set_color]

      Set value of a color Subject and notify Observers if it changed.

      ```c title=" " lineNumbers=1
      void lv_subject_set_color(lv_subject_t *subject, lv_color_t color)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name      | Type                                                     | Description        |
      | --------- | -------------------------------------------------------- | ------------------ |
      | `subject` | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject |
      | `color`   | <ApiLink name="lv_color_t" />                            | new value          |
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_set_group_list_static" file="public/core/lv_observer.h" line="372" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L372">
      lv_subject_set_group_list_static [#lv_subject_set_group_list_static]

      Set the subject list of a group subject

      ```c title=" " lineNumbers=1
      void lv_subject_set_group_list_static(lv_subject_t *subject, lv_subject_t *list[], uint32_t list_len)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name       | Type                                                     | Description                                                                                                            |
      | ---------- | -------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
      | `subject`  | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to group Subject                                                                                               |
      | `list`     | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | list of other Subject addresses; when any of these have values updated, Observers of `group_subject` will be notified. |
      | `list_len` | `uint32_t`                                               | number of elements in `list[]`                                                                                         |
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_set_external_data" file="public/core/lv_observer.h" line="491" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L491">
      lv_subject_set_external_data [#lv_subject_set_external_data]

      Attaches external user data to an integer Subject with lifecycle management.

      Associates arbitrary user-defined data with an LVGL observer and registers a destructor callback that will be automatically invoked when the observer is deleted. This enables:

      * Safe resource cleanup through the destructor mechanism
      * Contextual data storage for observer callbacks
      * Proper memory management for observer-related resources

      ```c title=" " lineNumbers=1
      void lv_subject_set_external_data(lv_subject_t *subject, void *data, void(*free_cb)(void *data))
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name      | Type                                                     | Description                                                                                                                                                                                              |
      | --------- | -------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
      | `subject` | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject                                                                                                                                                                                       |
      | `data`    | `void *`                                                 | User-defined data pointer to associate **May** be `NULL`.                                                                                                                                                |
      | `free_cb` | `void(*)(void *data)`                                    | Cleanup function called when: **May** be `NULL`.<br />- Observer is explicitly deleted<br />- Observed object is deleted<br />- New data replaces current association NULL indicates no cleanup required |
    </ApiMember>

    <ApiMember kind="function" name="lv_observer_set_user_data" file="public/core/lv_observer.h" line="499" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L499">
      lv_observer_set_user_data [#lv_observer_set_user_data]

      Set Observer's user data.

      ```c title=" " lineNumbers=1
      void lv_observer_set_user_data(lv_observer_t *observer, void *user_data)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name        | Type                                                       | Description                                                 |
      | ----------- | ---------------------------------------------------------- | ----------------------------------------------------------- |
      | `observer`  | <ApiLink name="lv_observer_t" display="lv_observer_t *" /> | pointer to Observer                                         |
      | `user_data` | `void *`                                                   | pointer to user-owned data (may be NULL) **May** be `NULL`. |
    </ApiMember>

    <ApiMember kind="function" name="lv_obj_set_subject_increment_event_min_value" file="public/core/lv_observer.h" line="524" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L524">
      lv_obj_set_subject_increment_event_min_value [#lv_obj_set_subject_increment_event_min_value]

      Set the minimum subject value to set by the event

      ```c title=" " lineNumbers=1
      void lv_obj_set_subject_increment_event_min_value(lv_obj_t *obj, lv_subject_increment_dsc_t *dsc, int32_t min_value)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name        | Type                                                                                 | Description                                                                                                                                |
      | ----------- | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ |
      | `obj`       | <ApiLink name="lv_obj_t" display="lv_obj_t *" />                                     | pointer to the Widget to which the event is attached                                                                                       |
      | `dsc`       | <ApiLink name="lv_subject_increment_dsc_t" display="lv_subject_increment_dsc_t *" /> | pointer to the descriptor returned by <ApiLink name="lv_obj_add_subject_increment_event" display="lv_obj_add_subject_increment_event()" /> |
      | `min_value` | `int32_t`                                                                            | the minimum value to set                                                                                                                   |
    </ApiMember>

    <ApiMember kind="function" name="lv_obj_set_subject_increment_event_max_value" file="public/core/lv_observer.h" line="532" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L532">
      lv_obj_set_subject_increment_event_max_value [#lv_obj_set_subject_increment_event_max_value]

      Set the maximum subject value to set by the event

      ```c title=" " lineNumbers=1
      void lv_obj_set_subject_increment_event_max_value(lv_obj_t *obj, lv_subject_increment_dsc_t *dsc, int32_t max_value)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name        | Type                                                                                 | Description                                                                                                                                |
      | ----------- | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ |
      | `obj`       | <ApiLink name="lv_obj_t" display="lv_obj_t *" />                                     | pointer to the Widget to which the event is attached                                                                                       |
      | `dsc`       | <ApiLink name="lv_subject_increment_dsc_t" display="lv_subject_increment_dsc_t *" /> | pointer to the descriptor returned by <ApiLink name="lv_obj_add_subject_increment_event" display="lv_obj_add_subject_increment_event()" /> |
      | `max_value` | `int32_t`                                                                            | the maximum value to set                                                                                                                   |
    </ApiMember>

    <ApiMember kind="function" name="lv_obj_set_subject_increment_event_rollover" file="public/core/lv_observer.h" line="541" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L541">
      lv_obj_set_subject_increment_event_rollover [#lv_obj_set_subject_increment_event_rollover]

      Set what to do when the min/max value is crossed.

      ```c title=" " lineNumbers=1
      void lv_obj_set_subject_increment_event_rollover(lv_obj_t *obj, lv_subject_increment_dsc_t *dsc, bool rollover)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name       | Type                                                                                 | Description                                                                                                                                |
      | ---------- | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ |
      | `obj`      | <ApiLink name="lv_obj_t" display="lv_obj_t *" />                                     | pointer to the Widget to which the event is attached                                                                                       |
      | `dsc`      | <ApiLink name="lv_subject_increment_dsc_t" display="lv_subject_increment_dsc_t *" /> | pointer to the descriptor returned by <ApiLink name="lv_obj_add_subject_increment_event" display="lv_obj_add_subject_increment_event()" /> |
      | `rollover` | `bool`                                                                               | false: stop at the min/max value; true: jump to the other end                                                                              |

      <Callout type="info">
        the subject also can have min/max values and always the smaller range will be considered
      </Callout>
    </ApiMember>

    <ApiMember kind="function" name="lv_obj_add_subject_set_int_event" file="public/core/lv_observer.h" line="559" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L559">
      lv_obj_add_subject_set_int_event [#lv_obj_add_subject_set_int_event]

      Set the value of an integer subject.

      ```c title=" " lineNumbers=1
      void lv_obj_add_subject_set_int_event(lv_obj_t *obj, lv_subject_t *subject, lv_event_code_t trigger, int32_t value)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name      | Type                                                     | Description                                        |
      | --------- | -------------------------------------------------------- | -------------------------------------------------- |
      | `obj`     | <ApiLink name="lv_obj_t" display="lv_obj_t *" />         | pointer to a widget                                |
      | `subject` | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to a subject to change                     |
      | `trigger` | <ApiLink name="lv_event_code_t" />                       | the trigger on which the subject should be changed |
      | `value`   | `int32_t`                                                | the value to set                                   |
    </ApiMember>

    <ApiMember kind="function" name="lv_obj_add_subject_set_float_event" file="public/core/lv_observer.h" line="570" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L570">
      lv_obj_add_subject_set_float_event [#lv_obj_add_subject_set_float_event]

      Set the value of a float subject.

      ```c title=" " lineNumbers=1
      void lv_obj_add_subject_set_float_event(lv_obj_t *obj, lv_subject_t *subject, lv_event_code_t trigger, float value)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name      | Type                                                     | Description                                        |
      | --------- | -------------------------------------------------------- | -------------------------------------------------- |
      | `obj`     | <ApiLink name="lv_obj_t" display="lv_obj_t *" />         | pointer to a widget                                |
      | `subject` | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to a subject to change                     |
      | `trigger` | <ApiLink name="lv_event_code_t" />                       | the trigger on which the subject should be changed |
      | `value`   | `float`                                                  | the value to set                                   |
    </ApiMember>

    <ApiMember kind="function" name="lv_obj_add_subject_set_string_event" file="public/core/lv_observer.h" line="580" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L580">
      lv_obj_add_subject_set_string_event [#lv_obj_add_subject_set_string_event]

      Set the value of a string subject.

      ```c title=" " lineNumbers=1
      void lv_obj_add_subject_set_string_event(lv_obj_t *obj, lv_subject_t *subject, lv_event_code_t trigger, const char *value)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name      | Type                                                     | Description                                        |
      | --------- | -------------------------------------------------------- | -------------------------------------------------- |
      | `obj`     | <ApiLink name="lv_obj_t" display="lv_obj_t *" />         | pointer to a widget                                |
      | `subject` | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to a subject to change                     |
      | `trigger` | <ApiLink name="lv_event_code_t" />                       | the trigger on which the subject should be changed |
      | `value`   | `const char *`                                           | the value to set                                   |
    </ApiMember>
  </ApiTab>

  <ApiTab value="Getters (14)">
    <ApiMember kind="function" name="lv_subject_get_int" file="public/core/lv_observer.h" line="165" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L165">
      lv_subject_get_int [#lv_subject_get_int]

      Get current value of an integer Subject.

      ```c title=" " lineNumbers=1
      int32_t lv_subject_get_int(lv_subject_t *subject)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name      | Type                                                     | Description        |
      | --------- | -------------------------------------------------------- | ------------------ |
      | `subject` | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject |

      **Returns:** `int32_t` — current value
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_get_previous_int" file="public/core/lv_observer.h" line="172" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L172">
      lv_subject_get_previous_int [#lv_subject_get_previous_int]

      Get previous value of an integer Subject.

      ```c title=" " lineNumbers=1
      int32_t lv_subject_get_previous_int(lv_subject_t *subject)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name      | Type                                                     | Description        |
      | --------- | -------------------------------------------------------- | ------------------ |
      | `subject` | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject |

      **Returns:** `int32_t` — current value
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_get_float" file="public/core/lv_observer.h" line="212" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L212">
      lv_subject_get_float [#lv_subject_get_float]

      Get current value of an float Subject.

      ```c title=" " lineNumbers=1
      float lv_subject_get_float(lv_subject_t *subject)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name      | Type                                                     | Description        |
      | --------- | -------------------------------------------------------- | ------------------ |
      | `subject` | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject |

      **Returns:** `float` — current value
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_get_previous_float" file="public/core/lv_observer.h" line="219" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L219">
      lv_subject_get_previous_float [#lv_subject_get_previous_float]

      Get previous value of an float Subject.

      ```c title=" " lineNumbers=1
      float lv_subject_get_previous_float(lv_subject_t *subject)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name      | Type                                                     | Description        |
      | --------- | -------------------------------------------------------- | ------------------ |
      | `subject` | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject |

      **Returns:** `float` — current value
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_get_string" file="public/core/lv_observer.h" line="284" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L284">
      lv_subject_get_string [#lv_subject_get_string]

      Get current value of a string Subject.

      ```c title=" " lineNumbers=1
      const char * lv_subject_get_string(lv_subject_t *subject)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name      | Type                                                     | Description        |
      | --------- | -------------------------------------------------------- | ------------------ |
      | `subject` | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject |

      **Returns:** `const char *` — pointer to buffer containing current value
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_get_previous_string" file="public/core/lv_observer.h" line="291" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L291">
      lv_subject_get_previous_string [#lv_subject_get_previous_string]

      Get previous value of a string Subject.

      ```c title=" " lineNumbers=1
      const char * lv_subject_get_previous_string(lv_subject_t *subject)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name      | Type                                                     | Description        |
      | --------- | -------------------------------------------------------- | ------------------ |
      | `subject` | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject |

      **Returns:** `const char *` — pointer to buffer containing previous value
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_get_pointer" file="public/core/lv_observer.h" line="314" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L314">
      lv_subject_get_pointer [#lv_subject_get_pointer]

      Get current value of a pointer Subject.

      ```c title=" " lineNumbers=1
      const void * lv_subject_get_pointer(lv_subject_t *subject)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name      | Type                                                     | Description        |
      | --------- | -------------------------------------------------------- | ------------------ |
      | `subject` | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject |

      **Returns:** `const void *` — current value
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_get_previous_pointer" file="public/core/lv_observer.h" line="321" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L321">
      lv_subject_get_previous_pointer [#lv_subject_get_previous_pointer]

      Get previous value of a pointer Subject.

      ```c title=" " lineNumbers=1
      const void * lv_subject_get_previous_pointer(lv_subject_t *subject)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name      | Type                                                     | Description        |
      | --------- | -------------------------------------------------------- | ------------------ |
      | `subject` | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject |

      **Returns:** `const void *` — previous value
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_get_color" file="public/core/lv_observer.h" line="344" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L344">
      lv_subject_get_color [#lv_subject_get_color]

      Get current value of a color Subject.

      ```c title=" " lineNumbers=1
      lv_color_t lv_subject_get_color(lv_subject_t *subject)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name      | Type                                                     | Description        |
      | --------- | -------------------------------------------------------- | ------------------ |
      | `subject` | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject |

      **Returns:** <ApiLink name="lv_color_t" /> — current value
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_get_previous_color" file="public/core/lv_observer.h" line="351" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L351">
      lv_subject_get_previous_color [#lv_subject_get_previous_color]

      Get previous value of a color Subject.

      ```c title=" " lineNumbers=1
      lv_color_t lv_subject_get_previous_color(lv_subject_t *subject)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name      | Type                                                     | Description        |
      | --------- | -------------------------------------------------------- | ------------------ |
      | `subject` | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject |

      **Returns:** <ApiLink name="lv_color_t" /> — previous value
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_get_group_element" file="public/core/lv_observer.h" line="393" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L393">
      lv_subject_get_group_element [#lv_subject_get_group_element]

      Get an element from Subject Group's list.

      ```c title=" " lineNumbers=1
      lv_subject_t * lv_subject_get_group_element(lv_subject_t *subject, int32_t index)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name      | Type                                                     | Description                   |
      | --------- | -------------------------------------------------------- | ----------------------------- |
      | `subject` | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Group-type Subject |
      | `index`   | `int32_t`                                                | index of element to get       |

      **Returns:** <ApiLink name="lv_subject_t" display="lv_subject_t *" /> — pointer to indexed Subject from list, or NULL if index is out of bounds
    </ApiMember>

    <ApiMember kind="function" name="lv_observer_get_target" file="public/core/lv_observer.h" line="454" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L454">
      lv_observer_get_target [#lv_observer_get_target]

      Get target of an Observer.

      ```c title=" " lineNumbers=1
      void * lv_observer_get_target(lv_observer_t *observer)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name       | Type                                                       | Description         |
      | ---------- | ---------------------------------------------------------- | ------------------- |
      | `observer` | <ApiLink name="lv_observer_t" display="lv_observer_t *" /> | pointer to Observer |

      **Returns:** `void *` — pointer to saved target
    </ApiMember>

    <ApiMember kind="function" name="lv_observer_get_target_obj" file="public/core/lv_observer.h" line="463" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L463">
      lv_observer_get_target_obj [#lv_observer_get_target_obj]

      Get target Widget of Observer. This is the same as <ApiLink name="lv_observer_get_target" display="lv_observer_get_target()" />, except it returns `target` as an `lv_obj_t *`.

      ```c title=" " lineNumbers=1
      lv_obj_t * lv_observer_get_target_obj(lv_observer_t *observer)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name       | Type                                                       | Description         |
      | ---------- | ---------------------------------------------------------- | ------------------- |
      | `observer` | <ApiLink name="lv_observer_t" display="lv_observer_t *" /> | pointer to Observer |

      **Returns:** <ApiLink name="lv_obj_t" display="lv_obj_t *" /> — pointer to saved Widget target
    </ApiMember>

    <ApiMember kind="function" name="lv_observer_get_user_data" file="public/core/lv_observer.h" line="470" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L470">
      lv_observer_get_user_data [#lv_observer_get_user_data]

      Get Observer's user data.

      ```c title=" " lineNumbers=1
      void * lv_observer_get_user_data(const lv_observer_t *observer)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name       | Type                                                             | Description         |
      | ---------- | ---------------------------------------------------------------- | ------------------- |
      | `observer` | <ApiLink name="lv_observer_t" display="const lv_observer_t *" /> | pointer to Observer |

      **Returns:** `void *` — void pointer to saved user data
    </ApiMember>
  </ApiTab>

  <ApiTab value="Other (37)">
    <ApiMember kind="function" name="lv_subject_create" file="public/core/lv_observer.h" line="136" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L136">
      lv_subject_create [#lv_subject_create]

      Create a subject of type `type`

      ```c title=" " lineNumbers=1
      lv_subject_t * lv_subject_create(lv_subject_type_t type)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name   | Type                                 | Description                                                       |
      | ------ | ------------------------------------ | ----------------------------------------------------------------- |
      | `type` | <ApiLink name="lv_subject_type_t" /> | the type of the subject. See <ApiLink name="lv_subject_type_t" /> |
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_delete" file="public/core/lv_observer.h" line="142" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L142">
      lv_subject_delete [#lv_subject_delete]

      Delete a subject

      ```c title=" " lineNumbers=1
      void lv_subject_delete(lv_subject_t *subject)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name      | Type                                                     | Description                              |
      | --------- | -------------------------------------------------------- | ---------------------------------------- |
      | `subject` | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | the subject to delete **May** be `NULL`. |
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_init_int" file="public/core/lv_observer.h" line="151" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L151">
      lv_subject_init_int [#lv_subject_init_int]

      Initialize an integer-type Subject.

      \> &#x2A;*Deprecated:** The subject init API is deprecated, use `lv_subject_create` instead

      ```c title=" " lineNumbers=1
      void lv_subject_init_int(lv_subject_t *subject, int32_t value)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name      | Type                                                     | Description        |
      | --------- | -------------------------------------------------------- | ------------------ |
      | `subject` | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject |
      | `value`   | `int32_t`                                                | initial value      |
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_init_float" file="public/core/lv_observer.h" line="198" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L198">
      lv_subject_init_float [#lv_subject_init_float]

      Initialize an float-type Subject.

      \> &#x2A;*Deprecated:** The subject init API is deprecated, use `lv_subject_create` instead

      ```c title=" " lineNumbers=1
      void lv_subject_init_float(lv_subject_t *subject, float value)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name      | Type                                                     | Description        |
      | --------- | -------------------------------------------------------- | ------------------ |
      | `subject` | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject |
      | `value`   | `float`                                                  | initial value      |
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_init_string" file="public/core/lv_observer.h" line="249" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L249">
      lv_subject_init_string [#lv_subject_init_string]

      Initialize a string-type Subject.

      \> &#x2A;*Deprecated:** The subject init API is deprecated, use `lv_subject_create` instead

      ```c title=" " lineNumbers=1
      void lv_subject_init_string(lv_subject_t *subject, char *buf, char *prev_buf, size_t size, const char *value)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name       | Type                                                     | Description                                                                                                  |
      | ---------- | -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ |
      | `subject`  | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject                                                                                           |
      | `buf`      | `char *`                                                 | pointer to buffer to store string                                                                            |
      | `prev_buf` | `char *`                                                 | pointer to buffer to store previous string. **May** be `NULL`. When NULL the previous string is not tracked. |
      | `size`     | `size_t`                                                 | size of buffer(s)                                                                                            |
      | `value`    | `const char *`                                           | initial value of string, e.g. "hello"                                                                        |

      <Callout type="info">
        A string Subject stores its own copy of the string, not just the pointer.
      </Callout>
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_snprintf" file="public/core/lv_observer.h" line="277" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L277">
      lv_subject_snprintf [#lv_subject_snprintf]

      Format a new string, updating Subject, and notify Observers if it changed.

      ```c title=" " lineNumbers=1
      void lv_subject_snprintf(lv_subject_t *subject, const char *format,...)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name      | Type                                                     | Description        |
      | --------- | -------------------------------------------------------- | ------------------ |
      | `subject` | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject |
      | `format`  | `const char *`                                           | format string      |
      | `...`     |                                                          |                    |
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_init_pointer" file="public/core/lv_observer.h" line="300" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L300">
      lv_subject_init_pointer [#lv_subject_init_pointer]

      Initialize a pointer-type Subject.

      \> &#x2A;*Deprecated:** The subject init API is deprecated, use `lv_subject_create` instead

      ```c title=" " lineNumbers=1
      void lv_subject_init_pointer(lv_subject_t *subject, void *value)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name      | Type                                                     | Description                      |
      | --------- | -------------------------------------------------------- | -------------------------------- |
      | `subject` | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject               |
      | `value`   | `void *`                                                 | initial value **May** be `NULL`. |
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_init_color" file="public/core/lv_observer.h" line="330" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L330">
      lv_subject_init_color [#lv_subject_init_color]

      Initialize a color-type Subject.

      \> &#x2A;*Deprecated:** The subject init API is deprecated, use `lv_subject_create` instead

      ```c title=" " lineNumbers=1
      void lv_subject_init_color(lv_subject_t *subject, lv_color_t color)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name      | Type                                                     | Description        |
      | --------- | -------------------------------------------------------- | ------------------ |
      | `subject` | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject |
      | `color`   | <ApiLink name="lv_color_t" />                            | initial value      |
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_init_group" file="public/core/lv_observer.h" line="362" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L362">
      lv_subject_init_group [#lv_subject_init_group]

      Initialize a Group-type Subject.

      \> &#x2A;*Deprecated:** The subject init API is deprecated, use `lv_subject_create` instead

      ```c title=" " lineNumbers=1
      void lv_subject_init_group(lv_subject_t *group_subject, lv_subject_t *list[], uint32_t list_len)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name            | Type                                                     | Description                                                                                                            |
      | --------------- | -------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
      | `group_subject` | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Group-type Subject                                                                                          |
      | `list`          | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | list of other Subject addresses; when any of these have values updated, Observers of `group_subject` will be notified. |
      | `list_len`      | `uint32_t`                                               | number of elements in `list[]`                                                                                         |
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_deinit" file="public/core/lv_observer.h" line="385" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L385">
      lv_subject_deinit [#lv_subject_deinit]

      Remove all Observers from a Subject and free allocated memory, and delete any associated Widget-Binding events. This leaves `subject` "disconnected" from all Observers and all associated Widget events established through Widget Binding.

      \> &#x2A;*Deprecated:** The subject init API is deprecated, use `lv_subject_create`/`lv_subject_delete` instead

      ```c title=" " lineNumbers=1
      void lv_subject_deinit(lv_subject_t *subject)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name      | Type                                                     | Description                           |
      | --------- | -------------------------------------------------------- | ------------------------------------- |
      | `subject` | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject **May** be `NULL`. |

      <Callout type="info">
        This can safely be called regardless of whether any Observers added with <ApiLink name="lv_subject_add_observer_obj" display="lv_subject_add_observer_obj()" /> or bound to a Widget Property with one of the `..._bind_...()` functions.
      </Callout>
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_add_observer" file="public/core/lv_observer.h" line="402" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L402">
      lv_subject_add_observer [#lv_subject_add_observer]

      Add Observer to Subject. When Subject's value changes `observer_cb` will be called.

      ```c title=" " lineNumbers=1
      lv_observer_t * lv_subject_add_observer(lv_subject_t *subject, lv_observer_cb_t observer_cb, void *user_data)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name          | Type                                                     | Description                           |
      | ------------- | -------------------------------------------------------- | ------------------------------------- |
      | `subject`     | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject                    |
      | `observer_cb` | <ApiLink name="lv_observer_cb_t" />                      | notification callback                 |
      | `user_data`   | `void *`                                                 | optional user data **May** be `NULL`. |

      **Returns:** <ApiLink name="lv_observer_t" display="lv_observer_t *" /> — pointer to newly-created Observer
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_add_observer_obj" file="public/core/lv_observer.h" line="419" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L419">
      lv_subject_add_observer_obj [#lv_subject_add_observer_obj]

      Add Observer to Subject for a Widget. When the Widget is deleted, Observer will be unsubscribed from Subject automatically.

      ```c title=" " lineNumbers=1
      lv_observer_t * lv_subject_add_observer_obj(lv_subject_t *subject, lv_observer_cb_t observer_cb, lv_obj_t *obj, void *user_data)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name          | Type                                                     | Description                                                                            |
      | ------------- | -------------------------------------------------------- | -------------------------------------------------------------------------------------- |
      | `subject`     | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject                                                                     |
      | `observer_cb` | <ApiLink name="lv_observer_cb_t" />                      | notification callback                                                                  |
      | `obj`         | <ApiLink name="lv_obj_t" display="lv_obj_t *" />         | pointer to Widget. **May** be `NULL`. When NULL the Observer is not bound to a Widget. |
      | `user_data`   | `void *`                                                 | optional user data **May** be `NULL`.                                                  |

      **Returns:** <ApiLink name="lv_observer_t" display="lv_observer_t *" /> — pointer to newly-created Observer

      <Callout type="info">
        Do not call <ApiLink name="lv_observer_delete" display="lv_observer_delete()" /> on Observers created this way. Only clean up such Observers by either:

        * deleting the Widget, or
        * calling <ApiLink name="lv_subject_deinit" display="lv_subject_deinit()" /> to gracefully de-couple and remove all Observers.
      </Callout>
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_add_observer_with_target" file="public/core/lv_observer.h" line="430" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L430">
      lv_subject_add_observer_with_target [#lv_subject_add_observer_with_target]

      Add an Observer to a Subject and also save a target pointer.

      ```c title=" " lineNumbers=1
      lv_observer_t * lv_subject_add_observer_with_target(lv_subject_t *subject, lv_observer_cb_t observer_cb, void *target, void *user_data)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name          | Type                                                     | Description                           |
      | ------------- | -------------------------------------------------------- | ------------------------------------- |
      | `subject`     | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject                    |
      | `observer_cb` | <ApiLink name="lv_observer_cb_t" />                      | notification callback                 |
      | `target`      | `void *`                                                 | any pointer **May** be `NULL`.        |
      | `user_data`   | `void *`                                                 | optional user data **May** be `NULL`. |

      **Returns:** <ApiLink name="lv_observer_t" display="lv_observer_t *" /> — pointer to newly-created Observer
    </ApiMember>

    <ApiMember kind="function" name="lv_observer_delete" file="public/core/lv_observer.h" line="437" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L437">
      lv_observer_delete [#lv_observer_delete]

      Remove Observer from its Subject.

      ```c title=" " lineNumbers=1
      void lv_observer_delete(lv_observer_t *observer)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name       | Type                                                       | Description                            |
      | ---------- | ---------------------------------------------------------- | -------------------------------------- |
      | `observer` | <ApiLink name="lv_observer_t" display="lv_observer_t *" /> | pointer to Observer **May** be `NULL`. |
    </ApiMember>

    <ApiMember kind="function" name="lv_obj_remove_from_subject" file="public/core/lv_observer.h" line="447" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L447">
      lv_obj_remove_from_subject [#lv_obj_remove_from_subject]

      Remove Observers associated with Widget `obj` from specified `subject` or all Subjects.

      ```c title=" " lineNumbers=1
      void lv_obj_remove_from_subject(lv_obj_t *obj, lv_subject_t *subject)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name      | Type                                                     | Description                                                                                          |
      | --------- | -------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
      | `obj`     | <ApiLink name="lv_obj_t" display="lv_obj_t *" />         | pointer to Widget whose Observers should be removed                                                  |
      | `subject` | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | Subject to remove Widget from. **May** be `NULL`. When NULL the Widget is removed from all Subjects. |

      <Callout type="info">
        This function can be used e.g. when a Widget's Subject(s) needs to be replaced by other Subject(s)
      </Callout>
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_notify" file="public/core/lv_observer.h" line="505" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L505">
      lv_subject_notify [#lv_subject_notify]

      Notify all Observers of Subject.

      ```c title=" " lineNumbers=1
      void lv_subject_notify(lv_subject_t *subject)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name      | Type                                                     | Description        |
      | --------- | -------------------------------------------------------- | ------------------ |
      | `subject` | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject |
    </ApiMember>

    <ApiMember kind="function" name="lv_obj_add_subject_increment_event" file="public/core/lv_observer.h" line="515" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L515">
      lv_obj_add_subject_increment_event [#lv_obj_add_subject_increment_event]

      Add an event handler to increment (or decrement) the value of a subject on a trigger.

      ```c title=" " lineNumbers=1
      lv_subject_increment_dsc_t * lv_obj_add_subject_increment_event(lv_obj_t *obj, lv_subject_t *subject, lv_event_code_t trigger, int32_t step)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name      | Type                                                     | Description                                                                                         |
      | --------- | -------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
      | `obj`     | <ApiLink name="lv_obj_t" display="lv_obj_t *" />         | pointer to a widget                                                                                 |
      | `subject` | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to a subject to change                                                                      |
      | `trigger` | <ApiLink name="lv_event_code_t" />                       | the trigger on which the subject should be changed                                                  |
      | `step`    | `int32_t`                                                | value to add on trigger if the minimum value is reached, the maximum value will be set on rollover. |
    </ApiMember>

    <ApiMember kind="function" name="lv_obj_add_subject_toggle_event" file="public/core/lv_observer.h" line="550" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L550">
      lv_obj_add_subject_toggle_event [#lv_obj_add_subject_toggle_event]

      Toggle the value of an integer subject on an event. If it was != 0 it will be 0. If it was 0, it will be 1.

      ```c title=" " lineNumbers=1
      void lv_obj_add_subject_toggle_event(lv_obj_t *obj, lv_subject_t *subject, lv_event_code_t trigger)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name      | Type                                                     | Description                                        |
      | --------- | -------------------------------------------------------- | -------------------------------------------------- |
      | `obj`     | <ApiLink name="lv_obj_t" display="lv_obj_t *" />         | pointer to a widget                                |
      | `subject` | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to a subject to toggle                     |
      | `trigger` | <ApiLink name="lv_event_code_t" />                       | the trigger on which the subject should be changed |
    </ApiMember>

    <ApiMember kind="function" name="lv_obj_bind_bool" file="public/core/lv_observer.h" line="592" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L592">
      lv_obj_bind_bool [#lv_obj_bind_bool]

      Bind a boolean value to a Widget: `set_bool_cb` is called with the Subject's value (as a `bool`) on subscribing and whenever it changes. A dedicated per-flag setter such as `lv_obj_set_hidden` can be passed directly.

      ```c title=" " lineNumbers=1
      lv_observer_t * lv_obj_bind_bool(lv_obj_t *obj, lv_subject_t *subject, lv_obj_set_bool_t set_bool_cb)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name          | Type                                                     | Description                                           |
      | ------------- | -------------------------------------------------------- | ----------------------------------------------------- |
      | `obj`         | <ApiLink name="lv_obj_t" display="lv_obj_t *" />         | pointer to Widget                                     |
      | `subject`     | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to an integer Subject                         |
      | `set_bool_cb` | <ApiLink name="lv_obj_set_bool_t" />                     | callback that applies the boolean value to the Widget |

      **Returns:** <ApiLink name="lv_observer_t" display="lv_observer_t *" /> — pointer to newly-created Observer
    </ApiMember>

    <ApiMember kind="function" name="lv_obj_bind_int" file="public/core/lv_observer.h" line="602" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L602">
      lv_obj_bind_int [#lv_obj_bind_int]

      Bind an integer value to a Widget: `set_int_cb` is called with the Subject's value on subscribing and whenever it changes.

      ```c title=" " lineNumbers=1
      lv_observer_t * lv_obj_bind_int(lv_obj_t *obj, lv_subject_t *subject, lv_obj_set_int_t set_int_cb)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name         | Type                                                     | Description                                           |
      | ------------ | -------------------------------------------------------- | ----------------------------------------------------- |
      | `obj`        | <ApiLink name="lv_obj_t" display="lv_obj_t *" />         | pointer to Widget                                     |
      | `subject`    | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to an integer Subject                         |
      | `set_int_cb` | <ApiLink name="lv_obj_set_int_t" />                      | callback that applies the integer value to the Widget |

      **Returns:** <ApiLink name="lv_observer_t" display="lv_observer_t *" /> — pointer to newly-created Observer
    </ApiMember>

    <ApiMember kind="function" name="lv_obj_bind_float" file="public/core/lv_observer.h" line="613" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L613">
      lv_obj_bind_float [#lv_obj_bind_float]

      Bind a float value to a Widget: `set_float_cb` is called with the Subject's value on subscribing and whenever it changes.

      ```c title=" " lineNumbers=1
      lv_observer_t * lv_obj_bind_float(lv_obj_t *obj, lv_subject_t *subject, lv_obj_set_float_t set_float_cb)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name           | Type                                                     | Description                                         |
      | -------------- | -------------------------------------------------------- | --------------------------------------------------- |
      | `obj`          | <ApiLink name="lv_obj_t" display="lv_obj_t *" />         | pointer to Widget                                   |
      | `subject`      | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to a float Subject                          |
      | `set_float_cb` | <ApiLink name="lv_obj_set_float_t" />                    | callback that applies the float value to the Widget |

      **Returns:** <ApiLink name="lv_observer_t" display="lv_observer_t *" /> — pointer to newly-created Observer
    </ApiMember>

    <ApiMember kind="function" name="lv_obj_bind_string" file="public/core/lv_observer.h" line="624" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L624">
      lv_obj_bind_string [#lv_obj_bind_string]

      Bind a string value to a Widget: `set_string_cb` is called with the Subject's value on subscribing and whenever it changes.

      ```c title=" " lineNumbers=1
      lv_observer_t * lv_obj_bind_string(lv_obj_t *obj, lv_subject_t *subject, lv_obj_set_string_t set_string_cb)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name            | Type                                                     | Description                                          |
      | --------------- | -------------------------------------------------------- | ---------------------------------------------------- |
      | `obj`           | <ApiLink name="lv_obj_t" display="lv_obj_t *" />         | pointer to Widget                                    |
      | `subject`       | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to a string Subject                          |
      | `set_string_cb` | <ApiLink name="lv_obj_set_string_t" />                   | callback that applies the string value to the Widget |

      **Returns:** <ApiLink name="lv_observer_t" display="lv_observer_t *" /> — pointer to newly-created Observer
    </ApiMember>

    <ApiMember kind="function" name="lv_obj_bind_color" file="public/core/lv_observer.h" line="634" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L634">
      lv_obj_bind_color [#lv_obj_bind_color]

      Bind a color value to a Widget: `set_color_cb` is called with the Subject's value on subscribing and whenever it changes.

      ```c title=" " lineNumbers=1
      lv_observer_t * lv_obj_bind_color(lv_obj_t *obj, lv_subject_t *subject, lv_obj_set_color_t set_color_cb)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name           | Type                                                     | Description                                         |
      | -------------- | -------------------------------------------------------- | --------------------------------------------------- |
      | `obj`          | <ApiLink name="lv_obj_t" display="lv_obj_t *" />         | pointer to Widget                                   |
      | `subject`      | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to a color Subject                          |
      | `set_color_cb` | <ApiLink name="lv_obj_set_color_t" />                    | callback that applies the color value to the Widget |

      **Returns:** <ApiLink name="lv_observer_t" display="lv_observer_t *" /> — pointer to newly-created Observer
    </ApiMember>

    <ApiMember kind="function" name="lv_obj_bind_pointer" file="public/core/lv_observer.h" line="644" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L644">
      lv_obj_bind_pointer [#lv_obj_bind_pointer]

      Bind a pointer value to a Widget: `set_pointer_cb` is called with the Subject's value on subscribing and whenever it changes.

      ```c title=" " lineNumbers=1
      lv_observer_t * lv_obj_bind_pointer(lv_obj_t *obj, lv_subject_t *subject, lv_obj_set_pointer_t set_pointer_cb)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name             | Type                                                     | Description                                           |
      | ---------------- | -------------------------------------------------------- | ----------------------------------------------------- |
      | `obj`            | <ApiLink name="lv_obj_t" display="lv_obj_t *" />         | pointer to Widget                                     |
      | `subject`        | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to a pointer Subject                          |
      | `set_pointer_cb` | <ApiLink name="lv_obj_set_pointer_t" />                  | callback that applies the pointer value to the Widget |

      **Returns:** <ApiLink name="lv_observer_t" display="lv_observer_t *" /> — pointer to newly-created Observer
    </ApiMember>

    <ApiMember kind="function" name="lv_obj_bind_flag_if_eq" file="public/core/lv_observer.h" line="656" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L656">
      lv_obj_bind_flag_if_eq [#lv_obj_bind_flag_if_eq]

      Set Widget's flag(s) if an integer Subject's value is equal to a reference value, clear flag otherwise.

      \> &#x2A;*Deprecated:** Use <ApiLink name="lv_obj_bind_bool" display="lv_obj_bind_bool()" /> or <ApiLink name="lv_subject_add_observer_obj" display="lv_subject_add_observer_obj()" /> instead.

      ```c title=" " lineNumbers=1
      lv_observer_t * lv_obj_bind_flag_if_eq(lv_obj_t *obj, lv_subject_t *subject, lv_obj_flag_t flag, int32_t ref_value)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name        | Type                                                     | Description                                                                 |
      | ----------- | -------------------------------------------------------- | --------------------------------------------------------------------------- |
      | `obj`       | <ApiLink name="lv_obj_t" display="lv_obj_t *" />         | pointer to Widget                                                           |
      | `subject`   | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject                                                          |
      | `flag`      | <ApiLink name="lv_obj_flag_t" />                         | flag(s) (can be bit-wise OR-ed) to set or clear (e.g. `LV_OBJ_FLAG_HIDDEN`) |
      | `ref_value` | `int32_t`                                                | reference value to compare Subject's value with                             |

      **Returns:** <ApiLink name="lv_observer_t" display="lv_observer_t *" /> — pointer to newly-created Observer
    </ApiMember>

    <ApiMember kind="function" name="lv_obj_bind_flag_if_not_eq" file="public/core/lv_observer.h" line="668" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L668">
      lv_obj_bind_flag_if_not_eq [#lv_obj_bind_flag_if_not_eq]

      Set Widget's flag(s) if an integer Subject's value is not equal to a reference value, clear flag otherwise.

      \> &#x2A;*Deprecated:** Use <ApiLink name="lv_obj_bind_bool" display="lv_obj_bind_bool()" /> or <ApiLink name="lv_subject_add_observer_obj" display="lv_subject_add_observer_obj()" /> instead.

      ```c title=" " lineNumbers=1
      lv_observer_t * lv_obj_bind_flag_if_not_eq(lv_obj_t *obj, lv_subject_t *subject, lv_obj_flag_t flag, int32_t ref_value)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name        | Type                                                     | Description                                                                 |
      | ----------- | -------------------------------------------------------- | --------------------------------------------------------------------------- |
      | `obj`       | <ApiLink name="lv_obj_t" display="lv_obj_t *" />         | pointer to Widget                                                           |
      | `subject`   | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject                                                          |
      | `flag`      | <ApiLink name="lv_obj_flag_t" />                         | flag(s) (can be bit-wise OR-ed) to set or clear (e.g. `LV_OBJ_FLAG_HIDDEN`) |
      | `ref_value` | `int32_t`                                                | reference value to compare Subject's value with                             |

      **Returns:** <ApiLink name="lv_observer_t" display="lv_observer_t *" /> — pointer to newly-created Observer
    </ApiMember>

    <ApiMember kind="function" name="lv_obj_bind_flag_if_gt" file="public/core/lv_observer.h" line="681" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L681">
      lv_obj_bind_flag_if_gt [#lv_obj_bind_flag_if_gt]

      Set Widget's flag(s) if an integer Subject's value is greater than a reference value, clear flag otherwise.

      \> &#x2A;*Deprecated:** Use <ApiLink name="lv_obj_bind_bool" display="lv_obj_bind_bool()" /> or <ApiLink name="lv_subject_add_observer_obj" display="lv_subject_add_observer_obj()" /> instead.

      ```c title=" " lineNumbers=1
      lv_observer_t * lv_obj_bind_flag_if_gt(lv_obj_t *obj, lv_subject_t *subject, lv_obj_flag_t flag, int32_t ref_value)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name        | Type                                                     | Description                                                                 |
      | ----------- | -------------------------------------------------------- | --------------------------------------------------------------------------- |
      | `obj`       | <ApiLink name="lv_obj_t" display="lv_obj_t *" />         | pointer to Widget                                                           |
      | `subject`   | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject                                                          |
      | `flag`      | <ApiLink name="lv_obj_flag_t" />                         | flag(s) (can be bit-wise OR-ed) to set or clear (e.g. `LV_OBJ_FLAG_HIDDEN`) |
      | `ref_value` | `int32_t`                                                | reference value to compare Subject's value with                             |

      **Returns:** <ApiLink name="lv_observer_t" display="lv_observer_t *" /> — pointer to newly-created Observer
    </ApiMember>

    <ApiMember kind="function" name="lv_obj_bind_flag_if_ge" file="public/core/lv_observer.h" line="693" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L693">
      lv_obj_bind_flag_if_ge [#lv_obj_bind_flag_if_ge]

      Set Widget's flag(s) if an integer Subject's value is greater than or equal to a reference value, clear flag otherwise.

      \> &#x2A;*Deprecated:** Use <ApiLink name="lv_obj_bind_bool" display="lv_obj_bind_bool()" /> or <ApiLink name="lv_subject_add_observer_obj" display="lv_subject_add_observer_obj()" /> instead.

      ```c title=" " lineNumbers=1
      lv_observer_t * lv_obj_bind_flag_if_ge(lv_obj_t *obj, lv_subject_t *subject, lv_obj_flag_t flag, int32_t ref_value)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name        | Type                                                     | Description                                                                 |
      | ----------- | -------------------------------------------------------- | --------------------------------------------------------------------------- |
      | `obj`       | <ApiLink name="lv_obj_t" display="lv_obj_t *" />         | pointer to Widget                                                           |
      | `subject`   | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject                                                          |
      | `flag`      | <ApiLink name="lv_obj_flag_t" />                         | flag(s) (can be bit-wise OR-ed) to set or clear (e.g. `LV_OBJ_FLAG_HIDDEN`) |
      | `ref_value` | `int32_t`                                                | reference value to compare Subject's value with                             |

      **Returns:** <ApiLink name="lv_observer_t" display="lv_observer_t *" /> — pointer to newly-created Observer
    </ApiMember>

    <ApiMember kind="function" name="lv_obj_bind_flag_if_lt" file="public/core/lv_observer.h" line="705" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L705">
      lv_obj_bind_flag_if_lt [#lv_obj_bind_flag_if_lt]

      Set Widget's flag(s) if an integer Subject's value is less than a reference value, clear flag otherwise.

      \> &#x2A;*Deprecated:** Use <ApiLink name="lv_obj_bind_bool" display="lv_obj_bind_bool()" /> or <ApiLink name="lv_subject_add_observer_obj" display="lv_subject_add_observer_obj()" /> instead.

      ```c title=" " lineNumbers=1
      lv_observer_t * lv_obj_bind_flag_if_lt(lv_obj_t *obj, lv_subject_t *subject, lv_obj_flag_t flag, int32_t ref_value)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name        | Type                                                     | Description                                                                 |
      | ----------- | -------------------------------------------------------- | --------------------------------------------------------------------------- |
      | `obj`       | <ApiLink name="lv_obj_t" display="lv_obj_t *" />         | pointer to Widget                                                           |
      | `subject`   | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject                                                          |
      | `flag`      | <ApiLink name="lv_obj_flag_t" />                         | flag(s) (can be bit-wise OR-ed) to set or clear (e.g. `LV_OBJ_FLAG_HIDDEN`) |
      | `ref_value` | `int32_t`                                                | reference value to compare Subject's value with                             |

      **Returns:** <ApiLink name="lv_observer_t" display="lv_observer_t *" /> — pointer to newly-created Observer
    </ApiMember>

    <ApiMember kind="function" name="lv_obj_bind_flag_if_le" file="public/core/lv_observer.h" line="717" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L717">
      lv_obj_bind_flag_if_le [#lv_obj_bind_flag_if_le]

      Set Widget's flag(s) if an integer Subject's value is less than or equal to a reference value, clear flag otherwise.

      \> &#x2A;*Deprecated:** Use <ApiLink name="lv_obj_bind_bool" display="lv_obj_bind_bool()" /> or <ApiLink name="lv_subject_add_observer_obj" display="lv_subject_add_observer_obj()" /> instead.

      ```c title=" " lineNumbers=1
      lv_observer_t * lv_obj_bind_flag_if_le(lv_obj_t *obj, lv_subject_t *subject, lv_obj_flag_t flag, int32_t ref_value)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name        | Type                                                     | Description                                                                 |
      | ----------- | -------------------------------------------------------- | --------------------------------------------------------------------------- |
      | `obj`       | <ApiLink name="lv_obj_t" display="lv_obj_t *" />         | pointer to Widget                                                           |
      | `subject`   | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject                                                          |
      | `flag`      | <ApiLink name="lv_obj_flag_t" />                         | flag(s) (can be bit-wise OR-ed) to set or clear (e.g. `LV_OBJ_FLAG_HIDDEN`) |
      | `ref_value` | `int32_t`                                                | reference value to compare Subject's value with                             |

      **Returns:** <ApiLink name="lv_observer_t" display="lv_observer_t *" /> — pointer to newly-created Observer
    </ApiMember>

    <ApiMember kind="function" name="lv_obj_bind_state_if_eq" file="public/core/lv_observer.h" line="730" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L730">
      lv_obj_bind_state_if_eq [#lv_obj_bind_state_if_eq]

      Set Widget's state(s) if an integer Subject's value is equal to a reference value, clear flag otherwise.

      \> &#x2A;*Deprecated:** Use <ApiLink name="lv_obj_bind_bool" display="lv_obj_bind_bool()" /> or <ApiLink name="lv_subject_add_observer_obj" display="lv_subject_add_observer_obj()" /> instead.

      ```c title=" " lineNumbers=1
      lv_observer_t * lv_obj_bind_state_if_eq(lv_obj_t *obj, lv_subject_t *subject, lv_state_t state, int32_t ref_value)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name        | Type                                                     | Description                                                                |
      | ----------- | -------------------------------------------------------- | -------------------------------------------------------------------------- |
      | `obj`       | <ApiLink name="lv_obj_t" display="lv_obj_t *" />         | pointer to Widget                                                          |
      | `subject`   | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject                                                         |
      | `state`     | <ApiLink name="lv_state_t" />                            | state(s) (can be bit-wise OR-ed) to set or clear (e.g. `LV_STATE_CHECKED`) |
      | `ref_value` | `int32_t`                                                | reference value to compare Subject's value with                            |

      **Returns:** <ApiLink name="lv_observer_t" display="lv_observer_t *" /> — pointer to newly-created Observer
    </ApiMember>

    <ApiMember kind="function" name="lv_obj_bind_state_if_not_eq" file="public/core/lv_observer.h" line="742" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L742">
      lv_obj_bind_state_if_not_eq [#lv_obj_bind_state_if_not_eq]

      Set a Widget's state(s) if an integer Subject's value is not equal to a reference value, clear flag otherwise

      \> &#x2A;*Deprecated:** Use <ApiLink name="lv_obj_bind_bool" display="lv_obj_bind_bool()" /> or <ApiLink name="lv_subject_add_observer_obj" display="lv_subject_add_observer_obj()" /> instead.

      ```c title=" " lineNumbers=1
      lv_observer_t * lv_obj_bind_state_if_not_eq(lv_obj_t *obj, lv_subject_t *subject, lv_state_t state, int32_t ref_value)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name        | Type                                                     | Description                                                                |
      | ----------- | -------------------------------------------------------- | -------------------------------------------------------------------------- |
      | `obj`       | <ApiLink name="lv_obj_t" display="lv_obj_t *" />         | pointer to Widget                                                          |
      | `subject`   | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject                                                         |
      | `state`     | <ApiLink name="lv_state_t" />                            | state(s) (can be bit-wise OR-ed) to set or clear (e.g. `LV_STATE_CHECKED`) |
      | `ref_value` | `int32_t`                                                | reference value to compare Subject's value with                            |

      **Returns:** <ApiLink name="lv_observer_t" display="lv_observer_t *" /> — pointer to newly-created Observer
    </ApiMember>

    <ApiMember kind="function" name="lv_obj_bind_state_if_gt" file="public/core/lv_observer.h" line="755" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L755">
      lv_obj_bind_state_if_gt [#lv_obj_bind_state_if_gt]

      Set Widget's state(s) if an integer Subject's value is greater than a reference value, clear flag otherwise.

      \> &#x2A;*Deprecated:** Use <ApiLink name="lv_obj_bind_bool" display="lv_obj_bind_bool()" /> or <ApiLink name="lv_subject_add_observer_obj" display="lv_subject_add_observer_obj()" /> instead.

      ```c title=" " lineNumbers=1
      lv_observer_t * lv_obj_bind_state_if_gt(lv_obj_t *obj, lv_subject_t *subject, lv_state_t state, int32_t ref_value)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name        | Type                                                     | Description                                                                |
      | ----------- | -------------------------------------------------------- | -------------------------------------------------------------------------- |
      | `obj`       | <ApiLink name="lv_obj_t" display="lv_obj_t *" />         | pointer to Widget                                                          |
      | `subject`   | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject                                                         |
      | `state`     | <ApiLink name="lv_state_t" />                            | state(s) (can be bit-wise OR-ed) to set or clear (e.g. `LV_STATE_CHECKED`) |
      | `ref_value` | `int32_t`                                                | reference value to compare Subject's value with                            |

      **Returns:** <ApiLink name="lv_observer_t" display="lv_observer_t *" /> — pointer to newly-created Observer
    </ApiMember>

    <ApiMember kind="function" name="lv_obj_bind_state_if_ge" file="public/core/lv_observer.h" line="767" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L767">
      lv_obj_bind_state_if_ge [#lv_obj_bind_state_if_ge]

      Set Widget's state(s) if an integer Subject's value is greater than or equal to a reference value, clear flag otherwise.

      \> &#x2A;*Deprecated:** Use <ApiLink name="lv_obj_bind_bool" display="lv_obj_bind_bool()" /> or <ApiLink name="lv_subject_add_observer_obj" display="lv_subject_add_observer_obj()" /> instead.

      ```c title=" " lineNumbers=1
      lv_observer_t * lv_obj_bind_state_if_ge(lv_obj_t *obj, lv_subject_t *subject, lv_state_t state, int32_t ref_value)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name        | Type                                                     | Description                                                                |
      | ----------- | -------------------------------------------------------- | -------------------------------------------------------------------------- |
      | `obj`       | <ApiLink name="lv_obj_t" display="lv_obj_t *" />         | pointer to Widget                                                          |
      | `subject`   | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject                                                         |
      | `state`     | <ApiLink name="lv_state_t" />                            | state(s) (can be bit-wise OR-ed) to set or clear (e.g. `LV_STATE_CHECKED`) |
      | `ref_value` | `int32_t`                                                | reference value to compare Subject's value with                            |

      **Returns:** <ApiLink name="lv_observer_t" display="lv_observer_t *" /> — pointer to newly-created Observer
    </ApiMember>

    <ApiMember kind="function" name="lv_obj_bind_state_if_lt" file="public/core/lv_observer.h" line="779" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L779">
      lv_obj_bind_state_if_lt [#lv_obj_bind_state_if_lt]

      Set Widget's state(s) if an integer Subject's value is less than a reference value, clear flag otherwise.

      \> &#x2A;*Deprecated:** Use <ApiLink name="lv_obj_bind_bool" display="lv_obj_bind_bool()" /> or <ApiLink name="lv_subject_add_observer_obj" display="lv_subject_add_observer_obj()" /> instead.

      ```c title=" " lineNumbers=1
      lv_observer_t * lv_obj_bind_state_if_lt(lv_obj_t *obj, lv_subject_t *subject, lv_state_t state, int32_t ref_value)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name        | Type                                                     | Description                                                                |
      | ----------- | -------------------------------------------------------- | -------------------------------------------------------------------------- |
      | `obj`       | <ApiLink name="lv_obj_t" display="lv_obj_t *" />         | pointer to Widget                                                          |
      | `subject`   | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject                                                         |
      | `state`     | <ApiLink name="lv_state_t" />                            | state(s) (can be bit-wise OR-ed) to set or clear (e.g. `LV_STATE_CHECKED`) |
      | `ref_value` | `int32_t`                                                | reference value to compare Subject's value with                            |

      **Returns:** <ApiLink name="lv_observer_t" display="lv_observer_t *" /> — pointer to newly-created Observer
    </ApiMember>

    <ApiMember kind="function" name="lv_obj_bind_state_if_le" file="public/core/lv_observer.h" line="791" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L791">
      lv_obj_bind_state_if_le [#lv_obj_bind_state_if_le]

      Set Widget's state(s) if an integer Subject's value is less than or equal to a reference value, clear flag otherwise.

      \> &#x2A;*Deprecated:** Use <ApiLink name="lv_obj_bind_bool" display="lv_obj_bind_bool()" /> or <ApiLink name="lv_subject_add_observer_obj" display="lv_subject_add_observer_obj()" /> instead.

      ```c title=" " lineNumbers=1
      lv_observer_t * lv_obj_bind_state_if_le(lv_obj_t *obj, lv_subject_t *subject, lv_state_t state, int32_t ref_value)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name        | Type                                                     | Description                                                                |
      | ----------- | -------------------------------------------------------- | -------------------------------------------------------------------------- |
      | `obj`       | <ApiLink name="lv_obj_t" display="lv_obj_t *" />         | pointer to Widget                                                          |
      | `subject`   | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to Subject                                                         |
      | `state`     | <ApiLink name="lv_state_t" />                            | state(s) (can be bit-wise OR-ed) to set or clear (e.g. `LV_STATE_CHECKED`) |
      | `ref_value` | `int32_t`                                                | reference value to compare Subject's value with                            |

      **Returns:** <ApiLink name="lv_observer_t" display="lv_observer_t *" /> — pointer to newly-created Observer
    </ApiMember>

    <ApiMember kind="function" name="lv_obj_bind_checked" file="public/core/lv_observer.h" line="801" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L801">
      lv_obj_bind_checked [#lv_obj_bind_checked]

      Set an integer Subject to 1 when a Widget is checked and set it 0 when unchecked, and clear Widget's checked state when Subject's value changes to 0 and set it when non-zero.

      ```c title=" " lineNumbers=1
      lv_observer_t * lv_obj_bind_checked(lv_obj_t *obj, lv_subject_t *subject)
      ```

      <span className="sr-only">
        Parameters
      </span>

      | Name      | Type                                                     | Description          |
      | --------- | -------------------------------------------------------- | -------------------- |
      | `obj`     | <ApiLink name="lv_obj_t" display="lv_obj_t *" />         | pointer to Widget    |
      | `subject` | <ApiLink name="lv_subject_t" display="lv_subject_t *" /> | pointer to a Subject |

      **Returns:** <ApiLink name="lv_observer_t" display="lv_observer_t *" /> — pointer to newly-created Observer

      <Callout type="info">
        Ensure Widget's `LV_OBJ_FLAG_CHECKABLE` flag is set.
      </Callout>
    </ApiMember>
  </ApiTab>
</ApiTabs>

Enums [#enums]

<ApiMember kind="enum" name="lv_subject_type_t" file="public/core/lv_observer.h" line="34" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L34">
  lv_subject_type_t [#lv_subject_type_t]

  Values for lv\_subject\_t's `type` field

  | Name                      | Value | Description                           |
  | ------------------------- | ----- | ------------------------------------- |
  | `LV_SUBJECT_TYPE_INVALID` | `0`   | indicates Subject not initialized yet |
  | `LV_SUBJECT_TYPE_NONE`    | `1`   | a null value like None or NILt        |
  | `LV_SUBJECT_TYPE_INT`     | `2`   | an int32\_t                           |
  | `LV_SUBJECT_TYPE_FLOAT`   | `3`   | a float, requires `LV_USE_FLOAT 1`    |
  | `LV_SUBJECT_TYPE_POINTER` | `4`   | a void pointer                        |
  | `LV_SUBJECT_TYPE_COLOR`   | `5`   | an <ApiLink name="lv_color_t" />      |
  | `LV_SUBJECT_TYPE_GROUP`   | `6`   | an array of Subjects                  |
  | `LV_SUBJECT_TYPE_STRING`  | `7`   | a char pointer                        |
</ApiMember>

<TypeUsedBy name="lv_subject_type_t" count="1">
  * `lv_subject_create` — param `type`
</TypeUsedBy>

Structs [#structs]

<ApiMember kind="struct" name="lv_subject_value_t">
  lv_subject_value_t [#lv_subject_value_t]

  A common type to handle all the various observable types in the same way

  | Member    | Type                          | Description                                                            |
  | --------- | ----------------------------- | ---------------------------------------------------------------------- |
  | `num`     | `int32_t`                     | Integer number (opacity, enums, booleans or "normal" numbers)          |
  | `pointer` | `const void *`                | Constant pointer (string buffer, format string, font, cone text, etc.) |
  | `color`   | <ApiLink name="lv_color_t" /> | Color                                                                  |
  | `float_v` | `float`                       | Floating point value                                                   |
</ApiMember>

<ApiMember kind="struct" name="_lv_subject_t">
  \_lv_subject_t [#_lv_subject_t]

  The Subject (an observable value)

  | Member                 | Type                                  | Description                                                                         |
  | ---------------------- | ------------------------------------- | ----------------------------------------------------------------------------------- |
  | `ext_data`             | <ApiLink name="lv_ext_data_t" />      |                                                                                     |
  | `subs_ll`              | <ApiLink name="lv_ll_t" />            | Subscribers                                                                         |
  | `value`                | <ApiLink name="lv_subject_value_t" /> | Current value                                                                       |
  | `prev_value`           | <ApiLink name="lv_subject_value_t" /> | Previous value                                                                      |
  | `min_value`            | <ApiLink name="lv_subject_value_t" /> | Minimum value for min. int or float                                                 |
  | `max_value`            | <ApiLink name="lv_subject_value_t" /> | Maximum value for max. int or float                                                 |
  | `user_data`            | `void *`                              | Additional parameter, can be used freely by user                                    |
  | `type`                 | `uint32_t`                            | One of the LV\_SUBJECT\_TYPE\_... values                                            |
  | `size`                 | `uint32_t`                            | String buffer size or group length                                                  |
  | `notify_restart_query` | `uint32_t`                            | If an Observer was deleted during notification, start notifying from the beginning. |
</ApiMember>

Typedefs [#typedefs]

<ApiMember kind="typedef" name="lv_observer_cb_t" file="public/core/lv_observer.h" line="82" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L82">
  lv_observer_cb_t [#lv_observer_cb_t]

  ```c title=" " lineNumbers=1
  typedef void(* lv_observer_cb_t) (lv_observer_t *observer, lv_subject_t *subject)
  ```

  Callback called to notify Observer that Subject's value has changed
</ApiMember>

<TypeUsedBy name="lv_observer_cb_t" count="3">
  * `lv_subject_add_observer` — param `observer_cb`
  * `lv_subject_add_observer_obj` — param `observer_cb`
  * `lv_subject_add_observer_with_target` — param `observer_cb`
</TypeUsedBy>

<ApiMember kind="typedef" name="lv_obj_set_bool_t" file="public/core/lv_observer.h" line="90" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L90">
  lv_obj_set_bool_t [#lv_obj_set_bool_t]

  ```c title=" " lineNumbers=1
  typedef void(* lv_obj_set_bool_t) (lv_obj_t *obj, bool value)
  ```

  Generic callback called to set a boolean value on a Widget.
</ApiMember>

<TypeUsedBy name="lv_obj_set_bool_t" count="1">
  * `lv_obj_bind_bool` — param `set_bool_cb`
</TypeUsedBy>

<ApiMember kind="typedef" name="lv_obj_set_int_t" file="public/core/lv_observer.h" line="97" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L97">
  lv_obj_set_int_t [#lv_obj_set_int_t]

  ```c title=" " lineNumbers=1
  typedef void(* lv_obj_set_int_t) (lv_obj_t *obj, int32_t value)
  ```

  Generic callback called to set an int value on a Widget.
</ApiMember>

<TypeUsedBy name="lv_obj_set_int_t" count="1">
  * `lv_obj_bind_int` — param `set_int_cb`
</TypeUsedBy>

<ApiMember kind="typedef" name="lv_obj_set_float_t" file="public/core/lv_observer.h" line="104" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L104">
  lv_obj_set_float_t [#lv_obj_set_float_t]

  ```c title=" " lineNumbers=1
  typedef void(* lv_obj_set_float_t) (lv_obj_t *obj, float value)
  ```

  Generic callback called to set a float value on a Widget.
</ApiMember>

<TypeUsedBy name="lv_obj_set_float_t" count="1">
  * `lv_obj_bind_float` — param `set_float_cb`
</TypeUsedBy>

<ApiMember kind="typedef" name="lv_obj_set_string_t" file="public/core/lv_observer.h" line="111" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L111">
  lv_obj_set_string_t [#lv_obj_set_string_t]

  ```c title=" " lineNumbers=1
  typedef void(* lv_obj_set_string_t) (lv_obj_t *obj, const char *value)
  ```

  Generic callback called to set a string value on a Widget.
</ApiMember>

<TypeUsedBy name="lv_obj_set_string_t" count="1">
  * `lv_obj_bind_string` — param `set_string_cb`
</TypeUsedBy>

<ApiMember kind="typedef" name="lv_obj_set_color_t" file="public/core/lv_observer.h" line="118" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L118">
  lv_obj_set_color_t [#lv_obj_set_color_t]

  ```c title=" " lineNumbers=1
  typedef void(* lv_obj_set_color_t) (lv_obj_t *obj, lv_color_t value)
  ```

  Generic callback called to set a color value on a Widget.
</ApiMember>

<TypeUsedBy name="lv_obj_set_color_t" count="1">
  * `lv_obj_bind_color` — param `set_color_cb`
</TypeUsedBy>

<ApiMember kind="typedef" name="lv_obj_set_pointer_t" file="public/core/lv_observer.h" line="125" url="https://github.com/lvgl/lvgl/tree/e1a0ad863f29742359bc680d6a7d973448ec2285/include/lvgl/core/lv_observer.h#L125">
  lv_obj_set_pointer_t [#lv_obj_set_pointer_t]

  ```c title=" " lineNumbers=1
  typedef void(* lv_obj_set_pointer_t) (lv_obj_t *obj, const void *value)
  ```

  Generic callback called to set a pointer value on a Widget.
</ApiMember>

<TypeUsedBy name="lv_obj_set_pointer_t" count="1">
  * `lv_obj_bind_pointer` — param `set_pointer_cb`
</TypeUsedBy>

Dependencies [#dependencies]

<FileIncludes includes="[&#x22;lv_obj.h&#x22;, &#x22;lv_ext_data.h&#x22;, &#x22;lv_ll.h&#x22;]" includedBy="[&#x22;lv_sysmon.h&#x22;, &#x22;lvgl.h&#x22;, &#x22;lv_arc.h&#x22;, &#x22;lv_bar.h&#x22;, &#x22;lv_image.h&#x22;, &#x22;lv_label.h&#x22;, &#x22;lv_scale.h&#x22;, &#x22;lv_span.h&#x22;]" transitiveIncludes="[&#x22;lv_anim.h&#x22;, &#x22;lv_area.h&#x22;, &#x22;lv_assert.h&#x22;, &#x22;lv_bidi.h&#x22;, &#x22;lv_color.h&#x22;, &#x22;lv_color_op.h&#x22;, &#x22;lv_conf_internal.h&#x22;, &#x22;lv_display.h&#x22;, &#x22;lv_draw.h&#x22;, &#x22;lv_draw_arc.h&#x22;, &#x22;lv_draw_blur.h&#x22;, &#x22;lv_draw_buf.h&#x22;, &#x22;lv_draw_image.h&#x22;, &#x22;lv_draw_label.h&#x22;, &#x22;lv_draw_line.h&#x22;, &#x22;lv_draw_rect.h&#x22;, &#x22;lv_draw_triangle.h&#x22;, &#x22;lv_event.h&#x22;, &#x22;lv_flex.h&#x22;, &#x22;lv_font.h&#x22;, &#x22;lv_fs.h&#x22;, &#x22;lv_grad.h&#x22;, &#x22;lv_grid.h&#x22;, &#x22;lv_group.h&#x22;, &#x22;lv_image_decoder.h&#x22;, &#x22;lv_image_dsc.h&#x22;, &#x22;lv_indev.h&#x22;, &#x22;lv_layout.h&#x22;, &#x22;lv_log.h&#x22;, &#x22;lv_math.h&#x22;, &#x22;lv_matrix.h&#x22;, &#x22;lv_mem.h&#x22;, &#x22;lv_obj_class.h&#x22;, &#x22;lv_obj_draw.h&#x22;, &#x22;lv_obj_event.h&#x22;, &#x22;lv_obj_pos.h&#x22;, &#x22;lv_obj_property.h&#x22;, &#x22;lv_obj_scroll.h&#x22;, &#x22;lv_obj_style.h&#x22;, &#x22;lv_obj_style_gen.h&#x22;, &#x22;lv_obj_tree.h&#x22;, &#x22;lv_palette.h&#x22;, &#x22;lv_profiler.h&#x22;, &#x22;lv_profiler_builtin.h&#x22;, &#x22;lv_sprintf.h&#x22;, &#x22;lv_string.h&#x22;, &#x22;lv_style.h&#x22;, &#x22;lv_style_gen.h&#x22;, &#x22;lv_symbol_def.h&#x22;, &#x22;lv_text.h&#x22;, &#x22;lv_timer.h&#x22;, &#x22;lv_types.h&#x22;]" />
