diff options
Diffstat (limited to 'calendar/gui/layout.h')
-rw-r--r-- | calendar/gui/layout.h | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/calendar/gui/layout.h b/calendar/gui/layout.h index b87cf7e36b..734b720b8b 100644 --- a/calendar/gui/layout.h +++ b/calendar/gui/layout.h @@ -9,17 +9,29 @@ #ifndef LAYOUT_H #define LAYOUT_H -#include "calendar.h" +#include <glib.h> +#include <time.h> -/* This is the main layout function for overlapping events. You pass in a list of CalendarObject - * structures and it will calculate a nice non-overlapping layout for them. +/* Functions of this type must translate the list item into two time_t values for the start and end + * of an event. + */ +typedef void (* LayoutQueryTimeFunc) (GList *event, time_t *start, time_t *end); + + +/* This is the main layout function for overlapping events. You pass in a list of (presumably) + * events and a function that should take a list element and return the start and end times for the + * event corresponding to that list element. * * It returns the number of slots ("columns") that you need to take into account when actually * painting the events, the array of the first slot index that each event occupies, and the array of * number of slots that each event occupies. You have to free both arrays. + * + * You will get somewhat better-looking results if the list of events is sorted by using the start + * time as the primary sort key and the end time as the secondary sort key -- so that "longer" + * events go first in the list. */ -void layout_events (GList *events, int *num_slots, int **allocations, int **slots); +void layout_events (GList *events, LayoutQueryTimeFunc func, int *num_slots, int **allocations, int **slots); #endif |