2000-11-20  Martin Baulig  <baulig@suse.de>

	* eog-image-data.[ch]: Removed.

	* eog-image.[ch]: Moved everything from eog-image-data.[ch] here.
	(eog_image_get_image): Formerly known as eog_image_data_get_image().
	(eog_image_get_pixbuf): New function.
This commit is contained in:
Martin Baulig 2000-11-19 23:56:07 +00:00 committed by Martin Baulig
parent 437562be84
commit 0466ee99e9
5 changed files with 235 additions and 18 deletions

View file

@ -1,3 +1,11 @@
2000-11-20 Martin Baulig <baulig@suse.de>
* eog-image-data.[ch]: Removed.
* eog-image.[ch]: Moved everything from eog-image-data.[ch] here.
(eog_image_get_image): Formerly known as eog_image_data_get_image().
(eog_image_get_pixbuf): New function.
2000-11-19 Martin Baulig <baulig@suse.de>
* eog-util.[ch]: New files.

View file

@ -39,8 +39,6 @@ CORBA_SOURCE = \
eog_image_viewer_SOURCES = \
$(CORBA_SOURCE) \
eog-image-data.c \
eog-image-data.h \
eog-image.c \
eog-image.h \
eog-image-view.c \

View file

@ -208,16 +208,16 @@ eog_image_view_corba_object_create (BonoboObject *object)
}
static void
image_data_set_image_cb (EogImageData *image_data, EogImageView *image_view)
image_set_image_cb (EogImage *eog_image, EogImageView *image_view)
{
Image *image;
g_return_if_fail (image_data != NULL);
g_return_if_fail (EOG_IS_IMAGE_DATA (image_data));
g_return_if_fail (eog_image != NULL);
g_return_if_fail (EOG_IS_IMAGE (eog_image));
g_return_if_fail (image_view != NULL);
g_return_if_fail (EOG_IS_IMAGE_VIEW (image_view));
image = eog_image_data_get_image (image_data);
image = eog_image_get_image (eog_image);
image_view_set_image (IMAGE_VIEW (image_view->priv->image_view), image);
image_unref (image);
}
@ -529,7 +529,7 @@ eog_image_view_construct (EogImageView *image_view,
bonobo_object_ref (BONOBO_OBJECT (image_view->priv->image));
gtk_signal_connect (GTK_OBJECT (image), "set_image",
GTK_SIGNAL_FUNC (image_data_set_image_cb),
GTK_SIGNAL_FUNC (image_set_image_cb),
image_view);
image_view->priv->ui_image = ui_image_new ();

View file

@ -22,14 +22,18 @@
#include <eog-embeddable.h>
struct _EogImagePrivate {
Image *image;
GdkPixbuf *pixbuf;
BonoboItemContainer *item_container;
};
POA_GNOME_EOG_Image__vepv eog_image_vepv;
static EogImageDataClass *eog_image_parent_class;
static BonoboObjectClass *eog_image_parent_class;
enum {
SET_IMAGE_SIGNAL,
LAST_SIGNAL
};
@ -53,7 +57,6 @@ init_eog_image_corba_class (void)
{
/* Setup the vector of epvs */
eog_image_vepv.Bonobo_Unknown_epv = bonobo_object_get_epv ();
eog_image_vepv.GNOME_EOG_ImageData_epv = eog_image_data_get_epv ();
eog_image_vepv.GNOME_EOG_Image_epv = eog_image_get_epv ();
}
@ -67,6 +70,16 @@ eog_image_destroy (GtkObject *object)
image = EOG_IMAGE (object);
if (image->priv->image) {
image_unref (image->priv->image);
image->priv->image = NULL;
}
if (image->priv->pixbuf) {
gdk_pixbuf_unref (image->priv->pixbuf);
image->priv->pixbuf = NULL;
}
if (image->priv->item_container) {
bonobo_object_unref (BONOBO_OBJECT (image->priv->item_container));
image->priv->item_container = NULL;
@ -95,10 +108,21 @@ eog_image_class_init (EogImageClass *klass)
{
GtkObjectClass *object_class = (GtkObjectClass *)klass;
eog_image_parent_class = gtk_type_class (eog_image_data_get_type ());
eog_image_parent_class = gtk_type_class (bonobo_object_get_type ());
gtk_object_class_add_signals (object_class, eog_image_signals, LAST_SIGNAL);
eog_image_signals [SET_IMAGE_SIGNAL] =
gtk_signal_new ("set_image",
GTK_RUN_LAST,
object_class->type,
GTK_SIGNAL_OFFSET (EogImageClass, set_image),
gtk_marshal_NONE__NONE,
GTK_TYPE_NONE, 0);
gtk_object_class_add_signals (object_class, eog_image_signals,
LAST_SIGNAL);
object_class->destroy = eog_image_destroy;
object_class->finalize = eog_image_finalize;
@ -128,12 +152,141 @@ eog_image_get_type (void)
(GtkClassInitFunc) NULL
};
type = gtk_type_unique (eog_image_data_get_type (), &info);
type = gtk_type_unique (bonobo_object_get_type (), &info);
}
return type;
}
/*
* Loads an Image from a Bonobo_Stream
*/
static void
load_image_from_stream (BonoboPersistStream *ps, Bonobo_Stream stream,
Bonobo_Persist_ContentType type, void *data,
CORBA_Environment *ev)
{
EogImage *image;
GdkPixbufLoader *loader = gdk_pixbuf_loader_new ();
Bonobo_Stream_iobuf *buffer;
CORBA_long len;
g_return_if_fail (data != NULL);
g_return_if_fail (EOG_IS_IMAGE (data));
image = EOG_IMAGE (data);
if (image->priv->pixbuf)
gdk_pixbuf_unref (image->priv->pixbuf);
image->priv->pixbuf = NULL;
if (image->priv->image)
image_unref (image->priv->image);
image->priv->image = NULL;
do {
Bonobo_Stream_read (stream, 4096, &buffer, ev);
if (ev->_major != CORBA_NO_EXCEPTION)
goto exit_clean;
if (buffer->_buffer &&
!gdk_pixbuf_loader_write (loader,
buffer->_buffer,
buffer->_length)) {
CORBA_free (buffer);
if (ev->_major == CORBA_NO_EXCEPTION)
goto exit_clean;
else
goto exit_wrong_type;
}
len = buffer->_length;
CORBA_free (buffer);
} while (len > 0);
image->priv->pixbuf = gdk_pixbuf_loader_get_pixbuf (loader);
if (!image->priv->pixbuf)
goto exit_wrong_type;
gdk_pixbuf_ref (image->priv->pixbuf);
image->priv->image = image_new ();
image_load_pixbuf (image->priv->image, image->priv->pixbuf);
gtk_signal_emit (GTK_OBJECT (image), eog_image_signals [SET_IMAGE_SIGNAL]);
goto exit_clean;
exit_wrong_type:
CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
ex_Bonobo_Persist_WrongDataType, NULL);
exit_clean:
gdk_pixbuf_loader_close (loader);
gtk_object_unref (GTK_OBJECT (loader));
return;
}
/*
* Saves an Image to a Bonobo_Stream
*/
static void
save_image_to_stream (BonoboPersistStream *ps, Bonobo_Stream stream,
Bonobo_Persist_ContentType type, void *data,
CORBA_Environment *ev)
{
EogImage *image;
g_return_if_fail (data != NULL);
g_return_if_fail (EOG_IS_IMAGE (data));
image = EOG_IMAGE (data);
CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
ex_Bonobo_Persist_WrongDataType, NULL);
return;
}
/*
* Loads an Image from a Bonobo_File
*/
static gint
load_image_from_file (BonoboPersistFile *pf, const CORBA_char *filename,
CORBA_Environment *ev, void *closure)
{
EogImage *image;
g_return_val_if_fail (closure != NULL, -1);
g_return_val_if_fail (EOG_IS_IMAGE (closure), -1);
image = EOG_IMAGE (closure);
if (image->priv->pixbuf)
gdk_pixbuf_unref (image->priv->pixbuf);
image->priv->pixbuf = NULL;
if (image->priv->image)
image_unref (image->priv->image);
image->priv->image = NULL;
image->priv->pixbuf = gdk_pixbuf_new_from_file (filename);
if (!image->priv->pixbuf)
return -1;
gdk_pixbuf_ref (image->priv->pixbuf);
image->priv->image = image_new ();
image_load_pixbuf (image->priv->image, image->priv->pixbuf);
gtk_signal_emit (GTK_OBJECT (image), eog_image_signals [SET_IMAGE_SIGNAL]);
return 0;
}
GNOME_EOG_Image
eog_image_corba_object_create (BonoboObject *object)
{
@ -204,12 +357,40 @@ eog_image_get_object (BonoboItemContainer *item_container,
EogImage *
eog_image_construct (EogImage *image, GNOME_EOG_Image corba_object)
{
EogImageData *retval;
BonoboPersistStream *stream;
BonoboPersistFile *file;
BonoboObject *retval;
g_return_val_if_fail (image != NULL, NULL);
g_return_val_if_fail (EOG_IS_IMAGE (image), NULL);
g_return_val_if_fail (corba_object != CORBA_OBJECT_NIL, NULL);
/*
* Interface Bonobo::PersistStream
*/
stream = bonobo_persist_stream_new (load_image_from_stream,
save_image_to_stream,
NULL, NULL, image);
if (stream == NULL) {
gtk_object_unref (GTK_OBJECT (image));
return NULL;
}
bonobo_object_add_interface (BONOBO_OBJECT (image),
BONOBO_OBJECT (stream));
/*
* Interface Bonobo::PersistFile
*/
file = bonobo_persist_file_new (load_image_from_file, NULL, image);
if (file == NULL) {
gtk_object_unref (GTK_OBJECT (image));
return NULL;
}
bonobo_object_add_interface (BONOBO_OBJECT (image),
BONOBO_OBJECT (file));
/*
* BonoboItemContainer
*/
@ -226,7 +407,7 @@ eog_image_construct (EogImage *image, GNOME_EOG_Image corba_object)
/*
* Construct the BonoboObject
*/
retval = eog_image_data_construct (EOG_IMAGE_DATA (image), corba_object);
retval = bonobo_object_construct (BONOBO_OBJECT (image), corba_object);
if (retval == NULL)
return NULL;
@ -249,3 +430,23 @@ eog_image_new (void)
return eog_image_construct (image, corba_object);
}
Image *
eog_image_get_image (EogImage *image)
{
g_return_val_if_fail (image != NULL, NULL);
g_return_val_if_fail (EOG_IS_IMAGE (image), NULL);
image_ref (image->priv->image);
return image->priv->image;
}
gdk_pixbuf *
eog_image_get_pixbuf (EogImage *image)
{
g_return_val_if_fail (image != NULL, NULL);
g_return_val_if_fail (EOG_IS_IMAGE (image), NULL);
gdk_pixbuf_ref (image->priv->pixbuf);
return image->priv->pixbuf;
}

View file

@ -11,7 +11,8 @@
#ifndef _EOG_IMAGE_H_
#define _EOG_IMAGE_H_
#include <eog-image-data.h>
#include <eog-util.h>
#include <image.h>
BEGIN_GNOME_DECLS
@ -27,13 +28,15 @@ typedef struct _EogImageClass EogImageClass;
typedef struct _EogImagePrivate EogImagePrivate;
struct _EogImage {
EogImageData object;
BonoboObject object;
EogImagePrivate *priv;
};
struct _EogImageClass {
EogImageDataClass parent_class;
BonoboObjectClass parent_class;
void (*set_image) (EogImage *image);
};
POA_GNOME_EOG_Image__epv *
@ -49,8 +52,15 @@ GNOME_EOG_Image
eog_image_corba_object_create (BonoboObject *object);
EogImage
*eog_image_construct (EogImage *image,
GNOME_EOG_Image corba_object);
*eog_image_construct (EogImage *image,
GNOME_EOG_Image corba_object);
Image *
eog_image_get_image (EogImage *image);
gdk_pixbuf *
eog_image_get_pixbuf (EogImage *image);
END_GNOME_DECLS