struct dimensions { int row_count; /* rows */ int column_count; /* columns */ double paper_width; /* paper width */ double paper_height; /* paper height */ double month_width; /* month width */ double month_height; /* month height */ double month_top_corner_x; double month_top_corner_y; double day_width; /* day box width */ double day_height; /* day box height */ double margin; /* margin */ double header_width; double header_height; }; int fill_bg(cairo_t *c); struct RGB { double r; double g; double b; }; struct month_info { int month_position; int first_day; int num_of_days; int minimum_rows; }; struct RGB hex_to_rgb(char *str); int set_color(cairo_t *c, char *hex); int draw_text (cairo_t *c, double x, double y, char *font_family, int font_size, char *text); int calculate_dimensions(double pw, double ph, struct dimensions *d); int print_dimensions(struct dimensions *d); int draw_month_grid (cairo_t *c, struct month_info *m, struct dimensions *d); int draw_month (cairo_t *c, cairo_t *cd, cairo_surface_t *s, struct month_info *m, struct dimensions *d); int day_of_week (int d, int m, int y); int draw_month_title(cairo_t *c, struct dimensions *d, char *font_family, int font_size, char *name); PangoRectangle get_logical_extents (cairo_t *c, char *font_family, int font_size, char *text); int calculate_minimum_rows(struct month_info *m, struct dimensions *d); int construct_day_box(cairo_t *cd, int month, int day, int week_day);