[gimp/gtk3-port: 49/223] libgimpwidgets: port the ruler to GTK+ 3.0
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp/gtk3-port: 49/223] libgimpwidgets: port the ruler to GTK+ 3.0
- Date: Thu, 3 Nov 2011 23:38:50 +0000 (UTC)
commit 4028ba9a36072455440019f0a7152a2bfc6e1eeb
Author: Michael Natterer <mitch gimp org>
Date: Tue Oct 19 18:59:50 2010 +0200
libgimpwidgets: port the ruler to GTK+ 3.0
libgimpwidgets/gimpruler.c | 48 ++++++++++++++++++-------------------------
1 files changed, 20 insertions(+), 28 deletions(-)
---
diff --git a/libgimpwidgets/gimpruler.c b/libgimpwidgets/gimpruler.c
index 7034fa6..ee50ae6 100644
--- a/libgimpwidgets/gimpruler.c
+++ b/libgimpwidgets/gimpruler.c
@@ -115,8 +115,8 @@ static void gimp_ruler_style_set (GtkWidget *widget,
GtkStyle *prev_style);
static gboolean gimp_ruler_motion_notify (GtkWidget *widget,
GdkEventMotion *event);
-static gboolean gimp_ruler_expose (GtkWidget *widget,
- GdkEventExpose *event);
+static gboolean gimp_ruler_draw (GtkWidget *widget,
+ cairo_t *cr);
static void gimp_ruler_draw_ticks (GimpRuler *ruler);
static void gimp_ruler_draw_pos (GimpRuler *ruler);
@@ -149,7 +149,7 @@ gimp_ruler_class_init (GimpRulerClass *klass)
widget_class->size_request = gimp_ruler_size_request;
widget_class->style_set = gimp_ruler_style_set;
widget_class->motion_notify_event = gimp_ruler_motion_notify;
- widget_class->expose_event = gimp_ruler_expose;
+ widget_class->draw = gimp_ruler_draw;
g_type_class_add_private (object_class, sizeof (GimpRulerPrivate));
@@ -802,6 +802,13 @@ gimp_ruler_size_allocate (GtkWidget *widget,
{
GimpRuler *ruler = GIMP_RULER (widget);
GimpRulerPrivate *priv = GIMP_RULER_GET_PRIVATE (ruler);
+ GtkAllocation widget_allocation;
+ gboolean resized;
+
+ gtk_widget_get_allocation (widget, &widget_allocation);
+
+ resized = (widget_allocation.width != allocation->width ||
+ widget_allocation.height != allocation->height);
gtk_widget_set_allocation (widget, allocation);
@@ -811,7 +818,8 @@ gimp_ruler_size_allocate (GtkWidget *widget,
allocation->x, allocation->y,
allocation->width, allocation->height);
- gimp_ruler_make_pixmap (ruler);
+ if (resized)
+ gimp_ruler_make_pixmap (ruler);
}
}
@@ -875,32 +883,18 @@ gimp_ruler_motion_notify (GtkWidget *widget,
}
static gboolean
-gimp_ruler_expose (GtkWidget *widget,
- GdkEventExpose *event)
+gimp_ruler_draw (GtkWidget *widget,
+ cairo_t *cr)
{
- if (gtk_widget_is_drawable (widget))
- {
- GimpRuler *ruler = GIMP_RULER (widget);
- GimpRulerPrivate *priv = GIMP_RULER_GET_PRIVATE (ruler);
- GtkAllocation allocation;
- cairo_t *cr;
-
- gimp_ruler_draw_ticks (ruler);
-
- cr = gdk_cairo_create (gtk_widget_get_window (widget));
- gdk_cairo_region (cr, event->region);
- cairo_clip (cr);
-
- gtk_widget_get_allocation (widget, &allocation);
- cairo_translate (cr, allocation.x, allocation.y);
+ GimpRuler *ruler = GIMP_RULER (widget);
+ GimpRulerPrivate *priv = GIMP_RULER_GET_PRIVATE (ruler);
- cairo_set_source_surface (cr, priv->backing_store, 0, 0);
- cairo_paint (cr);
+ gimp_ruler_draw_ticks (ruler);
- gimp_ruler_draw_pos (ruler);
+ cairo_set_source_surface (cr, priv->backing_store, 0, 0);
+ cairo_paint (cr);
- cairo_destroy (cr);
- }
+ gimp_ruler_draw_pos (ruler);
return FALSE;
}
@@ -1131,7 +1125,6 @@ gimp_ruler_draw_ticks (GimpRuler *ruler)
pos + digit_height * j + 2 + PANGO_PIXELS (logical_rect.y - digit_offset));
pango_cairo_show_layout (cr, layout);
#endif
-
}
}
}
@@ -1269,7 +1262,6 @@ gimp_ruler_make_pixmap (GimpRuler *ruler)
allocation.height);
}
-
static PangoLayout *
gimp_ruler_create_layout (GtkWidget *widget,
const gchar *text)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]