text: /**
   * @file lv_cpicker.h
   *
   */
  
  #ifndef LV_CPICKER_H
  #define LV_CPICKER_H
  
  #ifdef __cplusplus
  extern "C" {
  #endif
  
  /*********************
   *      INCLUDES
   *********************/
  #include "../lv_conf_internal.h"
  
  #if LV_USE_CPICKER != 0
  
  #include "../lv_core/lv_obj.h"
  
  /*********************
   *      DEFINES
   *********************/
  
  /**********************
   *      TYPEDEFS
   **********************/
  
  enum {
      LV_CPICKER_TYPE_RECT,
      LV_CPICKER_TYPE_DISC,
  };
  typedef uint8_t lv_cpicker_type_t;
  
  enum {
      LV_CPICKER_COLOR_MODE_HUE,
      LV_CPICKER_COLOR_MODE_SATURATION,
      LV_CPICKER_COLOR_MODE_VALUE
  };
  typedef uint8_t lv_cpicker_color_mode_t;
  
  /*Data of colorpicker*/
  typedef struct {
      lv_color_hsv_t hsv;
      struct {
          lv_style_list_t style_list;
          lv_point_t pos;
          uint8_t colored     : 1;
  
      } knob;
      uint32_t last_click_time;
      uint32_t last_change_time;
      lv_point_t last_press_point;
      lv_cpicker_color_mode_t color_mode  : 2;
      uint8_t color_mode_fixed            : 1;
      lv_cpicker_type_t type              : 1;
  } lv_cpicker_ext_t;
  
  /*Parts*/
  enum {
      LV_CPICKER_PART_MAIN = LV_OBJ_PART_MAIN,
      LV_CPICKER_PART_KNOB = _LV_OBJ_PART_VIRTUAL_LAST,
      _LV_CPICKER_PART_VIRTUAL_LAST,
      _LV_CPICKER_PART_REAL_LAST = _LV_OBJ_PART_REAL_LAST,
  };
  
  /**********************
   * GLOBAL PROTOTYPES
   **********************/
  
  /**
   * Create a colorpicker objects
   * @param par pointer to an object, it will be the parent of the new colorpicker
   * @param copy pointer to a colorpicker object, if not NULL then the new object will be copied from it
   * @return pointer to the created colorpicker
   */
  lv_obj_t * lv_cpicker_create(lv_obj_t * par, const lv_obj_t * copy);
  
  /*=====================
   * Setter functions
   *====================*/
  
  /**
   * Set a new type for a colorpicker
   * @param cpicker pointer to a colorpicker object
   * @param type new type of the colorpicker (from 'lv_cpicker_type_t' enum)
   */
  void lv_cpicker_set_type(lv_obj_t * cpicker, lv_cpicker_type_t type);
  
  /**
   * Set the current hue of a colorpicker.
   * @param cpicker pointer to colorpicker object
   * @param hue current selected hue [0..360]
   * @return true if changed, otherwise false
   */
  bool lv_cpicker_set_hue(lv_obj_t * cpicker, uint16_t hue);
  
  /**
   * Set the current saturation of a colorpicker.
   * @param cpicker pointer to colorpicker object
   * @param saturation current selected saturation [0..100]
   * @return true if changed, otherwise false
   */
  bool lv_cpicker_set_saturation(lv_obj_t * cpicker, uint8_t saturation);
  
  /**
   * Set the current value of a colorpicker.
   * @param cpicker pointer to colorpicker object
   * @param val current selected value [0..100]
   * @return true if changed, otherwise false
   */
  bool lv_cpicker_set_value(lv_obj_t * cpicker, uint8_t val);
  
  /**
   * Set the current hsv of a colorpicker.
   * @param cpicker pointer to colorpicker object
   * @param hsv current selected hsv
   * @return true if changed, otherwise false
   */
  bool lv_cpicker_set_hsv(lv_obj_t * cpicker, lv_color_hsv_t hsv);
  
  /**
   * Set the current color of a colorpicker.
   * @param cpicker pointer to colorpicker object
   * @param color current selected color
   * @return true if changed, otherwise false
   */
  bool lv_cpicker_set_color(lv_obj_t * cpicker, lv_color_t color);
  
  /**
   * Set the current color mode.
   * @param cpicker pointer to colorpicker object
   * @param mode color mode (hue/sat/val)
   */
  void lv_cpicker_set_color_mode(lv_obj_t * cpicker, lv_cpicker_color_mode_t mode);
  
  /**
   * Set if the color mode is changed on long press on center
   * @param cpicker pointer to colorpicker object
   * @param fixed color mode cannot be changed on long press
   */
  void lv_cpicker_set_color_mode_fixed(lv_obj_t * cpicker, bool fixed);
  
  /**
   * Make the knob to be colored to the current color
   * @param cpicker pointer to colorpicker object
   * @param en true: color the knob; false: not color the knob
   */
  void lv_cpicker_set_knob_colored(lv_obj_t * cpicker, bool en);
  
  /*=====================
   * Getter functions
   *====================*/
  
  /**
   * Get the current color mode.
   * @param cpicker pointer to colorpicker object
   * @return color mode (hue/sat/val)
   */
  lv_cpicker_color_mode_t lv_cpicker_get_color_mode(lv_obj_t * cpicker);
  
  /**
   * Get if the color mode is changed on long press on center
   * @param cpicker pointer to colorpicker object
   * @return mode cannot be changed on long press
   */
  bool lv_cpicker_get_color_mode_fixed(lv_obj_t * cpicker);
  
  /**
   * Get the current hue of a colorpicker.
   * @param cpicker pointer to colorpicker object
   * @return current selected hue
   */
  uint16_t lv_cpicker_get_hue(lv_obj_t * cpicker);
  
  /**
   * Get the current saturation of a colorpicker.
   * @param cpicker pointer to colorpicker object
   * @return current selected saturation
   */
  uint8_t lv_cpicker_get_saturation(lv_obj_t * cpicker);
  
  /**
   * Get the current hue of a colorpicker.
   * @param cpicker pointer to colorpicker object
   * @return current selected value
   */
  uint8_t lv_cpicker_get_value(lv_obj_t * cpicker);
  
  /**
   * Get the current selected hsv of a colorpicker.
   * @param cpicker pointer to colorpicker object
   * @return current selected hsv
   */
  lv_color_hsv_t lv_cpicker_get_hsv(lv_obj_t * cpicker);
  
  /**
   * Get the current selected color of a colorpicker.
   * @param cpicker pointer to colorpicker object
   * @return current selected color
   */
  lv_color_t lv_cpicker_get_color(lv_obj_t * cpicker);
  
  /**
   * Whether the knob is colored to the current color or not
   * @param cpicker pointer to color picker object
   * @return true: color the knob; false: not color the knob
   */
  bool lv_cpicker_get_knob_colored(lv_obj_t * cpicker);
  
  /*=====================
   * Other functions
   *====================*/
  
  /**********************
   *      MACROS
   **********************/
  
  #endif  /*LV_USE_CPICKER*/
  
  #ifdef __cplusplus
  } /* extern "C" */
  #endif
  
  #endif  /*LV_CPICKER_H*/
  