summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Eduardo Rodrigues Diógenes <carlosd@src.gnome.org>2007-01-29 15:34:49 +0000
committerCarlos Eduardo Rodrigues Diógenes <carlosd@src.gnome.org>2007-01-29 15:34:49 +0000
commit30d9fad2319a371651fde6cd8188abdc664fcd11 (patch)
tree487b2a23faee9ee1c98b5117183fbbe233908fb8
parentbbba32824812adb8f7ba5c5dd8109404c16fa7c1 (diff)
bug #98240: border-size not working resolved. The last patch introduced some regressions, so a new patch was applied.
svn path=/branches/gnome-2-16/; revision=442
-rw-r--r--ChangeLog6
-rw-r--r--magnifier/zoom-region-private.h2
-rw-r--r--magnifier/zoom-region.c190
-rw-r--r--test/control-client.c6
4 files changed, 106 insertions, 98 deletions
diff --git a/ChangeLog b/ChangeLog
index 278807e..cc2e7bc 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2006-11-09 Carlos Eduardo Rodrigues Diógenes <cerdiogenes@yahoo.com.br>
+
+ * magnifier/zoo-region.c: bug #98240: "border-size" not working
+ resolved. The last patch introduced some regressions, so a new patch
+ was applied.
+
2006-10-24 Carlos Eduardo Rodrigues Diogenes <cerdiogenes@yahoo.com.br>
* configure.in: bug #348169: shouldn't search X libraries in prefix
diff --git a/magnifier/zoom-region-private.h b/magnifier/zoom-region-private.h
index e4b3628..d483638 100644
--- a/magnifier/zoom-region-private.h
+++ b/magnifier/zoom-region-private.h
@@ -32,8 +32,6 @@ struct _ZoomRegionPrivate {
GList *q;
/* bounds of currently exposed region, in target pixmap coords */
GNOME_Magnifier_RectBounds exposed_bounds;
- /* bounds of current viewport, not including borders, in view coords */
- GNOME_Magnifier_RectBounds exposed_viewport;
/* bounds of valid ('gettable') source area, in source coords */
GNOME_Magnifier_RectBounds source_area;
gpointer parent;
diff --git a/magnifier/zoom-region.c b/magnifier/zoom-region.c
index 69bac86..b578ec6 100644
--- a/magnifier/zoom-region.c
+++ b/magnifier/zoom-region.c
@@ -143,8 +143,6 @@ static int zoom_region_process_updates (gpointer data);
static void zoom_region_paint (ZoomRegion *zoom_region, GdkRectangle *rect);
static void zoom_region_paint_pixmap (ZoomRegion *zoom_region, GdkRectangle *rect);
static int zoom_region_update_pointer_timeout (gpointer data);
-static void zoom_region_recompute_exposed_viewport (ZoomRegion *zoom_region);
-
static GdkRectangle zoom_region_rect_from_bounds (ZoomRegion *zoom_region,
const GNOME_Magnifier_RectBounds *bounds);
static ZoomRegionPixmapCreationError zoom_region_create_pixmap (ZoomRegion *zoom_region);
@@ -566,13 +564,6 @@ zoom_region_clip_to_exposed_target (ZoomRegion *zoom_region,
}
static GdkRectangle
-zoom_region_clip_to_exposed_viewport (ZoomRegion *zoom_region,
- GdkRectangle area)
-{
- return _rectangle_clip_to_bounds (area, &zoom_region->priv->exposed_viewport);
-}
-
-static GdkRectangle
zoom_region_clip_to_scaled_pixmap (ZoomRegion *zoom_region,
GdkRectangle area)
{
@@ -702,7 +693,7 @@ zoom_region_update_current (ZoomRegion *zoom_region)
zoom_region_update (zoom_region,
zoom_region_source_rect_from_view_bounds (
zoom_region,
- &zoom_region->priv->exposed_viewport));
+ &zoom_region->viewport));
}
}
@@ -741,16 +732,11 @@ zoom_region_unpaint_crosswire_cursor (ZoomRegion *zoom_region,
cursor_pos = zoom_region->priv->last_drawn_crosswire_pos;
vline_rect.x = cursor_pos.x - magnifier->crosswire_size/2;
- vline_rect.x = MAX (vline_rect.x, clip_rect->x);
- vline_rect.x = MIN (vline_rect.x, clip_rect->x + clip_rect->width - 1);
vline_rect.y = clip_rect ? clip_rect->y : 0;
vline_rect.width = MAX (magnifier->crosswire_size, 1);
vline_rect.height = clip_rect ? clip_rect->height : 4096;
hline_rect.x = clip_rect ? clip_rect->x : 0;
hline_rect.y = cursor_pos.y - magnifier->crosswire_size/2;
- hline_rect.y = MAX (hline_rect.y, clip_rect->y);
- hline_rect.y = MIN (hline_rect.y,
- clip_rect->y + clip_rect->height - 1);
hline_rect.width = clip_rect ? clip_rect->width : 4096;
hline_rect.height = MAX (magnifier->crosswire_size, 1);
@@ -886,12 +872,10 @@ zoom_region_paint_crosswire_cursor (ZoomRegion *zoom_region, GdkRectangle *clip_
static void
zoom_region_unpaint_cursor (ZoomRegion *zoom_region, GdkRectangle *clip_rect)
{
- GdkRectangle area = zoom_region->priv->cursor_backing_rect;
#ifdef ZOOM_REGION_DEBUG
g_assert (zoom_region->alive);
#endif
- area = zoom_region_clip_to_exposed_viewport (zoom_region, area);
- zoom_region_paint_pixmap (zoom_region, &area);
+ zoom_region_paint_pixmap (zoom_region, &zoom_region->priv->cursor_backing_rect);
}
static void
@@ -899,7 +883,7 @@ zoom_region_paint_cursor (ZoomRegion *zoom_region,
GdkRectangle *clip_rect)
{
GdkGCValues values;
- GdkRectangle rect;
+ GdkRectangle rect, intersct;
GdkRectangle fullscreen;
Magnifier *magnifier = zoom_region->priv->parent;
rect = zoom_region_cursor_rect (zoom_region);
@@ -916,7 +900,7 @@ zoom_region_paint_cursor (ZoomRegion *zoom_region,
zoom_region->priv->last_drawn_crosswire_pos.x = rect.x + magnifier->cursor_hotspot.x;
zoom_region->priv->last_drawn_crosswire_pos.y = rect.y + magnifier->cursor_hotspot.y;
- if (gdk_rectangle_intersect (clip_rect, &rect, &rect))
+ if (gdk_rectangle_intersect (clip_rect, &rect, &intersct))
{
int width = 0, height = 0;
@@ -1034,8 +1018,8 @@ zoom_region_paint_border (ZoomRegion *zoom_region)
#ifdef ZOOM_REGION_DEBUG
g_assert (zoom_region->alive);
#endif
- if ((zoom_region->border_size > 0) && (zoom_region->priv->w->window))
- {
+ if ((zoom_region->border_size > 0) &&
+ (zoom_region->priv->border->window)) {
color.red = (((zoom_region->border_color & 0xFF0000) >> 16) *
65535) / 255;
color.green = (((zoom_region->border_color & 0xFF00) >> 8) *
@@ -1048,8 +1032,8 @@ zoom_region_paint_border (ZoomRegion *zoom_region)
color.red, color.green, color.blue);
#endif
- gtk_widget_modify_bg (zoom_region->priv->w, GTK_STATE_NORMAL,
- &color);
+ gtk_widget_modify_bg (zoom_region->priv->border,
+ GTK_STATE_NORMAL, &color);
}
}
@@ -1088,13 +1072,16 @@ static void
zoom_region_paint (ZoomRegion *zoom_region,
GdkRectangle *area)
{
+ GdkRectangle paint_area;
+
#ifdef ZOOM_REGION_DEBUG
g_assert (zoom_region->alive);
#endif
DEBUG_RECT ("painting (clipped)", *area);
- zoom_region_paint_pixmap (zoom_region, area);
- zoom_region_paint_cursor (zoom_region, area);
- zoom_region_paint_crosswire_cursor (zoom_region, area);
+ paint_area = zoom_region_clip_to_window (zoom_region, *area);
+ zoom_region_paint_pixmap (zoom_region, &paint_area);
+ zoom_region_paint_cursor (zoom_region, &paint_area);
+ zoom_region_paint_crosswire_cursor (zoom_region, &paint_area);
}
static ZoomRegionPixmapCreationError
@@ -1122,31 +1109,22 @@ zoom_region_create_pixmap (ZoomRegion *zoom_region)
return ZOOM_REGION_ERROR_TOO_BIG;
}
- zoom_region_recompute_exposed_viewport (zoom_region);
-#ifdef ZOOM_REGION_DEBUG
- g_message ("create-pixmap-update: %d,%d - %d,%d",
- zoom_region->priv->exposed_viewport.x1,
- zoom_region->priv->exposed_viewport.y1,
- zoom_region->priv->exposed_viewport.x2,
- zoom_region->priv->exposed_viewport.y2);
-#endif
-
- DEBUG_RECT("viewport", zoom_region_source_rect_from_view_bounds
- (zoom_region, &zoom_region->priv->exposed_viewport));
- DEBUG_RECT("source", zoom_region_rect_from_bounds
- (zoom_region, &((Magnifier*)zoom_region->priv->parent)->source_bounds));
+ DEBUG_RECT("viewport", zoom_region_source_rect_from_view_bounds
+ (zoom_region, &zoom_region->viewport));
+ DEBUG_RECT("source", zoom_region_rect_from_bounds
+ (zoom_region, &((Magnifier*)zoom_region->priv->parent)->source_bounds));
- zoom_region_update (zoom_region,
+ zoom_region_update (zoom_region,
/* zoom_region_source_rect_from_view_bounds (
- zoom_region,
- &zoom_region->priv->exposed_viewport));
+ zoom_region,
+ &zoom_region->viewport));
*/
zoom_region_rect_from_bounds
(zoom_region,
&((Magnifier *)zoom_region->priv->parent)->source_bounds));
return ZOOM_REGION_ERROR_NONE;
}
-
+
return ZOOM_REGION_ERROR_NO_TARGET_DRAWABLE;
}
@@ -1175,8 +1153,6 @@ zoom_region_expose_handler (GtkWindow * w,
if (ret == ZOOM_REGION_ERROR_NO_TARGET_DRAWABLE)
g_warning ("create-pixmap: no target drawable");
}
- event->area = zoom_region_clip_to_exposed_viewport (zoom_region,
- event->area);
zoom_region_paint (zoom_region, &event->area);
}
@@ -1197,8 +1173,8 @@ zoom_region_update_cursor (ZoomRegion *zoom_region, int dx, int dy,
zoom_region_paint_crosswire_cursor (zoom_region, clip_rect);
if (GTK_IS_WIDGET (zoom_region->priv->w) &&
GDK_IS_WINDOW (zoom_region->priv->w->window))
- gdk_display_sync (gdk_drawable_get_display (
- zoom_region->priv->w->window));
+ gdk_display_sync (gdk_drawable_get_display (
+ zoom_region->priv->w->window));
}
static gboolean
@@ -1272,8 +1248,6 @@ zoom_region_scroll_fast (ZoomRegion *zoom_region, int dx, int dy,
processing_updates = FALSE;
return;
}
- *scroll_rect = zoom_region_clip_to_exposed_viewport (zoom_region,
- *scroll_rect);
zoom_region_unpaint_crosswire_cursor (zoom_region, scroll_rect);
zoom_region_unpaint_cursor (zoom_region, scroll_rect);
gdk_window_scroll (window, dx, dy);
@@ -1367,19 +1341,6 @@ zoom_region_scroll (ZoomRegion *zoom_region, int dx, int dy)
}
static void
-zoom_region_recompute_exposed_viewport (ZoomRegion *zoom_region)
-{
- zoom_region->priv->exposed_viewport.x1 = zoom_region->viewport.x1
- + zoom_region->border_size;
- zoom_region->priv->exposed_viewport.y1 = zoom_region->viewport.y1
- + zoom_region->border_size;
- zoom_region->priv->exposed_viewport.x2 = zoom_region->viewport.x2
- - zoom_region->border_size;
- zoom_region->priv->exposed_viewport.y2 = zoom_region->viewport.y2
- - zoom_region->border_size;
-}
-
-static void
zoom_region_recompute_exposed_bounds (ZoomRegion *zoom_region)
{
zoom_region->priv->exposed_bounds.x2 = zoom_region->priv->exposed_bounds.x1
@@ -1445,8 +1406,6 @@ zoom_region_update_pointer (ZoomRegion *zoom_region, gboolean draw_cursor)
paint_area = zoom_region_clip_to_source (
zoom_region, paint_area);
}
- *clip = zoom_region_clip_to_exposed_viewport (zoom_region,
- *clip);
zoom_region_update_cursor (zoom_region, 0, 0, clip);
}
return TRUE;
@@ -1794,8 +1753,6 @@ zoom_region_update (ZoomRegion *zoom_region,
GdkRectangle source_rect = zoom_region_update_pixmap (zoom_region, update_rect, &paint_rect);
if (paint_rect.x != 0 || paint_rect.y != 0 ||
paint_rect.width != 0 || paint_rect.height != 0) {
- paint_rect = zoom_region_clip_to_exposed_viewport (
- zoom_region, paint_rect);
gdk_window_begin_paint_rect (
zoom_region->priv->w->window, &paint_rect);
zoom_region_paint (zoom_region, &paint_rect);
@@ -1842,31 +1799,44 @@ static void
zoom_region_init_window (ZoomRegion *zoom_region)
{
GtkFixed *parent;
- GtkWidget *zoomer;
+ GtkWidget *zoomer, *border;
DBG(fprintf (stderr, "window not yet created...\n"));
parent = GTK_FIXED (
((Magnifier *)zoom_region->priv->parent)->priv->canvas);
zoomer = gtk_drawing_area_new ();
+ border = gtk_drawing_area_new ();
+ zoom_region->priv->border = border;
zoom_region->priv->w = zoomer;
#ifdef ZOOM_REGION_DEBUG
g_assert (zoom_region->alive);
#endif
+ gtk_widget_set_size_request (GTK_WIDGET (border),
+ zoom_region->viewport.x2 -
+ zoom_region->viewport.x1,
+ zoom_region->viewport.y2 -
+ zoom_region->viewport.y1);
gtk_widget_set_size_request (GTK_WIDGET (zoomer),
zoom_region->viewport.x2 -
- zoom_region->viewport.x1 - zoom_region->border_size * 2,
+ zoom_region->viewport.x1 -
+ zoom_region->border_size * 2,
zoom_region->viewport.y2 -
- zoom_region->viewport.y1 - zoom_region->border_size * 2);
- gtk_fixed_put (GTK_FIXED (parent), zoomer,
- zoom_region->border_size,
- zoom_region->border_size);
+ zoom_region->viewport.y1 -
+ zoom_region->border_size * 2);
+ gtk_fixed_put (parent, border,
+ zoom_region->viewport.x1,
+ zoom_region->viewport.y1);
+ gtk_fixed_put (parent, zoomer,
+ zoom_region->viewport.x1 + zoom_region->border_size,
+ zoom_region->viewport.y1 + zoom_region->border_size);
+ gtk_widget_show (GTK_WIDGET (border));
gtk_widget_show (GTK_WIDGET (zoomer));
gtk_widget_show (GTK_WIDGET (parent));
zoom_region->priv->expose_handler_id =
g_signal_connect (G_OBJECT (zoom_region->priv->w),
- "expose_event",
- G_CALLBACK (zoom_region_expose_handler),
- zoom_region);
+ "expose_event",
+ G_CALLBACK (zoom_region_expose_handler),
+ zoom_region);
DBG(fprintf (stderr, "New window created\n"));
}
@@ -1911,10 +1881,10 @@ timing_report(ZoomRegion *zoom_region)
int width, height, x, y;
if (timing_test) {
- width = (zoom_region->priv->exposed_viewport.x2 -
- zoom_region->priv->exposed_viewport.x1) / zoom_region->xscale;
- height = (zoom_region->priv->exposed_viewport.y2 -
- zoom_region->priv->exposed_viewport.y1) / zoom_region->yscale;
+ width = (zoom_region->viewport.x2 -
+ zoom_region->viewport.x1) / zoom_region->xscale;
+ height = (zoom_region->viewport.y2 -
+ zoom_region->viewport.y1) / zoom_region->yscale;
frame_avg = mag_timing.frame_total / mag_timing.num_frame_samples;
@@ -2124,10 +2094,10 @@ zoom_region_align (ZoomRegion *zoom_region)
g_idle_add_full (GDK_PRIORITY_REDRAW + 1,
gdk_timing_idle, zoom_region, NULL);
- width = (zoom_region->priv->exposed_viewport.x2 -
- zoom_region->priv->exposed_viewport.x1) / zoom_region->xscale;
- height = (zoom_region->priv->exposed_viewport.y2 -
- zoom_region->priv->exposed_viewport.y1) / zoom_region->yscale;
+ width = (zoom_region->viewport.x2 -
+ zoom_region->viewport.x1) / zoom_region->xscale;
+ height = (zoom_region->viewport.y2 -
+ zoom_region->viewport.y1) / zoom_region->yscale;
switch (zoom_region->x_align_policy) {
case GNOME_Magnifier_ZoomRegion_ALIGN_MAX:
@@ -2169,7 +2139,6 @@ zoom_region_set_viewport (ZoomRegion *zoom_region,
(int) viewport->x1, (int) viewport->y1,
(int) viewport->x2, (int) viewport->y2);
#endif
- zoom_region_recompute_exposed_viewport (zoom_region);
zoom_region_align (zoom_region);
if (!zoom_region->priv->w) {
zoom_region_init_window (zoom_region);
@@ -2177,11 +2146,29 @@ zoom_region_set_viewport (ZoomRegion *zoom_region,
CORBA_any *any;
CORBA_Environment ev;
Bonobo_PropertyBag properties;
+ Magnifier *magnifier = (Magnifier *) zoom_region->priv->parent;
+ GtkFixed *fixed = GTK_FIXED (magnifier->priv->canvas);
+ gtk_fixed_move (fixed,
+ zoom_region->priv->border,
+ zoom_region->viewport.x1,
+ zoom_region->viewport.y1);
+ gtk_fixed_move (fixed,
+ zoom_region->priv->w,
+ zoom_region->viewport.x1 +
+ zoom_region->border_size,
+ zoom_region->viewport.y1 +
+ zoom_region->border_size);
+ gtk_widget_set_size_request (
+ GTK_WIDGET (zoom_region->priv->border),
+ zoom_region->viewport.x2 - zoom_region->viewport.x1,
+ zoom_region->viewport.y2 - zoom_region->viewport.y1);
gtk_widget_set_size_request (GTK_WIDGET (zoom_region->priv->w),
zoom_region->viewport.x2 -
- zoom_region->viewport.x1,
+ zoom_region->viewport.x1 -
+ zoom_region->border_size * 2,
zoom_region->viewport.y2 -
- zoom_region->viewport.y1);
+ zoom_region->viewport.y1 -
+ zoom_region->border_size * 2);
CORBA_exception_init (&ev);
properties =
GNOME_Magnifier_Magnifier_getProperties(
@@ -2377,14 +2364,26 @@ zoom_region_set_property (BonoboPropertyBag *bag,
break;
case ZOOM_REGION_BORDERSIZE_PROP:
zoom_region->border_size = BONOBO_ARG_GET_LONG (arg);
- zoom_region_recompute_exposed_viewport (zoom_region);
- zoom_region_update_current (zoom_region);
+ gtk_widget_set_size_request (
+ GTK_WIDGET (zoom_region->priv->border),
+ zoom_region->viewport.x2 -
+ zoom_region->viewport.x1,
+ zoom_region->viewport.y2 -
+ zoom_region->viewport.y1);
+ gtk_widget_set_size_request (GTK_WIDGET (zoom_region->priv->w),
+ zoom_region->viewport.x2 -
+ zoom_region->viewport.x1 -
+ zoom_region->border_size * 2,
+ zoom_region->viewport.y2 -
+ zoom_region->viewport.y1 -
+ zoom_region->border_size * 2);
+ gtk_fixed_move (GTK_FIXED (((Magnifier *)zoom_region->priv->parent)->priv->canvas), zoom_region->priv->border, zoom_region->viewport.x1, zoom_region->viewport.y1);
+ gtk_fixed_move (GTK_FIXED (((Magnifier *)zoom_region->priv->parent)->priv->canvas), zoom_region->priv->w, zoom_region->viewport.x1 + zoom_region->border_size, zoom_region->viewport.y1 + zoom_region->border_size);
break;
case ZOOM_REGION_BORDERCOLOR_PROP:
zoom_region->border_color =
BONOBO_ARG_GET_LONG (arg);
zoom_region_paint_border (zoom_region);
- zoom_region_update_current (zoom_region);
break;
case ZOOM_REGION_XALIGN_PROP:
zoom_region->x_align_policy = BONOBO_ARG_GET_INT (arg);
@@ -2454,8 +2453,8 @@ zoom_region_pan_test (gpointer data)
gdk_display_get_screen (magnifier->source_display,
magnifier->source_screen_num));
- height = (zoom_region->priv->exposed_viewport.y2 -
- zoom_region->priv->exposed_viewport.y1) / zoom_region->yscale;
+ height = (zoom_region->viewport.y2 -
+ zoom_region->viewport.y1) / zoom_region->yscale;
roi.x1 = zoom_region->roi.x1;
roi.x2 = zoom_region->roi.x2;
@@ -3204,7 +3203,6 @@ zoom_region_private_init (ZoomRegionPrivate *priv)
priv->last_drawn_crosswire_pos.x = 0;
priv->last_drawn_crosswire_pos.y = 0;
priv->exposed_bounds = rectbounds;
- priv->exposed_viewport = rectbounds;
priv->source_area = rectbounds;
priv->update_pointer_id = 0;
priv->update_handler_id = 0;
@@ -3269,9 +3267,9 @@ zoom_region_finalize (GObject *region)
zoom_region->priv->q = NULL;
}
if (GTK_IS_WIDGET (zoom_region->priv->w))
- gtk_container_remove (GTK_CONTAINER (((Magnifier *)
- zoom_region->priv->parent)->priv->canvas),
- GTK_WIDGET (zoom_region->priv->w));
+ gtk_container_remove (GTK_CONTAINER (((Magnifier *) zoom_region->priv->parent)->priv->canvas), GTK_WIDGET (zoom_region->priv->w));
+ if (GTK_IS_WIDGET (zoom_region->priv->border))
+ gtk_container_remove (GTK_CONTAINER (((Magnifier *) zoom_region->priv->parent)->priv->canvas), GTK_WIDGET (zoom_region->priv->border));
if (zoom_region->priv->source_pixbuf_cache)
g_object_unref (zoom_region->priv->source_pixbuf_cache);
if (zoom_region->priv->scaled_pixbuf)
diff --git a/test/control-client.c b/test/control-client.c
index 194863f..c445de7 100644
--- a/test/control-client.c
+++ b/test/control-client.c
@@ -221,6 +221,12 @@ int main(int argc, char ** argv){
}
bonobo_object_release_unref (properties, NULL);
break;
+ case 'k':
+ properties = GNOME_Magnifier_ZoomRegion_getProperties (zoom_region, &ev);
+ bonobo_pbclient_set_long (properties, "border-size", 20, NULL);
+ bonobo_pbclient_set_long (properties, "border-color", 255, NULL);
+ bonobo_object_release_unref (properties, NULL);
+ break;
case 'x':
GNOME_Magnifier_Magnifier_dispose (magnifier, &ev);
break;