--- gnome-libs-1.2.13/libgnomeui/gnome-canvas.c.bghack Mon Jan 8 12:51:06 2001 +++ gnome-libs-1.2.13/libgnomeui/gnome-canvas.c Mon Jul 23 16:45:01 2001 @@ -3172,6 +3172,18 @@ #define IMAGE_WIDTH_AA 256 #define IMAGE_HEIGHT_AA 64 +static GQuark bg_hack_quark = 0; +void +gnome_canvas_set_nautilus_bg_hack (GnomeCanvas *canvas, + gboolean use_bg_hack) +{ + if (!bg_hack_quark) + bg_hack_quark = g_quark_from_static_string ("nautilus-bg-hack"); + + use_bg_hack = use_bg_hack != FALSE; + gtk_object_set_data_by_id (GTK_OBJECT (canvas), bg_hack_quark, GUINT_TO_POINTER (use_bg_hack)); +} + /* Repaints the areas in the canvas that need it */ static void paint (GnomeCanvas *canvas) @@ -3183,6 +3195,12 @@ GdkPixmap *pixmap; ArtIRect *rects; gint n_rects, i; + gboolean bg_hack = FALSE; + + if (!bg_hack_quark) + bg_hack_quark = g_quark_from_static_string ("nautilus-bg-hack"); + if (gtk_object_get_data_by_id (GTK_OBJECT (canvas), bg_hack_quark)) + bg_hack = TRUE; if (canvas->need_update) { double affine[6]; @@ -3241,7 +3259,9 @@ if (canvas->aa) { GnomeCanvasBuf buf; GdkColor *color; - + gint dest_x; + gint dest_y; + buf.buf = g_new (guchar, IMAGE_WIDTH_AA * IMAGE_HEIGHT_AA * 3); buf.buf_rowstride = IMAGE_WIDTH_AA * 3; buf.rect.x0 = draw_x1; @@ -3260,23 +3280,26 @@ canvas->root->object.klass)->render) ( canvas->root, &buf); + dest_x = draw_x1 - DISPLAY_X1 (canvas) + canvas->zoom_xofs; + dest_y = draw_y1 - DISPLAY_Y1 (canvas) + canvas->zoom_yofs; + if (buf.is_bg) { - gdk_rgb_gc_set_foreground (canvas->pixmap_gc, buf.bg_color); - gdk_draw_rectangle (canvas->layout.bin_window, - canvas->pixmap_gc, - TRUE, - (draw_x1 - DISPLAY_X1 (canvas) - + canvas->zoom_xofs), - (draw_y1 - DISPLAY_Y1 (canvas) - + canvas->zoom_yofs), - width, height); + if (bg_hack) + gdk_window_clear_area (canvas->layout.bin_window, + dest_x, dest_y, + width, height); + else { + gdk_rgb_gc_set_foreground (canvas->pixmap_gc, buf.bg_color); + gdk_draw_rectangle (canvas->layout.bin_window, + canvas->pixmap_gc, + TRUE, + dest_x, dest_y, + width, height); + } } else { gdk_draw_rgb_image_dithalign (canvas->layout.bin_window, canvas->pixmap_gc, - (draw_x1 - DISPLAY_X1 (canvas) - + canvas->zoom_xofs), - (draw_y1 - DISPLAY_Y1 (canvas) - + canvas->zoom_yofs), + dest_x, dest_y, width, height, canvas->dither, buf.buf,