[gtk+/rendering-cleanup-next: 26/203] calendar: Port to draw vfunc
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/rendering-cleanup-next: 26/203] calendar: Port to draw vfunc
- Date: Thu, 23 Sep 2010 10:33:16 +0000 (UTC)
commit 5f789a2c4593b48692883b549fa5720922f17d61
Author: Benjamin Otte <otte redhat com>
Date: Sat Sep 4 19:16:26 2010 +0200
calendar: Port to draw vfunc
gtk/gtkcalendar.c | 106 +++++++++++++++++++++++++++++++++-------------------
1 files changed, 67 insertions(+), 39 deletions(-)
---
diff --git a/gtk/gtkcalendar.c b/gtk/gtkcalendar.c
index 8336880..554c752 100644
--- a/gtk/gtkcalendar.c
+++ b/gtk/gtkcalendar.c
@@ -351,8 +351,8 @@ static void gtk_calendar_size_request (GtkWidget *widget,
GtkRequisition *requisition);
static void gtk_calendar_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
-static gboolean gtk_calendar_expose (GtkWidget *widget,
- GdkEventExpose *event);
+static gboolean gtk_calendar_draw (GtkWidget *widget,
+ cairo_t *cr);
static gboolean gtk_calendar_button_press (GtkWidget *widget,
GdkEventButton *event);
static gboolean gtk_calendar_button_release (GtkWidget *widget,
@@ -447,7 +447,7 @@ gtk_calendar_class_init (GtkCalendarClass *class)
widget_class->realize = gtk_calendar_realize;
widget_class->unrealize = gtk_calendar_unrealize;
- widget_class->expose_event = gtk_calendar_expose;
+ widget_class->draw = gtk_calendar_draw;
widget_class->size_request = gtk_calendar_size_request;
widget_class->size_allocate = gtk_calendar_size_allocate;
widget_class->button_press_event = gtk_calendar_button_press;
@@ -2326,6 +2326,10 @@ calendar_paint_header (GtkCalendar *calendar, cairo_t *cr)
struct tm *tm;
gchar *str;
+ cairo_save (cr);
+ gdk_window_get_position (priv->header_win, &x, &y);
+ cairo_translate (cr, x, y);
+
if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_LTR)
year_left = priv->year_before;
else
@@ -2410,6 +2414,8 @@ calendar_paint_header (GtkCalendar *calendar, cairo_t *cr)
pango_cairo_show_layout (cr, layout);
g_object_unref (layout);
+
+ cairo_restore (cr);
}
static void
@@ -2429,6 +2435,11 @@ calendar_paint_day_names (GtkCalendar *calendar,
gint focus_width;
gint calendar_ysep = calendar_get_ysep (calendar);
gint calendar_xsep = calendar_get_xsep (calendar);
+ int x, y;
+
+ cairo_save (cr);
+ gdk_window_get_position (priv->day_name_win, &x, &y);
+ cairo_translate (cr, x, y);
gtk_widget_style_get (GTK_WIDGET (widget),
"focus-line-width", &focus_width,
@@ -2493,6 +2504,8 @@ calendar_paint_day_names (GtkCalendar *calendar,
}
g_object_unref (layout);
+
+ cairo_restore (cr);
}
static void
@@ -2501,7 +2514,6 @@ calendar_paint_week_numbers (GtkCalendar *calendar,
{
GtkWidget *widget = GTK_WIDGET (calendar);
GtkCalendarPrivate *priv = GTK_CALENDAR_GET_PRIVATE (calendar);
-
guint week = 0, year;
gint row, x_loc, y_loc;
gint day_height;
@@ -2511,6 +2523,11 @@ calendar_paint_week_numbers (GtkCalendar *calendar,
gint focus_padding;
gint focus_width;
gint calendar_xsep = calendar_get_xsep (calendar);
+ int x, y;
+
+ cairo_save (cr);
+ gdk_window_get_position (priv->week_win, &x, &y);
+ cairo_translate (cr, x, y);
gtk_widget_style_get (GTK_WIDGET (widget),
"focus-line-width", &focus_width,
@@ -2582,6 +2599,8 @@ calendar_paint_week_numbers (GtkCalendar *calendar,
}
g_object_unref (layout);
+
+ cairo_restore (cr);
}
static void
@@ -2814,11 +2833,17 @@ static void
calendar_paint_main (GtkCalendar *calendar,
cairo_t *cr)
{
- gint row, col;
+ gint row, col, x, y;
+ cairo_save (cr);
+ gdk_window_get_position (calendar->priv->main_win, &x, &y);
+ cairo_translate (cr, x, y);
+
for (col = 0; col < 7; col++)
for (row = 0; row < 6; row++)
calendar_paint_day (calendar, cr, row, col);
+
+ cairo_restore (cr);
}
static void
@@ -2841,7 +2866,14 @@ calendar_paint_arrow (GtkCalendar *calendar,
GtkWidget *widget = GTK_WIDGET (calendar);
GtkCalendarPrivate *priv = GTK_CALENDAR_GET_PRIVATE (widget);
GdkWindow *window;
+ int x, y;
+ cairo_save (cr);
+ gdk_window_get_position (priv->arrow_win[arrow], &x, &y);
+ cairo_translate (cr, x, y);
+ gdk_window_get_position (priv->header_win, &x, &y);
+ cairo_translate (cr, x, y);
+
window = priv->arrow_win[arrow];
if (window)
{
@@ -2867,52 +2899,48 @@ calendar_paint_arrow (GtkCalendar *calendar,
GTK_ARROW_RIGHT, TRUE,
width/2 - 4, height/2 - 4, 8, 8);
}
+
+ cairo_restore (cr);
}
static gboolean
-gtk_calendar_expose (GtkWidget *widget,
- GdkEventExpose *event)
+gtk_calendar_draw (GtkWidget *widget,
+ cairo_t *cr)
{
GtkCalendar *calendar = GTK_CALENDAR (widget);
GtkCalendarPrivate *priv = GTK_CALENDAR_GET_PRIVATE (widget);
- cairo_t *cr;
int i;
- if (gtk_widget_is_drawable (widget))
+ if (gtk_cairo_should_draw_window (cr, gtk_widget_get_window (widget)))
{
- cr = gdk_cairo_create (event->window);
- gdk_cairo_region (cr, event->region);
- cairo_clip (cr);
-
- if (event->window == gtk_widget_get_window (widget))
- {
- gtk_cairo_paint_shadow (gtk_widget_get_style (widget), cr,
- gtk_widget_get_state (widget), GTK_SHADOW_IN,
- widget, "calendar",
- 0, 0,
- gtk_widget_get_allocated_width (widget),
- gtk_widget_get_allocated_height (widget));
- }
-
- if (event->window == priv->main_win)
- calendar_paint_main (calendar, cr);
-
- if (event->window == priv->header_win)
- calendar_paint_header (calendar, cr);
+ gtk_cairo_paint_shadow (gtk_widget_get_style (widget), cr,
+ gtk_widget_get_state (widget), GTK_SHADOW_IN,
+ widget, "calendar",
+ 0, 0,
+ gtk_widget_get_allocated_width (widget),
+ gtk_widget_get_allocated_height (widget));
+ }
- for (i = 0; i < 4; i++)
- if (event->window == priv->arrow_win[i])
- calendar_paint_arrow (calendar, cr, i);
-
- if (event->window == priv->day_name_win)
- calendar_paint_day_names (calendar, cr);
-
- if (event->window == priv->week_win)
- calendar_paint_week_numbers (calendar, cr);
+ if (gtk_cairo_should_draw_window (cr, priv->main_win))
+ calendar_paint_main (calendar, cr);
+
+ if (priv->header_win &&
+ gtk_cairo_should_draw_window (cr, priv->header_win))
+ calendar_paint_header (calendar, cr);
- cairo_destroy (cr);
- }
+ for (i = 0; i < 4; i++)
+ if (priv->arrow_win[i] &&
+ gtk_cairo_should_draw_window (cr, priv->arrow_win[i]))
+ calendar_paint_arrow (calendar, cr, i);
+
+ if (priv->day_name_win &&
+ gtk_cairo_should_draw_window (cr, priv->day_name_win))
+ calendar_paint_day_names (calendar, cr);
+ if (priv->week_win &&
+ gtk_cairo_should_draw_window (cr, priv->week_win))
+ calendar_paint_week_numbers (calendar, cr);
+
return FALSE;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]