From d2116f481be41a59a37b2da352606b5d3d73098a Mon Sep 17 00:00:00 2001 From: Michael Natterer Date: Wed, 29 Dec 2010 16:49:38 +0100 Subject: [PATCH] libgimpwidgets: move all GimpOffsetArea members to a private struct --- libgimpwidgets/gimpoffsetarea.c | 222 +++++++++++++++++++------------- libgimpwidgets/gimpoffsetarea.h | 15 +-- 2 files changed, 138 insertions(+), 99 deletions(-) diff --git a/libgimpwidgets/gimpoffsetarea.c b/libgimpwidgets/gimpoffsetarea.c index 59d8ec62fa..d5c3a77fd3 100644 --- a/libgimpwidgets/gimpoffsetarea.c +++ b/libgimpwidgets/gimpoffsetarea.c @@ -48,6 +48,25 @@ enum }; +typedef struct _GimpOffsetAreaPrivate GimpOffsetAreaPrivate; + +struct _GimpOffsetAreaPrivate +{ + gint orig_width; + gint orig_height; + gint width; + gint height; + gint offset_x; + gint offset_y; + gdouble display_ratio_x; + gdouble display_ratio_y; +}; + +#define GET_PRIVATE(obj) G_TYPE_INSTANCE_GET_PRIVATE (obj, \ + GIMP_TYPE_OFFSET_AREA, \ + GimpOffsetAreaPrivate) + + static void gimp_offset_area_resize (GimpOffsetArea *area); static void gimp_offset_area_realize (GtkWidget *widget); @@ -69,6 +88,7 @@ static guint gimp_offset_area_signals[LAST_SIGNAL] = { 0 }; static void gimp_offset_area_class_init (GimpOffsetAreaClass *klass) { + GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); gimp_offset_area_signals[OFFSETS_CHANGED] = @@ -86,19 +106,23 @@ gimp_offset_area_class_init (GimpOffsetAreaClass *klass) widget_class->realize = gimp_offset_area_realize; widget_class->event = gimp_offset_area_event; widget_class->draw = gimp_offset_area_draw; + + g_type_class_add_private (object_class, sizeof (GimpOffsetAreaPrivate)); } static void gimp_offset_area_init (GimpOffsetArea *area) { - area->orig_width = 0; - area->orig_height = 0; - area->width = 0; - area->height = 0; - area->offset_x = 0; - area->offset_y = 0; - area->display_ratio_x = 1.0; - area->display_ratio_y = 1.0; + GimpOffsetAreaPrivate *private = GET_PRIVATE (area); + + private->orig_width = 0; + private->orig_height = 0; + private->width = 0; + private->height = 0; + private->offset_x = 0; + private->offset_y = 0; + private->display_ratio_x = 1.0; + private->display_ratio_y = 1.0; gtk_widget_add_events (GTK_WIDGET (area), GDK_BUTTON_PRESS_MASK | @@ -121,15 +145,18 @@ GtkWidget * gimp_offset_area_new (gint orig_width, gint orig_height) { - GimpOffsetArea *area; + GimpOffsetArea *area; + GimpOffsetAreaPrivate *private; g_return_val_if_fail (orig_width > 0, NULL); g_return_val_if_fail (orig_height > 0, NULL); area = g_object_new (GIMP_TYPE_OFFSET_AREA, NULL); - area->orig_width = area->width = orig_width; - area->orig_height = area->height = orig_height; + private = GET_PRIVATE (area); + + private->orig_width = private->width = orig_width; + private->orig_height = private->height = orig_height; gimp_offset_area_resize (area); @@ -175,31 +202,39 @@ gimp_offset_area_set_size (GimpOffsetArea *area, gint width, gint height) { + GimpOffsetAreaPrivate *private; + g_return_if_fail (GIMP_IS_OFFSET_AREA (area)); g_return_if_fail (width > 0 && height > 0); - if (area->width != width || area->height != height) + private = GET_PRIVATE (area); + + if (private->width != width || private->height != height) { gint offset_x; gint offset_y; - area->width = width; - area->height = height; + private->width = width; + private->height = height; - if (area->orig_width <= area->width) - offset_x = CLAMP (area->offset_x, 0, area->width - area->orig_width); + if (private->orig_width <= private->width) + offset_x = CLAMP (private->offset_x, + 0, private->width - private->orig_width); else - offset_x = CLAMP (area->offset_x, area->width - area->orig_width, 0); + offset_x = CLAMP (private->offset_x, + private->width - private->orig_width, 0); - if (area->orig_height <= area->height) - offset_y = CLAMP (area->offset_y, 0, area->height - area->orig_height); + if (private->orig_height <= private->height) + offset_y = CLAMP (private->offset_y, + 0, private->height - private->orig_height); else - offset_y = CLAMP (area->offset_y, area->height - area->orig_height, 0); + offset_y = CLAMP (private->offset_y, + private->height - private->orig_height, 0); - if (offset_x != area->offset_x || offset_y != area->offset_y) + if (offset_x != private->offset_x || offset_y != private->offset_y) { - area->offset_x = offset_x; - area->offset_y = offset_y; + private->offset_x = offset_x; + private->offset_y = offset_y; g_signal_emit (area, gimp_offset_area_signals[OFFSETS_CHANGED], 0, @@ -224,19 +259,27 @@ gimp_offset_area_set_offsets (GimpOffsetArea *area, gint offset_x, gint offset_y) { + GimpOffsetAreaPrivate *private; + g_return_if_fail (GIMP_IS_OFFSET_AREA (area)); - if (area->offset_x != offset_x || area->offset_y != offset_y) - { - if (area->orig_width <= area->width) - area->offset_x = CLAMP (offset_x, 0, area->width - area->orig_width); - else - area->offset_x = CLAMP (offset_x, area->width - area->orig_width, 0); + private = GET_PRIVATE (area); - if (area->orig_height <= area->height) - area->offset_y = CLAMP (offset_y, 0, area->height - area->orig_height); + if (private->offset_x != offset_x || private->offset_y != offset_y) + { + if (private->orig_width <= private->width) + private->offset_x = CLAMP (offset_x, + 0, private->width - private->orig_width); else - area->offset_y = CLAMP (offset_y, area->height - area->orig_height, 0); + private->offset_x = CLAMP (offset_x, + private->width - private->orig_width, 0); + + if (private->orig_height <= private->height) + private->offset_y = CLAMP (offset_y, + 0, private->height - private->orig_height); + else + private->offset_y = CLAMP (offset_y, + private->height - private->orig_height, 0); gtk_widget_queue_draw (GTK_WIDGET (area)); } @@ -245,22 +288,23 @@ gimp_offset_area_set_offsets (GimpOffsetArea *area, static void gimp_offset_area_resize (GimpOffsetArea *area) { - gint width; - gint height; - gdouble ratio; + GimpOffsetAreaPrivate *private = GET_PRIVATE (area); + gint width; + gint height; + gdouble ratio; - if (area->orig_width == 0 || area->orig_height == 0) + if (private->orig_width == 0 || private->orig_height == 0) return; - if (area->orig_width <= area->width) - width = area->width; + if (private->orig_width <= private->width) + width = private->width; else - width = area->orig_width * 2 - area->width; + width = private->orig_width * 2 - private->width; - if (area->orig_height <= area->height) - height = area->height; + if (private->orig_height <= private->height) + height = private->height; else - height = area->orig_height * 2 - area->height; + height = private->orig_height * 2 - private->height; ratio = (gdouble) DRAWING_AREA_SIZE / (gdouble) MAX (width, height); @@ -275,20 +319,21 @@ static void gimp_offset_area_size_allocate (GtkWidget *widget, GtkAllocation *allocation) { - GimpOffsetArea *area = GIMP_OFFSET_AREA (widget); - GdkPixbuf *pixbuf; + GimpOffsetArea *area = GIMP_OFFSET_AREA (widget); + GimpOffsetAreaPrivate *private = GET_PRIVATE (area); + GdkPixbuf *pixbuf; GTK_WIDGET_CLASS (parent_class)->size_allocate (widget, allocation); - area->display_ratio_x = ((gdouble) allocation->width / - ((area->orig_width <= area->width) ? - area->width : - area->orig_width * 2 - area->width)); + private->display_ratio_x = ((gdouble) allocation->width / + ((private->orig_width <= private->width) ? + private->width : + private->orig_width * 2 - private->width)); - area->display_ratio_y = ((gdouble) allocation->height / - ((area->orig_height <= area->height) ? - area->height : - area->orig_height * 2 - area->height)); + private->display_ratio_y = ((gdouble) allocation->height / + ((private->orig_height <= private->height) ? + private->height : + private->orig_height * 2 - private->height)); pixbuf = g_object_get_data (G_OBJECT (area), "pixbuf"); @@ -298,10 +343,10 @@ gimp_offset_area_size_allocate (GtkWidget *widget, gint pixbuf_width; gint pixbuf_height; - pixbuf_width = area->display_ratio_x * area->orig_width; + pixbuf_width = private->display_ratio_x * private->orig_width; pixbuf_width = MAX (pixbuf_width, 1); - pixbuf_height = area->display_ratio_y * area->orig_height; + pixbuf_height = private->display_ratio_y * private->orig_height; pixbuf_height = MAX (pixbuf_height, 1); copy = g_object_get_data (G_OBJECT (area), "pixbuf-copy"); @@ -346,11 +391,12 @@ gimp_offset_area_event (GtkWidget *widget, static gint start_x = 0; static gint start_y = 0; - GimpOffsetArea *area = GIMP_OFFSET_AREA (widget); - gint offset_x; - gint offset_y; + GimpOffsetArea *area = GIMP_OFFSET_AREA (widget); + GimpOffsetAreaPrivate *private = GET_PRIVATE (area); + gint offset_x; + gint offset_y; - if (area->orig_width == 0 || area->orig_height == 0) + if (private->orig_width == 0 || private->orig_height == 0) return FALSE; switch (event->type) @@ -360,8 +406,8 @@ gimp_offset_area_event (GtkWidget *widget, { gtk_grab_add (widget); - orig_offset_x = area->offset_x; - orig_offset_y = area->offset_y; + orig_offset_x = private->offset_x; + orig_offset_y = private->offset_y; start_x = event->button.x; start_y = event->button.y; } @@ -369,17 +415,17 @@ gimp_offset_area_event (GtkWidget *widget, case GDK_MOTION_NOTIFY: offset_x = (orig_offset_x + - (event->motion.x - start_x) / area->display_ratio_x); + (event->motion.x - start_x) / private->display_ratio_x); offset_y = (orig_offset_y + - (event->motion.y - start_y) / area->display_ratio_y); + (event->motion.y - start_y) / private->display_ratio_y); - if (area->offset_x != offset_x || area->offset_y != offset_y) + if (private->offset_x != offset_x || private->offset_y != offset_y) { gimp_offset_area_set_offsets (area, offset_x, offset_y); g_signal_emit (area, gimp_offset_area_signals[OFFSETS_CHANGED], 0, - area->offset_x, area->offset_y); + private->offset_x, private->offset_y); } break; @@ -403,29 +449,30 @@ static gboolean gimp_offset_area_draw (GtkWidget *widget, cairo_t *cr) { - GimpOffsetArea *area = GIMP_OFFSET_AREA (widget); - GtkStyleContext *context = gtk_widget_get_style_context (widget); - GtkAllocation allocation; - GdkPixbuf *pixbuf; - gint w, h; - gint x, y; + GimpOffsetArea *area = GIMP_OFFSET_AREA (widget); + GimpOffsetAreaPrivate *private = GET_PRIVATE (area); + GtkStyleContext *context = gtk_widget_get_style_context (widget); + GtkAllocation allocation; + GdkPixbuf *pixbuf; + gint w, h; + gint x, y; gtk_widget_get_allocation (widget, &allocation); - x = (area->display_ratio_x * - ((area->orig_width <= area->width) ? - area->offset_x : - area->offset_x + area->orig_width - area->width)); + x = (private->display_ratio_x * + ((private->orig_width <= private->width) ? + private->offset_x : + private->offset_x + private->orig_width - private->width)); - y = (area->display_ratio_y * - ((area->orig_height <= area->height) ? - area->offset_y : - area->offset_y + area->orig_height - area->height)); + y = (private->display_ratio_y * + ((private->orig_height <= private->height) ? + private->offset_y : + private->offset_y + private->orig_height - private->height)); - w = area->display_ratio_x * area->orig_width; + w = private->display_ratio_x * private->orig_width; w = MAX (w, 1); - h = area->display_ratio_y * area->orig_height; + h = private->display_ratio_y * private->orig_height; h = MAX (h, 1); pixbuf = g_object_get_data (G_OBJECT (widget), "pixbuf-copy"); @@ -445,14 +492,15 @@ gimp_offset_area_draw (GtkWidget *widget, gtk_render_frame (context, cr, x, y, w, h); } - if (area->orig_width > area->width || area->orig_height > area->height) + if (private->orig_width > private->width || + private->orig_height > private->height) { gint line_width; - if (area->orig_width > area->width) + if (private->orig_width > private->width) { - x = area->display_ratio_x * (area->orig_width - area->width); - w = area->display_ratio_x * area->width; + x = private->display_ratio_x * (private->orig_width - private->width); + w = private->display_ratio_x * private->width; } else { @@ -460,10 +508,10 @@ gimp_offset_area_draw (GtkWidget *widget, w = allocation.width + 2; } - if (area->orig_height > area->height) + if (private->orig_height > private->height) { - y = area->display_ratio_y * (area->orig_height - area->height); - h = area->display_ratio_y * area->height; + y = private->display_ratio_y * (private->orig_height - private->height); + h = private->display_ratio_y * private->height; } else { diff --git a/libgimpwidgets/gimpoffsetarea.h b/libgimpwidgets/gimpoffsetarea.h index a33960c875..acd1d23c1f 100644 --- a/libgimpwidgets/gimpoffsetarea.h +++ b/libgimpwidgets/gimpoffsetarea.h @@ -44,24 +44,15 @@ typedef struct _GimpOffsetAreaClass GimpOffsetAreaClass; struct _GimpOffsetArea { GtkDrawingArea parent_instance; - - gint orig_width; - gint orig_height; - gint width; - gint height; - gint offset_x; - gint offset_y; - gdouble display_ratio_x; - gdouble display_ratio_y; }; struct _GimpOffsetAreaClass { GtkDrawingAreaClass parent_class; - void (* offsets_changed) (GimpOffsetArea *offset_area, - gint offset_x, - gint offset_y); + void (* offsets_changed) (GimpOffsetArea *offset_area, + gint offset_x, + gint offset_y); /* Padding for future expansion */ void (* _gimp_reserved1) (void);