From 3f3066ee2c19e751ab8ad927e07c4a581bdd101b Mon Sep 17 00:00:00 2001 From: PGNetHun Date: Mon, 12 Feb 2024 19:14:43 +0100 Subject: [PATCH] fix(calendar): fix crash when no default is set (#5621) --- src/widgets/calendar/lv_calendar.c | 9 ++------- .../calendar/lv_calendar_header_arrow.c | 11 +++++++++-- tests/ref_imgs/widgets/calendar_08.png | Bin 13664 -> 13543 bytes 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/widgets/calendar/lv_calendar.c b/src/widgets/calendar/lv_calendar.c index fb5682bf9..49b46fb50 100644 --- a/src/widgets/calendar/lv_calendar.c +++ b/src/widgets/calendar/lv_calendar.c @@ -245,15 +245,13 @@ static void lv_calendar_constructor(const lv_obj_class_t * class_p, lv_obj_t * o /*Initialize the allocated 'ext'*/ -#if LV_WIDGETS_HAS_DEFAULT_VALUE - calendar->today.year = 2020; + calendar->today.year = 2024; calendar->today.month = 1; calendar->today.day = 1; - calendar->showed_date.year = 2020; + calendar->showed_date.year = 2024; calendar->showed_date.month = 1; calendar->showed_date.day = 1; -#endif calendar->highlighted_dates = NULL; calendar->highlighted_dates_num = 0; @@ -287,11 +285,8 @@ static void lv_calendar_constructor(const lv_obj_class_t * class_p, lv_obj_t * o lv_obj_set_flex_flow(obj, LV_FLEX_FLOW_COLUMN); lv_obj_set_flex_grow(calendar->btnm, 1); -#if LV_WIDGETS_HAS_DEFAULT_VALUE lv_calendar_set_showed_date(obj, calendar->showed_date.year, calendar->showed_date.month); lv_calendar_set_today_date(obj, calendar->today.year, calendar->today.month, calendar->today.day); -#endif - } static void draw_task_added_event_cb(lv_event_t * e) diff --git a/src/widgets/calendar/lv_calendar_header_arrow.c b/src/widgets/calendar/lv_calendar_header_arrow.c index a9daad4ae..3a8eeaa1a 100644 --- a/src/widgets/calendar/lv_calendar_header_arrow.c +++ b/src/widgets/calendar/lv_calendar_header_arrow.c @@ -13,6 +13,7 @@ #include "../button/lv_button.h" #include "../label/lv_label.h" #include "../../layouts/flex/lv_flex.h" +#include "../../misc/lv_assert.h" /********************* * DEFINES @@ -111,6 +112,9 @@ static void month_event_cb(lv_event_t * e) d = lv_calendar_get_showed_date(calendar); lv_calendar_date_t newd = *d; + LV_ASSERT_FORMAT_MSG(newd.year >= 0 && newd.month >= 1 && newd.month <= 12, + "Invalid date: %d-%d", newd.year, newd.month); + /*The last child is the right button*/ if(lv_obj_get_child(header, 0) == btn) { if(newd.month == 1) { @@ -142,9 +146,12 @@ static void value_changed_event_cb(lv_event_t * e) lv_obj_t * header = lv_event_get_current_target(e); lv_obj_t * calendar = lv_obj_get_parent(header); - const lv_calendar_date_t * cur_date = lv_calendar_get_showed_date(calendar); + const lv_calendar_date_t * date = lv_calendar_get_showed_date(calendar); + LV_ASSERT_FORMAT_MSG(date->year >= 0 && date->month >= 1 && date->month <= 12, + "Invalid date: %d-%d", date->year, date->month); + lv_obj_t * label = lv_obj_get_child(header, 1); - lv_label_set_text_fmt(label, "%d %s", cur_date->year, month_names_def[cur_date->month - 1]); + lv_label_set_text_fmt(label, "%d %s", date->year, month_names_def[date->month - 1]); } #endif /*LV_USE_CALENDAR_HEADER_ARROW*/ diff --git a/tests/ref_imgs/widgets/calendar_08.png b/tests/ref_imgs/widgets/calendar_08.png index 8b1f0527d45b44861fc1ba3694b5833e3aa3c9b9..ef92ff027a044b52967451921a600d22870c45a3 100644 GIT binary patch literal 13543 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 d$Dy%%Qajay^Jt0JN-