Index: plugins/reload/eog-reload-plugin.c
===================================================================
--- plugins/reload/eog-reload-plugin.c	(revisión: 4562)
+++ plugins/reload/eog-reload-plugin.c	(copia de trabajo)
@@ -8,7 +8,7 @@
 #include <glib/gi18n-lib.h>
 
 #include <eog-debug.h>
-#include <eog-scroll-view.h>
+#include <eog-view.h>
 #include <eog-thumb-view.h>
 #include <eog-image.h>
 
@@ -31,7 +31,7 @@ reload_cb (GtkAction	*action,
 	GtkWidget *thumbview = eog_window_get_thumb_view (window);
 	GtkWidget *view = eog_window_get_view (window);
 
-	eog_scroll_view_set_image (EOG_SCROLL_VIEW (view), NULL);
+	eog_view_set_image (EOG_VIEW (view), NULL);
 
 	/* Re-select current image in order to trigger the image reload */
 	eog_thumb_view_select_single (EOG_THUMB_VIEW (thumbview), 
Index: src/eog-scroll-view.c
===================================================================
--- src/eog-scroll-view.c	(revisión: 4562)
+++ src/eog-scroll-view.c	(copia de trabajo)
@@ -6,8 +6,8 @@
 #include <gdk-pixbuf/gdk-pixbuf.h>
 #include <gdk/gdkkeysyms.h>
 
-#include "eog-marshal.h"
 #include "eog-scroll-view.h"
+#include "eog-view.h"
 #include "eog-debug.h"
 #include "uta.h"
 #include "zoom.h"
@@ -49,13 +49,6 @@ typedef enum {
 	PROGRESSIVE_POLISHING	/* We have finished loading an image but have not scaled it with interpolation */
 } ProgressiveState;
 
-/* Signal IDs */
-enum {
-	SIGNAL_ZOOM_CHANGED,
-	SIGNAL_LAST
-};
-static gint view_signals [SIGNAL_LAST];
-
 typedef enum {
 	EOG_SCROLL_VIEW_CURSOR_NORMAL,
 	EOG_SCROLL_VIEW_CURSOR_HIDDEN,
@@ -130,10 +123,39 @@ static void set_zoom_fit (EogScrollView 
 static void request_paint_area (EogScrollView *view, GdkRectangle *area);
 static void set_minimum_zoom_factor (EogScrollView *view);
 
+/* EogView interface implementation */
+
+static void eog_scroll_view_iface_init (EogViewClass *iface);
+
+/* loading stuff */
+static void     eog_scroll_view_set_image        (EogView *view, EogImage *image);
+
+/* general properties */
+static void     eog_scroll_view_set_scroll_wheel_zoom (EogView *view, gboolean scroll_wheel_zoom);
+static void     eog_scroll_view_set_zoom_upscale      (EogView *view, gboolean upscale);
+static void     eog_scroll_view_set_zoom_multiplier   (EogView *view, gdouble multiplier);
+static void     eog_scroll_view_set_antialiasing      (EogView *view, gboolean state);
+static void     eog_scroll_view_set_transparency      (EogView *view, EogTransparencyStyle style, GdkColor *color);
+static gboolean eog_scroll_view_scrollbars_visible    (EogView *view);
+static void	eog_scroll_view_set_popup             (EogView *view, GtkMenu *menu);
+
+/* zoom api */
+static void     eog_scroll_view_zoom_in          (EogView *view, gboolean smooth);
+static void     eog_scroll_view_zoom_out         (EogView *view, gboolean smooth);
+static void     eog_scroll_view_zoom_fit         (EogView *view);
+static void     eog_scroll_view_set_zoom         (EogView *view, double zoom);
+static double   eog_scroll_view_get_zoom         (EogView *view);
+static gboolean eog_scroll_view_get_zoom_is_min  (EogView *view);
+static gboolean eog_scroll_view_get_zoom_is_max  (EogView *view);
+static void     eog_scroll_view_show_cursor      (EogView *view);
+static void     eog_scroll_view_hide_cursor      (EogView *view);
+
 #define EOG_SCROLL_VIEW_GET_PRIVATE(object) \
 	(G_TYPE_INSTANCE_GET_PRIVATE ((object), EOG_TYPE_SCROLL_VIEW, EogScrollViewPrivate))
 
-G_DEFINE_TYPE (EogScrollView, eog_scroll_view, GTK_TYPE_TABLE)
+G_DEFINE_TYPE_WITH_CODE (EogScrollView, eog_scroll_view, GTK_TYPE_TABLE,
+			 G_IMPLEMENT_INTERFACE (EOG_TYPE_VIEW,
+						eog_scroll_view_iface_init))
 
 
 /*===================================
@@ -1040,7 +1062,7 @@ set_zoom (EogScrollView *view, double zo
 	/* repaint the whole image */
 	gtk_widget_queue_draw (GTK_WIDGET (priv->display));
 
-	g_signal_emit (view, view_signals [SIGNAL_ZOOM_CHANGED], 0, priv->zoom);
+	g_signal_emit_by_name (view, "zoom_changed", 0, priv->zoom);
 }
 
 /* Zooms the image to fit the available allocation */
@@ -1078,7 +1100,7 @@ set_zoom_fit (EogScrollView *view)
 	priv->xofs = 0;
 	priv->yofs = 0;
 
-	g_signal_emit (view, view_signals [SIGNAL_ZOOM_CHANGED], 0, priv->zoom);
+	g_signal_emit_by_name (view, "zoom_changed", 0, priv->zoom);
 }
 
 /*===================================
@@ -1624,51 +1646,57 @@ image_changed_cb (EogImage *img, gpointe
 	gtk_widget_queue_draw (GTK_WIDGET (priv->display));
 }
 
-/*===================================
-         public API
-  ---------------------------------*/
+/*=============================================
+      "public" API (accessed through interface)
+  ---------------------------------------------*/
 
-void
-eog_scroll_view_hide_cursor (EogScrollView *view)
+static void
+eog_scroll_view_hide_cursor (EogView *view)
 {
-       eog_scroll_view_set_cursor (view, EOG_SCROLL_VIEW_CURSOR_HIDDEN);
+       eog_scroll_view_set_cursor (EOG_SCROLL_VIEW (view), EOG_SCROLL_VIEW_CURSOR_HIDDEN);
 }
 
-void
-eog_scroll_view_show_cursor (EogScrollView *view)
+static void
+eog_scroll_view_show_cursor (EogView *view)
 {
-       eog_scroll_view_set_cursor (view, EOG_SCROLL_VIEW_CURSOR_NORMAL);
+       eog_scroll_view_set_cursor (EOG_SCROLL_VIEW (view), EOG_SCROLL_VIEW_CURSOR_NORMAL);
 }
 
 /* general properties */
-void
-eog_scroll_view_set_zoom_upscale (EogScrollView *view, gboolean upscale)
+static void
+eog_scroll_view_set_zoom_upscale (EogView *view, gboolean upscale)
 {
+  	EogScrollView *scroll_view;
 	EogScrollViewPrivate *priv;
 
 	g_return_if_fail (EOG_IS_SCROLL_VIEW (view));
 
-	priv = view->priv;
+	scroll_view = EOG_SCROLL_VIEW (view);
+
+	priv = scroll_view->priv;
 
 	if (priv->upscale != upscale) {
 		priv->upscale = upscale;
 
 		if (priv->zoom_mode == ZOOM_MODE_FIT) {
-			set_zoom_fit (view);
+			set_zoom_fit (scroll_view);
 			gtk_widget_queue_draw (GTK_WIDGET (priv->display));
 		}
 	}
 }
 
-void
-eog_scroll_view_set_antialiasing (EogScrollView *view, gboolean state)
+static void
+eog_scroll_view_set_antialiasing (EogView *view, gboolean state)
 {
+  	EogScrollView *scroll_view;
 	EogScrollViewPrivate *priv;
 	GdkInterpType new_interp_type;
 
 	g_return_if_fail (EOG_IS_SCROLL_VIEW (view));
 
-	priv = view->priv;
+	scroll_view = EOG_SCROLL_VIEW (view);
+
+	priv = scroll_view->priv;
 
 	new_interp_type = state ? GDK_INTERP_BILINEAR : GDK_INTERP_NEAREST;
 
@@ -1678,9 +1706,10 @@ eog_scroll_view_set_antialiasing (EogScr
 	}
 }
 
-void
-eog_scroll_view_set_transparency (EogScrollView *view, EogTransparencyStyle style, GdkColor *color)
+static void
+eog_scroll_view_set_transparency (EogView *view, EogTransparencyStyle style, GdkColor *color)
 {
+    	EogScrollView *scroll_view;
 	EogScrollViewPrivate *priv;
 	guint32 col = 0;
 	guint32 red, green, blue;
@@ -1688,7 +1717,9 @@ eog_scroll_view_set_transparency (EogScr
 
 	g_return_if_fail (EOG_IS_SCROLL_VIEW (view));
 
-	priv = view->priv;
+	scroll_view = EOG_SCROLL_VIEW (view);
+
+	priv = scroll_view->priv;
 
 	if (color != NULL) {
 		red = (color->red >> 8) << 16;
@@ -1722,15 +1753,18 @@ static double preferred_zoom_levels[] = 
 };
 static const gint n_zoom_levels = (sizeof (preferred_zoom_levels) / sizeof (double));
 
-void
-eog_scroll_view_zoom_in (EogScrollView *view, gboolean smooth)
+static void
+eog_scroll_view_zoom_in (EogView *view, gboolean smooth)
 {
+	EogScrollView *scroll_view;
 	EogScrollViewPrivate *priv;
 	double zoom;
 
 	g_return_if_fail (EOG_IS_SCROLL_VIEW (view));
 
-	priv = view->priv;
+	scroll_view = EOG_SCROLL_VIEW (view);
+
+	priv = scroll_view->priv;
 
 	if (smooth) {
 		zoom = priv->zoom * priv->zoom_multiplier;
@@ -1754,19 +1788,22 @@ eog_scroll_view_zoom_in (EogScrollView *
 			zoom = preferred_zoom_levels [i];
 		}
 	}
-	set_zoom (view, zoom, FALSE, 0, 0);
+	set_zoom (scroll_view, zoom, FALSE, 0, 0);
 
 }
 
-void
-eog_scroll_view_zoom_out (EogScrollView *view, gboolean smooth)
+static void
+eog_scroll_view_zoom_out (EogView *view, gboolean smooth)
 {
+	EogScrollView *scroll_view;
 	EogScrollViewPrivate *priv;
 	double zoom;
 
 	g_return_if_fail (EOG_IS_SCROLL_VIEW (view));
 
-	priv = view->priv;
+	scroll_view = EOG_SCROLL_VIEW (view);
+
+	priv = scroll_view->priv;
 
 	if (smooth) {
 		zoom = priv->zoom / priv->zoom_multiplier;
@@ -1789,69 +1826,76 @@ eog_scroll_view_zoom_out (EogScrollView 
 			zoom = preferred_zoom_levels [i];
 		}
 	}
-	set_zoom (view, zoom, FALSE, 0, 0);
+	set_zoom (scroll_view, zoom, FALSE, 0, 0);
 }
 
-void
-eog_scroll_view_zoom_fit (EogScrollView *view)
+static void
+eog_scroll_view_zoom_fit (EogView *view)
 {
+	EogScrollView *scroll_view;
+
 	g_return_if_fail (EOG_IS_SCROLL_VIEW (view));
 
-	set_zoom_fit (view);
-	check_scrollbar_visibility (view, NULL);
-	gtk_widget_queue_draw (GTK_WIDGET (view->priv->display));
+	scroll_view = EOG_SCROLL_VIEW (view);
+
+	set_zoom_fit (scroll_view);
+	check_scrollbar_visibility (scroll_view, NULL);
+	gtk_widget_queue_draw (GTK_WIDGET (scroll_view->priv->display));
 }
 
-void
-eog_scroll_view_set_zoom (EogScrollView *view, double zoom)
+static void
+eog_scroll_view_set_zoom (EogView *view, double zoom)
 {
 	g_return_if_fail (EOG_IS_SCROLL_VIEW (view));
 
-	set_zoom (view, zoom, FALSE, 0, 0);
+	set_zoom (EOG_SCROLL_VIEW (view), zoom, FALSE, 0, 0);
 }
 
-double
-eog_scroll_view_get_zoom (EogScrollView *view)
+static double
+eog_scroll_view_get_zoom (EogView *view)
 {
 	g_return_val_if_fail (EOG_IS_SCROLL_VIEW (view), 0.0);
 
-	return view->priv->zoom;
+	return EOG_SCROLL_VIEW (view)->priv->zoom;
 }
 
-gboolean
-eog_scroll_view_get_zoom_is_min (EogScrollView *view)
+static gboolean
+eog_scroll_view_get_zoom_is_min (EogView *view)
 {
 	g_return_val_if_fail (EOG_IS_SCROLL_VIEW (view), FALSE);
 
-	set_minimum_zoom_factor (view);
+	set_minimum_zoom_factor (EOG_SCROLL_VIEW (view));
 
-	return DOUBLE_EQUAL (view->priv->zoom, MIN_ZOOM_FACTOR) || 
-	       DOUBLE_EQUAL (view->priv->zoom, view->priv->min_zoom);
+	return DOUBLE_EQUAL (EOG_SCROLL_VIEW (view)->priv->zoom, MIN_ZOOM_FACTOR) || 
+	       DOUBLE_EQUAL (EOG_SCROLL_VIEW (view)->priv->zoom, EOG_SCROLL_VIEW (view)->priv->min_zoom);
 }
 
-gboolean
-eog_scroll_view_get_zoom_is_max (EogScrollView *view)
+static gboolean
+eog_scroll_view_get_zoom_is_max (EogView *view)
 {
 	g_return_val_if_fail (EOG_IS_SCROLL_VIEW (view), FALSE);
 
-	return DOUBLE_EQUAL (view->priv->zoom, MAX_ZOOM_FACTOR);
+	return DOUBLE_EQUAL (EOG_SCROLL_VIEW (view)->priv->zoom, MAX_ZOOM_FACTOR);
 }
 
-void
-eog_scroll_view_set_image (EogScrollView *view, EogImage *image)
+static void
+eog_scroll_view_set_image (EogView *view, EogImage *image)
 {
+	EogScrollView *scroll_view;
 	EogScrollViewPrivate *priv;
 
 	g_return_if_fail (EOG_IS_SCROLL_VIEW (view));
 
-	priv = view->priv;
+	scroll_view = EOG_SCROLL_VIEW (view);
+
+	priv = scroll_view->priv;
 
 	if (priv->image == image) {
 		return;
 	}
 
 	if (priv->image != NULL) {
-		free_image_resources (view);
+		free_image_resources (scroll_view);
 		if (GTK_WIDGET_DRAWABLE (priv->display) && image == NULL) {
 			gdk_window_clear (GTK_WIDGET (priv->display)->window);
 		}
@@ -1866,13 +1910,13 @@ eog_scroll_view_set_image (EogScrollView
 		if (priv->pixbuf == NULL) {
 			priv->pixbuf = eog_image_get_pixbuf (image);
 			priv->progressive_state = PROGRESSIVE_NONE;
-			set_zoom_fit (view);
-			check_scrollbar_visibility (view, NULL);
+			set_zoom_fit (scroll_view);
+			check_scrollbar_visibility (scroll_view, NULL);
 			gtk_widget_queue_draw (GTK_WIDGET (priv->display));
 
 		}
 		else if (priv->interp_type != GDK_INTERP_NEAREST &&
-			 !is_unity_zoom (view))
+			 !is_unity_zoom (scroll_view))
 		{
 			/* paint antialiased image version */
 			priv->progressive_state = PROGRESSIVE_POLISHING;
@@ -1880,17 +1924,17 @@ eog_scroll_view_set_image (EogScrollView
 		}
 
 		priv->image_changed_id = g_signal_connect (image, "changed",
-							   (GCallback) image_changed_cb, view);
+							   (GCallback) image_changed_cb, scroll_view);
 	}
 	
 	priv->image = image;
 }
 
-gboolean 
-eog_scroll_view_scrollbars_visible (EogScrollView *view)
+static gboolean 
+eog_scroll_view_scrollbars_visible (EogView *view)
 {
-	if (!GTK_WIDGET_VISIBLE (GTK_WIDGET (view->priv->hbar)) && 
-	    !GTK_WIDGET_VISIBLE (GTK_WIDGET (view->priv->vbar)))
+	if (!GTK_WIDGET_VISIBLE (GTK_WIDGET (EOG_SCROLL_VIEW (view)->priv->hbar)) && 
+	    !GTK_WIDGET_VISIBLE (GTK_WIDGET (EOG_SCROLL_VIEW (view)->priv->vbar)))
 		return FALSE;
 
 	return TRUE;
@@ -1962,22 +2006,33 @@ eog_scroll_view_class_init (EogScrollVie
 
 	gobject_class->dispose = eog_scroll_view_dispose;
 
-	view_signals [SIGNAL_ZOOM_CHANGED] =
-		g_signal_new ("zoom_changed",
-			      G_TYPE_OBJECT,
-			      G_SIGNAL_RUN_LAST,
-			      G_STRUCT_OFFSET (EogScrollViewClass, zoom_changed),
-			      NULL, NULL,
-			      eog_marshal_VOID__DOUBLE,
-			      G_TYPE_NONE, 1,
-			      G_TYPE_DOUBLE);
-
 	widget_class->size_allocate = eog_scroll_view_size_allocate;
 	widget_class->style_set = eog_scroll_view_style_set;
 
 	g_type_class_add_private (klass, sizeof (EogScrollViewPrivate));
 }
 
+static void
+eog_scroll_view_iface_init (EogViewClass *iface)
+{
+	iface->set_image = eog_scroll_view_set_image;
+	iface->set_scroll_wheel_zoom = eog_scroll_view_set_scroll_wheel_zoom;
+	iface->set_zoom_upscale = eog_scroll_view_set_zoom_upscale;
+	iface->set_zoom_multiplier = eog_scroll_view_set_zoom_multiplier;
+	iface->set_antialiasing = eog_scroll_view_set_antialiasing;
+	iface->set_transparency = eog_scroll_view_set_transparency;
+	iface->scrollbars_visible = eog_scroll_view_scrollbars_visible;
+	iface->set_popup = eog_scroll_view_set_popup;
+	iface->zoom_in = eog_scroll_view_zoom_in;
+	iface->zoom_out = eog_scroll_view_zoom_out;
+	iface->zoom_fit = eog_scroll_view_zoom_fit;
+	iface->set_zoom = eog_scroll_view_set_zoom;
+	iface->get_zoom = eog_scroll_view_get_zoom;
+	iface->get_zoom_is_max = eog_scroll_view_get_zoom_is_max;
+	iface->get_zoom_is_min = eog_scroll_view_get_zoom_is_min;
+	iface->show_cursor = eog_scroll_view_show_cursor;
+	iface->hide_cursor = eog_scroll_view_hide_cursor;
+}
 
 GtkWidget*
 eog_scroll_view_new (void)
@@ -2089,37 +2144,42 @@ view_on_button_press_event_cb (GtkWidget
     return FALSE;
 }
 
-void
-eog_scroll_view_set_popup (EogScrollView *view,
+static void
+eog_scroll_view_set_popup (EogView *view,
 			   GtkMenu *menu)
 {
+	EogScrollView *scroll_view;
+
 	g_return_if_fail (EOG_IS_SCROLL_VIEW (view));
-	g_return_if_fail (view->priv->menu == NULL);
 
-	view->priv->menu = g_object_ref (menu);
+	scroll_view = EOG_SCROLL_VIEW (view);
+
+	g_return_if_fail (scroll_view->priv->menu == NULL);
 
-	gtk_menu_attach_to_widget (GTK_MENU (view->priv->menu), 
-				   GTK_WIDGET (view), 
+	scroll_view->priv->menu = g_object_ref (menu);
+
+	gtk_menu_attach_to_widget (GTK_MENU (scroll_view->priv->menu), 
+				   GTK_WIDGET (scroll_view), 
 				   NULL);
 
-	g_signal_connect (G_OBJECT (view), "button_press_event",
+	g_signal_connect (G_OBJECT (scroll_view), "button_press_event",
 			  G_CALLBACK (view_on_button_press_event_cb), NULL);
 }
 
-void
-eog_scroll_view_set_scroll_wheel_zoom (EogScrollView *view, 
+static void
+eog_scroll_view_set_scroll_wheel_zoom (EogView *view, 
 				       gboolean       scroll_wheel_zoom)
 {
 	g_return_if_fail (EOG_IS_SCROLL_VIEW (view));
 
-        view->priv->scroll_wheel_zoom = scroll_wheel_zoom;
+        EOG_SCROLL_VIEW (view)->priv->scroll_wheel_zoom = scroll_wheel_zoom;
 }
 
-void
-eog_scroll_view_set_zoom_multiplier (EogScrollView *view, 
+static void
+eog_scroll_view_set_zoom_multiplier (EogView *view, 
 				     gdouble        zoom_multiplier)
 {
 	g_return_if_fail (EOG_IS_SCROLL_VIEW (view));
 
-        view->priv->zoom_multiplier = 1.0 + zoom_multiplier;
+        EOG_SCROLL_VIEW (view)->priv->zoom_multiplier = 1.0 + zoom_multiplier;
 }
Index: src/eog-window.c
===================================================================
--- src/eog-window.c	(revisión: 4562)
+++ src/eog-window.c	(copia de trabajo)
@@ -33,6 +33,7 @@
 
 #include "eog-window.h"
 #include "eog-scroll-view.h"
+#include "eog-view.h"
 #include "eog-debug.h"
 #include "eog-file-chooser.h"
 #include "eog-thumb-view.h"
@@ -234,13 +235,13 @@ eog_window_interp_type_changed_cb (GConf
 
 	priv = EOG_WINDOW (user_data)->priv;
 
-	g_return_if_fail (EOG_IS_SCROLL_VIEW (priv->view));
+	g_return_if_fail (EOG_IS_VIEW (priv->view));
 
 	if (entry->value != NULL && entry->value->type == GCONF_VALUE_BOOL) {
 		interpolate = gconf_value_get_bool (entry->value);
 	}
 
-	eog_scroll_view_set_antialiasing (EOG_SCROLL_VIEW (priv->view), 
+	eog_view_set_antialiasing (EOG_VIEW (priv->view), 
 					  interpolate);
 }
 
@@ -259,13 +260,13 @@ eog_window_scroll_wheel_zoom_changed_cb 
 
 	priv = EOG_WINDOW (user_data)->priv;
 
-	g_return_if_fail (EOG_IS_SCROLL_VIEW (priv->view));
+	g_return_if_fail (EOG_IS_VIEW (priv->view));
 
 	if (entry->value != NULL && entry->value->type == GCONF_VALUE_BOOL) {
 		scroll_wheel_zoom = gconf_value_get_bool (entry->value);
 	}
 
-	eog_scroll_view_set_scroll_wheel_zoom (EOG_SCROLL_VIEW (priv->view), 
+	eog_view_set_scroll_wheel_zoom (EOG_VIEW (priv->view), 
 					       scroll_wheel_zoom);
 }
 
@@ -284,13 +285,13 @@ eog_window_zoom_multiplier_changed_cb (G
 
 	priv = EOG_WINDOW (user_data)->priv;
 
-	g_return_if_fail (EOG_IS_SCROLL_VIEW (priv->view));
+	g_return_if_fail (EOG_IS_VIEW (priv->view));
 
 	if (entry->value != NULL && entry->value->type == GCONF_VALUE_FLOAT) {
 		multiplier = gconf_value_get_float (entry->value);
 	}
 
-	eog_scroll_view_set_zoom_multiplier (EOG_SCROLL_VIEW (priv->view), 
+	eog_view_set_zoom_multiplier (EOG_VIEW (priv->view), 
 					     multiplier);
 }
 
@@ -309,7 +310,7 @@ eog_window_transparency_changed_cb (GCon
 
 	priv = EOG_WINDOW (user_data)->priv;
 
-	g_return_if_fail (EOG_IS_SCROLL_VIEW (priv->view));
+	g_return_if_fail (EOG_IS_VIEW (priv->view));
 
 	if (entry->value != NULL && entry->value->type == GCONF_VALUE_STRING) {
 		value = gconf_value_get_string (entry->value);
@@ -324,15 +325,15 @@ eog_window_transparency_changed_cb (GCon
 		color_str = gconf_client_get_string (priv->client,
 						     EOG_CONF_VIEW_TRANS_COLOR, NULL);
 		if (gdk_color_parse (color_str, &color)) {
-			eog_scroll_view_set_transparency (EOG_SCROLL_VIEW (priv->view),
+			eog_view_set_transparency (EOG_VIEW (priv->view),
 							  EOG_TRANSP_COLOR, &color);
 		}
 		g_free (color_str);
 	} else if (g_ascii_strcasecmp (value, "CHECK_PATTERN") == 0) {
-		eog_scroll_view_set_transparency (EOG_SCROLL_VIEW (priv->view),
+		eog_view_set_transparency (EOG_VIEW (priv->view),
 						  EOG_TRANSP_CHECKED, NULL);
 	} else {
-		eog_scroll_view_set_transparency (EOG_SCROLL_VIEW (priv->view),
+		eog_view_set_transparency (EOG_VIEW (priv->view),
 						  EOG_TRANSP_BACKGROUND, NULL);
 	}
 }
@@ -354,7 +355,7 @@ eog_window_trans_color_changed_cb (GConf
 
 	priv = EOG_WINDOW (user_data)->priv;
 
-	g_return_if_fail (EOG_IS_SCROLL_VIEW (priv->view));
+	g_return_if_fail (EOG_IS_VIEW (priv->view));
 
 	value = gconf_client_get_string (priv->client, 
 					 EOG_CONF_VIEW_TRANSPARENCY, 
@@ -369,7 +370,7 @@ eog_window_trans_color_changed_cb (GConf
 		color_str = gconf_value_get_string (entry->value);
 
 		if (gdk_color_parse (color_str, &color)) {
-			eog_scroll_view_set_transparency (EOG_SCROLL_VIEW (priv->view),
+			eog_view_set_transparency (EOG_VIEW (priv->view),
 							  EOG_TRANSP_COLOR, &color);
 		}
 	}
@@ -391,7 +392,7 @@ eog_window_scroll_buttons_changed_cb (GC
 
 	priv = EOG_WINDOW (user_data)->priv;
 
-	g_return_if_fail (EOG_IS_SCROLL_VIEW (priv->view));
+	g_return_if_fail (EOG_IS_VIEW (priv->view));
 
 	if (entry->value != NULL && entry->value->type == GCONF_VALUE_BOOL) {
 		show_buttons = gconf_value_get_bool (entry->value);
@@ -701,7 +702,7 @@ update_status_bar (EogWindow *window)
 		int zoom, width, height;
 		goffset bytes = 0;
 
-		zoom = floor (100 * eog_scroll_view_get_zoom (EOG_SCROLL_VIEW (priv->view)) + 0.5);
+		zoom = floor (100 * eog_view_get_zoom (EOG_VIEW (priv->view)) + 0.5);
 
 		eog_image_get_size (priv->image, &width, &height);
 
@@ -1026,7 +1027,7 @@ eog_window_display_image (EogWindow *win
 		image_thumb_changed_cb (image, window);
 	}
 
-	eog_scroll_view_set_image (EOG_SCROLL_VIEW (priv->view), image);
+	eog_view_set_image (EOG_VIEW (priv->view), image);
 
 	gtk_window_set_title (GTK_WINDOW (window), eog_image_get_caption (image));
 
@@ -1417,7 +1418,7 @@ eog_job_load_cb (EogJobLoad *job, gpoint
 
 		update_status_bar (window);
 
-		eog_scroll_view_set_image (EOG_SCROLL_VIEW (priv->view), NULL);
+		eog_view_set_image (EOG_VIEW (priv->view), NULL);
 
         	if (window->priv->status == EOG_WINDOW_STATUS_INIT) {
 			update_action_groups_state (window);
@@ -1612,9 +1613,9 @@ view_zoom_changed_cb (GtkWidget *widget,
 					     "ViewZoomOut");
 
 	gtk_action_set_sensitive (action_zoom_in,
-			!eog_scroll_view_get_zoom_is_max (EOG_SCROLL_VIEW (window->priv->view)));
+			!eog_view_get_zoom_is_max (EOG_VIEW (window->priv->view)));
 	gtk_action_set_sensitive (action_zoom_out,
-			!eog_scroll_view_get_zoom_is_min (EOG_SCROLL_VIEW (window->priv->view)));
+			!eog_view_get_zoom_is_min (EOG_VIEW (window->priv->view)));
 }
 
 static void
@@ -1746,7 +1747,7 @@ fullscreen_timeout_cb (gpointer data)
 
 	gtk_widget_hide_all (window->priv->fullscreen_popup);
 
-	eog_scroll_view_hide_cursor (EOG_SCROLL_VIEW (window->priv->view));
+	eog_view_hide_cursor (EOG_VIEW (window->priv->view));
 
 	fullscreen_clear_timeout (window);
 
@@ -1815,7 +1816,7 @@ fullscreen_set_timeout (EogWindow *windo
 
 	window->priv->fullscreen_timeout_source = source;
 
-	eog_scroll_view_show_cursor (EOG_SCROLL_VIEW (window->priv->view));
+	eog_view_show_cursor (EOG_VIEW (window->priv->view));
 }
 
 static void
@@ -2108,7 +2109,7 @@ eog_window_run_fullscreen (EogWindow *wi
 					 EOG_CONF_FULLSCREEN_UPSCALE, 
 					 NULL);
 
-	eog_scroll_view_set_zoom_upscale (EOG_SCROLL_VIEW (priv->view), 
+	eog_view_set_zoom_upscale (EOG_VIEW (priv->view), 
 					  upscale);
 
 	gtk_widget_grab_focus (priv->view);
@@ -2190,7 +2191,7 @@ eog_window_stop_fullscreen (EogWindow *w
 	g_assert (GTK_IS_WIDGET (menubar));
 	gtk_widget_show (menubar);
 	
-	eog_scroll_view_set_zoom_upscale (EOG_SCROLL_VIEW (priv->view), FALSE);
+	eog_view_set_zoom_upscale (EOG_VIEW (priv->view), FALSE);
 
 	gtk_widget_modify_bg (window->priv->view, GTK_STATE_NORMAL, NULL);
 	gtk_widget_set_style (window->priv->view->parent, NULL);
@@ -2202,7 +2203,7 @@ eog_window_stop_fullscreen (EogWindow *w
 		eog_window_update_fullscreen_action (window);
 	}
 
-	eog_scroll_view_show_cursor (EOG_SCROLL_VIEW (priv->view));
+	eog_view_show_cursor (EOG_VIEW (priv->view));
 
 #ifdef HAVE_DBUS
 	eog_application_screensaver_enable (EOG_APP);
@@ -3115,7 +3116,7 @@ eog_window_cmd_zoom_in (GtkAction *actio
 	priv = EOG_WINDOW (user_data)->priv;
 
 	if (priv->view) {
-		eog_scroll_view_zoom_in (EOG_SCROLL_VIEW (priv->view), FALSE);
+		eog_view_zoom_in (EOG_VIEW (priv->view), FALSE);
 	}
 }
 
@@ -3131,7 +3132,7 @@ eog_window_cmd_zoom_out (GtkAction *acti
 	priv = EOG_WINDOW (user_data)->priv;
 
 	if (priv->view) {
-		eog_scroll_view_zoom_out (EOG_SCROLL_VIEW (priv->view), FALSE);
+		eog_view_zoom_out (EOG_VIEW (priv->view), FALSE);
 	}
 }
 
@@ -3147,7 +3148,7 @@ eog_window_cmd_zoom_normal (GtkAction *a
 	priv = EOG_WINDOW (user_data)->priv;
 
 	if (priv->view) {
-		eog_scroll_view_set_zoom (EOG_SCROLL_VIEW (priv->view), 1.0);
+		eog_view_set_zoom (EOG_VIEW (priv->view), 1.0);
 	}
 }
 
@@ -3163,7 +3164,7 @@ eog_window_cmd_zoom_fit (GtkAction *acti
 	priv = EOG_WINDOW (user_data)->priv;
 
 	if (priv->view) {
-		eog_scroll_view_zoom_fit (EOG_SCROLL_VIEW (priv->view));
+		eog_view_zoom_fit (EOG_VIEW (priv->view));
 	}
 }
 
@@ -3856,7 +3857,7 @@ eog_window_construct_ui (EogWindow *wind
 			  window);
 
 	view_popup = gtk_ui_manager_get_widget (priv->ui_mgr, "/ViewPopup");
-	eog_scroll_view_set_popup (EOG_SCROLL_VIEW (priv->view),
+	eog_view_set_popup (EOG_VIEW (priv->view),
 				   GTK_MENU (view_popup));
 
 	frame = gtk_widget_new (GTK_TYPE_FRAME, 
@@ -4293,7 +4294,7 @@ eog_window_key_press (GtkWidget *widget,
 			break;
 		}
 	case GDK_Page_Up:
-		if (!eog_scroll_view_scrollbars_visible (EOG_SCROLL_VIEW (EOG_WINDOW (widget)->priv->view))) {
+		if (!eog_view_scrollbars_visible (EOG_VIEW (EOG_WINDOW (widget)->priv->view))) {
 			if (!GTK_WIDGET_VISIBLE (EOG_WINDOW (widget)->priv->nav)) {
 				/* If the iconview is not visible skip to the 
 				 * previous image manually as it won't handle
@@ -4306,7 +4307,7 @@ eog_window_key_press (GtkWidget *widget,
 		}
 		break;
 	case GDK_Page_Down:
-		if (!eog_scroll_view_scrollbars_visible (EOG_SCROLL_VIEW (EOG_WINDOW (widget)->priv->view))) {
+		if (!eog_view_scrollbars_visible (EOG_VIEW (EOG_WINDOW (widget)->priv->view))) {
 			if (!GTK_WIDGET_VISIBLE (EOG_WINDOW (widget)->priv->nav)) {
 				/* If the iconview is not visible skip to the 
 				 * next image manually as it won't handle
Index: src/eog-view.c
===================================================================
--- src/eog-view.c	(revisión: 0)
+++ src/eog-view.c	(revisión: 0)
@@ -0,0 +1,202 @@
+/* Eye of GNOME -- Image Viewing Widget Interface
+ *
+ * Copyright (C) 2008 The Free Software Foundation
+ *
+ * Author: Claudio Saavedra  <csaavedra@gnome.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "eog-view.h"
+#include "eog-marshal.h"
+
+static void eog_view_base_init (gpointer g_class);
+
+GType
+eog_view_get_type (void)
+{
+	static GType view_type = 0;
+
+	if (G_UNLIKELY (view_type == 0))
+	{
+		const GTypeInfo view_info =
+			{
+				sizeof (EogViewClass),  /* class_size */
+				eog_view_base_init,	    /* base_init */
+				NULL,			    /* base_finalize */
+			};
+
+		view_type = g_type_register_static (G_TYPE_INTERFACE, "EogView",
+						    &view_info, 0);
+	}
+
+  return view_type;
+}
+
+static void
+eog_view_base_init (gpointer g_class)
+{
+	static gboolean initialized = FALSE;
+
+	if (G_UNLIKELY (initialized == FALSE)) {
+		g_signal_new ("zoom_changed",
+			      EOG_TYPE_VIEW,
+			      G_SIGNAL_RUN_LAST,
+			      0,
+			      NULL, NULL,
+			      eog_marshal_VOID__DOUBLE,
+			      G_TYPE_NONE, 1,
+			      G_TYPE_DOUBLE);
+		initialized = TRUE;
+	}
+}
+
+void
+eog_view_set_image (EogView *view, EogImage *image)
+{
+	g_return_if_fail (EOG_IS_VIEW (view));
+	g_return_if_fail (!image || EOG_IS_IMAGE (image));
+
+	EOG_VIEW_GET_INTERFACE (view)->set_image (view, image);
+}
+
+void
+eog_view_set_scroll_wheel_zoom (EogView *view, gboolean scroll_wheel_zoom)
+{
+	g_return_if_fail (EOG_IS_VIEW (view));
+
+	EOG_VIEW_GET_INTERFACE (view)->set_scroll_wheel_zoom (view, scroll_wheel_zoom);
+}
+
+void
+eog_view_set_zoom_upscale (EogView *view, gboolean upscale)
+{
+	g_return_if_fail (EOG_IS_VIEW (view));
+
+	EOG_VIEW_GET_INTERFACE (view)->set_zoom_upscale (view, upscale);
+}
+
+void
+eog_view_set_zoom_multiplier (EogView *view, gdouble multiplier)
+{
+	g_return_if_fail (EOG_IS_VIEW (view));
+
+	EOG_VIEW_GET_INTERFACE (view)->set_zoom_multiplier (view, multiplier);
+}
+
+void
+eog_view_set_antialiasing (EogView *view, gboolean state)
+{
+	g_return_if_fail (EOG_IS_VIEW (view));
+
+	EOG_VIEW_GET_INTERFACE (view)->set_antialiasing (view, state);
+}
+
+void
+eog_view_set_transparency (EogView *view, EogTransparencyStyle style, GdkColor *color)
+{
+	g_return_if_fail (EOG_IS_VIEW (view));
+
+	EOG_VIEW_GET_INTERFACE (view)->set_transparency (view, style, color);
+}
+
+gboolean
+eog_view_scrollbars_visible (EogView *view)
+{
+	g_return_val_if_fail (EOG_IS_VIEW (view), FALSE);
+
+	return EOG_VIEW_GET_INTERFACE (view)->scrollbars_visible (view);
+}
+
+void
+eog_view_set_popup (EogView *view, GtkMenu *menu)
+{
+	g_return_if_fail (EOG_IS_VIEW (view));
+	g_return_if_fail (GTK_IS_MENU (menu));
+
+	EOG_VIEW_GET_INTERFACE (view)->set_popup (view, menu);
+}
+
+void
+eog_view_zoom_in (EogView *view, gboolean smooth)
+{
+	g_return_if_fail (EOG_IS_VIEW (view));
+
+	EOG_VIEW_GET_INTERFACE (view)->zoom_in (view, smooth);
+}
+
+void
+eog_view_zoom_out (EogView *view, gboolean smooth)
+{
+	g_return_if_fail (EOG_IS_VIEW (view));
+
+	EOG_VIEW_GET_INTERFACE (view)->zoom_out (view, smooth);
+}
+
+void
+eog_view_zoom_fit (EogView *view)
+{
+	g_return_if_fail (EOG_IS_VIEW (view));
+
+	EOG_VIEW_GET_INTERFACE (view)->zoom_fit (view);
+}
+
+void
+eog_view_set_zoom (EogView *view, gdouble zoom)
+{
+	g_return_if_fail (EOG_IS_VIEW (view));
+
+	EOG_VIEW_GET_INTERFACE (view)->set_zoom (view, zoom);
+}
+
+double
+eog_view_get_zoom (EogView *view)
+{
+	g_return_val_if_fail (EOG_IS_VIEW (view), 0.0);
+
+	return EOG_VIEW_GET_INTERFACE (view)->get_zoom (view);
+}
+
+gboolean
+eog_view_get_zoom_is_min  (EogView *view)
+{
+	g_return_val_if_fail (EOG_IS_VIEW (view), FALSE);
+
+	return EOG_VIEW_GET_INTERFACE (view)->get_zoom_is_min (view);
+}
+
+gboolean
+eog_view_get_zoom_is_max (EogView *view)
+{
+	g_return_val_if_fail (EOG_IS_VIEW (view), FALSE);
+
+	return EOG_VIEW_GET_INTERFACE (view)->get_zoom_is_max (view);
+}
+
+void
+eog_view_show_cursor (EogView *view)
+{
+	g_return_if_fail (EOG_IS_VIEW (view));
+
+	EOG_VIEW_GET_INTERFACE (view)->show_cursor (view);
+}
+
+void
+eog_view_hide_cursor (EogView *view)
+{
+	g_return_if_fail (EOG_IS_VIEW (view));
+
+	EOG_VIEW_GET_INTERFACE (view)->hide_cursor (view);
+}
Index: src/eog-scroll-view.h
===================================================================
--- src/eog-scroll-view.h	(revisión: 4562)
+++ src/eog-scroll-view.h	(copia de trabajo)
@@ -2,6 +2,7 @@
 #define _EOG_SCROLL_VIEW_H_
 
 #include <gtk/gtk.h>
+#include "eog-view.h"
 #include "eog-image.h"
 
 G_BEGIN_DECLS
@@ -25,42 +26,11 @@ struct _EogScrollView {
 
 struct _EogScrollViewClass {
 	GtkTableClass parent_class;
-
-	void (* zoom_changed) (EogScrollView *view, double zoom);
 };
 
-typedef enum {
-	EOG_TRANSP_BACKGROUND,
-	EOG_TRANSP_CHECKED,
-	EOG_TRANSP_COLOR
-} EogTransparencyStyle;
-
 GType    eog_scroll_view_get_type         (void) G_GNUC_CONST;
 GtkWidget* eog_scroll_view_new            (void);
 
-/* loading stuff */
-void     eog_scroll_view_set_image        (EogScrollView *view, EogImage *image);
-
-/* general properties */
-void     eog_scroll_view_set_scroll_wheel_zoom (EogScrollView *view, gboolean scroll_wheel_zoom);
-void     eog_scroll_view_set_zoom_upscale (EogScrollView *view, gboolean upscale);
-void     eog_scroll_view_set_zoom_multiplier (EogScrollView *view, gdouble multiplier);
-void     eog_scroll_view_set_antialiasing (EogScrollView *view, gboolean state);
-void     eog_scroll_view_set_transparency (EogScrollView *view, EogTransparencyStyle style, GdkColor *color);
-gboolean eog_scroll_view_scrollbars_visible (EogScrollView *view);
-void	 eog_scroll_view_set_popup (EogScrollView *view, GtkMenu *menu);
-
-/* zoom api */
-void     eog_scroll_view_zoom_in          (EogScrollView *view, gboolean smooth);
-void     eog_scroll_view_zoom_out         (EogScrollView *view, gboolean smooth);
-void     eog_scroll_view_zoom_fit         (EogScrollView *view);
-void     eog_scroll_view_set_zoom         (EogScrollView *view, double zoom);
-double   eog_scroll_view_get_zoom         (EogScrollView *view);
-gboolean eog_scroll_view_get_zoom_is_min  (EogScrollView *view);
-gboolean eog_scroll_view_get_zoom_is_max  (EogScrollView *view);
-void     eog_scroll_view_show_cursor      (EogScrollView *view);
-void     eog_scroll_view_hide_cursor      (EogScrollView *view);
-
 G_END_DECLS
 
 #endif /* _EOG_SCROLL_VIEW_H_ */
Index: src/eog-view.h
===================================================================
--- src/eog-view.h	(revisión: 0)
+++ src/eog-view.h	(revisión: 0)
@@ -0,0 +1,124 @@
+/* Eye of GNOME -- Image Viewing Widget Interface
+ *
+ * Copyright (C) 2008 The Free Software Foundation
+ *
+ * Author: Claudio Saavedra  <csaavedra@gnome.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef _EOG_VIEW_H
+#define _EOG_VIEW_H
+
+#include <gtk/gtk.h>
+#include "eog-image.h"
+
+G_BEGIN_DECLS
+
+#define EOG_TYPE_VIEW             (eog_view_get_type ())
+#define EOG_VIEW(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), EOG_TYPE_VIEW, EogView))
+#define EOG_VIEW_CLASS(vtable)    (G_TYPE_CHECK_CLASS_CAST ((vtable), EOG_TYPE_VIEW, EogViewClass))
+#define EOG_IS_VIEW(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EOG_TYPE_VIEW))
+#define EOG_VIEW_GET_INTERFACE(inst)  (G_TYPE_INSTANCE_GET_INTERFACE ((inst), EOG_TYPE_VIEW, EogViewClass))
+
+typedef struct _EogView        EogView;
+typedef struct _EogViewClass   EogViewClass;
+
+typedef enum {
+	EOG_TRANSP_BACKGROUND,
+	EOG_TRANSP_CHECKED,
+	EOG_TRANSP_COLOR
+} EogTransparencyStyle;
+
+struct _EogViewClass
+{
+	GTypeInterface		   base_iface;
+
+	/* interfaces */
+
+	void (* set_image)              (EogView *view,
+					 EogImage *image);
+
+	void (* set_scroll_wheel_zoom)  (EogView *view,
+					 gboolean scroll_wheel_zoom);
+
+	void (* set_zoom_upscale)       (EogView *view,
+					 gboolean upscale);
+
+	void (* set_zoom_multiplier)    (EogView *view,
+					 gdouble multiplier);
+  
+	void (* set_antialiasing)       (EogView *view,
+					 gboolean state);
+
+	void (* set_transparency)       (EogView *view,
+					 EogTransparencyStyle style,
+					 GdkColor *color);
+
+	gboolean (* scrollbars_visible) (EogView *view);
+  
+	void	 (* set_popup)            (EogView *view,
+					   GtkMenu *menu);
+
+	void     (* zoom_in)            (EogView *view,
+					 gboolean smooth);
+
+	void     (* zoom_out)           (EogView *view,
+					 gboolean smooth);
+
+	void     (* zoom_fit)           (EogView *view);
+
+	void     (* set_zoom)           (EogView *view,
+					 double zoom);
+
+	double   (* get_zoom)           (EogView *view);
+
+	gboolean (* get_zoom_is_min)    (EogView *view);
+
+	gboolean (* get_zoom_is_max)    (EogView *view);
+
+	void     (* show_cursor)        (EogView *view);
+
+	void     (* hide_cursor)        (EogView *view);
+};
+
+GType eog_view_get_type           (void) G_GNUC_CONST;
+
+/* loading stuff */
+void     eog_view_set_image        (EogView *view, EogImage *image);
+
+/* general properties */
+void     eog_view_set_scroll_wheel_zoom (EogView *view, gboolean scroll_wheel_zoom);
+void     eog_view_set_zoom_upscale (EogView *view, gboolean upscale);
+void     eog_view_set_zoom_multiplier (EogView *view, gdouble multiplier);
+void     eog_view_set_antialiasing (EogView *view, gboolean state);
+void     eog_view_set_transparency (EogView *view, EogTransparencyStyle style, GdkColor *color);
+gboolean eog_view_scrollbars_visible (EogView *view);
+void	 eog_view_set_popup (EogView *view, GtkMenu *menu);
+
+/* zoom api */
+void     eog_view_zoom_in          (EogView *view, gboolean smooth);
+void     eog_view_zoom_out         (EogView *view, gboolean smooth);
+void     eog_view_zoom_fit         (EogView *view);
+void     eog_view_set_zoom         (EogView *view, double zoom);
+double   eog_view_get_zoom         (EogView *view);
+gboolean eog_view_get_zoom_is_min  (EogView *view);
+gboolean eog_view_get_zoom_is_max  (EogView *view);
+void     eog_view_show_cursor      (EogView *view);
+void     eog_view_hide_cursor      (EogView *view);
+
+G_END_DECLS
+
+#endif /* EOG_VIEW_H */
Index: src/Makefile.am
===================================================================
--- src/Makefile.am	(revisión: 4562)
+++ src/Makefile.am	(copia de trabajo)
@@ -65,6 +65,7 @@ INST_H_FILES =				\
 	eog-image.h			\
 	eog-image-save-info.h		\
 	eog-scroll-view.h		\
+	eog-view.h			\
 	eog-thumb-view.h		\
 	eog-list-store.h		\
 	eog-thumbnail.h			\
@@ -94,6 +95,7 @@ libeog_la_SOURCES =			\
 	eog-image-jpeg.c		\
 	eog-image-save-info.c		\
 	eog-scroll-view.c		\
+	eog-view.c			\
 	eog-thumb-view.c		\
 	eog-list-store.c		\
 	eog-thumbnail.c			\
Index: bindings/python/eog.defs
===================================================================
--- bindings/python/eog.defs	(revisión: 4562)
+++ bindings/python/eog.defs	(copia de trabajo)
@@ -140,6 +140,16 @@
   (gtype-id "EOG_TYPE_WINDOW")
 )
 
+;; Interfaces.
+
+(define-interface View
+  (in-module "Eog")
+  (c-name "EogView")
+  (gtype-id "EOG_TYPE_VIEW")
+  (vtable "EogViewClass")
+  (prerequisite "GtkWidget")
+)
+
 ;; Enumerations and flags ...
 
 (define-flags ImageData
@@ -913,9 +923,18 @@
   (return-type "GtkWidget*")
 )
 
+
+
+;; From eog-view.h
+
+(define-function eog_view_get_type
+  (c-name "eog_view_get_type")
+  (return-type "GType")
+)
+
 (define-method set_image
-  (of-object "EogScrollView")
-  (c-name "eog_scroll_view_set_image")
+  (of-object "EogView")
+  (c-name "eog_view_set_image")
   (return-type "none")
   (parameters
     '("EogImage*" "image")
@@ -923,8 +942,8 @@
 )
 
 (define-method set_zoom_upscale
-  (of-object "EogScrollView")
-  (c-name "eog_scroll_view_set_zoom_upscale")
+  (of-object "EogView")
+  (c-name "eog_view_set_zoom_upscale")
   (return-type "none")
   (parameters
     '("gboolean" "upscale")
@@ -932,8 +951,8 @@
 )
 
 (define-method set_zoom_multiplier
-  (of-object "EogScrollView")
-  (c-name "eog_scroll_view_set_zoom_multiplier")
+  (of-object "EogView")
+  (c-name "eog_view_set_zoom_multiplier")
   (return-type "none")
   (parameters
     '("gdouble" "multiplier")
@@ -941,8 +960,8 @@
 )
 
 (define-method set_antialiasing
-  (of-object "EogScrollView")
-  (c-name "eog_scroll_view_set_antialiasing")
+  (of-object "EogView")
+  (c-name "eog_view_set_antialiasing")
   (return-type "none")
   (parameters
     '("gboolean" "state")
@@ -950,8 +969,8 @@
 )
 
 (define-method set_transparency
-  (of-object "EogScrollView")
-  (c-name "eog_scroll_view_set_transparency")
+  (of-object "EogView")
+  (c-name "eog_view_set_transparency")
   (return-type "none")
   (parameters
     '("EogTransparencyStyle" "style")
@@ -960,14 +979,14 @@
 )
 
 (define-method scrollbars_visible
-  (of-object "EogScrollView")
-  (c-name "eog_scroll_view_scrollbars_visible")
+  (of-object "EogView")
+  (c-name "eog_view_scrollbars_visible")
   (return-type "gboolean")
 )
 
 (define-method zoom_in
-  (of-object "EogScrollView")
-  (c-name "eog_scroll_view_zoom_in")
+  (of-object "EogView")
+  (c-name "eog_view_zoom_in")
   (return-type "none")
   (parameters
     '("gboolean" "smooth")
@@ -975,8 +994,8 @@
 )
 
 (define-method zoom_out
-  (of-object "EogScrollView")
-  (c-name "eog_scroll_view_zoom_out")
+  (of-object "EogView")
+  (c-name "eog_view_zoom_out")
   (return-type "none")
   (parameters
     '("gboolean" "smooth")
@@ -984,14 +1003,14 @@
 )
 
 (define-method zoom_fit
-  (of-object "EogScrollView")
-  (c-name "eog_scroll_view_zoom_fit")
+  (of-object "EogView")
+  (c-name "eog_view_zoom_fit")
   (return-type "none")
 )
 
 (define-method set_zoom
-  (of-object "EogScrollView")
-  (c-name "eog_scroll_view_set_zoom")
+  (of-object "EogView")
+  (c-name "eog_view_set_zoom")
   (return-type "none")
   (parameters
     '("double" "zoom")
@@ -999,32 +1018,32 @@
 )
 
 (define-method get_zoom
-  (of-object "EogScrollView")
-  (c-name "eog_scroll_view_get_zoom")
+  (of-object "EogView")
+  (c-name "eog_view_get_zoom")
   (return-type "double")
 )
 
 (define-method get_zoom_is_min
-  (of-object "EogScrollView")
-  (c-name "eog_scroll_view_get_zoom_is_min")
+  (of-object "EogView")
+  (c-name "eog_view_get_zoom_is_min")
   (return-type "gboolean")
 )
 
 (define-method get_zoom_is_max
-  (of-object "EogScrollView")
-  (c-name "eog_scroll_view_get_zoom_is_max")
+  (of-object "EogView")
+  (c-name "eog_view_get_zoom_is_max")
   (return-type "gboolean")
 )
 
 (define-method show_cursor
-  (of-object "EogScrollView")
-  (c-name "eog_scroll_view_show_cursor")
+  (of-object "EogView")
+  (c-name "eog_view_show_cursor")
   (return-type "none")
 )
 
 (define-method hide_cursor
-  (of-object "EogScrollView")
-  (c-name "eog_scroll_view_hide_cursor")
+  (of-object "EogView")
+  (c-name "eog_view_hide_cursor")
   (return-type "none")
 )
 
Index: doc/reference/eog-docs.sgml
===================================================================
--- doc/reference/eog-docs.sgml	(revisión: 4562)
+++ doc/reference/eog-docs.sgml	(copia de trabajo)
@@ -19,6 +19,7 @@
     <xi:include href="xml/eog-thumb-nav.xml"/>
     <xi:include href="xml/eog-thumb-view.xml"/>
     <xi:include href="xml/eog-scroll-view.xml"/>
+    <xi:include href="xml/eog-view.xml"/>
     <xi:include href="xml/eog-window.xml"/>
     <xi:include href="xml/eog-statusbar.xml"/>
     <xi:include href="xml/eog-exif-details.xml"/>
Index: doc/reference/eog-sections.txt
===================================================================
--- doc/reference/eog-sections.txt	(revisión: 4562)
+++ doc/reference/eog-sections.txt	(copia de trabajo)
@@ -486,25 +486,7 @@ EOG_PLUGIN_MANAGER_GET_CLASS
 EogScrollViewPrivate
 <TITLE>EogScrollView</TITLE>
 EogScrollView
-EogTransparencyStyle
 eog_scroll_view_new
-eog_scroll_view_set_image
-eog_scroll_view_set_scroll_wheel_zoom
-eog_scroll_view_set_zoom_upscale
-eog_scroll_view_set_zoom_multiplier
-eog_scroll_view_set_antialiasing
-eog_scroll_view_set_transparency
-eog_scroll_view_scrollbars_visible
-eog_scroll_view_set_popup
-eog_scroll_view_zoom_in
-eog_scroll_view_zoom_out
-eog_scroll_view_zoom_fit
-eog_scroll_view_set_zoom
-eog_scroll_view_get_zoom
-eog_scroll_view_get_zoom_is_min
-eog_scroll_view_get_zoom_is_max
-eog_scroll_view_show_cursor
-eog_scroll_view_hide_cursor
 <SUBSECTION Standard>
 EOG_SCROLL_VIEW
 EOG_IS_SCROLL_VIEW
@@ -682,6 +664,37 @@ EOG_SIDEBAR_GET_CLASS
 </SECTION>
 
 <SECTION>
+<FILE>eog-view</FILE>
+EOG_VIEW_GET_INTERFACE
+EogTransparencyStyle
+<TITLE>EogView</TITLE>
+EogView
+eog_view_set_image
+eog_view_set_scroll_wheel_zoom
+eog_view_set_zoom_upscale
+eog_view_set_zoom_multiplier
+eog_view_set_antialiasing
+eog_view_set_transparency
+eog_view_scrollbars_visible
+eog_view_set_popup
+eog_view_zoom_in
+eog_view_zoom_out
+eog_view_zoom_fit
+eog_view_set_zoom
+eog_view_get_zoom
+eog_view_get_zoom_is_min
+eog_view_get_zoom_is_max
+eog_view_show_cursor
+eog_view_hide_cursor
+<SUBSECTION Standard>
+EOG_VIEW
+EOG_IS_VIEW
+EOG_TYPE_VIEW
+eog_view_get_type
+EOG_VIEW_CLASS
+</SECTION>
+
+<SECTION>
 <FILE>eog-thumbnail</FILE>
 eog_thumbnail_init
 eog_thumbnail_fit_to_size
Index: doc/reference/eog.types
===================================================================
--- doc/reference/eog.types	(revisión: 4562)
+++ doc/reference/eog.types	(copia de trabajo)
@@ -25,6 +25,7 @@ eog_plugin_get_type
 eog_application_get_type
 eog_plugin_manager_get_type
 eog_scroll_view_get_type
+eog_view_get_type
 eog_window_get_type
 eog_statusbar_get_type
 eog_exif_details_get_type
