[Xfce4-commits] <ristretto:master> Merge branch 'uri-base'
Stephan Arts
noreply at xfce.org
Tue Aug 9 19:38:02 CEST 2011
Updating branch refs/heads/master
to c070a4151dbdb4165d6ad51caad6531268812edb (commit)
from c846c7b1f8defe410efe8b09c3055ed7465b746f (commit)
commit c070a4151dbdb4165d6ad51caad6531268812edb
Merge: c846c7b db13518
Author: Stephan Arts <stephan at xfce.org>
Date: Tue Aug 9 19:37:41 2011 +0200
Merge branch 'uri-base'
commit db13518863fd0ca214d236aa64a5525776606d21
Author: Stephan Arts <stephan at xfce.org>
Date: Mon Aug 8 22:19:34 2011 +0200
Clean-up code (end of fase 1)
src/Makefile.am | 1 -
src/gnome_wallpaper_manager.c | 6 +-
src/gnome_wallpaper_manager.h | 2 +-
src/image.c | 461 -----------
src/image.h | 3 -
src/image_cache.c | 214 -----
src/image_cache.h | 58 --
src/image_viewer.c | 1 +
src/main.c | 1 -
src/main_window.c | 118 +---
src/meego_wallpaper_manager.c | 6 +-
src/meego_wallpaper_manager.h | 2 +-
src/picture_viewer.c | 1753 -----------------------------------------
src/picture_viewer.h | 95 ---
src/xfce_wallpaper_manager.c | 4 +-
src/xfce_wallpaper_manager.h | 2 +-
16 files changed, 35 insertions(+), 2692 deletions(-)
diff --git a/src/Makefile.am b/src/Makefile.am
index d979b05..71d2c29 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -3,7 +3,6 @@ bin_PROGRAMS = ristretto
ristretto_SOURCES = \
image_list.c image_list.h \
image.c image.h \
- image_cache.c image_cache.h \
image_viewer.c image_viewer.h \
settings.c settings.h \
preferences_dialog.h preferences_dialog.c \
diff --git a/src/gnome_wallpaper_manager.c b/src/gnome_wallpaper_manager.c
index 1213ccf..803dd00 100644
--- a/src/gnome_wallpaper_manager.c
+++ b/src/gnome_wallpaper_manager.c
@@ -31,8 +31,6 @@
#include "wallpaper_manager.h"
#include "gnome_wallpaper_manager.h"
-#define XFDESKTOP_SELECTION_FMT "XFDESKTOP_SELECTION_%d"
-
typedef struct {
gint16 r;
gint16 g;
@@ -53,7 +51,7 @@ rstto_gnome_wallpaper_manager_finalize (GObject *object);
static GObjectClass *parent_class = NULL;
-static RsttoGnomeWallpaperManager *gnome_wallpaper_manager_object;
+static RsttoWallpaperManager *gnome_wallpaper_manager_object;
struct _RsttoGnomeWallpaperManagerPriv
{
@@ -209,7 +207,7 @@ rstto_gnome_wallpaper_manager_finalize (GObject *object)
*
* Singleton
*/
-RsttoGnomeWallpaperManager *
+RsttoWallpaperManager *
rstto_gnome_wallpaper_manager_new (void)
{
if (gnome_wallpaper_manager_object == NULL)
diff --git a/src/gnome_wallpaper_manager.h b/src/gnome_wallpaper_manager.h
index d6a2d67..9c228a3 100644
--- a/src/gnome_wallpaper_manager.h
+++ b/src/gnome_wallpaper_manager.h
@@ -59,7 +59,7 @@ struct _RsttoGnomeWallpaperManagerClass
GObjectClass parent_class;
};
-RsttoGnomeWallpaperManager *rstto_gnome_wallpaper_manager_new (void);
+RsttoWallpaperManager *rstto_gnome_wallpaper_manager_new (void);
GType rstto_gnome_wallpaper_manager_get_type (void);
G_END_DECLS
diff --git a/src/image.c b/src/image.c
index 09fe562..5ba5576 100644
--- a/src/image.c
+++ b/src/image.c
@@ -27,7 +27,6 @@
#include <string.h>
#include "image.h"
-#include "image_cache.h"
#ifndef RSTTO_IMAGE_BUFFER_SIZE
/* #define RSTTO_IMAGE_BUFFER_SIZE 1024 */
@@ -51,20 +50,6 @@ rstto_image_class_init (GObjectClass *);
static void
rstto_image_dispose (GObject *object);
-static void
-cb_rstto_image_area_prepared (GdkPixbufLoader *loader, RsttoImage *image);
-static void
-cb_rstto_image_size_prepared (GdkPixbufLoader *loader, gint width, gint height, RsttoImage *image);
-static void
-cb_rstto_image_closed (GdkPixbufLoader *loader, RsttoImage *image);
-static gboolean
-cb_rstto_image_update(RsttoImage *image);
-
-static void
-cb_rstto_image_read_file_ready (GObject *source_object, GAsyncResult *result, gpointer user_data);
-static void
-cb_rstto_image_read_input_stream_ready (GObject *source_object, GAsyncResult *result, gpointer user_data);
-
static GObjectClass *parent_class = NULL;
static gint rstto_image_signals[RSTTO_IMAGE_SIGNAL_COUNT];
@@ -109,13 +94,10 @@ struct _RsttoImagePriv
/* Image data */
/**************/
RsttoImageOrientation orientation;
- GdkPixbufLoader *loader;
ExifData *exif_data;
GdkPixbuf *thumbnail;
- GdkPixbuf *pixbuf;
gint width;
gint height;
- gdouble scale;
/* Animation data for animated images (like .gif/.mng) */
/*******************************************************/
@@ -192,7 +174,6 @@ static void
rstto_image_dispose (GObject *object)
{
RsttoImage *image = RSTTO_IMAGE (object);
- RsttoImageCache *cache;
if(image->priv->cancellable)
{
@@ -213,33 +194,6 @@ rstto_image_dispose (GObject *object)
image->priv->animation_timeout_id = 0;
}
- if (image->priv->loader)
- {
- g_signal_handlers_disconnect_by_func (image->priv->loader , cb_rstto_image_area_prepared, image);
- gdk_pixbuf_loader_close (image->priv->loader, NULL);
- image->priv->loader = NULL;
- }
-
- if (image->priv->animation)
- {
- g_object_unref (image->priv->animation);
- image->priv->animation = NULL;
- }
-
- if (image->priv->pixbuf)
- {
- g_object_unref (image->priv->pixbuf);
- image->priv->pixbuf = NULL;
- cache = rstto_image_cache_new ();
- rstto_image_cache_pop_image (cache, image);
- }
-
- if (image->priv->buffer)
- {
- g_free (image->priv->buffer);
- image->priv->buffer = NULL;
- }
-
if (image->priv->exif_data)
{
exif_data_free (image->priv->exif_data);
@@ -265,135 +219,12 @@ rstto_image_new (GFile *file)
image->priv->file = file;
image->priv->exif_data = NULL;
image->priv->thumbnail = NULL;
- image->priv->pixbuf = NULL;
image->priv->orientation = RSTTO_IMAGE_ORIENT_NOT_DETERMINED;
return image;
}
-
-/**
- * rstto_image_load:
- * @image : The image to load from disk.
- * @empty_cache : if it should empty the cache (eg, perform a reload)
- * @error : return location for errors or %NULL.
- *
- * If the image is not yet loaded in memory, load the image.
- * A reload can be forced with @empty_cache set to %TRUE.
- * On failure, returns %FALSE. And @error will be set to
- * point to a #GError describing the cause of the failure.
- * Warning: this function initializes a load, it is an a-sync call and
- * does not guarantee that the image will be loaded afterwards.
- * the 'image-loaded' signal will indicate that this operation
- * has finished.
- *
- * Return value: TRUE on success.
- */
-gboolean
-rstto_image_load (RsttoImage *image, gboolean empty_cache, gdouble scale, gboolean preload, GError **error)
-{
- /* g_debug("%s: %f", __FUNCTION__, scale); */
- RsttoImageCache *cache;
-
- g_return_val_if_fail (image != NULL, FALSE);
-
- cache = rstto_image_cache_new ();
-
- g_cancellable_reset (image->priv->cancellable);
-
- /* Image scale */
- image->priv->scale = scale;
-
- /* Check if a GIOChannel is present, if so... the load is already in progress */
- /* The image needs to be loaded if:
- * a) The image is already loaded but there is
- * a reload required because the cache needs
- * to be cleared.
- * b) The image is not yet loaded.
- */
- if ((image->priv->loader == NULL) && ((empty_cache == TRUE ) || image->priv->pixbuf == NULL))
- {
- /* If the image has been loaded, free it */
- if (image->priv->pixbuf)
- {
- g_object_unref (image->priv->pixbuf);
- image->priv->pixbuf = NULL;
- }
-
- /* FIXME: should we check if the loader already exists? */
- image->priv->loader = gdk_pixbuf_loader_new();
-
- /* connect the signal-handlers */
- g_signal_connect(image->priv->loader, "area-prepared", G_CALLBACK(cb_rstto_image_area_prepared), image);
- g_signal_connect(image->priv->loader, "size-prepared", G_CALLBACK(cb_rstto_image_size_prepared), image);
- /*g_signal_connect(image->priv->loader, "area-updated", G_CALLBACK(cb_rstto_image_area_updated), image);*/
- g_signal_connect(image->priv->loader, "closed", G_CALLBACK(cb_rstto_image_closed), image);
-
- g_object_ref (image);
- g_file_read_async (image->priv->file, 0, NULL, (GAsyncReadyCallback)cb_rstto_image_read_file_ready, image);
- }
- else
- {
- g_signal_emit(G_OBJECT(image), rstto_image_signals[RSTTO_IMAGE_SIGNAL_UPDATED], 0, image, NULL);
- }
- rstto_image_cache_push_image (cache, image, preload);
- return TRUE;
-}
-
-
-/**
- * rstto_image_unload:
- * @image : The image to unload from memory.
- *
- * This function will unload the image-pixbuf from memory.
- */
-void
-rstto_image_unload (RsttoImage *image)
-{
- g_return_if_fail (image != NULL);
-
- g_cancellable_cancel (image->priv->cancellable);
-
- if (image->priv->loader)
- {
- gdk_pixbuf_loader_close (image->priv->loader, NULL);
- image->priv->loader = NULL;
- }
-
- if (image->priv->pixbuf)
- {
- g_object_unref (image->priv->pixbuf);
- image->priv->pixbuf = NULL;
- }
-
- if (image->priv->thumbnail)
- {
- g_object_unref (image->priv->thumbnail);
- image->priv->thumbnail = NULL;
- }
-
- if (image->priv->animation_timeout_id)
- {
- g_source_remove (image->priv->animation_timeout_id);
- image->priv->animation_timeout_id = 0;
- }
-
- if (image->priv->animation)
- {
- g_object_unref (image->priv->animation);
- image->priv->animation = NULL;
- }
-
- if (image->priv->iter)
- {
- g_object_unref (image->priv->iter);
- image->priv->iter = NULL;
- }
-
-}
-
-
/**
* rstto_image_get_file:
* @image : The image to get the GFile object from.
@@ -483,48 +314,6 @@ rstto_image_get_thumbnail (RsttoImage *image)
/**
- * rstto_image_get_pixbuf:
- * @image :
- *
- * return value: a gdkpixbuf * referencing a pixbuf pointing to the image.
- */
-GdkPixbuf *
-rstto_image_get_pixbuf (RsttoImage *image)
-{
- g_return_val_if_fail (image != NULL, NULL);
- g_return_val_if_fail (image->priv != NULL, NULL);
-
-
- return image->priv->pixbuf;
-}
-
-/**
- * rstto_image_get_size;
- * @image: Image object
- *
- * Returns the image-size in bytes (approx)
- *
- * Returns: Image-size (bytes)
- */
-guint64
-rstto_image_get_size (RsttoImage *image)
-{
- GdkPixbuf *pixbuf = rstto_image_get_pixbuf (image);
- if (pixbuf)
- {
- gint rowstride = gdk_pixbuf_get_rowstride (pixbuf);
- gint height = gdk_pixbuf_get_height (pixbuf);
- /* HACK HACK HACK HACK */
- /* multiplied by 2 since it is unclear why the nr of bytes
- * in memory is twice what is calculated here, based on the dimensions
- */
- //return rowstride * height * 2;
- return (guint64)rowstride * (guint64)height;
- }
- return 0;
-}
-
-/**
* rstto_image_get_orientation;
* @image:
*
@@ -573,253 +362,3 @@ rstto_image_set_orientation (RsttoImage *image, RsttoImageOrientation orientatio
image->priv->orientation = orientation;
g_signal_emit (G_OBJECT(image), rstto_image_signals[RSTTO_IMAGE_SIGNAL_UPDATED], 0, image, NULL);
}
-
-/**
- * PRIVATE CALLBACKS
- */
-
-/**
- * cb_rstto_image_read_file_ready:
- * @source_object:
- * @result:
- * @user_data:
- *
- *
- */
-static void
-cb_rstto_image_read_file_ready (GObject *source_object, GAsyncResult *result, gpointer user_data)
-{
- GFile *file = G_FILE (source_object);
- RsttoImage *image = RSTTO_IMAGE (user_data);
- GFileInputStream *file_input_stream = g_file_read_finish (file, result, NULL);
-
- if (g_cancellable_is_cancelled (image->priv->cancellable))
- {
- g_object_unref (image);
- return;
- }
-
-
- g_input_stream_read_async (G_INPUT_STREAM (file_input_stream),
- image->priv->buffer,
- RSTTO_IMAGE_BUFFER_SIZE,
- G_PRIORITY_DEFAULT,
- NULL,
- (GAsyncReadyCallback) cb_rstto_image_read_input_stream_ready,
- image);
-}
-
-/**
- * cb_rstto_image_read_input_stream_ready:
- * @source_object:
- * @result:
- * @user_data:
- *
- *
- */
-static void
-cb_rstto_image_read_input_stream_ready (GObject *source_object, GAsyncResult *result, gpointer user_data)
-{
- RsttoImage *image = RSTTO_IMAGE (user_data);
- gssize read_bytes = g_input_stream_read_finish (G_INPUT_STREAM (source_object), result, NULL);
- GError *error = NULL;
-
- if (g_cancellable_is_cancelled (image->priv->cancellable))
- {
- g_object_unref (image);
- return;
- }
-
- if (image->priv->loader == NULL)
- return;
-
-
- if (read_bytes > 0)
- {
- if(gdk_pixbuf_loader_write (image->priv->loader, (const guchar *)image->priv->buffer, read_bytes, &error) == FALSE)
- {
- g_input_stream_close (G_INPUT_STREAM (source_object), NULL, NULL);
- g_object_unref (image);
- }
- else
- {
- g_input_stream_read_async (G_INPUT_STREAM (source_object),
- image->priv->buffer,
- RSTTO_IMAGE_BUFFER_SIZE,
- G_PRIORITY_DEFAULT,
- NULL,
- (GAsyncReadyCallback) cb_rstto_image_read_input_stream_ready,
- image);
- }
- }
- else
- if (read_bytes == 0)
- {
- if (read_bytes == 0)
- {
- /* OK */
- g_input_stream_close (G_INPUT_STREAM (source_object), NULL, NULL);
- gdk_pixbuf_loader_close (image->priv->loader, NULL);
- g_object_unref (image);
- }
- else
- {
- /* I/O ERROR */
- g_input_stream_close (G_INPUT_STREAM (source_object), NULL, NULL);
- gdk_pixbuf_loader_close (image->priv->loader, NULL);
- g_object_unref (image);
- }
- }
-}
-
-/**
- * cb_rstto_image_size_prepared:
- * @loader:
- * @width;
- * @height;
- * @image:
- *
- */
-static void
-cb_rstto_image_size_prepared (GdkPixbufLoader *loader, gint width, gint height, RsttoImage *image)
-{
- image->priv->width = width;
- image->priv->height = height;
-
- if (image->priv->scale > 0.0)
- {
- gdk_pixbuf_loader_set_size (loader, (gint)((gdouble)width*image->priv->scale), (gint)((gdouble)height*image->priv->scale));
- }
- else
- {
- if (width > height)
- {
- if (width > STD_IMAGE_SIZE)
- {
- gdk_pixbuf_loader_set_size (loader, STD_IMAGE_SIZE, (height*STD_IMAGE_SIZE)/width);
- }
- }
- else
- {
- if (height > STD_IMAGE_SIZE)
- {
- gdk_pixbuf_loader_set_size (loader, (width*STD_IMAGE_SIZE)/height, STD_IMAGE_SIZE);
- }
-
- }
- }
-
- g_signal_emit(G_OBJECT(image), rstto_image_signals[RSTTO_IMAGE_SIGNAL_PREPARED], 0, image, NULL);
-}
-
-/**
- * cb_rstto_image_area_prepared:
- * @loader:
- * @image:
- *
- */
-static void
-cb_rstto_image_area_prepared (GdkPixbufLoader *loader, RsttoImage *image)
-{
- gint timeout = 0;
- image->priv->animation = gdk_pixbuf_loader_get_animation (loader);
- image->priv->iter = gdk_pixbuf_animation_get_iter (image->priv->animation, NULL);
- if (image->priv->pixbuf)
- {
- g_object_unref(image->priv->pixbuf);
- image->priv->pixbuf = NULL;
- }
-
- g_object_ref (image->priv->animation);
-
- timeout = gdk_pixbuf_animation_iter_get_delay_time (image->priv->iter);
-
- if (timeout != -1)
- {
- /* fix borked stuff */
- if (timeout == 0)
- {
- g_warning("timeout == 0: defaulting to 40ms");
- timeout = 40;
- }
-
- image->priv->animation_timeout_id = g_timeout_add(timeout, (GSourceFunc)cb_rstto_image_update, image);
- }
- else
- {
- image->priv->pixbuf = gdk_pixbuf_animation_iter_get_pixbuf (image->priv->iter);
- g_object_ref (image->priv->pixbuf);
- }
-}
-
-/**
- * cb_rstto_image_closed:
- * @loader:
- * @image:
- *
- * Image loading is complete
- *
- */
-static void
-cb_rstto_image_closed (GdkPixbufLoader *loader, RsttoImage *image)
-{
- g_return_if_fail (image != NULL);
- g_return_if_fail (RSTTO_IS_IMAGE (image));
- g_return_if_fail (loader == image->priv->loader);
-
- g_object_unref (image->priv->loader);
- image->priv->loader = NULL;
-
-
- if (image->priv->pixbuf != NULL)
- {
- g_signal_emit(G_OBJECT(image), rstto_image_signals[RSTTO_IMAGE_SIGNAL_UPDATED], 0, image, NULL);
- }
-}
-
-/**
- * cb_rstto_image_update:
- * @image:
- *
- * Used for advancing to the next frame in an animated image,
- * TODO: rename - to make it's purpose more clear.
- *
- * Return value:
- */
-static gboolean
-cb_rstto_image_update(RsttoImage *image)
-{
- gint timeout = 0;
-
- if (image->priv->iter)
- {
- if(gdk_pixbuf_animation_iter_advance (image->priv->iter, NULL))
- {
- /* Cleanup old image */
- if (image->priv->pixbuf)
- {
- g_object_unref (image->priv->pixbuf);
- image->priv->pixbuf = NULL;
- }
-
- image->priv->pixbuf = gdk_pixbuf_copy (gdk_pixbuf_animation_iter_get_pixbuf (image->priv->iter));
- }
-
- timeout = gdk_pixbuf_animation_iter_get_delay_time (image->priv->iter);
-
- if (timeout != -1)
- {
- if (timeout == 0)
- {
- g_warning("timeout == 0: defaulting to 40ms");
- timeout = 40;
- }
- image->priv->animation_timeout_id = g_timeout_add(timeout, (GSourceFunc)cb_rstto_image_update, image);
- }
- g_signal_emit (G_OBJECT(image), rstto_image_signals[RSTTO_IMAGE_SIGNAL_UPDATED], 0, image, NULL);
-
- return FALSE;
- }
- return TRUE;
-}
-
diff --git a/src/image.h b/src/image.h
index c6a8407..959aaed 100644
--- a/src/image.h
+++ b/src/image.h
@@ -76,13 +76,10 @@ RsttoImage *rstto_image_new (GFile *file);
GType rstto_image_get_type ();
GdkPixbuf *rstto_image_get_thumbnail (RsttoImage *image);
-GdkPixbuf *rstto_image_get_pixbuf (RsttoImage *image);
gint rstto_image_get_width (RsttoImage *image);
gint rstto_image_get_height (RsttoImage *image);
GFile *rstto_image_get_file (RsttoImage *image);
-void rstto_image_unload (RsttoImage *image);
-gboolean rstto_image_load (RsttoImage *image, gboolean empty_cache, gdouble scale, gboolean preload, GError **error);
guint64 rstto_image_get_size (RsttoImage *image);
diff --git a/src/image_cache.c b/src/image_cache.c
deleted file mode 100644
index e037c17..0000000
--- a/src/image_cache.c
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * Copyright (c) Stephan Arts 2009-2010 <stephan at xfce.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 Library 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 <config.h>
-
-#include <glib.h>
-#include <gio/gio.h>
-#include <gdk/gdk.h>
-
-#include <libexif/exif-data.h>
-
-#include "image.h"
-#include "image_cache.h"
-#include "settings.h"
-
-static void
-rstto_image_cache_init (GObject *);
-static void
-rstto_image_cache_class_init (GObjectClass *);
-
-static RsttoImageCache *rstto_global_image_cache = NULL;
-
-struct _RsttoImageCache
-{
- GObject parent;
- GList *cache_list;
-};
-
-struct _RsttoImageCacheClass
-{
- GObjectClass parent_class;
-};
-
-
-GType
-rstto_image_cache_get_type (void)
-{
- static GType rstto_image_cache_type = 0;
-
- if (!rstto_image_cache_type)
- {
- static const GTypeInfo rstto_image_cache_info =
- {
- sizeof (RsttoImageCacheClass),
- (GBaseInitFunc) NULL,
- (GBaseFinalizeFunc) NULL,
- (GClassInitFunc) rstto_image_cache_class_init,
- (GClassFinalizeFunc) NULL,
- NULL,
- sizeof (RsttoImageCache),
- 0,
- (GInstanceInitFunc) rstto_image_cache_init,
- NULL
- };
-
- rstto_image_cache_type = g_type_register_static (G_TYPE_OBJECT, "RsttoImageCache", &rstto_image_cache_info, 0);
- }
- return rstto_image_cache_type;
-}
-
-
-static void
-rstto_image_cache_init (GObject *object)
-{
-
-}
-
-static void
-rstto_image_cache_class_init (GObjectClass *object_class)
-{
-
-}
-
-gboolean
-rstto_image_cache_pop_image (RsttoImageCache *cache, RsttoImage *image)
-{
- if (cache->cache_list)
- {
- rstto_image_unload (image);
- cache->cache_list = g_list_remove_all (cache->cache_list, image);
- }
- return TRUE;
-}
-
-gboolean
-rstto_image_cache_push_image (RsttoImageCache *cache, RsttoImage *image, gboolean last)
-{
- gboolean retval = FALSE;
- RsttoSettings *settings = rstto_settings_new();
- gboolean cache_enabled;
- guint64 size = 0;
- guint cache_size = 0;
- RsttoImage *c_image;
- GList *iter = NULL;
-
- g_object_get (G_OBJECT (settings),
- "enable-cache", &cache_enabled,
- "cache-size", &cache_size,
- NULL);
-
- if (cache->cache_list)
- {
- cache->cache_list = g_list_remove_all (cache->cache_list, image);
- }
-
- if (last)
- {
- cache->cache_list = g_list_append (cache->cache_list, image);
- }
- else
- {
- cache->cache_list = g_list_prepend (cache->cache_list, image);
- }
-
- /**
- * Check if we are keeping a cache
- */
- if (cache_enabled == FALSE)
- {
- while (g_list_length (cache->cache_list) > 1)
- {
- c_image = g_list_last (cache->cache_list)->data;
- rstto_image_unload (c_image);
- cache->cache_list = g_list_remove (cache->cache_list, c_image);
- retval = TRUE;
- }
- }
- else
- {
- /* Calculate the cache-size, if it exceeds the defined maximum,
- * unload the the images that exceed that.
- */
- for (iter = cache->cache_list->next; iter != NULL; iter = g_list_next (iter))
- {
- c_image = iter->data;
- size = size + rstto_image_get_size (c_image);
- if (size > (guint64)(cache_size*1000000))
- {
- rstto_image_unload (c_image);
- cache->cache_list = g_list_remove (cache->cache_list, c_image);
- iter = g_list_previous(iter);
- retval = TRUE;
- }
- else
- {
- if (rstto_image_get_size (c_image) == 0)
- {
- rstto_image_unload (c_image);
- cache->cache_list = g_list_remove (cache->cache_list, c_image);
- iter = g_list_previous(iter);
- }
- }
- }
- }
- g_object_unref (settings);
- return retval;
-}
-
-/**
- * rstto_image_cache_new:
- *
- * Singleton
- *
- * Return value:
- */
-RsttoImageCache *
-rstto_image_cache_new (void)
-{
- if (rstto_global_image_cache == NULL)
- {
- rstto_global_image_cache = g_object_new (RSTTO_TYPE_IMAGE_CACHE, NULL);
- }
-
- return rstto_global_image_cache;
-}
-
-void
-rstto_image_cache_clear (RsttoImageCache *cache)
-{
- RsttoImage *c_image;
- RsttoSettings *settings_manager = rstto_settings_new();
- GValue max_size = {0,};
-
- g_value_init (&max_size, G_TYPE_UINT);
- g_object_get_property (G_OBJECT(settings_manager), "image-quality", &max_size);
-
-
- while (g_list_length (cache->cache_list) > 1)
- {
- c_image = g_list_last (cache->cache_list)->data;
- rstto_image_unload (c_image);
- cache->cache_list = g_list_remove (cache->cache_list, c_image);
- }
- if (cache->cache_list)
- {
- rstto_image_load (cache->cache_list->data, TRUE, g_value_get_uint (&max_size), FALSE, NULL);
- }
- g_object_unref (settings_manager);
-}
diff --git a/src/image_cache.h b/src/image_cache.h
deleted file mode 100644
index 4c79047..0000000
--- a/src/image_cache.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (c) Stephan Arts 2009-2010 <stephan at xfce.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 Library 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 __RISTRETTO_IMAGE_CACHE_H__
-#define __RISTRETTO_IMAGE_CACHE_H__
-
-G_BEGIN_DECLS
-
-#define RSTTO_TYPE_IMAGE_CACHE rstto_image_cache_get_type()
-
-#define RSTTO_IMAGE_CACHE(obj)( \
- G_TYPE_CHECK_INSTANCE_CAST ((obj), \
- RSTTO_TYPE_IMAGE_CACHE, \
- RsttoImageCache))
-
-#define RSTTO_IS_IMAGE_CACHE(obj)( \
- G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
- RSTTO_TYPE_IMAGE_CACHE))
-
-#define RSTTO_IMAGE_CACHE_CLASS(klass)( \
- G_TYPE_CHECK_CLASS_CAST ((klass), \
- RSTTO_TYPE_IMAGE_CACHE, \
- RsttoImageCacheClass))
-
-#define RSTTO_IS_IMAGE_CACHE_CLASS(klass)( \
- G_TYPE_CHECK_CLASS_TYPE ((klass), \
- RSTTO_TYPE_IMAGE_CACHE()))
-
-typedef struct _RsttoImageCache RsttoImageCache;
-
-typedef struct _RsttoImageCacheClass RsttoImageCacheClass;
-
-GType rstto_image_cache_get_type (void);
-RsttoImageCache *rstto_image_cache_new ();
-
-gboolean rstto_image_cache_push_image (RsttoImageCache *cache, RsttoImage *image, gboolean last);
-gboolean rstto_image_cache_pop_image (RsttoImageCache *cache, RsttoImage *image);
-
-void rstto_image_cache_clear (RsttoImageCache *cache);
-
-G_END_DECLS
-
-#endif /* __RISTRETTO_IMAGE_CACHE_H__ */
diff --git a/src/image_viewer.c b/src/image_viewer.c
index d41d465..f6b288b 100644
--- a/src/image_viewer.c
+++ b/src/image_viewer.c
@@ -54,6 +54,7 @@ struct _RsttoImageViewerPriv
GdkPixbuf *pixbuf;
GdkPixbuf *dst_pixbuf;
RsttoImageViewerOrientation orientation;
+ gdouble quality;
/* Animation data for animated images (like .gif/.mng) */
/*******************************************************/
diff --git a/src/main.c b/src/main.c
index 552f0ab..c377c8f 100644
--- a/src/main.c
+++ b/src/main.c
@@ -33,7 +33,6 @@
#include "image.h"
#include "image_list.h"
#include "settings.h"
-#include "picture_viewer.h"
#include "main_window.h"
diff --git a/src/main_window.c b/src/main_window.c
index 6481081..c8e552d 100644
--- a/src/main_window.c
+++ b/src/main_window.c
@@ -33,7 +33,6 @@
#include "settings.h"
#include "image_list.h"
-#include "image_cache.h"
#include "image_viewer.h"
#include "main_window.h"
#include "main_window_ui.h"
@@ -46,8 +45,6 @@
#include "preferences_dialog.h"
#include "app_menu_item.h"
-#define XFDESKTOP_SELECTION_FMT "XFDESKTOP_SELECTION_%d"
-
#ifndef RISTRETTO_APP_TITLE
#define RISTRETTO_APP_TITLE "Image viewer"
#endif
@@ -214,14 +211,6 @@ static void
cb_rstto_main_window_navigationtoolbar_button_press_event (GtkWidget *widget, GdkEventButton *event, gpointer user_data);
static void
-cb_rstto_main_window_print (GtkWidget *widget, RsttoMainWindow *window);
-static void
-rstto_main_window_print_draw_page (GtkPrintOperation *operation,
- GtkPrintContext *print_context,
- gint page_nr,
- RsttoMainWindow *window);
-
-static void
cb_rstto_main_window_play (GtkWidget *widget, RsttoMainWindow *window);
static void
cb_rstto_main_window_pause(GtkWidget *widget, RsttoMainWindow *window);
@@ -282,7 +271,6 @@ static GtkActionEntry action_entries[] =
{ "open", "document-open", N_ ("_Open"), "<control>O", N_ ("Open an image"), G_CALLBACK (cb_rstto_main_window_open_image), },
{ "open-folder", "folder-open", N_ ("Open _Folder"), NULL, N_ ("Open a folder"), G_CALLBACK (cb_rstto_main_window_open_folder), },
{ "save-copy", GTK_STOCK_SAVE_AS, N_ ("_Save copy"), "<control>s", N_ ("Save a copy of the image"), G_CALLBACK (cb_rstto_main_window_save_copy), },
- { "print", GTK_STOCK_PRINT, N_ ("_Print"), "<control>p", N_ ("Print the image"), G_CALLBACK (cb_rstto_main_window_print), },
{ "close", GTK_STOCK_CLOSE, N_ ("_Close"), "<control>W", N_ ("Close this image"), G_CALLBACK (cb_rstto_main_window_close), },
{ "close-all", NULL, N_ ("_Close All"), NULL, N_ ("Close all images"), G_CALLBACK (cb_rstto_main_window_close_all), },
{ "quit", GTK_STOCK_QUIT, N_ ("_Quit"), "<control>Q", N_ ("Quit Ristretto"), G_CALLBACK (cb_rstto_main_window_quit), },
@@ -398,6 +386,7 @@ rstto_main_window_init (RsttoMainWindow *window)
GtkRecentFilter *recent_filter;
guint window_width, window_height;
RsttoWallpaperManager *wallpaper_manager = NULL;
+ gchar *desktop_type = NULL;
GClosure *leave_fullscreen_closure = g_cclosure_new_swap ((GCallback)gtk_window_unfullscreen, window, NULL);
GClosure *next_image_closure = g_cclosure_new ((GCallback)cb_rstto_main_window_next_image, window, NULL);
@@ -409,20 +398,7 @@ rstto_main_window_init (RsttoMainWindow *window)
gtk_window_set_title (GTK_WINDOW (window), RISTRETTO_APP_TITLE);
window->priv = g_new0(RsttoMainWindowPriv, 1);
- wallpaper_manager = RSTTO_WALLPAPER_MANAGER (rstto_gnome_wallpaper_manager_new());
- if (rstto_wallpaper_manager_check_running (wallpaper_manager) == FALSE)
- {
- g_object_unref (wallpaper_manager);
- wallpaper_manager = NULL;
- }
-
- wallpaper_manager = RSTTO_WALLPAPER_MANAGER (rstto_xfce_wallpaper_manager_new());
- if (rstto_wallpaper_manager_check_running (wallpaper_manager) == FALSE)
- {
- g_object_unref (wallpaper_manager);
- wallpaper_manager = NULL;
- }
- window->priv->wallpaper_manager = wallpaper_manager;
+
window->priv->iter = NULL;
@@ -430,6 +406,29 @@ rstto_main_window_init (RsttoMainWindow *window)
window->priv->recent_manager = gtk_recent_manager_get_default();
window->priv->settings_manager = rstto_settings_new();
+ desktop_type = rstto_settings_get_string_property (window->priv->settings_manager, "desktop-type");
+ if (desktop_type)
+ {
+ if (!g_strcasecmp(desktop_type, "xfce"))
+ {
+ window->priv->wallpaper_manager = rstto_xfce_wallpaper_manager_new();
+ }
+
+ if (!g_strcasecmp(desktop_type, "gnome"))
+ {
+ window->priv->wallpaper_manager = rstto_gnome_wallpaper_manager_new();
+ }
+
+ if (!g_strcasecmp(desktop_type, "meego"))
+ {
+ window->priv->wallpaper_manager = rstto_meego_wallpaper_manager_new();
+ }
+
+ g_free (desktop_type);
+ desktop_type = NULL;
+ }
+
+
navigationbar_position = rstto_settings_get_navbar_position (window->priv->settings_manager);
accel_group = gtk_ui_manager_get_accel_group (window->priv->ui_manager);
@@ -1580,7 +1579,6 @@ cb_rstto_main_window_play_slideshow (RsttoMainWindow *window)
preload_iter = rstto_image_list_iter_clone (window->priv->iter);
rstto_image_list_iter_next (preload_iter);
- //rstto_image_load (rstto_image_list_iter_get_image (preload_iter), TRUE, g_value_get_uint (&max_size), TRUE, NULL);
g_value_reset(&max_size);
g_object_unref (preload_iter);
@@ -1641,7 +1639,6 @@ cb_rstto_main_window_preferences (GtkWidget *widget, RsttoMainWindow *window)
if (g_value_get_uint (&val1) != g_value_get_uint (&val2))
{
- rstto_image_cache_clear (rstto_image_cache_new());
}
gtk_widget_destroy (dialog);
@@ -2318,71 +2315,6 @@ cb_rstto_main_window_delete (GtkWidget *widget, RsttoMainWindow *window)
/* PRINTING CALLBACKS */
/**********************/
-/**
- * cb_rstto_main_window_print:
- * @widget:
- * @window:
- *
- *
- */
-static void
-cb_rstto_main_window_print (GtkWidget *widget, RsttoMainWindow *window)
-{
-
- GtkPrintSettings *print_settings = gtk_print_settings_new ();
- GtkPrintOperation *print_operation = gtk_print_operation_new ();
- GtkPageSetup *page_setup = gtk_page_setup_new ();
-
- gtk_print_settings_set_resolution (print_settings, 300);
-
- gtk_page_setup_set_orientation (page_setup, GTK_PAGE_ORIENTATION_LANDSCAPE);
-
- gtk_print_operation_set_default_page_setup (print_operation, page_setup);
- gtk_print_operation_set_print_settings (print_operation, print_settings);
-
- g_object_set (print_operation,
- "n-pages", 1,
- NULL);
-
- g_signal_connect (print_operation, "draw-page", G_CALLBACK (rstto_main_window_print_draw_page), window);
-
- gtk_print_operation_run (print_operation, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG, GTK_WINDOW(window), NULL);
-
-}
-
-static void
-rstto_main_window_print_draw_page (GtkPrintOperation *operation,
- GtkPrintContext *print_context,
- gint page_nr,
- RsttoMainWindow *window)
-{
- RsttoImage *image = rstto_image_list_iter_get_image (window->priv->iter);
- GdkPixbuf *pixbuf = rstto_image_get_pixbuf (image);
- gdouble w = gdk_pixbuf_get_width (pixbuf);
- gdouble w1 = gtk_print_context_get_width (print_context);
- gdouble h = gdk_pixbuf_get_height (pixbuf);
- gdouble h1 = gtk_print_context_get_height (print_context);
-
- cairo_t *context = gtk_print_context_get_cairo_context (print_context);
-
- cairo_translate (context, 0, 0);
- /* Scale to page-width */
- if ((w1/w) < (h1/h))
- {
- cairo_scale (context, w1/w, w1/w);
- }
- else
- {
- cairo_scale (context, h1/h, h1/h);
- }
- //cairo_rotate (context, 90 * 3.141592/180);
- gdk_cairo_set_source_pixbuf (context, pixbuf, 0, 0);
-
- //cairo_rectangle (context, 0, 0, 200, 200);
-
- cairo_paint (context);
-}
-
/*************************/
/* GUI-RELATED CALLBACKS */
/*************************/
diff --git a/src/meego_wallpaper_manager.c b/src/meego_wallpaper_manager.c
index 18f7189..3b8ef2c 100644
--- a/src/meego_wallpaper_manager.c
+++ b/src/meego_wallpaper_manager.c
@@ -31,8 +31,6 @@
#include "wallpaper_manager.h"
#include "meego_wallpaper_manager.h"
-#define XFDESKTOP_SELECTION_FMT "XFDESKTOP_SELECTION_%d"
-
typedef struct {
gint16 r;
gint16 g;
@@ -53,7 +51,7 @@ rstto_meego_wallpaper_manager_finalize (GObject *object);
static GObjectClass *parent_class = NULL;
-static RsttoMeegoWallpaperManager *meego_wallpaper_manager_object;
+static RsttoWallpaperManager *meego_wallpaper_manager_object;
struct _RsttoMeegoWallpaperManagerPriv
{
@@ -209,7 +207,7 @@ rstto_meego_wallpaper_manager_finalize (GObject *object)
*
* Singleton
*/
-RsttoMeegoWallpaperManager *
+RsttoWallpaperManager *
rstto_meego_wallpaper_manager_new (void)
{
if (meego_wallpaper_manager_object == NULL)
diff --git a/src/meego_wallpaper_manager.h b/src/meego_wallpaper_manager.h
index 112996a..c0e5790 100644
--- a/src/meego_wallpaper_manager.h
+++ b/src/meego_wallpaper_manager.h
@@ -59,7 +59,7 @@ struct _RsttoMeegoWallpaperManagerClass
GObjectClass parent_class;
};
-RsttoMeegoWallpaperManager *rstto_meego_wallpaper_manager_new (void);
+RsttoWallpaperManager *rstto_meego_wallpaper_manager_new (void);
GType rstto_meego_wallpaper_manager_get_type (void);
G_END_DECLS
diff --git a/src/picture_viewer.c b/src/picture_viewer.c
deleted file mode 100644
index b0c0942..0000000
--- a/src/picture_viewer.c
+++ /dev/null
@@ -1,1753 +0,0 @@
-/*
- * Copyright (c) Stephan Arts 2006-2010 <stephan at xfce.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 Library 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.
- *
- * Drag-n-Drop support taken from Thunar, written by Benedict Meurer
- */
-
-#include <config.h>
-#include <gtk/gtk.h>
-#include <gtk/gtkmarshal.h>
-#include <string.h>
-#include <gio/gio.h>
-#include <libexif/exif-data.h>
-
-#include "image.h"
-#include "image_list.h"
-#include "picture_viewer.h"
-#include "settings.h"
-#include "main_window.h"
-#include "marshal.h"
-
-typedef enum
-{
- RSTTO_PICTURE_VIEWER_STATE_NORMAL = 0,
- RSTTO_PICTURE_VIEWER_STATE_PREVIEW
-} RsttoPictureViewerState;
-
-typedef enum
-{
- RSTTO_PICTURE_VIEWER_MOTION_STATE_NORMAL = 0,
- RSTTO_PICTURE_VIEWER_MOTION_STATE_BOX_ZOOM,
- RSTTO_PICTURE_VIEWER_MOTION_STATE_MOVE
-} RsttoPictureViewerMotionState;
-
-typedef enum
-{
- RSTTO_ZOOM_MODE_CUSTOM,
- RSTTO_ZOOM_MODE_100,
- RSTTO_ZOOM_MODE_FIT
-} RsttoZoomMode;
-
-enum
-{
- TARGET_TEXT_URI_LIST,
-};
-
-static const GtkTargetEntry drop_targets[] = {
- {"text/uri-list", 0, TARGET_TEXT_URI_LIST},
-};
-
-
-struct _RsttoPictureViewerPriv
-{
- RsttoImage *image;
- RsttoImageListIter *iter;
- GtkMenu *menu;
- RsttoPictureViewerState state;
- RsttoZoomMode zoom_mode;
- RsttoSettings *settings;
-
-
- GdkPixbuf *dst_pixbuf; /* The pixbuf which ends up on screen */
- void (*cb_value_changed)(GtkAdjustment *, RsttoPictureViewer *);
- GdkColor *bg_color;
-
- struct
- {
- gdouble x;
- gdouble y;
- gdouble current_x;
- gdouble current_y;
- gint h_val;
- gint v_val;
- RsttoPictureViewerMotionState state;
- } motion;
-
- struct
- {
- gint idle_id;
- gboolean refresh;
- } repaint;
-};
-
-static void
-rstto_picture_viewer_init(RsttoPictureViewer *);
-static void
-rstto_picture_viewer_class_init(RsttoPictureViewerClass *);
-static void
-rstto_picture_viewer_destroy(GtkObject *object);
-
-static void
-rstto_picture_viewer_set_state (RsttoPictureViewer *viewer, RsttoPictureViewerState state);
-static RsttoPictureViewerState
-rstto_picture_viewer_get_state (RsttoPictureViewer *viewer);
-static void
-rstto_picture_viewer_set_motion_state (RsttoPictureViewer *viewer, RsttoPictureViewerMotionState state);
-static RsttoPictureViewerMotionState
-rstto_picture_viewer_get_motion_state (RsttoPictureViewer *viewer);
-
-static void
-rstto_picture_viewer_set_zoom_mode (RsttoPictureViewer *viewer, RsttoZoomMode mode);
-
-static void
-rstto_picture_viewer_size_request(GtkWidget *, GtkRequisition *);
-static void
-rstto_picture_viewer_size_allocate(GtkWidget *, GtkAllocation *);
-static void
-rstto_picture_viewer_realize(GtkWidget *);
-static gboolean
-rstto_picture_viewer_expose(GtkWidget *, GdkEventExpose *);
-static void
-rstto_picture_viewer_paint (GtkWidget *widget);
-static void
-rstto_picture_viewer_queued_repaint (RsttoPictureViewer *viewer, gboolean refresh);
-
-static gboolean
-rstto_picture_viewer_set_scroll_adjustments(RsttoPictureViewer *, GtkAdjustment *, GtkAdjustment *);
-
-static void
-cb_rstto_picture_viewer_value_changed(GtkAdjustment *, RsttoPictureViewer *);
-static void
-cb_rstto_picture_viewer_nav_iter_changed (RsttoImageListIter *iter, gpointer user_data);
-
-static void
-cb_rstto_picture_viewer_image_updated (RsttoImage *image, RsttoPictureViewer *viewer);
-static void
-cb_rstto_picture_viewer_image_prepared (RsttoImage *image, RsttoPictureViewer *viewer);
-
-static gboolean
-cb_rstto_picture_viewer_queued_repaint (RsttoPictureViewer *viewer);
-
-static void
-cb_rstto_picture_viewer_scroll_event (RsttoPictureViewer *viewer, GdkEventScroll *event);
-static void
-cb_rstto_picture_viewer_button_press_event (RsttoPictureViewer *viewer, GdkEventButton *event);
-static void
-cb_rstto_picture_viewer_button_release_event (RsttoPictureViewer *viewer, GdkEventButton *event);
-static gboolean
-cb_rstto_picture_viewer_motion_notify_event (RsttoPictureViewer *viewer,
- GdkEventMotion *event,
- gpointer user_data);
-static void
-cb_rstto_picture_viewer_popup_menu (RsttoPictureViewer *viewer, gboolean user_data);
-
-static void
-cb_rstto_picture_viewer_bgcolor_changed (GObject *settings, GParamSpec *pspec, gpointer user_data);
-
-static GtkWidgetClass *parent_class = NULL;
-
-GType
-rstto_picture_viewer_get_type (void)
-{
- static GType rstto_picture_viewer_type = 0;
-
- if (!rstto_picture_viewer_type)
- {
- static const GTypeInfo rstto_picture_viewer_info =
- {
- sizeof (RsttoPictureViewerClass),
- (GBaseInitFunc) NULL,
- (GBaseFinalizeFunc) NULL,
- (GClassInitFunc) rstto_picture_viewer_class_init,
- (GClassFinalizeFunc) NULL,
- NULL,
- sizeof (RsttoPictureViewer),
- 0,
- (GInstanceInitFunc) rstto_picture_viewer_init,
- NULL
- };
-
- rstto_picture_viewer_type = g_type_register_static (GTK_TYPE_WIDGET, "RsttoPictureViewer", &rstto_picture_viewer_info, 0);
- }
- return rstto_picture_viewer_type;
-}
-
-static void
-rstto_picture_viewer_init(RsttoPictureViewer *viewer)
-{
- viewer->priv = g_new0(RsttoPictureViewerPriv, 1);
- viewer->priv->cb_value_changed = cb_rstto_picture_viewer_value_changed;
-
- viewer->priv->dst_pixbuf = NULL;
- viewer->priv->settings = rstto_settings_new();
- viewer->priv->zoom_mode = RSTTO_ZOOM_MODE_CUSTOM;
- gtk_widget_set_redraw_on_allocate(GTK_WIDGET(viewer), TRUE);
- gtk_widget_set_events (GTK_WIDGET(viewer),
- GDK_BUTTON_PRESS_MASK |
- GDK_BUTTON_RELEASE_MASK |
- GDK_BUTTON1_MOTION_MASK |
- GDK_ENTER_NOTIFY_MASK |
- GDK_POINTER_MOTION_MASK);
-
- g_signal_connect(G_OBJECT(viewer), "scroll_event", G_CALLBACK(cb_rstto_picture_viewer_scroll_event), NULL);
- g_signal_connect(G_OBJECT(viewer), "button_press_event", G_CALLBACK(cb_rstto_picture_viewer_button_press_event), NULL);
- g_signal_connect(G_OBJECT(viewer), "button_release_event", G_CALLBACK(cb_rstto_picture_viewer_button_release_event), NULL);
- g_signal_connect(G_OBJECT(viewer), "motion_notify_event", G_CALLBACK(cb_rstto_picture_viewer_motion_notify_event), NULL);
- g_signal_connect(G_OBJECT(viewer), "popup-menu", G_CALLBACK(cb_rstto_picture_viewer_popup_menu), NULL);
-
- gtk_drag_dest_set(GTK_WIDGET(viewer), 0, drop_targets, G_N_ELEMENTS(drop_targets),
- GDK_ACTION_COPY | GDK_ACTION_LINK | GDK_ACTION_MOVE | GDK_ACTION_PRIVATE);
-}
-
-/**
- * rstto_picture_viewer_class_init:
- * @viewer_class:
- *
- * Initialize pictureviewer class
- */
-static void
-rstto_picture_viewer_class_init(RsttoPictureViewerClass *viewer_class)
-{
- GtkWidgetClass *widget_class;
- GtkObjectClass *object_class;
-
- widget_class = (GtkWidgetClass*)viewer_class;
- object_class = (GtkObjectClass*)viewer_class;
-
- parent_class = g_type_class_peek_parent(viewer_class);
-
- viewer_class->set_scroll_adjustments = rstto_picture_viewer_set_scroll_adjustments;
-
- widget_class->realize = rstto_picture_viewer_realize;
- widget_class->expose_event = rstto_picture_viewer_expose;
- widget_class->size_request = rstto_picture_viewer_size_request;
- widget_class->size_allocate = rstto_picture_viewer_size_allocate;
-
- object_class->destroy = rstto_picture_viewer_destroy;
-
- widget_class->set_scroll_adjustments_signal =
- g_signal_new ("set_scroll_adjustments",
- G_TYPE_FROM_CLASS (object_class),
- G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (RsttoPictureViewerClass, set_scroll_adjustments),
- NULL, NULL,
- rstto_marshal_VOID__OBJECT_OBJECT,
- G_TYPE_NONE, 2,
- GTK_TYPE_ADJUSTMENT,
- GTK_TYPE_ADJUSTMENT);
-}
-
-/**
- * rstto_picture_viewer_realize:
- * @widget:
- *
- */
-static void
-rstto_picture_viewer_realize(GtkWidget *widget)
-{
- GdkWindowAttr attributes;
- gint attributes_mask;
-
- g_return_if_fail (widget != NULL);
- g_return_if_fail (RSTTO_IS_PICTURE_VIEWER(widget));
-
- GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
-
- attributes.x = widget->allocation.x;
- attributes.y = widget->allocation.y;
- attributes.width = widget->allocation.width;
- attributes.height = widget->allocation.height;
- attributes.wclass = GDK_INPUT_OUTPUT;
- attributes.window_type = GDK_WINDOW_CHILD;
- attributes.event_mask = gtk_widget_get_events (widget) |
- GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK;
- attributes.visual = gtk_widget_get_visual (widget);
- attributes.colormap = gtk_widget_get_colormap (widget);
-
- attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
- widget->window = gdk_window_new (gtk_widget_get_parent_window(widget), &attributes, attributes_mask);
-
- widget->style = gtk_style_attach (widget->style, widget->window);
- gdk_window_set_user_data (widget->window, widget);
-
- gtk_style_set_background (widget->style, widget->window, GTK_STATE_ACTIVE);
-}
-
-/**
- * rstto_picture_viewer_size_request:
- * @widget:
- * @requisition:
- *
- * Request a default size of 300 by 400 pixels
- */
-static void
-rstto_picture_viewer_size_request(GtkWidget *widget, GtkRequisition *requisition)
-{
- requisition->width = 400;
- requisition->height= 300;
-}
-
-
-/**
- * rstto_picture_viewer_size_allocate:
- * @widget:
- * @allocation:
- *
- *
- */
-static void
-rstto_picture_viewer_size_allocate(GtkWidget *widget, GtkAllocation *allocation)
-{
- RsttoPictureViewer *viewer = RSTTO_PICTURE_VIEWER(widget);
- gint border_width = 0;
- widget->allocation = *allocation;
-
- if (GTK_WIDGET_REALIZED (widget))
- {
- gdk_window_move_resize (widget->window,
- allocation->x + border_width,
- allocation->y + border_width,
- allocation->width - border_width * 2,
- allocation->height - border_width * 2);
- }
-
- /**
- * TODO: Check if we really nead a refresh
- */
- rstto_picture_viewer_queued_repaint (viewer, TRUE);
-}
-
-/**
- * rstto_picture_viewer_expose:
- * @widget:
- * @event:
- *
- */
-static gboolean
-rstto_picture_viewer_expose(GtkWidget *widget, GdkEventExpose *event)
-{
- RsttoPictureViewer *viewer = RSTTO_PICTURE_VIEWER (widget);
-
- /**
- * TODO: Check if we really nead a refresh
- */
- rstto_picture_viewer_queued_repaint (viewer, TRUE);
- return FALSE;
-}
-
-/**
- * rstto_picture_viewer_paint:
- * @widget:
- *
- * Paint the picture_viewer widget contents
- */
-static void
-rstto_picture_viewer_paint (GtkWidget *widget)
-{
- RsttoPictureViewer *viewer = RSTTO_PICTURE_VIEWER(widget);
- GdkPixbuf *pixbuf = viewer->priv->dst_pixbuf;
- GdkPixbuf *n_pixbuf = NULL;
- GdkColor color;
- GdkColor line_color;
- gint i, a, height, width;
- GdkColor *bg_color = NULL;
- gdouble m_x1, m_x2, m_y1, m_y2;
- gint x1, x2, y1, y2;
- GValue val_bg_color = {0, }, val_bg_color_override = {0, }, val_bg_color_fs = {0, };
- g_value_init (&val_bg_color, GDK_TYPE_COLOR);
- g_value_init (&val_bg_color_fs, GDK_TYPE_COLOR);
- g_value_init (&val_bg_color_override, G_TYPE_BOOLEAN);
-
- g_signal_connect (G_OBJECT(viewer->priv->settings), "notify::bgcolor", G_CALLBACK (cb_rstto_picture_viewer_bgcolor_changed), viewer);
- g_signal_connect (G_OBJECT(viewer->priv->settings), "notify::bgcolor-override", G_CALLBACK (cb_rstto_picture_viewer_bgcolor_changed), viewer);
- /*
- g_signal_connect (G_OBJECT(viewer->priv->settings), "notify::bgcolor-fullscreen", G_CALLBACK (cb_rstto_picture_viewer_bgcolor_changed), viewer);
- */
-
- g_object_get_property (G_OBJECT(viewer->priv->settings), "bgcolor", &val_bg_color);
- g_object_get_property (G_OBJECT(viewer->priv->settings), "bgcolor-override", &val_bg_color_override);
-
- g_object_get_property (G_OBJECT(viewer->priv->settings), "bgcolor-fullscreen", &val_bg_color_fs);
-
-
- color.pixel = 0x0;
- line_color.pixel = 0x0;
-
- /* required for transparent pixbufs... add double buffering to fix flickering*/
- if(GTK_WIDGET_REALIZED(widget))
- {
- GdkPixmap *buffer = gdk_pixmap_new(NULL, widget->allocation.width, widget->allocation.height, gdk_drawable_get_depth(widget->window));
- GdkGC *gc = gdk_gc_new(GDK_DRAWABLE(buffer));
-
- if(gdk_window_get_state(gdk_window_get_toplevel(GTK_WIDGET(viewer)->window)) & GDK_WINDOW_STATE_FULLSCREEN)
- {
- bg_color = g_value_get_boxed (&val_bg_color_fs);
- }
- else
- {
- if (g_value_get_boxed (&val_bg_color) && g_value_get_boolean (&val_bg_color_override))
- {
- bg_color = g_value_get_boxed (&val_bg_color);
- }
- else
- {
- bg_color = &(widget->style->bg[GTK_STATE_NORMAL]);
- }
- }
- gdk_colormap_alloc_color (gdk_gc_get_colormap (gc), bg_color, FALSE, TRUE);
- gdk_gc_set_rgb_fg_color (gc, bg_color);
-
- gdk_draw_rectangle(GDK_DRAWABLE(buffer), gc, TRUE, 0, 0, widget->allocation.width, widget->allocation.height);
-
- /* Check if there is a destination pixbuf */
- if(pixbuf)
- {
- x1 = (widget->allocation.width-gdk_pixbuf_get_width(pixbuf))<0?0:(widget->allocation.width-gdk_pixbuf_get_width(pixbuf))/2;
- y1 = (widget->allocation.height-gdk_pixbuf_get_height(pixbuf))<0?0:(widget->allocation.height-gdk_pixbuf_get_height(pixbuf))/2;
- x2 = gdk_pixbuf_get_width(pixbuf);
- y2 = gdk_pixbuf_get_height(pixbuf);
-
- /* We only need to paint a checkered background if the image is transparent */
- if(gdk_pixbuf_get_has_alpha(pixbuf))
- {
- for(i = 0; i <= x2/10; i++)
- {
- if(i == x2/10)
- {
- width = x2-10*i;
- }
- else
- {
- width = 10;
- }
- for(a = 0; a <= y2/10; a++)
- {
- if(a%2?i%2:!(i%2))
- color.pixel = 0xcccccccc;
- else
- color.pixel = 0xdddddddd;
- gdk_gc_set_foreground(gc, &color);
- if(a == y2/10)
- {
- height = y2-10*a;
- }
- else
- {
- height = 10;
- }
-
- gdk_draw_rectangle(GDK_DRAWABLE(buffer),
- gc,
- TRUE,
- x1+10*i,
- y1+10*a,
- width,
- height);
- }
- }
- }
- gdk_draw_pixbuf(GDK_DRAWABLE(buffer),
- NULL,
- pixbuf,
- 0,
- 0,
- x1,
- y1,
- x2,
- y2,
- GDK_RGB_DITHER_NONE,
- 0,0);
- if(viewer->priv->motion.state == RSTTO_PICTURE_VIEWER_MOTION_STATE_BOX_ZOOM)
- {
- gdk_gc_set_foreground(gc,
- &(widget->style->fg[GTK_STATE_SELECTED]));
-
- if (viewer->priv->motion.x < viewer->priv->motion.current_x)
- {
- m_x1 = viewer->priv->motion.x;
- m_x2 = viewer->priv->motion.current_x;
- }
- else
- {
- m_x1 = viewer->priv->motion.current_x;
- m_x2 = viewer->priv->motion.x;
- }
- if (viewer->priv->motion.y < viewer->priv->motion.current_y)
- {
- m_y1 = viewer->priv->motion.y;
- m_y2 = viewer->priv->motion.current_y;
- }
- else
- {
- m_y1 = viewer->priv->motion.current_y;
- m_y2 = viewer->priv->motion.y;
- }
- if (m_y1 < y1)
- m_y1 = y1;
- if (m_x1 < x1)
- m_x1 = x1;
-
- if (m_x2 > x2 + x1)
- m_x2 = x2 + x1;
- if (m_y2 > y2 + y1)
- m_y2 = y2 + y1;
-
- if ((m_x2 - m_x1 >= 2) && (m_y2 - m_y1 >= 2))
- {
- GdkPixbuf *sub = gdk_pixbuf_new_subpixbuf(pixbuf,
- m_x1-x1,
- m_y1-y1,
- m_x2-m_x1,
- m_y2-m_y1);
- if(sub)
- {
- sub = gdk_pixbuf_composite_color_simple(sub,
- m_x2-m_x1,
- m_y2-m_y1,
- GDK_INTERP_BILINEAR,
- 200,
- 200,
- widget->style->bg[GTK_STATE_SELECTED].pixel,
- widget->style->bg[GTK_STATE_SELECTED].pixel);
-
- gdk_draw_pixbuf(GDK_DRAWABLE(buffer),
- gc,
- sub,
- 0,0,
- m_x1,
- m_y1,
- -1, -1,
- GDK_RGB_DITHER_NONE,
- 0, 0);
-
- gdk_pixbuf_unref(sub);
- sub = NULL;
- }
- }
-
- gdk_draw_rectangle(GDK_DRAWABLE(buffer),
- gc,
- FALSE,
- m_x1,
- m_y1,
- m_x2 - m_x1,
- m_y2 - m_y1);
- }
-
- }
- else
- {
-
- /* HACK HACK HACK HACK */
- guint size = 0;
- if ((GTK_WIDGET (viewer)->allocation.width) < (GTK_WIDGET (viewer)->allocation.height))
- {
- size = GTK_WIDGET (viewer)->allocation.width;
- }
- else
- {
- size = GTK_WIDGET (viewer)->allocation.height;
- }
- pixbuf = gtk_icon_theme_load_icon (gtk_icon_theme_get_default(),
- "ristretto",
- (size*0.8),
- GTK_ICON_LOOKUP_FORCE_SIZE, NULL);
- if (pixbuf)
- {
- gdk_pixbuf_saturate_and_pixelate (pixbuf, pixbuf, 0, TRUE);
- n_pixbuf = gdk_pixbuf_composite_color_simple (pixbuf, (size*0.8), (size*0.8), GDK_INTERP_BILINEAR, 40, 40, bg_color->pixel, bg_color->pixel);
- g_object_unref (pixbuf);
- pixbuf = n_pixbuf;
-
- x1 = (widget->allocation.width-gdk_pixbuf_get_width(pixbuf))<0?0:(widget->allocation.width-gdk_pixbuf_get_width(pixbuf))/2;
- y1 = (widget->allocation.height-gdk_pixbuf_get_height(pixbuf))<0?0:(widget->allocation.height-gdk_pixbuf_get_height(pixbuf))/2;
- x2 = gdk_pixbuf_get_width(pixbuf);
- y2 = gdk_pixbuf_get_height(pixbuf);
-
- gdk_draw_pixbuf(GDK_DRAWABLE(buffer),
- NULL,
- pixbuf,
- 0,
- 0,
- x1,
- y1,
- x2,
- y2,
- GDK_RGB_DITHER_NONE,
- 0,0);
- }
- }
- gdk_draw_drawable(GDK_DRAWABLE(widget->window),
- gdk_gc_new(widget->window),
- buffer,
- 0,
- 0,
- 0,
- 0,
- widget->allocation.width,
- widget->allocation.height);
- g_object_unref(buffer);
- }
-}
-
-static void
-rstto_picture_viewer_destroy(GtkObject *object)
-{
- if (RSTTO_PICTURE_VIEWER (object)->priv->settings)
- {
- g_object_unref (RSTTO_PICTURE_VIEWER (object)->priv->settings);
- RSTTO_PICTURE_VIEWER (object)->priv->settings = NULL;
- }
-}
-
-static gboolean
-rstto_picture_viewer_set_scroll_adjustments(RsttoPictureViewer *viewer, GtkAdjustment *hadjustment, GtkAdjustment *vadjustment)
-{
- if(viewer->hadjustment)
- {
- g_signal_handlers_disconnect_by_func(viewer->hadjustment, viewer->priv->cb_value_changed, viewer);
- g_object_unref(viewer->hadjustment);
- }
- if(viewer->vadjustment)
- {
- g_signal_handlers_disconnect_by_func(viewer->vadjustment, viewer->priv->cb_value_changed, viewer);
- g_object_unref(viewer->vadjustment);
- }
-
- viewer->hadjustment = hadjustment;
- viewer->vadjustment = vadjustment;
-
- if(viewer->hadjustment)
- {
- g_signal_connect(G_OBJECT(viewer->hadjustment), "value-changed", (GCallback)viewer->priv->cb_value_changed, viewer);
- g_object_ref(viewer->hadjustment);
- }
- if(viewer->vadjustment)
- {
- g_signal_connect(G_OBJECT(viewer->vadjustment), "value-changed", (GCallback)viewer->priv->cb_value_changed, viewer);
- g_object_ref(viewer->vadjustment);
- }
- return TRUE;
-}
-
-static void
-cb_rstto_picture_viewer_value_changed(GtkAdjustment *adjustment, RsttoPictureViewer *viewer)
-{
- /**
- * A new subpixbuf needs to be blown up
- */
- rstto_picture_viewer_queued_repaint (viewer, TRUE);
-}
-
-GtkWidget *
-rstto_picture_viewer_new (void)
-{
- GtkWidget *widget;
-
- widget = g_object_new(RSTTO_TYPE_PICTURE_VIEWER, NULL);
-
- return widget;
-}
-
-void
-rstto_picture_viewer_set_scale (RsttoPictureViewer *viewer, gdouble scale)
-{
- gdouble *img_scale;
- GdkPixbuf *src_pixbuf = NULL;
-
- if (viewer->priv->image)
- {
- src_pixbuf = rstto_image_get_pixbuf (viewer->priv->image);
- img_scale = g_object_get_data (G_OBJECT (viewer->priv->image), "viewer-scale");
-
- if (src_pixbuf)
- {
- gdouble image_width = (gdouble)rstto_image_get_width (viewer->priv->image);
- gdouble image_height = (gdouble)rstto_image_get_height (viewer->priv->image);
-
- viewer->hadjustment->upper = image_width *scale;
- gtk_adjustment_changed(viewer->hadjustment);
-
- viewer->vadjustment->upper = image_height * scale;
- gtk_adjustment_changed(viewer->vadjustment);
-
- viewer->hadjustment->value = (((viewer->hadjustment->value +
- (viewer->hadjustment->page_size / 2)) *
- (scale)) / (*img_scale)) - (viewer->hadjustment->page_size / 2);
- viewer->vadjustment->value = (((viewer->vadjustment->value +
- (viewer->vadjustment->page_size / 2)) *
- (scale)) / (*img_scale)) - (viewer->vadjustment->page_size / 2);
-
- if((viewer->hadjustment->value + viewer->hadjustment->page_size) > viewer->hadjustment->upper)
- {
- viewer->hadjustment->value = viewer->hadjustment->upper - viewer->hadjustment->page_size;
- }
- if(viewer->hadjustment->value < viewer->hadjustment->lower)
- {
- viewer->hadjustment->value = viewer->hadjustment->lower;
- }
- if((viewer->vadjustment->value + viewer->vadjustment->page_size) > viewer->vadjustment->upper)
- {
- viewer->vadjustment->value = viewer->vadjustment->upper - viewer->vadjustment->page_size;
- }
- if(viewer->vadjustment->value < viewer->vadjustment->lower)
- {
- viewer->vadjustment->value = viewer->vadjustment->lower;
- }
-
- gtk_adjustment_value_changed(viewer->hadjustment);
- gtk_adjustment_value_changed(viewer->vadjustment);
-
- /**
- * Set these settings at the end of the function,
- * since the old and new values are required in the above code
- */
- *img_scale = scale;
- g_object_set_data (G_OBJECT (viewer->priv->image), "viewer-scale", img_scale);
-
- rstto_image_load (viewer->priv->image, TRUE, scale, FALSE, NULL);
-
- rstto_picture_viewer_queued_repaint (viewer, TRUE);
- }
- else
- {
- /* If there is no image, set the adjustments to 0 */
- viewer->hadjustment->upper = 0;
- viewer->hadjustment->lower = 0;
- viewer->hadjustment->value = 0;
- viewer->vadjustment->upper = 0;
- viewer->vadjustment->lower = 0;
- viewer->vadjustment->value = 0;
-
- gtk_adjustment_changed(viewer->hadjustment);
- gtk_adjustment_changed(viewer->vadjustment);
-
- gtk_adjustment_value_changed(viewer->hadjustment);
- gtk_adjustment_value_changed(viewer->vadjustment);
- }
- }
-}
-
-gdouble
-rstto_picture_viewer_get_scale(RsttoPictureViewer *viewer)
-{
- gdouble *scale;
- if (viewer->priv->image)
- {
- scale = g_object_get_data (G_OBJECT (viewer->priv->image), "viewer-scale");
- return *scale;
- }
- return 0;
-}
-
-/**
- * rstto_picture_viewer_calculate_scale:
- * @viewer:
- *
- */
-static gdouble
-rstto_picture_viewer_calculate_scale (RsttoPictureViewer *viewer)
-{
- gint width = 0, height = 0;
-
- if (viewer->priv->image != NULL)
- {
- switch(rstto_image_get_orientation (viewer->priv->image))
- {
- default:
- width = rstto_image_get_width (viewer->priv->image);
- height = rstto_image_get_height (viewer->priv->image);
- break;
- case RSTTO_IMAGE_ORIENT_270:
- case RSTTO_IMAGE_ORIENT_90:
- height = rstto_image_get_width (viewer->priv->image);
- width = rstto_image_get_height (viewer->priv->image);
- break;
- }
- }
-
- if (width > 0 && height > 0)
- {
- if ((gdouble)(GTK_WIDGET (viewer)->allocation.width / (gdouble)width) <
- ((gdouble)GTK_WIDGET (viewer)->allocation.height / (gdouble)height))
- {
- return (gdouble)GTK_WIDGET (viewer)->allocation.width / (gdouble)width;
- }
- else
- {
- return (gdouble)GTK_WIDGET (viewer)->allocation.height / (gdouble)height;
- }
- }
- return -1;
-}
-
-static void
-cb_rstto_picture_viewer_scroll_event (RsttoPictureViewer *viewer, GdkEventScroll *event)
-{
- gchar *scrollwheel_action = NULL;
- gdouble *p_scale = NULL;
- gboolean *p_fit_to_screen= NULL;
-
- scrollwheel_action = rstto_settings_get_string_property (viewer->priv->settings, "scrollwheel-primary-action");
-
- if (scrollwheel_action)
- {
- /** Zoom **/
- if (!strcmp (scrollwheel_action, "zoom"))
- {
- viewer->priv->zoom_mode = RSTTO_ZOOM_MODE_CUSTOM;
- p_scale = g_object_get_data (G_OBJECT (viewer->priv->image), "viewer-scale");
- p_fit_to_screen = g_object_get_data (G_OBJECT (viewer->priv->image), "viewer-fit-to-screen");
- *p_fit_to_screen = FALSE;
- switch(event->direction)
- {
- case GDK_SCROLL_UP:
- case GDK_SCROLL_LEFT:
- if (*p_scale <= 0.05)
- return;
- if (viewer->priv->repaint.idle_id > 0)
- {
- g_source_remove(viewer->priv->repaint.idle_id);
- }
-
- *p_scale = *p_scale / 1.1;
- viewer->vadjustment->value = ((viewer->vadjustment->value + event->y) / 1.1) - event->y;
- viewer->hadjustment->value = ((viewer->hadjustment->value + event->x) / 1.1) - event->x;
-
- break;
- case GDK_SCROLL_DOWN:
- case GDK_SCROLL_RIGHT:
- if (*p_scale >= 16.0)
- return;
- if (viewer->priv->repaint.idle_id > 0)
- {
- g_source_remove(viewer->priv->repaint.idle_id);
- }
-
- *p_scale = *p_scale * 1.1;
-
- viewer->vadjustment->value = ((viewer->vadjustment->value + event->y) * 1.1) - event->y;
- viewer->hadjustment->value = ((viewer->hadjustment->value + event->x) * 1.1) - event->x;
-
- break;
- }
-
- rstto_picture_viewer_set_scale (viewer, *p_scale);
- gtk_adjustment_value_changed(viewer->hadjustment);
- gtk_adjustment_value_changed(viewer->vadjustment);
- viewer->priv->repaint.idle_id = g_idle_add((GSourceFunc)cb_rstto_picture_viewer_queued_repaint, viewer);
- }
-
- /** Navigate **/
- if (!strcmp (scrollwheel_action, "switch"))
- {
- viewer->priv->zoom_mode = RSTTO_ZOOM_MODE_CUSTOM;
- switch(event->direction)
- {
- case GDK_SCROLL_UP:
- case GDK_SCROLL_LEFT:
- rstto_image_list_iter_previous (viewer->priv->iter);
- break;
- case GDK_SCROLL_DOWN:
- case GDK_SCROLL_RIGHT:
- rstto_image_list_iter_next (viewer->priv->iter);
- break;
- }
- }
- }
-}
-
-static gboolean
-cb_rstto_picture_viewer_motion_notify_event (RsttoPictureViewer *viewer,
- GdkEventMotion *event,
- gpointer user_data)
-{
- if (event->state & GDK_BUTTON1_MASK)
- {
- viewer->priv->motion.current_x = event->x;
- viewer->priv->motion.current_y = event->y;
-
- switch (viewer->priv->motion.state)
- {
- case RSTTO_PICTURE_VIEWER_MOTION_STATE_MOVE:
- if (viewer->priv->motion.x != viewer->priv->motion.current_x)
- {
- gint val = viewer->hadjustment->value;
- viewer->hadjustment->value = viewer->priv->motion.h_val + (viewer->priv->motion.x - viewer->priv->motion.current_x);
- if((viewer->hadjustment->value + viewer->hadjustment->page_size) > viewer->hadjustment->upper)
- {
- viewer->hadjustment->value = viewer->hadjustment->upper - viewer->hadjustment->page_size;
- }
- if((viewer->hadjustment->value) < viewer->hadjustment->lower)
- {
- viewer->hadjustment->value = viewer->hadjustment->lower;
- }
- if (val != viewer->hadjustment->value)
- gtk_adjustment_value_changed(viewer->hadjustment);
- }
-
- if (viewer->priv->motion.y != viewer->priv->motion.current_y)
- {
- gint val = viewer->vadjustment->value;
- viewer->vadjustment->value = viewer->priv->motion.v_val + (viewer->priv->motion.y - viewer->priv->motion.current_y);
- if((viewer->vadjustment->value + viewer->vadjustment->page_size) > viewer->vadjustment->upper)
- {
- viewer->vadjustment->value = viewer->vadjustment->upper - viewer->vadjustment->page_size;
- }
- if((viewer->vadjustment->value) < viewer->vadjustment->lower)
- {
- viewer->vadjustment->value = viewer->vadjustment->lower;
- }
- if (val != viewer->vadjustment->value)
- gtk_adjustment_value_changed(viewer->vadjustment);
- }
- break;
- case RSTTO_PICTURE_VIEWER_MOTION_STATE_BOX_ZOOM:
- rstto_picture_viewer_queued_repaint (viewer, FALSE);
- break;
- default:
- break;
- }
- }
- return FALSE;
-}
-
-static void
-rstto_picture_viewer_calculate_adjustments (RsttoPictureViewer *viewer, gdouble scale)
-{
- GdkPixbuf *p_src_pixbuf = NULL;
- GtkWidget *widget = GTK_WIDGET (viewer);
- gdouble image_width, image_height;
- gdouble pixbuf_width, pixbuf_height;
- gdouble image_scale;
- gboolean vadjustment_changed = FALSE;
- gboolean hadjustment_changed = FALSE;
-
- if (viewer->priv->image != NULL)
- {
- p_src_pixbuf = rstto_image_get_pixbuf (viewer->priv->image);
- if (p_src_pixbuf != NULL)
- {
- image_width = (gdouble)rstto_image_get_width (viewer->priv->image);
- image_height = (gdouble)rstto_image_get_height (viewer->priv->image);
-
- pixbuf_width = (gdouble)gdk_pixbuf_get_width (p_src_pixbuf);
- pixbuf_height = (gdouble)gdk_pixbuf_get_height (p_src_pixbuf);
-
- image_scale = pixbuf_width / image_width;
-
- switch (rstto_image_get_orientation (viewer->priv->image))
- {
- default:
- if(viewer->hadjustment)
- {
- viewer->hadjustment->page_size = widget->allocation.width / image_scale;
- viewer->hadjustment->upper = image_width * (scale / image_scale);
- viewer->hadjustment->lower = 0;
- viewer->hadjustment->step_increment = 1;
- viewer->hadjustment->page_increment = 100;
- if((viewer->hadjustment->value + viewer->hadjustment->page_size) > viewer->hadjustment->upper)
- {
- viewer->hadjustment->value = viewer->hadjustment->upper - viewer->hadjustment->page_size;
- hadjustment_changed = TRUE;
- }
- if(viewer->hadjustment->value < viewer->hadjustment->lower)
- {
- viewer->hadjustment->value = viewer->hadjustment->lower;
- hadjustment_changed = TRUE;
- }
- }
- if(viewer->vadjustment)
- {
- viewer->vadjustment->page_size = widget->allocation.height / image_scale;
- viewer->vadjustment->upper = image_height * (scale / image_scale);
- viewer->vadjustment->lower = 0;
- viewer->vadjustment->step_increment = 1;
- viewer->vadjustment->page_increment = 100;
- if((viewer->vadjustment->value + viewer->vadjustment->page_size) > viewer->vadjustment->upper)
- {
- viewer->vadjustment->value = viewer->vadjustment->upper - viewer->vadjustment->page_size;
- vadjustment_changed = TRUE;
- }
- if(viewer->vadjustment->value < viewer->vadjustment->lower)
- {
- viewer->vadjustment->value = viewer->vadjustment->lower;
- vadjustment_changed = TRUE;
- }
- }
- break;
- case RSTTO_IMAGE_ORIENT_270:
- case RSTTO_IMAGE_ORIENT_90:
- if(viewer->hadjustment)
- {
- viewer->hadjustment->page_size = widget->allocation.width / image_scale;
- viewer->hadjustment->upper = image_height * (scale / image_scale);
- viewer->hadjustment->lower = 0;
- viewer->hadjustment->step_increment = 1;
- viewer->hadjustment->page_increment = 100;
- if((viewer->hadjustment->value + viewer->hadjustment->page_size) > viewer->hadjustment->upper)
- {
- viewer->hadjustment->value = viewer->hadjustment->upper - viewer->hadjustment->page_size;
- hadjustment_changed = TRUE;
- }
- if(viewer->hadjustment->value < viewer->hadjustment->lower)
- {
- viewer->hadjustment->value = viewer->hadjustment->lower;
- hadjustment_changed = TRUE;
- }
- }
- if(viewer->vadjustment)
- {
- viewer->vadjustment->page_size = widget->allocation.height / image_scale;
- viewer->vadjustment->upper = image_width * (scale / image_scale);
- viewer->vadjustment->lower = 0;
- viewer->vadjustment->step_increment = 1;
- viewer->vadjustment->page_increment = 100;
- if((viewer->vadjustment->value + viewer->vadjustment->page_size) > viewer->vadjustment->upper)
- {
- viewer->vadjustment->value = viewer->vadjustment->upper - viewer->vadjustment->page_size;
- vadjustment_changed = TRUE;
- }
- if(viewer->vadjustment->value < viewer->vadjustment->lower)
- {
- viewer->vadjustment->value = viewer->vadjustment->lower;
- vadjustment_changed = TRUE;
- }
- }
- break;
- }
-
- if (viewer->vadjustment && viewer->hadjustment)
- {
- gtk_adjustment_changed(viewer->hadjustment);
- gtk_adjustment_changed(viewer->vadjustment);
- }
- if (hadjustment_changed == TRUE)
- gtk_adjustment_value_changed(viewer->hadjustment);
- if (vadjustment_changed == TRUE)
- gtk_adjustment_value_changed(viewer->vadjustment);
- }
- }
-
-}
-
-static void
-rstto_picture_viewer_queued_repaint (RsttoPictureViewer *viewer, gboolean refresh)
-{
- if (viewer->priv->repaint.idle_id > 0)
- {
- g_source_remove(viewer->priv->repaint.idle_id);
- }
- if (refresh)
- {
- viewer->priv->repaint.refresh = TRUE;
- }
- viewer->priv->repaint.idle_id = g_idle_add((GSourceFunc)cb_rstto_picture_viewer_queued_repaint, viewer);
-}
-
-static gboolean
-cb_rstto_picture_viewer_queued_repaint (RsttoPictureViewer *viewer)
-{
- GdkPixbuf *p_src_pixbuf = NULL;
- GdkPixbuf *p_tmp_pixbuf = NULL;
- GdkPixbuf *p_tmp_pixbuf2 = NULL;
- gdouble *p_scale = NULL;
- gboolean *p_fit_to_screen= NULL;
- gdouble scale = 1;
- gdouble image_scale = 1;
- gdouble thumb_scale = 1;
- gdouble thumb_width = 0;
- gboolean fit_to_screen = FALSE;
- gboolean show_preview = rstto_settings_get_boolean_property (viewer->priv->settings, "show-preview");
- gdouble image_width = 0, image_height = 0;
- gdouble pixbuf_width, pixbuf_height;
- GtkWidget *widget = GTK_WIDGET (viewer);
-
- if (viewer->priv->image != NULL)
- {
- image_width = (gdouble)rstto_image_get_width (viewer->priv->image);
- image_height = (gdouble)rstto_image_get_height (viewer->priv->image);
-
- switch (viewer->priv->state)
- {
- case RSTTO_PICTURE_VIEWER_STATE_NORMAL:
- p_src_pixbuf = rstto_image_get_pixbuf (viewer->priv->image);
- if (p_src_pixbuf)
- {
- pixbuf_width = (gdouble)gdk_pixbuf_get_width (p_src_pixbuf);
- pixbuf_height = (gdouble)gdk_pixbuf_get_height (p_src_pixbuf);
-
- image_scale = pixbuf_width / image_width;
- }
- break;
- case RSTTO_PICTURE_VIEWER_STATE_PREVIEW:
- if (show_preview == TRUE)
- {
- p_src_pixbuf = rstto_image_get_thumbnail (viewer->priv->image);
- if (p_src_pixbuf)
- {
- thumb_width = (gdouble)gdk_pixbuf_get_width (p_src_pixbuf);
- thumb_scale = (thumb_width / image_width);
- }
- else
- return FALSE;
- }
- break;
- default:
- break;
- }
-
- p_scale = g_object_get_data (G_OBJECT (viewer->priv->image), "viewer-scale");
- p_fit_to_screen = g_object_get_data (G_OBJECT (viewer->priv->image), "viewer-fit-to-screen");
- scale = *p_scale;
- fit_to_screen = *p_fit_to_screen;
-
- if (scale <= 0.0)
- {
- scale = rstto_picture_viewer_calculate_scale (viewer);
- if (scale > 1.0)
- {
- scale = 1.0;
- fit_to_screen = FALSE;
- }
- else
- fit_to_screen = TRUE;
- }
- if (fit_to_screen == TRUE)
- {
- scale = rstto_picture_viewer_calculate_scale (viewer);
- }
- *p_fit_to_screen = fit_to_screen;
- *p_scale = scale;
- }
-
-
- rstto_picture_viewer_calculate_adjustments (viewer, scale);
-
-
- if (viewer->priv->repaint.refresh)
- {
- if(viewer->priv->dst_pixbuf)
- {
- g_object_unref(viewer->priv->dst_pixbuf);
- viewer->priv->dst_pixbuf = NULL;
- }
- if (p_src_pixbuf)
- {
- gdouble x, y;
-
- switch (rstto_image_get_orientation (viewer->priv->image))
- {
- default:
- case RSTTO_IMAGE_ORIENT_NONE:
- x = viewer->hadjustment->value * image_scale;
- y = viewer->vadjustment->value * image_scale;
- p_tmp_pixbuf = gdk_pixbuf_new_subpixbuf (p_src_pixbuf,
- (gint)(x/scale * thumb_scale * image_scale),
- (gint)(y/scale * thumb_scale * image_scale),
- (gint)((widget->allocation.width / scale) < image_width?
- (widget->allocation.width / scale)*thumb_scale*image_scale:image_width*thumb_scale*image_scale),
- (gint)((widget->allocation.height / scale) < image_height?
- (widget->allocation.height / scale)*image_scale*thumb_scale:image_height*thumb_scale*image_scale));
- break;
- case RSTTO_IMAGE_ORIENT_90:
- x = viewer->vadjustment->value * image_scale;
- y = (viewer->hadjustment->upper - (viewer->hadjustment->value + viewer->hadjustment->page_size)) * image_scale;
- if (y < 0) y = 0;
- //y = viewer->hadjustment->value * image_scale;
- p_tmp_pixbuf = gdk_pixbuf_new_subpixbuf (p_src_pixbuf,
- (gint)(x/scale * thumb_scale * image_scale),
- (gint)(y/scale * thumb_scale * image_scale),
- (gint)((widget->allocation.height/ scale) < image_width?
- (widget->allocation.height/ scale)*thumb_scale*image_scale:image_width*thumb_scale*image_scale),
- (gint)((widget->allocation.width/ scale) < image_height?
- (widget->allocation.width/ scale)*image_scale*thumb_scale:image_height*thumb_scale*image_scale));
- if (p_tmp_pixbuf)
- {
- p_tmp_pixbuf2 = gdk_pixbuf_rotate_simple (p_tmp_pixbuf, GDK_PIXBUF_ROTATE_CLOCKWISE);
- g_object_unref (p_tmp_pixbuf);
- p_tmp_pixbuf = p_tmp_pixbuf2;
- }
- break;
- case RSTTO_IMAGE_ORIENT_180:
- x = (viewer->hadjustment->upper - (viewer->hadjustment->value + viewer->hadjustment->page_size)) * image_scale;
- if (x < 0) x = 0;
- y = (viewer->vadjustment->upper - (viewer->vadjustment->value + viewer->vadjustment->page_size)) * image_scale;
- if (y < 0) y = 0;
- //y = viewer->hadjustment->value * image_scale;
- p_tmp_pixbuf = gdk_pixbuf_new_subpixbuf (p_src_pixbuf,
- (gint)(x/scale * thumb_scale * image_scale),
- (gint)(y/scale * thumb_scale * image_scale),
- (gint)((widget->allocation.width / scale) < image_width?
- (widget->allocation.width / scale)*thumb_scale*image_scale:image_width*thumb_scale*image_scale),
- (gint)((widget->allocation.height/ scale) < image_width?
- (widget->allocation.height/ scale)*image_scale*thumb_scale:image_height*thumb_scale*image_scale));
- if (p_tmp_pixbuf)
- {
- p_tmp_pixbuf2 = gdk_pixbuf_rotate_simple (p_tmp_pixbuf, GDK_PIXBUF_ROTATE_UPSIDEDOWN);
- g_object_unref (p_tmp_pixbuf);
- p_tmp_pixbuf = p_tmp_pixbuf2;
- }
- break;
- case RSTTO_IMAGE_ORIENT_270:
- x = (viewer->vadjustment->upper - (viewer->vadjustment->value + viewer->vadjustment->page_size)) * image_scale;
- if (x < 0) x = 0;
- y = viewer->hadjustment->value * image_scale;
- p_tmp_pixbuf = gdk_pixbuf_new_subpixbuf (p_src_pixbuf,
- (gint)(x/scale * thumb_scale * image_scale),
- (gint)(y/scale * thumb_scale * image_scale),
- (gint)((widget->allocation.height/ scale) < image_width?
- (widget->allocation.height/ scale)*thumb_scale*image_scale:image_width*thumb_scale*image_scale),
- (gint)((widget->allocation.width/ scale) < image_height?
- (widget->allocation.width/ scale)*image_scale*thumb_scale:image_height*thumb_scale*image_scale));
- if (p_tmp_pixbuf)
- {
- p_tmp_pixbuf2 = gdk_pixbuf_rotate_simple (p_tmp_pixbuf, GDK_PIXBUF_ROTATE_COUNTERCLOCKWISE);
- g_object_unref (p_tmp_pixbuf);
- p_tmp_pixbuf = p_tmp_pixbuf2;
- }
- break;
- }
- /**
- * tmp_scale is the factor between the original image and the thumbnail,
- * when looking at the actual image, tmp_scale == 1.0
- */
- /*
- gdouble x = viewer->hadjustment->value * image_scale;
- gdouble y = viewer->vadjustment->value * image_scale;
-
- p_tmp_pixbuf = gdk_pixbuf_new_subpixbuf (p_src_pixbuf,
- (gint)(x/scale * thumb_scale * image_scale),
- (gint)(y/scale * thumb_scale * image_scale),
- (gint)((widget->allocation.width / scale) < image_width?
- (widget->allocation.width / scale)*thumb_scale*image_scale:image_width*thumb_scale*image_scale),
- (gint)((widget->allocation.height / scale) < image_height?
- (widget->allocation.height / scale)*image_scale*thumb_scale:image_height*thumb_scale*image_scale));
- */
-
- if(p_tmp_pixbuf)
- {
- gint dst_width = gdk_pixbuf_get_width (p_tmp_pixbuf)*(scale/thumb_scale/image_scale);
- gint dst_height = gdk_pixbuf_get_height (p_tmp_pixbuf)*(scale/thumb_scale/image_scale);
- viewer->priv->dst_pixbuf = gdk_pixbuf_scale_simple (p_tmp_pixbuf,
- dst_width>0?dst_width:1,
- dst_height>0?dst_height:1,
- GDK_INTERP_BILINEAR);
- g_object_unref (p_tmp_pixbuf);
- p_tmp_pixbuf = NULL;
- }
- }
- }
-
-
- rstto_picture_viewer_paint (GTK_WIDGET (viewer));
-
- g_source_remove (viewer->priv->repaint.idle_id);
- viewer->priv->repaint.idle_id = -1;
- viewer->priv->repaint.refresh = FALSE;
- return FALSE;
-}
-
-static RsttoPictureViewerState
-rstto_picture_viewer_get_state (RsttoPictureViewer *viewer)
-{
- return viewer->priv->state;
-}
-
-
-static void
-rstto_picture_viewer_set_state (RsttoPictureViewer *viewer, RsttoPictureViewerState state)
-{
- viewer->priv->state = state;
-}
-
-static void
-rstto_picture_viewer_set_motion_state (RsttoPictureViewer *viewer, RsttoPictureViewerMotionState state)
-{
- viewer->priv->motion.state = state;
-}
-
-static RsttoPictureViewerMotionState
-rstto_picture_viewer_get_motion_state (RsttoPictureViewer *viewer)
-{
- return viewer->priv->motion.state;
-}
-
-static void
-cb_rstto_picture_viewer_button_press_event (RsttoPictureViewer *viewer, GdkEventButton *event)
-{
- if(event->button == 1)
- {
- viewer->priv->motion.x = event->x;
- viewer->priv->motion.y = event->y;
- viewer->priv->motion.current_x = event->x;
- viewer->priv->motion.current_y = event->y;
- viewer->priv->motion.h_val = viewer->hadjustment->value;
- viewer->priv->motion.v_val = viewer->vadjustment->value;
-
- if (viewer->priv->image != NULL && rstto_picture_viewer_get_state (viewer) == RSTTO_PICTURE_VIEWER_STATE_NORMAL)
- {
-
- if (!(event->state & (GDK_CONTROL_MASK)))
- {
- GtkWidget *widget = GTK_WIDGET(viewer);
- GdkCursor *cursor = gdk_cursor_new(GDK_FLEUR);
- gdk_window_set_cursor(widget->window, cursor);
- gdk_cursor_unref(cursor);
-
- rstto_picture_viewer_set_motion_state (viewer, RSTTO_PICTURE_VIEWER_MOTION_STATE_MOVE);
- }
-
- if (event->state & GDK_CONTROL_MASK)
- {
- GtkWidget *widget = GTK_WIDGET(viewer);
- GdkCursor *cursor = gdk_cursor_new(GDK_UL_ANGLE);
- gdk_window_set_cursor(widget->window, cursor);
- gdk_cursor_unref(cursor);
-
- rstto_picture_viewer_set_motion_state (viewer, RSTTO_PICTURE_VIEWER_MOTION_STATE_BOX_ZOOM);
- }
- }
-
-
- }
- if(event->button == 3)
- {
- if (viewer->priv->menu)
- {
- gtk_widget_show_all(GTK_WIDGET(viewer->priv->menu));
- gtk_menu_popup(viewer->priv->menu,
- NULL,
- NULL,
- NULL,
- NULL,
- 3,
- event->time);
- }
- }
-}
-
-static void
-cb_rstto_picture_viewer_button_release_event (RsttoPictureViewer *viewer, GdkEventButton *event)
-{
- gdouble *scale, old_scale, img_scale;
- gboolean *fit_to_screen;
- gdouble width, height, image_width, image_height;
- GtkWidget *widget = GTK_WIDGET(viewer);
- GdkPixbuf *p_src_pixbuf = NULL;
-
- switch (event->button)
- {
- case 1:
- gdk_window_set_cursor(widget->window, NULL);
- switch (rstto_picture_viewer_get_motion_state (viewer))
- {
- case RSTTO_PICTURE_VIEWER_MOTION_STATE_BOX_ZOOM:
- rstto_picture_viewer_set_zoom_mode (viewer, RSTTO_ZOOM_MODE_CUSTOM);
- if(GTK_WIDGET_REALIZED(widget))
- {
- scale = g_object_get_data (G_OBJECT (viewer->priv->image), "viewer-scale");
- old_scale = *scale;
- p_src_pixbuf = rstto_image_get_pixbuf (viewer->priv->image);
- if (p_src_pixbuf)
- {
- width = (gdouble)gdk_pixbuf_get_width (p_src_pixbuf);
- height = (gdouble)gdk_pixbuf_get_height (p_src_pixbuf);
- }
- else
- return;
- image_width = rstto_image_get_width(viewer->priv->image);
- image_height = rstto_image_get_height(viewer->priv->image);
-
- img_scale = width / image_width;
-
- gdouble d_width = (gdouble)gdk_pixbuf_get_width(viewer->priv->dst_pixbuf);
- gdouble d_height = (gdouble)gdk_pixbuf_get_height(viewer->priv->dst_pixbuf);
-
- gdouble box_width, box_height;
- gdouble top_left_x, top_left_y;
-
- if (viewer->priv->motion.x < viewer->priv->motion.current_x)
- {
- gint x_offset = (widget->allocation.width - d_width)<=0?0:((widget->allocation.width - d_width)/2);
- top_left_x = viewer->priv->motion.x - x_offset + (viewer->hadjustment->value * *scale);
- box_width = viewer->priv->motion.current_x - viewer->priv->motion.x;
- }
- else
- {
- gint x_offset = (widget->allocation.width - d_width)<=0?0:((widget->allocation.width - d_width)/2);
- top_left_x = viewer->priv->motion.current_x - x_offset + (viewer->hadjustment->value * *scale);
- box_width = viewer->priv->motion.x - viewer->priv->motion.current_x;
- }
- if (viewer->priv->motion.y < viewer->priv->motion.current_y)
- {
- gint y_offset = (widget->allocation.height - d_height)<=0?0:((widget->allocation.height - d_height)/2);
- top_left_y = viewer->priv->motion.y - y_offset + (viewer->vadjustment->value * *scale);
- box_height = viewer->priv->motion.current_y - viewer->priv->motion.y;
- }
- else
- {
- gint y_offset = (widget->allocation.height - d_height) <=0?0:((widget->allocation.height - d_height)/2);
- top_left_y = viewer->priv->motion.y - y_offset + (viewer->vadjustment->value * *scale);
- box_height = viewer->priv->motion.y - viewer->priv->motion.current_y;
- }
-
- gdouble h_scale = widget->allocation.width / box_width * *scale;
- gdouble v_scale = widget->allocation.height / box_height * *scale;
-
- /**
- * Check if the mouse has been moved (and there exists a box
- */
- if (box_height > 1 && box_width > 1)
- {
- if (h_scale < v_scale)
- {
- *scale = h_scale;
- gdouble d_box_height = box_height * v_scale / h_scale;
- top_left_y -= (d_box_height - box_height) / 2;
- box_height = d_box_height;
- }
- else
- {
- *scale = v_scale;
- gdouble d_box_width = box_width * h_scale / v_scale;
- top_left_x -= (d_box_width - box_width) / 2;
- box_width = d_box_width;
- }
-
- g_object_set_data (G_OBJECT(viewer->priv->image), "viewer-scale", scale);
- rstto_picture_viewer_set_scale(viewer, *scale);
-
- if(viewer->hadjustment)
- {
- viewer->hadjustment->page_size = (box_width / old_scale * *scale) / img_scale;
- viewer->hadjustment->upper = (image_width * *scale) / img_scale;
- viewer->hadjustment->lower = 0;
- viewer->hadjustment->step_increment = 1;
- viewer->hadjustment->page_increment = 100;
- viewer->hadjustment->value = (top_left_x / old_scale * *scale) / img_scale;
- if((viewer->hadjustment->value + viewer->hadjustment->page_size) > viewer->hadjustment->upper)
- {
- viewer->hadjustment->value = viewer->hadjustment->upper - viewer->hadjustment->page_size;
- }
- if(viewer->hadjustment->value < viewer->hadjustment->lower)
- {
- viewer->hadjustment->value = viewer->hadjustment->lower;
- }
- gtk_adjustment_changed(viewer->hadjustment);
- gtk_adjustment_value_changed(viewer->hadjustment);
- }
- if(viewer->vadjustment)
- {
- viewer->vadjustment->page_size = (box_height /old_scale* *scale) / img_scale;
- viewer->vadjustment->upper = (image_height * *scale) / img_scale;
- viewer->vadjustment->lower = 0;
- viewer->vadjustment->step_increment = 1;
- viewer->vadjustment->page_increment = 100;
- viewer->vadjustment->value = (top_left_y / old_scale * *scale) / img_scale;
- if((viewer->vadjustment->value + viewer->vadjustment->page_size) > viewer->vadjustment->upper)
- {
- viewer->vadjustment->value = viewer->vadjustment->upper - viewer->vadjustment->page_size;
- }
- if(viewer->vadjustment->value < viewer->vadjustment->lower)
- {
- viewer->vadjustment->value = viewer->vadjustment->lower;
- }
- gtk_adjustment_changed(viewer->vadjustment);
- gtk_adjustment_value_changed(viewer->vadjustment);
- }
- }
- }
- if (viewer->priv->repaint.idle_id > 0)
- {
- g_source_remove(viewer->priv->repaint.idle_id);
- }
- viewer->priv->repaint.idle_id = g_idle_add((GSourceFunc)cb_rstto_picture_viewer_queued_repaint, viewer);
- break;
- default:
- break;
- }
- rstto_picture_viewer_set_motion_state (viewer, RSTTO_PICTURE_VIEWER_MOTION_STATE_NORMAL);
- rstto_picture_viewer_queued_repaint (viewer, FALSE);
- break;
- }
-
-}
-
-static void
-cb_rstto_picture_viewer_popup_menu (RsttoPictureViewer *viewer, gboolean user_data)
-{
- if (viewer->priv->menu)
- {
- gtk_widget_show_all(GTK_WIDGET(viewer->priv->menu));
- gtk_menu_popup(viewer->priv->menu,
- NULL,
- NULL,
- NULL,
- NULL,
- 0,
- gtk_get_current_event_time());
- }
-}
-
-void
-rstto_picture_viewer_set_menu (RsttoPictureViewer *viewer, GtkMenu *menu)
-{
- if (viewer->priv->menu)
- {
- gtk_menu_detach (viewer->priv->menu);
- gtk_widget_destroy (GTK_WIDGET(viewer->priv->menu));
- }
-
- viewer->priv->menu = menu;
-
- if (viewer->priv->menu)
- {
- gtk_menu_attach_to_widget (viewer->priv->menu, GTK_WIDGET(viewer), NULL);
- }
-}
-
-static void
-rstto_picture_viewer_set_zoom_mode(RsttoPictureViewer *viewer, RsttoZoomMode mode)
-{
- gdouble scale;
- gboolean *p_fit_to_screen;
- viewer->priv->zoom_mode = mode;
-
- switch (viewer->priv->zoom_mode)
- {
- case RSTTO_ZOOM_MODE_CUSTOM:
- if (viewer->priv->image)
- {
- p_fit_to_screen = g_object_get_data (G_OBJECT (viewer->priv->image), "viewer-fit-to-screen");
- *p_fit_to_screen = FALSE;
- g_object_set_data (G_OBJECT (viewer->priv->image), "viewer-fit-to-screen", p_fit_to_screen);
- }
- break;
- case RSTTO_ZOOM_MODE_FIT:
- if (viewer->priv->image)
- {
- p_fit_to_screen = g_object_get_data (G_OBJECT (viewer->priv->image), "viewer-fit-to-screen");
- *p_fit_to_screen = TRUE;
- g_object_set_data (G_OBJECT (viewer->priv->image), "viewer-fit-to-screen", p_fit_to_screen);
- }
- scale = rstto_picture_viewer_calculate_scale (viewer);
- rstto_picture_viewer_set_scale (viewer, scale);
- break;
- case RSTTO_ZOOM_MODE_100:
- if (viewer->priv->image)
- {
- p_fit_to_screen = g_object_get_data (G_OBJECT (viewer->priv->image), "viewer-fit-to-screen");
- *p_fit_to_screen = FALSE;
- g_object_set_data (G_OBJECT (viewer->priv->image), "viewer-fit-to-screen", p_fit_to_screen);
- }
- rstto_picture_viewer_set_scale (viewer, 1);
- break;
- }
-}
-
-/**
- * rstto_picture_viewer_set_image:
- * @viewer :
- * @image :
- *
- *
- */
-static void
-rstto_picture_viewer_set_image (RsttoPictureViewer *viewer, RsttoImage *image)
-{
- gdouble *scale = NULL;
- gboolean *fit_to_screen = NULL;
-
- GValue max_size = {0,};
-
- g_value_init (&max_size, G_TYPE_UINT);
- g_object_get_property (G_OBJECT(viewer->priv->settings), "image-quality", &max_size);
-
- if (viewer->priv->image)
- {
- g_signal_handlers_disconnect_by_func (viewer->priv->image, cb_rstto_picture_viewer_image_updated, viewer);
- g_signal_handlers_disconnect_by_func (viewer->priv->image, cb_rstto_picture_viewer_image_prepared, viewer);
- g_object_remove_weak_pointer (G_OBJECT (viewer->priv->image), (gpointer *)&viewer->priv->image);
- }
-
- viewer->priv->image = image;
-
- if (viewer->priv->image)
- {
- g_object_add_weak_pointer (G_OBJECT (viewer->priv->image), (gpointer *)&viewer->priv->image);
-
- g_signal_connect (G_OBJECT (viewer->priv->image), "updated", G_CALLBACK (cb_rstto_picture_viewer_image_updated), viewer);
- g_signal_connect (G_OBJECT (viewer->priv->image), "prepared", G_CALLBACK (cb_rstto_picture_viewer_image_prepared), viewer);
-
- scale = g_object_get_data (G_OBJECT (viewer->priv->image), "viewer-scale");
- fit_to_screen = g_object_get_data (G_OBJECT (viewer->priv->image), "viewer-fit-to-screen");
-
- if (scale == NULL)
- {
- scale = g_new0 (gdouble, 1);
- *scale = -1.0;
- g_object_set_data (G_OBJECT (viewer->priv->image), "viewer-scale", scale);
- }
- if (fit_to_screen == NULL)
- {
- fit_to_screen = g_new0 (gboolean, 1);
- g_object_set_data (G_OBJECT (viewer->priv->image), "viewer-fit-to-screen", fit_to_screen);
- }
-
- rstto_image_load (viewer->priv->image, FALSE, *scale, FALSE, NULL);
-
- g_idle_add_full(G_PRIORITY_LOW, (GSourceFunc) rstto_main_window_add_file_to_recent_files, rstto_image_get_file(viewer->priv->image), NULL);
- }
- else
- {
- rstto_picture_viewer_queued_repaint (viewer, TRUE);
- viewer->hadjustment->upper = 0;
- viewer->hadjustment->lower = 0;
- viewer->hadjustment->value = 0;
- viewer->vadjustment->upper = 0;
- viewer->vadjustment->lower = 0;
- viewer->vadjustment->value = 0;
-
- gtk_adjustment_changed(viewer->hadjustment);
- gtk_adjustment_changed(viewer->vadjustment);
-
- gtk_adjustment_value_changed(viewer->hadjustment);
- gtk_adjustment_value_changed(viewer->vadjustment);
- }
-}
-
-/**
- * cb_rstto_picture_viewer_image_updated:
- * @image:
- * @viewer:
- *
- */
-static void
-cb_rstto_picture_viewer_image_updated (RsttoImage *image, RsttoPictureViewer *viewer)
-{
- rstto_picture_viewer_set_state (viewer, RSTTO_PICTURE_VIEWER_STATE_NORMAL);
-
- rstto_picture_viewer_queued_repaint (viewer, TRUE);
-}
-
-/**
- * cb_rstto_picture_viewer_image_prepared:
- * @image:
- * @viewer:
- *
- */
-static void
-cb_rstto_picture_viewer_image_prepared (RsttoImage *image, RsttoPictureViewer *viewer)
-{
- rstto_picture_viewer_set_state (viewer, RSTTO_PICTURE_VIEWER_STATE_PREVIEW);
-
- rstto_picture_viewer_queued_repaint (viewer, TRUE);
-}
-
-/**
- * rstto_picture_viewer_zoom_fit:
- * @window:
- *
- * Adjust the scale to make the image fit the window
- */
-void
-rstto_picture_viewer_zoom_fit (RsttoPictureViewer *viewer)
-{
- rstto_picture_viewer_set_zoom_mode (viewer, RSTTO_ZOOM_MODE_FIT);
-}
-
-/**
- * rstto_picture_viewer_zoom_100:
- * @viewer:
- *
- * Set the scale to 1, meaning a zoom-factor of 100%
- */
-void
-rstto_picture_viewer_zoom_100 (RsttoPictureViewer *viewer)
-{
- rstto_picture_viewer_set_zoom_mode (viewer, RSTTO_ZOOM_MODE_100);
-}
-
-/**
- * rstto_picture_viewer_zoom_in:
- * @viewer:
- * @factor:
- *
- * Zoom in the scale with a certain factor
- */
-void
-rstto_picture_viewer_zoom_in (RsttoPictureViewer *viewer, gdouble factor)
-{
- gdouble scale;
-
- rstto_picture_viewer_set_zoom_mode (viewer, RSTTO_ZOOM_MODE_CUSTOM);
- scale = rstto_picture_viewer_get_scale (viewer);
- rstto_picture_viewer_set_scale (viewer, scale * factor);
-}
-
-/**
- * rstto_picture_viewer_zoom_out:
- * @viewer:
- * @factor:
- *
- * Zoom out the scale with a certain factor
- */
-void
-rstto_picture_viewer_zoom_out (RsttoPictureViewer *viewer, gdouble factor)
-{
- gdouble scale;
-
- rstto_picture_viewer_set_zoom_mode (viewer, RSTTO_ZOOM_MODE_CUSTOM);
- scale = rstto_picture_viewer_get_scale (viewer);
- rstto_picture_viewer_set_scale (viewer, scale / factor);
-}
-
-
-/******************************************************************************************/
-
-
-void
-rstto_picture_viewer_set_iter (RsttoPictureViewer *viewer, RsttoImageListIter *iter)
-{
- if (viewer->priv->iter)
- {
- g_signal_handlers_disconnect_by_func (viewer->priv->iter, cb_rstto_picture_viewer_nav_iter_changed, viewer);
- g_object_unref (viewer->priv->iter);
- viewer->priv->iter = NULL;
- }
- if (iter)
- {
- viewer->priv->iter = iter;
- g_object_ref (viewer->priv->iter);
- g_signal_connect (G_OBJECT (viewer->priv->iter), "changed", G_CALLBACK (cb_rstto_picture_viewer_nav_iter_changed), viewer);
- }
-}
-
-static void
-cb_rstto_picture_viewer_nav_iter_changed (RsttoImageListIter *iter, gpointer user_data)
-{
- RsttoPictureViewer *viewer = RSTTO_PICTURE_VIEWER (user_data);
- rstto_picture_viewer_set_image (viewer, rstto_image_list_iter_get_image (iter));
-}
-
-static void
-cb_rstto_picture_viewer_bgcolor_changed (GObject *settings, GParamSpec *pspec, gpointer user_data)
-{
- RsttoPictureViewer *viewer = RSTTO_PICTURE_VIEWER (user_data);
- rstto_picture_viewer_queued_repaint (viewer, TRUE);
-}
diff --git a/src/picture_viewer.h b/src/picture_viewer.h
deleted file mode 100644
index dab269c..0000000
--- a/src/picture_viewer.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (c) Stephan Arts 2006-2010 <stephan at xfce.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 Library 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 __RISTRETTO_PICTURE_VIEWER_H__
-#define __RISTRETTO_PICTURE_VIEWER_H__
-
-G_BEGIN_DECLS
-
-#define RSTTO_TYPE_PICTURE_VIEWER rstto_picture_viewer_get_type()
-
-#define RSTTO_PICTURE_VIEWER(obj)( \
- G_TYPE_CHECK_INSTANCE_CAST ((obj), \
- RSTTO_TYPE_PICTURE_VIEWER, \
- RsttoPictureViewer))
-
-#define RSTTO_IS_PICTURE_VIEWER(obj)( \
- G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
- RSTTO_TYPE_PICTURE_VIEWER))
-
-#define RSTTO_PICTURE_VIEWER_CLASS(klass)( \
- G_TYPE_CHECK_CLASS_CAST ((klass), \
- RSTTO_TYPE_PICTURE_VIEWER, \
- RsttoPictureViewerClass))
-
-#define RSTTO_IS_PICTURE_VIEWER_CLASS(klass)( \
- G_TYPE_CHECK_CLASS_TYPE ((klass), \
- RSTTO_TYPE_PICTURE_VIEWER()))
-
-typedef struct _RsttoPictureViewerPriv RsttoPictureViewerPriv;
-
-typedef struct _RsttoPictureViewer RsttoPictureViewer;
-
-struct _RsttoPictureViewer
-{
- GtkWidget parent;
- RsttoPictureViewerPriv *priv;
-
- GtkAdjustment *vadjustment;
- GtkAdjustment *hadjustment;
-};
-
-typedef struct _RsttoPictureViewerClass RsttoPictureViewerClass;
-
-struct _RsttoPictureViewerClass
-{
- GtkWidgetClass parent_class;
-
- gboolean (* set_scroll_adjustments) (RsttoPictureViewer *viewer,
- GtkAdjustment *hadjustment,
- GtkAdjustment *vadjustment);
-};
-
-GType rstto_picture_viewer_get_type();
-
-GtkWidget *rstto_picture_viewer_new ();
-void rstto_picture_viewer_set_iter (RsttoPictureViewer *, RsttoImageListIter *);
-gdouble rstto_picture_viewer_get_scale(RsttoPictureViewer *viewer);
-void rstto_picture_viewer_set_scale (RsttoPictureViewer *,gdouble);
-
-void rstto_picture_viewer_zoom_fit (RsttoPictureViewer *viewer);
-void rstto_picture_viewer_zoom_100 (RsttoPictureViewer *viewer);
-void rstto_picture_viewer_zoom_in (RsttoPictureViewer *viewer, gdouble factor);
-void rstto_picture_viewer_zoom_out (RsttoPictureViewer *viewer, gdouble factor);
-
-void rstto_picture_viewer_set_menu (RsttoPictureViewer *viewer, GtkMenu *menu);
-
-/**
-gdouble rstto_picture_viewer_fit_scale(RsttoPictureViewer *viewer);
-
-void rstto_picture_viewer_set_menu (RsttoPictureViewer *viewer, GtkMenu *menu);
-void rstto_picture_viewer_set_bg_color (RsttoPictureViewer *viewer, const GdkColor *color);
-const GdkColor *
-rstto_picture_viewer_get_bg_color (RsttoPictureViewer *viewer);
-
-void rstto_picture_viewer_redraw (RsttoPictureViewer *viewer);
-*/
-
-G_END_DECLS
-
-#endif /* __RISTRETTO_PICTURE_VIEWER_H__ */
diff --git a/src/xfce_wallpaper_manager.c b/src/xfce_wallpaper_manager.c
index 767bbdb..a1efb32 100644
--- a/src/xfce_wallpaper_manager.c
+++ b/src/xfce_wallpaper_manager.c
@@ -53,7 +53,7 @@ rstto_xfce_wallpaper_manager_finalize (GObject *object);
static GObjectClass *parent_class = NULL;
-static RsttoXfceWallpaperManager *xfce_wallpaper_manager_object;
+static RsttoWallpaperManager *xfce_wallpaper_manager_object;
struct _RsttoXfceWallpaperManagerPriv
{
@@ -353,7 +353,7 @@ rstto_xfce_wallpaper_manager_finalize (GObject *object)
*
* Singleton
*/
-RsttoXfceWallpaperManager *
+RsttoWallpaperManager *
rstto_xfce_wallpaper_manager_new (void)
{
if (xfce_wallpaper_manager_object == NULL)
diff --git a/src/xfce_wallpaper_manager.h b/src/xfce_wallpaper_manager.h
index 4c47359..b90fc85 100644
--- a/src/xfce_wallpaper_manager.h
+++ b/src/xfce_wallpaper_manager.h
@@ -59,7 +59,7 @@ struct _RsttoXfceWallpaperManagerClass
GObjectClass parent_class;
};
-RsttoXfceWallpaperManager *rstto_xfce_wallpaper_manager_new (void);
+RsttoWallpaperManager *rstto_xfce_wallpaper_manager_new (void);
GType rstto_xfce_wallpaper_manager_get_type (void);
G_END_DECLS
More information about the Xfce4-commits
mailing list