summaryrefslogtreecommitdiff
path: root/libnautilus-extensions/nautilus-background-canvas-group.c
diff options
context:
space:
mode:
authorMike Engber <engber@src.gnome.org>2001-01-10 23:54:58 +0000
committerMike Engber <engber@src.gnome.org>2001-01-10 23:54:58 +0000
commit49b199f24a0e2c262f59f56b50a9dea71d4ab800 (patch)
tree06ba53124f12e65a9b9dfb457f14f20a72b9c429 /libnautilus-extensions/nautilus-background-canvas-group.c
parent74728e1fe28a1ecd5e6205ea109c44b972bf6f2f (diff)
downloadnautilus-49b199f24a0e2c262f59f56b50a9dea71d4ab800.tar.gz
reviewed by: John Harper
reviewed by: John Harper * configure.in: * libnautilus-extensions/nautilus-background-canvas-group.c: (nautilus_background_canvas_group_initialize_common), (nautilus_background_canvas_group_initialize), (nautilus_background_canvas_group_supplant_root_class): * libnautilus-extensions/nautilus-background-canvas-group.h: * libnautilus-extensions/nautilus-background.c: (nautilus_background_set_up_canvas): Turned on dithering for canvases (aa mode). We no longer expose NautilusBackgroundCanvasGroupClass, in nautilus-background-canvas- group.h. Now we just provide an API to do the class change.
Diffstat (limited to 'libnautilus-extensions/nautilus-background-canvas-group.c')
-rw-r--r--libnautilus-extensions/nautilus-background-canvas-group.c66
1 files changed, 66 insertions, 0 deletions
diff --git a/libnautilus-extensions/nautilus-background-canvas-group.c b/libnautilus-extensions/nautilus-background-canvas-group.c
index 8b2f411ea..52d250f05 100644
--- a/libnautilus-extensions/nautilus-background-canvas-group.c
+++ b/libnautilus-extensions/nautilus-background-canvas-group.c
@@ -54,6 +54,23 @@ static void nautilus_background_canvas_group_draw (GnomeCanvasItem *item,
static void nautilus_background_canvas_group_render (GnomeCanvasItem *item,
GnomeCanvasBuf *buffer);
+
+typedef GnomeCanvasGroup NautilusBackgroundCanvasGroup;
+typedef GnomeCanvasGroupClass NautilusBackgroundCanvasGroupClass;
+
+#define NAUTILUS_TYPE_BACKGROUND_CANVAS_GROUP \
+ (nautilus_background_canvas_group_get_type ())
+#define NAUTILUS_BACKGROUND_CANVAS_GROUP(obj) \
+ (GTK_CHECK_CAST ((obj), NAUTILUS_TYPE_BACKGROUND_CANVAS_GROUP, NautilusBackgroundCanvasGroup))
+#define NAUTILUS_BACKGROUND_CANVAS_GROUP_CLASS(klass) \
+ (GTK_CHECK_CLASS_CAST ((klass), NAUTILUS_TYPE_BACKGROUND_CANVAS_GROUP, NautilusBackgroundCanvasGroupClass))
+#define NAUTILUS_IS_BACKGROUND_CANVAS_GROUP(obj) \
+ (GTK_CHECK_TYPE ((obj), NAUTILUS_TYPE_BACKGROUND_CANVAS_GROUP))
+#define NAUTILUS_IS_BACKGROUND_CANVAS_GROUP_CLASS(klass) \
+ (GTK_CHECK_CLASS_TYPE ((klass), NAUTILUS_TYPE_BACKGROUND_CANVAS_GROUP))
+
+GtkType nautilus_background_canvas_group_get_type (void);
+
NAUTILUS_DEFINE_CLASS_BOILERPLATE (NautilusBackgroundCanvasGroup, nautilus_background_canvas_group, GNOME_TYPE_CANVAS_GROUP)
static void
@@ -64,9 +81,58 @@ nautilus_background_canvas_group_initialize_class (gpointer klass)
GNOME_CANVAS_ITEM_CLASS (klass)->update = nautilus_background_canvas_group_update;
}
+/* This function is for initialization code that's needed both when we're allocating
+ * a new NautilusBackgroundCanvasGroup object as well as when we're taking over an existing
+ * GnomeCanvasGroup item (replacing its klass).
+ */
+static void
+nautilus_background_canvas_group_initialize_common (NautilusBackgroundCanvasGroup *canvas_group)
+{
+ /* gnome_canvas_set_dither is only available in gnome-libs > v 1.2.8
+ */
+#ifdef HAVE_GNOME_CANVAS_SET_DITHER
+ gnome_canvas_set_dither (GNOME_CANVAS_ITEM (canvas_group)->canvas, GDK_RGB_DITHER_MAX);
+#endif
+}
+
static void
nautilus_background_canvas_group_initialize (gpointer object, gpointer klass)
{
+ /* The way we currently use nautilus_background_canvas_group, assigning
+ * it to the klass of a root canvas object, circumvents this initialze fn.
+ */
+ nautilus_background_canvas_group_initialize_common (NAUTILUS_BACKGROUND_CANVAS_GROUP (object));
+}
+
+
+void
+nautilus_background_canvas_group_supplant_root_class (GnomeCanvas *canvas)
+{
+ /* Attach ourselves to a canvas in a way that will work.
+ Changing the style is not sufficient.
+
+ Since there's no signal to override in GnomeCanvas to control
+ drawing the background, we change the class of the canvas root.
+ This gives us a chance to draw the background before any of the
+ objects draw themselves, and has no effect on the bounds or
+ anything related to scrolling.
+
+ We settled on this after less-than-thrilling results using a
+ canvas item as the background. The canvas item contributed to
+ the bounds of the canvas and had to constantly be resized.
+ */
+
+ g_assert (GNOME_IS_CANVAS (canvas));
+
+ if (GTK_OBJECT (canvas->root)->klass != gtk_type_class (NAUTILUS_TYPE_BACKGROUND_CANVAS_GROUP)) {
+
+ g_assert (GTK_OBJECT (canvas->root)->klass == gtk_type_class (GNOME_TYPE_CANVAS_GROUP));
+
+ GTK_OBJECT (canvas->root)->klass =
+ gtk_type_class (NAUTILUS_TYPE_BACKGROUND_CANVAS_GROUP);
+
+ nautilus_background_canvas_group_initialize_common (NAUTILUS_BACKGROUND_CANVAS_GROUP (canvas->root));
+ }
}
static void