[gthumb/ext] added missing files
- From: Paolo Bacchilega <paobac src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gthumb/ext] added missing files
- Date: Sat, 7 Nov 2009 00:51:59 +0000 (UTC)
commit 46e6ff9527d97df069460bd9f277f7474742e8fc
Author: Paolo Bacchilega <paobac src gnome org>
Date: Sat Nov 7 01:51:13 2009 +0100
added missing files
extensions/gstreamer/actions.c | 210 ++++++++++++++++++++++++++++++++++++++++
extensions/gstreamer/actions.h | 32 ++++++
2 files changed, 242 insertions(+), 0 deletions(-)
---
diff --git a/extensions/gstreamer/actions.c b/extensions/gstreamer/actions.c
new file mode 100644
index 0000000..0339fe4
--- /dev/null
+++ b/extensions/gstreamer/actions.c
@@ -0,0 +1,210 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+
+/*
+ * GThumb
+ *
+ * Copyright (C) 2009 Free Software Foundation, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
+ */
+
+
+#include <config.h>
+#include <glib/gi18n.h>
+#include <gst/gst.h>
+#include <gthumb.h>
+#include "gstreamer-utils.h"
+#include "gth-media-viewer-page.h"
+#include "preferences.h"
+
+#define MAX_ATTEMPTS 1024
+
+
+/* -- media_viewer_activate_action_screenshot -- */
+
+
+typedef struct {
+ GthBrowser *browser;
+ GthMediaViewerPage *page;
+ gboolean playing_before_screenshot;
+ GdkPixbuf *pixbuf;
+ GthFileData *file_data;
+} SaveData;
+
+
+static void
+save_date_free (SaveData *save_data)
+{
+ _g_object_unref (save_data->file_data);
+ _g_object_unref (save_data->pixbuf);
+ g_free (save_data);
+}
+
+
+static void
+screenshot_saved_cb (GthFileData *file_data,
+ GError *error,
+ gpointer user_data)
+{
+ SaveData *save_data = user_data;
+ GthMediaViewerPage *page = save_data->page;
+
+ if (error != NULL)
+ _gtk_error_dialog_from_gerror_show (GTK_WINDOW (save_data->browser), _("Could not save the file"), &error);
+ else if (save_data->playing_before_screenshot)
+ gst_element_set_state (gth_media_viewer_page_get_playbin (page), GST_STATE_PLAYING);
+
+ save_date_free (save_data);
+}
+
+
+static void
+save_as_response_cb (GtkDialog *file_sel,
+ int response,
+ SaveData *save_data)
+{
+ GFile *file;
+ GFile *folder;
+ char *folder_uri;
+ const char *mime_type;
+
+ if (response != GTK_RESPONSE_OK) {
+ GthMediaViewerPage *page = save_data->page;
+
+ if (save_data->playing_before_screenshot)
+ gst_element_set_state (gth_media_viewer_page_get_playbin (page), GST_STATE_PLAYING);
+ save_date_free (save_data);
+ gtk_widget_destroy (GTK_WIDGET (file_sel));
+ return;
+ }
+
+ if (! gth_file_chooser_dialog_get_file (GTH_FILE_CHOOSER_DIALOG (file_sel), &file, &mime_type))
+ return;
+
+ folder = g_file_get_parent (file);
+ folder_uri = g_file_get_uri (folder);
+ eel_gconf_set_string (PREF_GSTREAMER_SCREESHOT_LOCATION, folder_uri);
+
+ save_data->file_data = gth_file_data_new (file, NULL);
+ gth_file_data_set_mime_type (save_data->file_data, mime_type);
+ _gdk_pixbuf_save_async (save_data->pixbuf,
+ save_data->file_data,
+ mime_type,
+ screenshot_saved_cb,
+ save_data);
+
+ gtk_widget_destroy (GTK_WIDGET (file_sel));
+
+ g_free (folder_uri);
+ g_object_unref (folder);
+ g_object_unref (file);
+}
+
+
+static void
+screenshot_ready_cb (GdkPixbuf *pixbuf,
+ gpointer user_data)
+{
+ SaveData *save_data = user_data;
+ GtkWidget *file_sel;
+
+ if (pixbuf == NULL) {
+ _gtk_error_dialog_from_gerror_show (GTK_WINDOW (save_data->browser), _("Could not take a screenshot"), NULL);
+ save_date_free (save_data);
+ return;
+ }
+
+ save_data->pixbuf = pixbuf;
+ file_sel = gth_file_chooser_dialog_new (_("Save Image"), GTK_WINDOW (save_data->browser), "pixbuf-saver");
+
+ {
+ char *last_uri;
+ GFile *last_folder;
+ GthFileData *file_data;
+ char *prefix;
+ char *display_name;
+ int attempt;
+
+ last_uri = eel_gconf_get_string (PREF_GSTREAMER_SCREESHOT_LOCATION, "~");
+ if ((last_uri == NULL) || (strcmp (last_uri, "~") == 0))
+ last_folder = g_file_new_for_path (g_get_user_special_dir (G_USER_DIRECTORY_DESKTOP));
+ else
+ last_folder = g_file_new_for_uri (last_uri);
+ gtk_file_chooser_set_current_folder_file (GTK_FILE_CHOOSER (file_sel), last_folder, NULL);
+
+ file_data = gth_media_viewer_page_get_file_data (save_data->page);
+ prefix = _g_utf8_remove_extension (g_file_info_get_display_name (file_data->info));
+ if (prefix == NULL)
+ prefix = g_strdup (C_("Filename", "Screenshot"));
+ display_name = NULL;
+ for (attempt = 1; attempt < MAX_ATTEMPTS; attempt++) {
+ GFile *proposed_file;
+
+ g_free (display_name);
+
+ display_name = g_strdup_printf ("%s-%02d.jpeg", prefix, attempt);
+ proposed_file = g_file_get_child_for_display_name (last_folder, display_name, NULL);
+ if ((proposed_file != NULL) && ! g_file_query_exists (proposed_file, NULL)) {
+ g_object_unref (proposed_file);
+ break;
+ }
+ }
+
+ if (display_name != NULL) {
+ gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (file_sel), display_name);
+ g_free (display_name);
+ }
+
+ g_free (prefix);
+ g_object_unref (last_folder);
+ g_free (last_uri);
+ }
+
+ g_signal_connect (GTK_DIALOG (file_sel),
+ "response",
+ G_CALLBACK (save_as_response_cb),
+ save_data);
+
+ gtk_widget_show (file_sel);
+}
+
+
+void
+media_viewer_activate_action_screenshot (GtkAction *action,
+ GthMediaViewerPage *page)
+{
+ GstElement *playbin;
+ SaveData *save_data;
+ int video_fps_n;
+ int video_fps_d;
+
+ playbin = gth_media_viewer_page_get_playbin (page);
+ if (playbin == NULL)
+ return;
+
+ save_data = g_new0 (SaveData, 1);
+ save_data->browser = gth_media_viewer_page_get_browser (page);
+ save_data->page = page;
+ save_data->playing_before_screenshot = gth_media_viewer_page_is_playing (page);
+
+ if (save_data->playing_before_screenshot)
+ gst_element_set_state (playbin, GST_STATE_PAUSED);
+ gth_media_viewer_page_get_video_fps (page, &video_fps_n, &video_fps_d);
+ _gst_playbin_get_current_frame (playbin,
+ video_fps_n,
+ video_fps_d,
+ screenshot_ready_cb,
+ save_data);
+}
diff --git a/extensions/gstreamer/actions.h b/extensions/gstreamer/actions.h
new file mode 100644
index 0000000..52a7759
--- /dev/null
+++ b/extensions/gstreamer/actions.h
@@ -0,0 +1,32 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+
+/*
+ * GThumb
+ *
+ * Copyright (C) 2009 Free Software Foundation, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef ACTIONS_H
+#define ACTIONS_H
+
+#include <gtk/gtk.h>
+
+#define DEFINE_ACTION(x) void x (GtkAction *action, gpointer data);
+
+DEFINE_ACTION(media_viewer_activate_action_screenshot)
+
+#endif /* ACTIONS_H */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]