[Rawstudio-commit] r2222 - trunk/src
Anders Brander
anders at brander.dk
Tue Feb 24 03:58:51 CET 2009
Author: abrander
Date: 2009-02-24 03:58:50 +0100 (Tue, 24 Feb 2009)
New Revision: 2222
Modified:
trunk/src/rs-save-dialog.c
Log:
Ported RSSaveDialog to RSJobQueue.
Modified: trunk/src/rs-save-dialog.c
===================================================================
--- trunk/src/rs-save-dialog.c 2009-02-24 02:58:03 UTC (rev 2221)
+++ trunk/src/rs-save-dialog.c 2009-02-24 02:58:50 UTC (rev 2222)
@@ -201,21 +201,26 @@
gtk_widget_show_all(dialog->file_pref);
}
-static void
-save_clicked(GtkButton *button, gpointer user_data)
+static gpointer
+job(RSJobQueueSlot *slot, gpointer data)
{
GdkPixbuf *pixbuf;
RS_IMAGE16 *image16;
gfloat actual_scale;
RSColorTransform *rct;
- RSSaveDialog *dialog = RS_SAVE_DIALOG(user_data);
+ RSSaveDialog *dialog = RS_SAVE_DIALOG(data);
+ gchar *description = g_strdup_printf(_("Exporting to %s"), gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog->chooser)));
+ rs_job_update_description(slot, description);
+ g_free(description);
+
actual_scale = ((gdouble) dialog->save_width / (gdouble) rs_filter_get_width(dialog->filter_crop));
g_object_set(dialog->filter_resample, "width", dialog->save_width, "height", dialog->save_height, NULL);
g_object_set(dialog->filter_sharpen, "amount", actual_scale * dialog->photo->settings[dialog->snapshot]->sharpen, NULL);
image16 = rs_filter_get_image(dialog->filter_sharpen);
+ rs_job_update_progress(slot, 0.25);
/* Initialize color transform */
rct = rs_color_transform_new();
@@ -227,18 +232,35 @@
pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8, image16->w, image16->h);
rs_color_transform_transform(rct, image16->w, image16->h, image16->pixels,
image16->rowstride, gdk_pixbuf_get_pixels(pixbuf), gdk_pixbuf_get_rowstride(pixbuf));
+ rs_job_update_progress(slot, 0.5);
g_object_set(dialog->output, "filename", gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog->chooser)), NULL);
rs_output_execute(dialog->output, pixbuf);
+ rs_job_update_progress(slot, 0.75);
g_object_unref(pixbuf);
g_object_unref(rct);
g_object_unref(image16);
+ gdk_threads_enter();
gtk_widget_destroy(GTK_WIDGET(dialog));
+ gdk_threads_leave();
+
+ return NULL;
}
static void
+save_clicked(GtkButton *button, gpointer user_data)
+{
+ RSSaveDialog *dialog = RS_SAVE_DIALOG(user_data);
+
+ /* Just hide it for now, we destroy it in job() */
+ gtk_widget_hide_all(GTK_WIDGET(dialog));
+
+ rs_job_queue_add_job(job, g_object_ref(dialog), FALSE);
+}
+
+static void
cancel_clicked(GtkButton *button, gpointer user_data)
{
RSSaveDialog *dialog = RS_SAVE_DIALOG(user_data);
More information about the Rawstudio-commit
mailing list