diff options
author | Carlos Eduardo Rodrigues Diógenes <carlosd@src.gnome.org> | 2007-01-29 15:34:49 +0000 |
---|---|---|
committer | Carlos Eduardo Rodrigues Diógenes <carlosd@src.gnome.org> | 2007-01-29 15:34:49 +0000 |
commit | 30d9fad2319a371651fde6cd8188abdc664fcd11 (patch) | |
tree | 487b2a23faee9ee1c98b5117183fbbe233908fb8 | |
parent | bbba32824812adb8f7ba5c5dd8109404c16fa7c1 (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-- | ChangeLog | 6 | ||||
-rw-r--r-- | magnifier/zoom-region-private.h | 2 | ||||
-rw-r--r-- | magnifier/zoom-region.c | 190 | ||||
-rw-r--r-- | test/control-client.c | 6 |
4 files changed, 106 insertions, 98 deletions
@@ -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; |