month-view-row: Slant edges of multiday events

When the start or end of the event block doesn't match the event's
range, add slanted edges.
This commit is contained in:
Georges Basile Stavracas Neto
2023-08-11 15:13:44 -03:00
parent 56d9040030
commit ddfd3ae498
+28
View File
@@ -259,9 +259,11 @@ prepare_layout_blocks (GcalMonthViewRow *self,
static void
recalculate_layout_blocks (GcalMonthViewRow *self)
{
g_autoptr (GDateTime) range_start = NULL;
guint events_at_weekday[7] = { 0, };
guint n_events;
range_start = gcal_range_get_start (self->range);
n_events = g_list_model_get_n_items (G_LIST_MODEL (self->events));
g_hash_table_remove_all (self->layout_blocks);
@@ -322,6 +324,32 @@ recalculate_layout_blocks (GcalMonthViewRow *self)
}
}
/* Adjust slanted edges of multiday events */
if (gcal_event_is_multiday (event))
{
g_autoptr (GDateTime) adjusted_range_start = NULL;
adjusted_range_start = g_date_time_new (g_date_time_get_timezone (gcal_event_get_date_start (event)),
g_date_time_get_year (range_start),
g_date_time_get_month (range_start),
g_date_time_get_day_of_month (range_start),
0, 0, 0);
for (guint j = 0; j < blocks->len; j++)
{
g_autoptr (GDateTime) block_start = NULL;
g_autoptr (GDateTime) block_end = NULL;
block = g_ptr_array_index (blocks, j);
block_start = g_date_time_add_days (adjusted_range_start, block->cell);
block_end = g_date_time_add_days (block_start, block->length); /* FIXME: use end date's timezone here */
gcal_event_widget_set_date_start (GCAL_EVENT_WIDGET (block->event_widget), block_start);
gcal_event_widget_set_date_end (GCAL_EVENT_WIDGET (block->event_widget), block_end);
}
}
g_hash_table_insert (self->layout_blocks, event, g_steal_pointer (&blocks));
}
}