From 179fa413b047bede6e32109e2ce82437c5fb8d34 Mon Sep 17 00:00:00 2001 From: MenTaLguY Date: Mon, 16 Jan 2006 02:36:01 +0000 Subject: moving trunk for module inkscape (bzr r1) --- src/slideshow.cpp | 105 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 src/slideshow.cpp (limited to 'src/slideshow.cpp') diff --git a/src/slideshow.cpp b/src/slideshow.cpp new file mode 100644 index 000000000..d2bb39790 --- /dev/null +++ b/src/slideshow.cpp @@ -0,0 +1,105 @@ +#define __SLIDESHOW_C__ + +/* + * Help/About window + * + * Authors: + * Lauris Kaplinski + * + * Copyright (C) 1999-2003 authors + * Copyright (C) 2000-2002 Ximian, Inc. + * + * Released under GNU GPL, read the file 'COPYING' for more information + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include + +#include +#include "document.h" +#include "svg-view-widget.h" +#include "svg-view.h" + +static gint +sp_slideshow_event (SPViewWidget *vw, GdkEvent *event, GtkWidget *window) +{ + GSList *slides; + const gchar *fname, *nname; + int idx; + + slides = (GSList*)g_object_get_data (G_OBJECT (window), "slides"); + fname = (const gchar*)g_object_get_data (G_OBJECT (window), "current"); + idx = g_slist_index (slides, fname); + + switch (event->type) { + case GDK_KEY_PRESS: + switch (event->key.keyval) { + case GDK_BackSpace: + case GDK_Delete: + case GDK_Left: + idx -= 1; + break; + case GDK_Escape: + gtk_widget_destroy (window); + return TRUE; + break; + default: + idx += 1; + break; + } + break; + case GDK_BUTTON_PRESS: + idx += 1; + break; + default: + break; + } + + nname = (const gchar*)g_slist_nth_data (slides, idx); + g_print ("Old %s new %s\n", fname, nname); + + if (nname && (nname != fname)) { + SPDocument *doc; + g_print ("Trying to load\n"); + doc = sp_document_new (nname, TRUE); + if (doc) { + reinterpret_cast(SP_VIEW_WIDGET_VIEW (vw))->setDocument (doc); + sp_document_unref (doc); + } + g_object_set_data (G_OBJECT (window), "current", (gpointer) nname); + } + + return TRUE; +} + +GtkWidget * +sp_slideshow_new (const GSList *files) +{ + SPDocument *doc; + GtkWidget *w, *v; + + doc = sp_document_new ((const gchar*)files->data, TRUE); + g_return_val_if_fail (doc != NULL, NULL); + + w = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_window_set_title (GTK_WINDOW (w), _("Inkscape slideshow")); + gtk_window_set_default_size (GTK_WINDOW (w), 480, 360); + gtk_window_set_policy (GTK_WINDOW (w), TRUE, TRUE, FALSE); + + v = sp_svg_view_widget_new (doc); + sp_svg_view_widget_set_resize (SP_SVG_VIEW_WIDGET (v), FALSE, sp_document_width (doc), sp_document_height (doc)); + sp_document_unref (doc); + gtk_widget_show (v); + gtk_container_add (GTK_CONTAINER (w), v); + + g_object_set_data (G_OBJECT (w), "slides", (gpointer) files); + g_object_set_data (G_OBJECT (w), "current", files->data); + + g_signal_connect (G_OBJECT (v), "event", G_CALLBACK (sp_slideshow_event), w); + + return w; +} -- cgit v1.2.3