From b49edd91a2eb7462a384902de4413f7a9c9bf6d5 Mon Sep 17 00:00:00 2001 From: Paul Peavyhouse Date: Wed, 2 Oct 2019 16:21:44 -0700 Subject: [PATCH] All color setters use lv_cpicker_set_hsv and return bool for change --- src/lv_objx/lv_cpicker.c | 126 +++++++++++++++++++-------------------- src/lv_objx/lv_cpicker.h | 21 ++++--- 2 files changed, 74 insertions(+), 73 deletions(-) diff --git a/src/lv_objx/lv_cpicker.c b/src/lv_objx/lv_cpicker.c index 3d367e9b5..937b1b4c3 100644 --- a/src/lv_objx/lv_cpicker.c +++ b/src/lv_objx/lv_cpicker.c @@ -200,88 +200,79 @@ void lv_cpicker_set_style(lv_obj_t * cpicker, lv_cpicker_style_t type, lv_style_ * 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 */ -void lv_cpicker_set_hue(lv_obj_t * cpicker, uint16_t hue) +bool lv_cpicker_set_hue(lv_obj_t * cpicker, uint16_t hue) { - LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME); - - lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker); - - ext->hsv.h = hue % 360; - - if(ext->color_mode == LV_CPICKER_COLOR_MODE_HUE) refr_indic_pos(cpicker); - - if(ext->preview && ext->type == LV_CPICKER_TYPE_DISC) { - lv_obj_invalidate(cpicker); - } + lv_color_hsv_t hsv = lv_cpicker_get_hsv(cpicker); + hsv.h = hue; + return lv_cpicker_set_hsv(cpicker, hsv); } /** * 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 */ -void lv_cpicker_set_saturation(lv_obj_t * cpicker, uint8_t saturation) +bool lv_cpicker_set_saturation(lv_obj_t * cpicker, uint8_t saturation) { - LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME); - - lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker); - - ext->hsv.s = saturation > 100 ? 100 : saturation; - - if(ext->color_mode == LV_CPICKER_COLOR_MODE_SATURATION) refr_indic_pos(cpicker); - - if(ext->preview && ext->type == LV_CPICKER_TYPE_DISC) { - lv_obj_invalidate(cpicker); - } + lv_color_hsv_t hsv = lv_cpicker_get_hsv(cpicker); + hsv.s = saturation; + return lv_cpicker_set_hsv(cpicker, hsv); } /** * 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 */ -void lv_cpicker_set_value(lv_obj_t * cpicker, uint8_t val) +bool lv_cpicker_set_value(lv_obj_t * cpicker, uint8_t val) { - LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME); - - lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker); - - ext->hsv.v = val > 100 ? 100 : val; - - if(ext->color_mode == LV_CPICKER_COLOR_MODE_VALUE) refr_indic_pos(cpicker); - - if(ext->preview && ext->type == LV_CPICKER_TYPE_DISC) { - lv_obj_invalidate(cpicker); - } + lv_color_hsv_t hsv = lv_cpicker_get_hsv(cpicker); + hsv.v = val; + return lv_cpicker_set_hsv(cpicker, hsv); } /** * Set the current hsv of a colorpicker. * @param cpicker pointer to colorpicker object * @param color current selected hsv + * @return true if changed, otherwise false */ -void lv_cpicker_set_hsv(lv_obj_t * cpicker, lv_color_hsv_t hsv) +bool lv_cpicker_set_hsv(lv_obj_t * cpicker, lv_color_hsv_t hsv) { LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME); + if (hsv.h > 360) hsv.h %= 360; + if (hsv.s > 100) hsv.s = 100; + if (hsv.v > 100) hsv.v = 100; + lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker); + if (ext->hsv.h == hsv.h && ext->hsv.s == hsv.s && ext->hsv.v == hsv.v) return false; + ext->hsv = hsv; + refr_indic_pos(cpicker); - lv_obj_invalidate(cpicker); + + if (ext->preview && ext->type == LV_CPICKER_TYPE_DISC) { + lv_obj_invalidate(cpicker); + } + + return true; } /** * Set the current color of a colorpicker. * @param cpicker pointer to colorpicker object * @param color current selected color + * @return true if changed, otherwise false */ -void lv_cpicker_set_color(lv_obj_t * cpicker, lv_color_t color) +bool lv_cpicker_set_color(lv_obj_t * cpicker, lv_color_t color) { - LV_ASSERT_OBJ(cpicker, LV_OBJX_NAME); - - lv_cpicker_set_hsv(cpicker, lv_color_rgb_to_hsv(color.ch.red, color.ch.green, color.ch.blue)); + return lv_cpicker_set_hsv(cpicker, lv_color_rgb_to_hsv(color.ch.red, color.ch.green, color.ch.blue)); } /** @@ -834,10 +825,10 @@ static lv_res_t lv_cpicker_signal(lv_obj_t * cpicker, lv_signal_t sign, void * p break; } - lv_cpicker_set_hsv(cpicker, hsv_cur); - - res = lv_event_send(cpicker, LV_EVENT_VALUE_CHANGED, NULL); - if(res != LV_RES_OK) return res; + if (lv_cpicker_set_hsv(cpicker, hsv_cur)) { + res = lv_event_send(cpicker, LV_EVENT_VALUE_CHANGED, NULL); + if(res != LV_RES_OK) return res; + } } else if(c == LV_KEY_LEFT || c == LV_KEY_DOWN) { lv_color_hsv_t hsv_cur; @@ -855,10 +846,10 @@ static lv_res_t lv_cpicker_signal(lv_obj_t * cpicker, lv_signal_t sign, void * p break; } - lv_cpicker_set_hsv(cpicker, hsv_cur); - - res = lv_event_send(cpicker, LV_EVENT_VALUE_CHANGED, NULL); - if(res != LV_RES_OK) return res; + if (lv_cpicker_set_hsv(cpicker, hsv_cur)) { + res = lv_event_send(cpicker, LV_EVENT_VALUE_CHANGED, NULL); + if(res != LV_RES_OK) return res; + } } } else if(sign == LV_SIGNAL_PRESSED) { @@ -927,24 +918,25 @@ static lv_res_t lv_cpicker_signal(lv_obj_t * cpicker, lv_signal_t sign, void * p angle = lv_atan2(p.x, p.y) % 360; } + lv_color_hsv_t hsv_cur; + hsv_cur = ext->hsv; + switch(ext->color_mode) { case LV_CPICKER_COLOR_MODE_HUE: - if(ext->hsv.h != angle) lv_cpicker_set_hue(cpicker, angle); + hsv_cur.h = angle; break; case LV_CPICKER_COLOR_MODE_SATURATION: - angle = (angle * 100) / 360; - if(ext->hsv.s != angle) lv_cpicker_set_saturation(cpicker, angle); + hsv_cur.s = (angle * 100) / 360; break; case LV_CPICKER_COLOR_MODE_VALUE: - angle = (angle * 100) / 360; - if(ext->hsv.v != angle) lv_cpicker_set_value(cpicker, angle); + hsv_cur.v = (angle * 100) / 360; break; } - refr_indic_pos(cpicker); - - res = lv_event_send(cpicker, LV_EVENT_VALUE_CHANGED, NULL); - if(res != LV_RES_OK) return res; + if (lv_cpicker_set_hsv(cpicker, hsv_cur)) { + res = lv_event_send(cpicker, LV_EVENT_VALUE_CHANGED, NULL); + if(res != LV_RES_OK) return res; + } } return res; @@ -1028,21 +1020,25 @@ static lv_res_t double_click_reset(lv_obj_t * cpicker) lv_indev_t * indev = lv_indev_get_act(); /*Double clicked? Use long press time as double click time out*/ if(lv_tick_elaps(ext->last_click_time) < indev->driver.long_press_time) { + lv_color_hsv_t hsv_cur; + hsv_cur = ext->hsv; + switch(ext->color_mode) { case LV_CPICKER_COLOR_MODE_HUE: - lv_cpicker_set_hue(cpicker, LV_CPICKER_DEF_HUE); + hsv_cur.h = LV_CPICKER_DEF_HUE; break; case LV_CPICKER_COLOR_MODE_SATURATION: - lv_cpicker_set_saturation(cpicker, LV_CPICKER_DEF_SATURATION); + hsv_cur.s = LV_CPICKER_DEF_SATURATION; break; case LV_CPICKER_COLOR_MODE_VALUE: - lv_cpicker_set_value(cpicker, LV_CPICKER_DEF_VALUE); + hsv_cur.v = LV_CPICKER_DEF_VALUE; break; } - lv_res_t res; - res = lv_event_send(cpicker, LV_EVENT_VALUE_CHANGED, NULL); - if(res != LV_RES_OK) return res; + if (lv_cpicker_set_hsv(cpicker, hsv_cur)) { + lv_res_t res = lv_event_send(cpicker, LV_EVENT_VALUE_CHANGED, NULL); + if(res != LV_RES_OK) return res; + } } ext->last_click_time = lv_tick_get(); diff --git a/src/lv_objx/lv_cpicker.h b/src/lv_objx/lv_cpicker.h index 7bce0fec8..8ca26dacd 100644 --- a/src/lv_objx/lv_cpicker.h +++ b/src/lv_objx/lv_cpicker.h @@ -106,37 +106,42 @@ void lv_cpicker_set_style(lv_obj_t * cpicker, lv_cpicker_style_t type, lv_style_ /** * Set the current hue of a colorpicker. * @param cpicker pointer to colorpicker object - * @param hue current selected hue + * @param hue current selected hue [0..360] + * @return true if changed, otherwise false */ -void lv_cpicker_set_hue(lv_obj_t * cpicker, uint16_t hue); +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 + * @param saturation current selected saturation [0..100] + * @return true if changed, otherwise false */ -void lv_cpicker_set_saturation(lv_obj_t * cpicker, uint8_t saturation); +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 + * @param val current selected value [0..100] + * @return true if changed, otherwise false */ -void lv_cpicker_set_value(lv_obj_t * cpicker, uint8_t val); +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 */ -void lv_cpicker_set_hsv(lv_obj_t * cpicker, lv_color_hsv_t hsv); +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 */ -void lv_cpicker_set_color(lv_obj_t * cpicker, lv_color_t color); +bool lv_cpicker_set_color(lv_obj_t * cpicker, lv_color_t color); /** * Set the current color mode.