week-header: simplify background drawing code

By moving the drawing area to a separate place, we're
able to avoid having to manually calculate the sidebar
width.

Also, because we can, the drawing code was simplified a
little bit by moving the bottom border to CSS.
This commit is contained in:
Georges Basile Stavracas Neto
2016-12-01 23:48:54 -02:00
parent 2298379e51
commit 16a2d64874
2 changed files with 14 additions and 34 deletions
+1
View File
@@ -363,6 +363,7 @@ datechooser day:selected:hover {
.week-header {
padding: 0px;
border-bottom: solid @borders 1px;
}
.week-header .month-name {
+13 -34
View File
@@ -1,6 +1,7 @@
/* gcal-week-header.c
*
* Copyright (C) 2016 Vamsi Krishna Gollapudi <pandu.sonu@yahoo.com>
* Copyright (C) 2016 Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
* Vamsi Krishna Gollapudi <pandu.sonu@yahoo.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -30,6 +31,8 @@
#define ALL_DAY_CELLS_HEIGHT 40
#define COLUMN_PADDING 6
struct _GcalWeekHeader
{
GtkGrid parent;
@@ -87,10 +90,6 @@ static void header_expand (GcalWeekHeader *sel
static void on_expand_action_activated (GcalWeekHeader *self,
gpointer user_data);
static void fix_background_size_request (GcalWeekHeader *self,
GdkRectangle *allocation,
GtkWidget *widget);
static void gcal_week_header_finalize (GObject *object);
static void gcal_week_header_get_property (GObject *object,
@@ -454,14 +453,6 @@ on_expand_action_activated (GcalWeekHeader *self,
header_expand (self);
}
static void
fix_background_size_request (GcalWeekHeader *self,
GdkRectangle *allocation,
GtkWidget *widget)
{
gtk_widget_set_size_request (self->draw_area, -1, allocation->height + gtk_widget_get_margin_top (self->scrolledwindow));
}
static void
gcal_week_header_finalize (GObject *object)
{
@@ -603,7 +594,7 @@ gcal_week_header_draw (GcalWeekHeader *self,
PangoFontDescription *bold_font;
gint i, font_height, current_cell;
gdouble sidebar_width, cell_width;
gdouble cell_width;
cairo_save(cr);
@@ -627,14 +618,13 @@ gcal_week_header_draw (GcalWeekHeader *self,
current_cell = icaltime_day_of_week (*(self->active_date)) - 1;
current_cell = (7 + current_cell - self->first_weekday) % 7;
sidebar_width = gtk_widget_get_allocated_width (self->expand_button_box);
cell_width = (alloc.width - sidebar_width) / 7;
cell_width = alloc.width / 7;
pango_layout_get_pixel_size (layout, NULL, &font_height);
gtk_style_context_save (context);
gtk_style_context_add_class (context, "current");
gtk_render_background (context, cr,
cell_width * current_cell + sidebar_width,
cell_width * current_cell,
font_height + padding.bottom,
cell_width,
ALL_DAY_CELLS_HEIGHT);
@@ -663,7 +653,7 @@ gcal_week_header_draw (GcalWeekHeader *self,
pango_layout_set_font_description (layout, bold_font);
pango_layout_set_text (layout, weekday_date, -1);
cairo_move_to (cr,
padding.left + cell_width * i + sidebar_width + 3,
padding.left + cell_width * i + COLUMN_PADDING,
font_height + padding.bottom);
pango_cairo_show_layout (cr,layout);
@@ -679,35 +669,25 @@ gcal_week_header_draw (GcalWeekHeader *self,
pango_layout_set_font_description (layout, bold_font);
pango_layout_set_text (layout, weekday_abv, -1);
cairo_move_to (cr,
padding.left + cell_width * i + sidebar_width + 3,
padding.left + cell_width * i + COLUMN_PADDING,
0);
pango_cairo_show_layout (cr, layout);
gtk_style_context_restore (context);
/* Draws the lines after each day of the week */
cairo_save (cr);
cairo_move_to (cr,
cell_width * i + sidebar_width,
font_height + padding.bottom + 3);
cell_width * i + 0.5,
font_height + padding.bottom);
cairo_set_line_width (cr, 0.25);
cairo_rel_line_to (cr, 0.0, gtk_widget_get_allocated_height (self->draw_area));
cairo_rel_line_to (cr, 0.0, gtk_widget_get_allocated_height (self->draw_area) - font_height + padding.bottom);
cairo_stroke (cr);
cairo_restore (cr);
g_free (weekday_date);
g_free (weekday_abv);
}
gtk_style_context_add_class (context, "margin");
gtk_style_context_get_color (context, state, &color);
gdk_cairo_set_source_rgba (cr, &color);
cairo_move_to (cr, 0, gtk_widget_get_allocated_height (self->draw_area));
cairo_rel_line_to (cr, gtk_widget_get_allocated_width (self->draw_area), 0);
cairo_stroke (cr);
cairo_restore (cr);
pango_font_description_free (bold_font);
@@ -752,7 +732,6 @@ gcal_week_header_class_init (GcalWeekHeaderClass *kclass)
gtk_widget_class_bind_template_child (widget_class, GcalWeekHeader, week_label);
gtk_widget_class_bind_template_child (widget_class, GcalWeekHeader, year_label);
gtk_widget_class_bind_template_callback (widget_class, fix_background_size_request);
gtk_widget_class_bind_template_callback (widget_class, gcal_week_header_draw);
gtk_widget_class_bind_template_callback (widget_class, on_expand_action_activated);