summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Eduardo Rodrigues Diógenes <carlosd@src.gnome.org>2007-01-29 15:45:21 +0000
committerCarlos Eduardo Rodrigues Diógenes <carlosd@src.gnome.org>2007-01-29 15:45:21 +0000
commit899887a5120a9b36dc927c6ac2412c1e813c5102 (patch)
tree79dc6700402abfbace045a1e11d3f9fc6c52bf39
parent8bf77023d169995aa91c02a2e05bff91e5aa69a8 (diff)
bug #342170 - scaled pixbuf not recalculated after a {x,y} factor change resolved
svn path=/branches/gnome-2-16/; revision=445
-rw-r--r--ChangeLog7
-rw-r--r--magnifier/zoom-region.c79
2 files changed, 50 insertions, 36 deletions
diff --git a/ChangeLog b/ChangeLog
index 290f5d6..1ab6dc4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2006-11-25 Carlos Eduardo Rodrigues Diogenes <cerdiogenes@yahoo.com.br>
+
+ * magnifier/zoom-region.c: make the scaled pixbuf be recalculated when
+ the magnification factor is changed throw the PropertyBag. This also
+ make the code to recalculate the scaled pixbuf be shared between the
+ setMagFactor and the PropertyBag interfaces.
+
2006-11-11 Carlos Eduardo Rodrigues Diógenes <cerdigoenes@yahoo.com.br>
* magnifier/magnifier-main.c: bug #372731: Tampering with the DISPLAY
diff --git a/magnifier/zoom-region.c b/magnifier/zoom-region.c
index b578ec6..bf09329 100644
--- a/magnifier/zoom-region.c
+++ b/magnifier/zoom-region.c
@@ -655,6 +655,40 @@ zoom_region_rect_from_bounds (ZoomRegion *zoom_region,
/** ************** **/
+static CORBA_boolean
+zoom_region_update_scale (ZoomRegion *zoom_region, gdouble x, gdouble y)
+{
+ gdouble x_old = zoom_region->xscale;
+ gdouble y_old = zoom_region->yscale;
+
+ zoom_region->xscale = x;
+ zoom_region->yscale = y;
+
+ if (zoom_region->priv->scaled_pixbuf)
+ g_object_unref (zoom_region->priv->scaled_pixbuf);
+ zoom_region->priv->scaled_pixbuf =
+ gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, (zoom_region->priv->source_area.x2 - zoom_region->priv->source_area.x1) * zoom_region->xscale + 1, (zoom_region->priv->source_area.y2 - zoom_region->priv->source_area.y1) * zoom_region->yscale + 1);
+
+ if (zoom_region->priv->pixmap)
+ g_object_unref (zoom_region->priv->pixmap);
+
+ if (zoom_region_create_pixmap (zoom_region) ==
+ ZOOM_REGION_ERROR_TOO_BIG) {
+ zoom_region->xscale = x_old;
+ zoom_region->yscale = y_old;
+ zoom_region_create_pixmap (zoom_region);
+ g_object_unref (zoom_region->priv->scaled_pixbuf);
+
+ /* only create a scaled image big enough for the target
+ * display, for now */
+ zoom_region->priv->scaled_pixbuf = gdk_pixbuf_new (
+ GDK_COLORSPACE_RGB, FALSE, 8, (zoom_region->priv->source_area.x2 - zoom_region->priv->source_area.x1) * zoom_region->xscale + 1, (zoom_region->priv->source_area.y2 - zoom_region->priv->source_area.y1) * zoom_region->yscale + 1);
+
+ return CORBA_FALSE;
+ }
+ return CORBA_TRUE;
+}
+
static void
zoom_region_queue_update (ZoomRegion *zoom_region,
const GdkRectangle update_rect)
@@ -2355,11 +2389,15 @@ zoom_region_set_property (BonoboPropertyBag *bag,
zoom_region_update_current (zoom_region);
break;
case ZOOM_REGION_XSCALE_PROP:
- zoom_region->xscale = BONOBO_ARG_GET_FLOAT (arg);
+ (void) zoom_region_update_scale (zoom_region,
+ BONOBO_ARG_GET_FLOAT (arg),
+ zoom_region->yscale);
zoom_region_update_current (zoom_region);
break;
case ZOOM_REGION_YSCALE_PROP:
- zoom_region->yscale = BONOBO_ARG_GET_FLOAT (arg);
+ (void) zoom_region_update_scale (zoom_region,
+ zoom_region->xscale,
+ BONOBO_ARG_GET_FLOAT (arg));
zoom_region_update_current (zoom_region);
break;
case ZOOM_REGION_BORDERSIZE_PROP:
@@ -2701,8 +2739,6 @@ impl_zoom_region_set_mag_factor (PortableServer_Servant servant,
g_assert (zoom_region->alive);
#endif
CORBA_any *any;
- double xs_old = zoom_region->xscale;
- double ys_old = zoom_region->yscale;
CORBA_boolean retval = CORBA_TRUE;
/* TODO: assert that parent is magnifier object */
@@ -2718,38 +2754,9 @@ impl_zoom_region_set_mag_factor (PortableServer_Servant servant,
else
retval = CORBA_FALSE;
- zoom_region->xscale = mag_factor_x;
- zoom_region->yscale = mag_factor_y;
-
- if (zoom_region->priv->scaled_pixbuf)
- g_object_unref (zoom_region->priv->scaled_pixbuf);
-
- zoom_region->priv->scaled_pixbuf = gdk_pixbuf_new (
- GDK_COLORSPACE_RGB, FALSE, 8,
- (zoom_region->priv->source_area.x2 -
- zoom_region->priv->source_area.x1) * zoom_region->xscale + 1,
- (zoom_region->priv->source_area.y2 -
- zoom_region->priv->source_area.y1) * zoom_region->yscale + 1);
-
- if (zoom_region->priv->pixmap) {
- g_object_unref (zoom_region->priv->pixmap);
- zoom_region->priv->pixmap = NULL;
- }
- if (zoom_region_create_pixmap (zoom_region) == ZOOM_REGION_ERROR_TOO_BIG) {
- zoom_region->xscale = xs_old;
- zoom_region->yscale = ys_old;
- zoom_region_create_pixmap (zoom_region);
- g_object_unref (zoom_region->priv->scaled_pixbuf);
-
- /* only create a scaled image big enough for the target display, for now */
- zoom_region->priv->scaled_pixbuf = gdk_pixbuf_new (
- GDK_COLORSPACE_RGB, FALSE, 8,
- (zoom_region->priv->source_area.x2 -
- zoom_region->priv->source_area.x1) * zoom_region->xscale + 1,
- (zoom_region->priv->source_area.y2 -
- zoom_region->priv->source_area.y1) * zoom_region->yscale + 1);
- retval = CORBA_FALSE;
- }
+ retval = zoom_region_update_scale (zoom_region,
+ mag_factor_x, mag_factor_y);
+
zoom_region_update_current (zoom_region);
zoom_region_sync (zoom_region);