diff options
Diffstat (limited to 'draw.h')
| -rw-r--r-- | draw.h | 94 |
1 files changed, 94 insertions, 0 deletions
@@ -0,0 +1,94 @@ +struct dimensions { + double pw; /* paper width */ + double ph; /* paper height */ + double mw; /* month width */ + double mh; /* month height */ + double bw; /* day box width */ + double bh; /* day box height */ + double r; /* rows */ + double c; /* columns */ + double m; /* margin */ +}; + + + +int draw_calendar(cairo_t *c, double x, double y, struct dimensions d) { + double x1, y1, x2, y2; + x1 = x; + y1 = y; + x2 = d.pw - x1; /* Set the line endpoint to right side of the page */ + + for (int i = 0; i < d.r + 1; i++) { /* Draw Horizontal Lines */ + cairo_move_to (c, x, y); + cairo_line_to (c, x2, y); + y = y + d.bh; + } + + x = x1; + y = y1; + y2 = y1 + d.mh; /* Set the line endpoint as the bottom of the month */ + for (int i = 0; i < d.c + 1; i++) { /* Draw Vertical Lines */ + cairo_move_to (c, x, y); + cairo_line_to (c, x, y2); + x = x + d.bw; + } + cairo_stroke(c); + return(0); +} + + + +int draw_numbers(cairo_t *c, double x, double y, struct dimensions d, int wd, int nd) { + char str[3]; + cairo_text_extents_t te; + cairo_font_extents_t fe; + + cairo_select_font_face (c, "sans-serif", + CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD); + cairo_set_font_size (c, d.bw / 2); + + int iterative = 0; + cairo_font_extents (c, &fe); + double yi = y; + double xi = x; + int current_weekday = wd; + x = d.m + (wd * d.bw); + for (int j = 0; j < d.r; j++) { + y = y + d.bh - ((d.bh - fe.ascent) / 2); + for (int k = current_weekday; k < d.c; k++) { + if (iterative < nd) { + sprintf(str, "%d", iterative + 1); + cairo_text_extents (c, str, &te); + double box_margins = (d.bw - te.width) / 2; + + cairo_move_to(c, x + box_margins - te.x_bearing, y); /* center the number within the box */ + cairo_show_text(c, str); + cairo_move_to(c, x, y); /* Sort of backtrack to realign with the spacing of the boxes */ + x = x + d.bw; + iterative++; + current_weekday++; + } + } + current_weekday = 0; + y = y - (d.bh - ((d.bh - fe.ascent) / 2)); + y = y + d.bh; + x = xi; + } + return(0); +} + + + +int draw_month_name(cairo_t *c, char *name, struct dimensions d) { + double x, y = d.m; + cairo_set_font_size(c, 1.0); + cairo_text_extents_t te; + cairo_font_extents_t fe; + cairo_text_extents(c, name, &te); + x = (d.pw / 2) - (te.width / 2); + y = 1.5; + cairo_move_to(c, x, y); + cairo_show_text(c, &name[0]); + return(0); +} + |
