fix(calendar): style today and highlighted dates (#5310)

This commit is contained in:
Gabor Kiss-Vamosi
2024-01-14 14:30:04 +01:00
committed by GitHub
parent 1b69c1c341
commit 74c72d7c7c
10 changed files with 40 additions and 30 deletions

View File

@@ -17,7 +17,7 @@ static void event_handler(lv_event_t * e)
void lv_example_calendar_1(void) void lv_example_calendar_1(void)
{ {
lv_obj_t * calendar = lv_calendar_create(lv_screen_active()); lv_obj_t * calendar = lv_calendar_create(lv_screen_active());
lv_obj_set_size(calendar, 185, 185); lv_obj_set_size(calendar, 185, 230);
lv_obj_align(calendar, LV_ALIGN_CENTER, 0, 27); lv_obj_align(calendar, LV_ALIGN_CENTER, 0, 27);
lv_obj_add_event_cb(calendar, event_handler, LV_EVENT_ALL, NULL); lv_obj_add_event_cb(calendar, event_handler, LV_EVENT_ALL, NULL);
@@ -45,7 +45,6 @@ void lv_example_calendar_1(void)
#elif LV_USE_CALENDAR_HEADER_ARROW #elif LV_USE_CALENDAR_HEADER_ARROW
lv_calendar_header_arrow_create(calendar); lv_calendar_header_arrow_create(calendar);
#endif #endif
lv_calendar_set_showed_date(calendar, 2021, 10);
} }
#endif #endif

View File

@@ -28,7 +28,7 @@
* STATIC PROTOTYPES * STATIC PROTOTYPES
**********************/ **********************/
static void lv_calendar_constructor(const lv_obj_class_t * class_p, lv_obj_t * obj); static void lv_calendar_constructor(const lv_obj_class_t * class_p, lv_obj_t * obj);
static void draw_part_begin_event_cb(lv_event_t * e); static void draw_task_added_event_cb(lv_event_t * e);
static uint8_t get_day_of_week(uint32_t year, uint32_t month, uint32_t day); static uint8_t get_day_of_week(uint32_t year, uint32_t month, uint32_t day);
static uint8_t get_month_length(int32_t year, int32_t month); static uint8_t get_month_length(int32_t year, int32_t month);
@@ -280,8 +280,9 @@ static void lv_calendar_constructor(const lv_obj_class_t * class_p, lv_obj_t * o
calendar->btnm = lv_buttonmatrix_create(obj); calendar->btnm = lv_buttonmatrix_create(obj);
lv_buttonmatrix_set_map(calendar->btnm, calendar->map); lv_buttonmatrix_set_map(calendar->btnm, calendar->map);
lv_buttonmatrix_set_button_ctrl_all(calendar->btnm, LV_BUTTONMATRIX_CTRL_CLICK_TRIG | LV_BUTTONMATRIX_CTRL_NO_REPEAT); lv_buttonmatrix_set_button_ctrl_all(calendar->btnm, LV_BUTTONMATRIX_CTRL_CLICK_TRIG | LV_BUTTONMATRIX_CTRL_NO_REPEAT);
lv_obj_add_event_cb(calendar->btnm, draw_part_begin_event_cb, LV_EVENT_DRAW_TASK_ADDED, NULL); lv_obj_add_event_cb(calendar->btnm, draw_task_added_event_cb, LV_EVENT_DRAW_TASK_ADDED, NULL);
lv_obj_set_width(calendar->btnm, lv_pct(100)); lv_obj_set_width(calendar->btnm, lv_pct(100));
lv_obj_add_flag(calendar->btnm, LV_OBJ_FLAG_EVENT_BUBBLE | LV_OBJ_FLAG_SEND_DRAW_TASK_EVENTS);
lv_obj_set_flex_flow(obj, LV_FLEX_FLOW_COLUMN); lv_obj_set_flex_flow(obj, LV_FLEX_FLOW_COLUMN);
lv_obj_set_flex_grow(calendar->btnm, 1); lv_obj_set_flex_grow(calendar->btnm, 1);
@@ -291,43 +292,53 @@ static void lv_calendar_constructor(const lv_obj_class_t * class_p, lv_obj_t * o
lv_calendar_set_today_date(obj, calendar->today.year, calendar->today.month, calendar->today.day); lv_calendar_set_today_date(obj, calendar->today.year, calendar->today.month, calendar->today.day);
#endif #endif
lv_obj_add_flag(calendar->btnm, LV_OBJ_FLAG_EVENT_BUBBLE);
} }
static void draw_part_begin_event_cb(lv_event_t * e) static void draw_task_added_event_cb(lv_event_t * e)
{ {
lv_obj_t * obj = lv_event_get_target(e); lv_obj_t * obj = lv_event_get_target(e);
lv_draw_task_t * draw_task = lv_event_get_param(e); lv_draw_task_t * draw_task = lv_event_get_param(e);
if(draw_task->type != LV_DRAW_TASK_TYPE_FILL) return; if(((lv_draw_dsc_base_t *)draw_task->draw_dsc)->part != LV_PART_ITEMS) return;
lv_draw_rect_dsc_t * rect_draw_dsc; lv_draw_fill_dsc_t * fill_draw_dsc = NULL;
rect_draw_dsc = draw_task->draw_dsc; lv_draw_border_dsc_t * border_draw_dsc = NULL;
if(rect_draw_dsc->base.part == LV_PART_ITEMS) { if(draw_task->type == LV_DRAW_TASK_TYPE_FILL) {
/*Day name styles*/ fill_draw_dsc = draw_task->draw_dsc;
if(rect_draw_dsc->base.id1 < 7) { }
rect_draw_dsc->bg_opa = LV_OPA_TRANSP; else if(draw_task->type == LV_DRAW_TASK_TYPE_BORDER) {
rect_draw_dsc->border_opa = LV_OPA_TRANSP; border_draw_dsc = draw_task->draw_dsc;
} }
else if(lv_buttonmatrix_has_button_ctrl(obj, rect_draw_dsc->base.id1, LV_BUTTONMATRIX_CTRL_DISABLED)) { else {
rect_draw_dsc->bg_opa = LV_OPA_TRANSP; return;
rect_draw_dsc->border_opa = LV_OPA_TRANSP; }
}
if(lv_buttonmatrix_has_button_ctrl(obj, rect_draw_dsc->base.id1, LV_CALENDAR_CTRL_HIGHLIGHT)) { int32_t id = ((lv_draw_dsc_base_t *)draw_task->draw_dsc)->id1;
rect_draw_dsc->bg_opa = LV_OPA_40;
rect_draw_dsc->bg_color = lv_theme_get_color_primary(obj);
if(lv_buttonmatrix_get_selected_button(obj) == rect_draw_dsc->base.id1) {
rect_draw_dsc->bg_opa = LV_OPA_70;
}
}
if(lv_buttonmatrix_has_button_ctrl(obj, rect_draw_dsc->base.id1, LV_CALENDAR_CTRL_TODAY)) { /*Day name styles*/
rect_draw_dsc->border_opa = LV_OPA_COVER; if(id < 7) {
rect_draw_dsc->border_color = lv_theme_get_color_primary(obj); if(fill_draw_dsc) fill_draw_dsc->opa = LV_OPA_TRANSP;
rect_draw_dsc->border_width += 1; if(border_draw_dsc) border_draw_dsc->opa = LV_OPA_TRANSP;
}
else if(lv_buttonmatrix_has_button_ctrl(obj, id, LV_BUTTONMATRIX_CTRL_DISABLED)) {
if(fill_draw_dsc) fill_draw_dsc->opa = LV_OPA_TRANSP;
if(border_draw_dsc) border_draw_dsc->opa = LV_OPA_TRANSP;
}
if(lv_buttonmatrix_has_button_ctrl(obj, id, LV_CALENDAR_CTRL_HIGHLIGHT)) {
if(border_draw_dsc) border_draw_dsc->color = lv_theme_get_color_primary(obj);
if(fill_draw_dsc) fill_draw_dsc->opa = LV_OPA_40;
if(fill_draw_dsc) fill_draw_dsc->color = lv_theme_get_color_primary(obj);
if(lv_buttonmatrix_get_selected_button(obj) == (uint32_t)id) {
if(fill_draw_dsc) fill_draw_dsc->opa = LV_OPA_70;
} }
} }
if(lv_buttonmatrix_has_button_ctrl(obj, id, LV_CALENDAR_CTRL_TODAY)) {
if(border_draw_dsc) border_draw_dsc->opa = LV_OPA_COVER;
if(border_draw_dsc) border_draw_dsc->color = lv_theme_get_color_primary(obj);
if(border_draw_dsc) border_draw_dsc->width += 1;
}
} }
/** /**

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 13 KiB