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



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

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

Functions [#functions]

<ApiTabs items="[&#x22;Setters (15)&#x22;,&#x22;Getters (14)&#x22;,&#x22;Other (30)&#x22;]">
  <ApiTab value="Setters (15)">
    <ApiMember kind="function" name="lv_subject_set_external_data" file="core/lv_observer.h" line="104" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L104">
      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                                                                                                                                                |
      | `free_cb` | `void(*)(void *data)`                                    | Cleanup function called when:<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_subject_set_int" file="core/lv_observer.h" line="119" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L119">
      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`   | <ApiLink name="int32_t" />                               | new value          |
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_set_min_value_int" file="core/lv_observer.h" line="141" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L141">
      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` | <ApiLink name="int32_t" />                               | the minimum value  |
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_set_max_value_int" file="core/lv_observer.h" line="148" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L148">
      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` | <ApiLink name="int32_t" />                               | the maximum value  |
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_set_float" file="core/lv_observer.h" line="164" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L164">
      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="core/lv_observer.h" line="185" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L185">
      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="core/lv_observer.h" line="192" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L192">
      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_pointer" file="core/lv_observer.h" line="249" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L249">
      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          |
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_set_color" file="core/lv_observer.h" line="277" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L277">
      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_obj_set_subject_increment_event_min_value" file="core/lv_observer.h" line="419" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L419">
      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` | <ApiLink name="int32_t" />                                                           | the minimum value to set                                                                                                                   |
    </ApiMember>

    <ApiMember kind="function" name="lv_obj_set_subject_increment_event_max_value" file="core/lv_observer.h" line="427" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L427">
      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` | <ApiLink name="int32_t" />                                                           | the maximum value to set                                                                                                                   |
    </ApiMember>

    <ApiMember kind="function" name="lv_obj_set_subject_increment_event_rollover" file="core/lv_observer.h" line="436" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L436">
      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` | <ApiLink name="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="core/lv_observer.h" line="454" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L454">
      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`   | <ApiLink name="int32_t" />                               | the value to set                                   |
    </ApiMember>

    <ApiMember kind="function" name="lv_obj_add_subject_set_float_event" file="core/lv_observer.h" line="465" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L465">
      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="core/lv_observer.h" line="475" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L475">
      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="core/lv_observer.h" line="126" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L126">
      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:** <ApiLink name="int32_t" /> — current value
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_get_previous_int" file="core/lv_observer.h" line="133" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L133">
      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:** <ApiLink name="int32_t" /> — current value
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_get_float" file="core/lv_observer.h" line="171" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L171">
      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="core/lv_observer.h" line="178" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L178">
      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="core/lv_observer.h" line="226" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L226">
      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="core/lv_observer.h" line="235" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L235">
      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

      <Callout type="info">
        NULL will be returned if NULL was passed in <ApiLink name="lv_subject_init_string" display="lv_subject_init_string()" /> as `prev_buf`.
      </Callout>
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_get_pointer" file="core/lv_observer.h" line="256" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L256">
      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="core/lv_observer.h" line="263" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L263">
      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="core/lv_observer.h" line="284" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L284">
      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="core/lv_observer.h" line="291" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L291">
      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="core/lv_observer.h" line="319" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L319">
      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`   | <ApiLink name="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="core/lv_observer.h" line="378" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L378">
      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="core/lv_observer.h" line="387" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L387">
      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="core/lv_observer.h" line="394" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L394">
      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 (30)">
    <ApiMember kind="function" name="lv_subject_init_int" file="core/lv_observer.h" line="112" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L112">
      lv_subject_init_int [#lv_subject_init_int]

      Initialize an integer-type Subject.

      ```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`   | <ApiLink name="int32_t" />                               | initial value      |
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_init_float" file="core/lv_observer.h" line="157" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L157">
      lv_subject_init_float [#lv_subject_init_float]

      Initialize an float-type Subject.

      ```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="core/lv_observer.h" line="205" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L205">
      lv_subject_init_string [#lv_subject_init_string]

      Initialize a string-type Subject.

      ```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; can be NULL if not used |
      | `size`     | <ApiLink name="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_copy_string" file="core/lv_observer.h" line="212" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L212">
      lv_subject_copy_string [#lv_subject_copy_string]

      Copy a string to a Subject and notify Observers if it changed.

      ```c title=" " lineNumbers=1
      void lv_subject_copy_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         |
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_snprintf" file="core/lv_observer.h" line="219" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L219">
      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="core/lv_observer.h" line="242" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L242">
      lv_subject_init_pointer [#lv_subject_init_pointer]

      Initialize a pointer-type Subject.

      ```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      |
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_init_color" file="core/lv_observer.h" line="270" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L270">
      lv_subject_init_color [#lv_subject_init_color]

      Initialize a color-type Subject.

      ```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="core/lv_observer.h" line="300" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L300">
      lv_subject_init_group [#lv_subject_init_group]

      Initialize a Group-type Subject.

      ```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`      | <ApiLink name="uint32_t" />                              | number of elements in `list[]`                                                                                         |
    </ApiMember>

    <ApiMember kind="function" name="lv_subject_deinit" file="core/lv_observer.h" line="311" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L311">
      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.

      ```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 |

      <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="core/lv_observer.h" line="328" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L328">
      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    |

      **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="core/lv_observer.h" line="344" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L344">
      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     |
      | `user_data`   | `void *`                                                 | optional user data    |

      **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_remove" display="lv_observer_remove()" /> 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="core/lv_observer.h" line="355" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L355">
      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 (NULL is okay) |
      | `user_data`   | `void *`                                                 | optional user data         |

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

    <ApiMember kind="function" name="lv_observer_remove" file="core/lv_observer.h" line="362" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L362">
      lv_observer_remove [#lv_observer_remove]

      Remove Observer from its Subject.

      ```c title=" " lineNumbers=1
      void lv_observer_remove(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 |
    </ApiMember>

    <ApiMember kind="function" name="lv_obj_remove_from_subject" file="core/lv_observer.h" line="371" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L371">
      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, or NULL to remove 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="core/lv_observer.h" line="400" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L400">
      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="core/lv_observer.h" line="410" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L410">
      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`    | <ApiLink name="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="core/lv_observer.h" line="445" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L445">
      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_flag_if_eq" file="core/lv_observer.h" line="486" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L486">
      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.

      ```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` | <ApiLink name="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="core/lv_observer.h" line="496" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L496">
      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.

      ```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` | <ApiLink name="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="core/lv_observer.h" line="507" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L507">
      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.

      ```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` | <ApiLink name="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="core/lv_observer.h" line="517" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L517">
      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.

      ```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` | <ApiLink name="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="core/lv_observer.h" line="527" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L527">
      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.

      ```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` | <ApiLink name="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="core/lv_observer.h" line="537" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L537">
      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.

      ```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` | <ApiLink name="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="core/lv_observer.h" line="548" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L548">
      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.

      ```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` | <ApiLink name="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="core/lv_observer.h" line="558" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L558">
      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

      ```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` | <ApiLink name="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="core/lv_observer.h" line="569" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L569">
      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.

      ```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` | <ApiLink name="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="core/lv_observer.h" line="579" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L579">
      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.

      ```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` | <ApiLink name="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="core/lv_observer.h" line="589" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L589">
      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.

      ```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` | <ApiLink name="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="core/lv_observer.h" line="599" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L599">
      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.

      ```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` | <ApiLink name="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="core/lv_observer.h" line="609" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L609">
      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="core/lv_observer.h" line="33" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L33">
  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>

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`     | <ApiLink name="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`                 | <ApiLink name="uint32_t" />           | One of the LV\_SUBJECT\_TYPE\_... values                                            |
  | `size`                 | <ApiLink name="uint32_t" />           | String buffer size or group length                                                  |
  | `notify_restart_query` | <ApiLink name="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="core/lv_observer.h" line="80" url="https://github.com/lvgl/lvgl/tree/a7b95c5b0839ce901c09c205610bc2c77cc3345d/src/core/lv_observer.h#L80">
  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>

Dependencies [#dependencies]

<FileIncludes includes="[&#x22;lv_ext_data.h&#x22;, &#x22;lv_obj.h&#x22;]" includedBy="[&#x22;lv_observer_private.h&#x22;, &#x22;lv_sysmon.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_array.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_conf_kconfig.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_ll.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_property_names.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_style_properties.h&#x22;, &#x22;lv_symbol_def.h&#x22;, &#x22;lv_text.h&#x22;, &#x22;lv_tick.h&#x22;, &#x22;lv_timer.h&#x22;, &#x22;lv_types.h&#x22;]" />
