[gnome-calendar/wip/pandusonu/week-view: 39/60] week-grid: realize the week-grid
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-calendar/wip/pandusonu/week-view: 39/60] week-grid: realize the week-grid
- Date: Fri, 2 Dec 2016 01:51:47 +0000 (UTC)
commit b51f8c3ca682795637460cdaa67df2265ac21054
Author: pandusonu2 <pandu sonu yahoo com>
Date: Fri Aug 5 00:23:30 2016 +0530
week-grid: realize the week-grid
Activate the week-grid by writing the necessary realize, unrealize, map and unmap functions
data/ui/week-view.ui | 8 ++--
src/views/gcal-week-grid.c | 114 +++++++++++++++++++++++++++++++++++--------
src/views/gcal-week-view.c | 5 ++
3 files changed, 101 insertions(+), 26 deletions(-)
---
diff --git a/data/ui/week-view.ui b/data/ui/week-view.ui
index 801e728..43789d7 100644
--- a/data/ui/week-view.ui
+++ b/data/ui/week-view.ui
@@ -22,7 +22,7 @@
<child>
<object class="GtkBox">
<property name="visible">True</property>
- <property name="orientation">vertical</property>
+ <property name="orientation">horizontal</property>
<child>
<object class="GtkDrawingArea" id="hours_bar">
<property name="visible">True</property>
@@ -31,11 +31,11 @@
<signal name="size-allocate" handler="gcal_week_view_hours_bar_size_allocate"
object="GcalWeekView" swapped="yes" />
</object>
</child>
- <!--<child>
- <object class="GcalWeekGrid">
+ <child>
+ <object class="GcalWeekGrid" id="week_grid">
<property name="visible">True</property>
</object>
- </child>-->
+ </child>
</object>
</child>
</object>
diff --git a/src/views/gcal-week-grid.c b/src/views/gcal-week-grid.c
index a34c79a..a9e4546 100644
--- a/src/views/gcal-week-grid.c
+++ b/src/views/gcal-week-grid.c
@@ -28,8 +28,8 @@
static const double dashed [] =
{
- 1.0,
- 1.0
+ 5.0,
+ 6.0
};
struct _GcalWeekGrid
@@ -38,7 +38,7 @@ struct _GcalWeekGrid
GtkWidget *hours_sidebar;
- GcalManager *manager;
+ GdkWindow *event_window;
gint first_weekday;
@@ -46,6 +46,8 @@ struct _GcalWeekGrid
icaltimetype *active_date;
icaltimetype *current_date;
+
+ GcalManager *manager;
};
static void gcal_week_grid_finalize (GObject *object);
@@ -135,6 +137,84 @@ gcal_week_grid_set_property (GObject *object,
}
}
+static void
+gcal_week_grid_realize (GtkWidget *widget)
+{
+ GcalWeekGrid *self;
+ GdkWindow *parent_window;
+ GdkWindowAttr attributes;
+ gint attributes_mask;
+ GtkAllocation allocation;
+
+ self = GCAL_WEEK_GRID (widget);
+
+ gtk_widget_set_realized (widget, TRUE);
+
+ parent_window = gtk_widget_get_parent_window (widget);
+
+ gtk_widget_set_window (widget, parent_window);
+ g_object_ref (parent_window);
+
+ gtk_widget_get_allocation (widget, &allocation);
+
+ attributes.window_type = GDK_WINDOW_CHILD;
+ attributes.wclass = GDK_INPUT_ONLY;
+ attributes.x = allocation.x;
+ attributes.y = allocation.y;
+ attributes.width = allocation.width;
+ attributes.height = allocation.height;
+ attributes.event_mask = gtk_widget_get_events (widget);
+ attributes_mask = GDK_WA_X | GDK_WA_Y;
+
+ self->event_window = gdk_window_new (parent_window,
+ &attributes,
+ attributes_mask);
+ gtk_widget_register_window (widget, self->event_window);
+}
+
+static void
+gcal_week_grid_unrealize (GtkWidget *widget)
+{
+ GcalWeekGrid *self;
+
+ self = GCAL_WEEK_GRID (widget);
+
+ if (self->event_window != NULL)
+ {
+ gtk_widget_unregister_window (widget, self->event_window);
+ gdk_window_destroy (self->event_window);
+ self->event_window = NULL;
+ }
+
+ GTK_WIDGET_CLASS (gcal_week_grid_parent_class)->unrealize (widget);
+}
+
+static void
+gcal_week_grid_map (GtkWidget *widget)
+{
+ GcalWeekGrid *self;
+
+ self = GCAL_WEEK_GRID (widget);
+
+ if (self->event_window != NULL)
+ gdk_window_show (self->event_window);
+
+ GTK_WIDGET_CLASS (gcal_week_grid_parent_class)->map (widget);
+}
+
+static void
+gcal_week_grid_unmap (GtkWidget *widget)
+{
+ GcalWeekGrid *self;
+
+ self = GCAL_WEEK_GRID (widget);
+
+ if (self->event_window != NULL)
+ gdk_window_hide (self->event_window);
+
+ GTK_WIDGET_CLASS (gcal_week_grid_parent_class)->unmap (widget);
+}
+
static gboolean
gcal_week_grid_draw (GtkWidget *widget,
cairo_t *cr)
@@ -145,10 +225,7 @@ gcal_week_grid_draw (GtkWidget *widget,
GtkBorder padding;
GdkRGBA color;
- gint i;
- gint width;
- gint height;
- gint current_cell;
+ gint i, width, height;
PangoLayout *layout;
PangoFontDescription *font_desc;
@@ -158,6 +235,7 @@ gcal_week_grid_draw (GtkWidget *widget,
context = gtk_widget_get_style_context (widget);
state = gtk_widget_get_state_flags (widget);
+ gtk_style_context_add_class (context, "hours");
gtk_style_context_get_color (context, state, &color);
gtk_style_context_get_padding (context, state, &padding);
gtk_style_context_get (context, state, "font", &font_desc, NULL);
@@ -169,24 +247,11 @@ gcal_week_grid_draw (GtkWidget *widget,
width = gtk_widget_get_allocated_width (widget);
height = gtk_widget_get_allocated_height (widget);
- current_cell = icaltime_day_of_week (*(self->current_date)) - 1;
- current_cell = (7 + current_cell - self->first_weekday) % 7;
-
- gtk_style_context_save (context);
- gtk_style_context_add_class (context, "current");
- gtk_render_background (context, cr,
- (width / 7.0) * current_cell,
- 0,
- (width / 7.0),
- height);
- gtk_style_context_remove_class (context, "current");
- gtk_style_context_restore (context);
+ cairo_set_line_width (cr, 0.65);
for (i = 0; i < 7; i++)
{
- cairo_move_to (cr,
- ((width) / 7) * i + 0.4,
- 0);
+ cairo_move_to (cr, ((width) / 7) * i + 0.4, 0);
cairo_rel_line_to (cr, 0, height);
}
@@ -199,6 +264,7 @@ gcal_week_grid_draw (GtkWidget *widget,
cairo_stroke (cr);
cairo_set_dash (cr, dashed, 2, 0);
+
for (i = 0; i < 24; i++)
{
cairo_move_to (cr, 0, (height / 24) * i + (height / 48) + 0.4);
@@ -229,6 +295,10 @@ gcal_week_grid_class_init (GcalWeekGridClass *klass)
object_class->set_property = gcal_week_grid_set_property;
widget_class->draw = gcal_week_grid_draw;
+ widget_class->realize = gcal_week_grid_realize;
+ widget_class->unrealize = gcal_week_grid_unrealize;
+ widget_class->map = gcal_week_grid_map;
+ widget_class->unmap = gcal_week_grid_unmap;
gtk_widget_class_set_css_name (widget_class, "calendar-view");
}
diff --git a/src/views/gcal-week-view.c b/src/views/gcal-week-view.c
index 7f44966..616294c 100644
--- a/src/views/gcal-week-view.c
+++ b/src/views/gcal-week-view.c
@@ -50,6 +50,7 @@ struct _GcalWeekView
GtkWidget *header;
GtkWidget *hours_bar;
+ GtkWidget *week_grid;
/*
* first day of the week according to user locale, being
@@ -302,6 +303,9 @@ gcal_week_view_hours_bar_size_allocate (GtkWidget *widget,
}
gtk_widget_set_size_request (self->hours_bar, self->sidebar_width_offset, 2568);
+ gtk_widget_set_size_request (self->week_grid,
+ gtk_widget_get_allocated_width (GTK_WIDGET (self)) -
self->sidebar_width_offset,
+ 2568);
GTK_WIDGET_CLASS (gcal_week_view_parent_class)->size_allocate (widget, alloc);
}
@@ -423,6 +427,7 @@ gcal_week_view_class_init (GcalWeekViewClass *klass)
gtk_widget_class_bind_template_child (widget_class, GcalWeekView, header);
gtk_widget_class_bind_template_child (widget_class, GcalWeekView, hours_bar);
+ gtk_widget_class_bind_template_child (widget_class, GcalWeekView, week_grid);
gtk_widget_class_bind_template_callback (widget_class, gcal_week_view_draw_hours);
gtk_widget_class_bind_template_callback (widget_class, gcal_week_view_hours_bar_size_allocate);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]