Author: post
Date: 2013-03-26 13:12:30 +0100 (Tue, 26 Mar 2013)
New Revision: 4336
Modified:
trunk/src/gtk-interface.c
trunk/src/rs-preview-widget.c
trunk/src/rs-preview-widget.h
trunk/src/rs-tethered-shooting.c
Log:
Add photo blanking to Tethered Shooting, and make it possible to disable adding
photo to the icon-box for faster transfers.
Modified: trunk/src/gtk-interface.c
===================================================================
--- trunk/src/gtk-interface.c 2013-03-26 12:08:39 UTC (rev 4335)
+++ trunk/src/gtk-interface.c 2013-03-26 12:12:30 UTC (rev 4336)
@@ -496,6 +496,7 @@
return;
}
+ rs_preview_widget_lock_renderer(RS_PREVIEW_WIDGET(rs->preview));
gdk_screen_get_monitor_geometry(open_screen, monitor_num, &rect);
rs->window_preview_screen = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_screen(GTK_WINDOW(rs->window_preview_screen),
open_screen);
@@ -518,6 +519,10 @@
gtk_widget_show_all(GTK_WIDGET(frame_preview_toolbox));
gtk_widget_show_all(rs->window_preview_screen);
rs_conf_set_boolean("fullscreen-preview", TRUE);
+ GTK_CATCHUP();
+ rs_preview_widget_unlock_renderer(RS_PREVIEW_WIDGET(rs->preview));
+ rs_preview_widget_update(RS_PREVIEW_WIDGET(rs->preview), TRUE);
+ GUI_CATCHUP_DISPLAY(open_display);
}
void
Modified: trunk/src/rs-preview-widget.c
===================================================================
--- trunk/src/rs-preview-widget.c 2013-03-26 12:08:39 UTC (rev 4335)
+++ trunk/src/rs-preview-widget.c 2013-03-26 12:12:30 UTC (rev 4336)
@@ -185,6 +185,7 @@
RSFilterRequest *request[MAX_VIEWS];
GdkRectangle *last_roi[MAX_VIEWS];
RS_PHOTO *photo;
+ RS_PHOTO *photo_blank_stored;
void *transform;
gint snapshot[MAX_VIEWS];
gint dirty[MAX_VIEWS]; /* Dirty flag, used for multiple things */
@@ -223,6 +224,7 @@
RSColorSpace *display_color_space;
RSColorSpace *exposure_color_space;
+ GdkDisplay *display;
guint status_num;
ThreadInfo *render_thread;
};
@@ -323,7 +325,7 @@
preview->render_thread->thread_id = g_thread_create(render_thread_func,
preview->render_thread, TRUE, NULL);
gint i;
GtkTable *table = GTK_TABLE(preview);
- GdkDisplay *display = gtk_widget_get_display(GTK_WIDGET(preview));
+ preview->display = gtk_widget_get_display(GTK_WIDGET(preview));
/* Initialize cursors */
if (!cur_fleur) cur_fleur = gdk_cursor_new(GDK_FLEUR);
@@ -337,9 +339,9 @@
if (!cur_s) cur_s = gdk_cursor_new(GDK_BOTTOM_SIDE);
if (!cur_w) cur_w = gdk_cursor_new(GDK_LEFT_SIDE);
if (!cur_busy) cur_busy = gdk_cursor_new(GDK_WATCH);
- if (!cur_crop) cur_crop = rs_cursor_new (display, RS_CURSOR_CROP);
- if (!cur_rotate) cur_rotate = rs_cursor_new (display, RS_CURSOR_ROTATE);
- if (!cur_color_picker) cur_color_picker = rs_cursor_new (display,
RS_CURSOR_COLOR_PICKER);
+ if (!cur_crop) cur_crop = rs_cursor_new (preview->display,
RS_CURSOR_CROP);
+ if (!cur_rotate) cur_rotate = rs_cursor_new (preview->display,
RS_CURSOR_ROTATE);
+ if (!cur_color_picker) cur_color_picker = rs_cursor_new
(preview->display, RS_CURSOR_COLOR_PICKER);
gtk_table_set_homogeneous(table, FALSE);
gtk_table_resize (table, 2, 2);
@@ -548,6 +550,7 @@
gchar *name;
gdk_threads_enter();
+ preview->display = gtk_widget_get_display(GTK_WIDGET(preview));
RSColorSpace *new_cs = rs_get_display_profile(GTK_WIDGET(preview));
RSColorSpace *exp_cs = rs_color_space_new_singleton("RSSrgb");
@@ -680,7 +683,7 @@
rs_core_action_group_activate("Split");
gdk_window_set_cursor(GTK_WIDGET(rawstudio_window)->window,
cur_busy);
- GUI_CATCHUP();
+ GUI_CATCHUP_DISPLAY(preview->display);
/* Disable resample filter */
rs_filter_set_enabled(preview->filter_resample[0], FALSE);
@@ -715,7 +718,7 @@
GtkToggleAction *fit_action =
GTK_TOGGLE_ACTION(rs_core_action_group_get_action("ZommToFit"));
gtk_toggle_action_set_active(fit_action, zoom_to_fit);
rs_filter_set_recursive(RS_FILTER(preview->filter_input),
"demosaic-allow-downscale", preview->zoom_to_fit, NULL);
- GUI_CATCHUP();
+ GUI_CATCHUP_DISPLAY(preview->display);
rs_preview_widget_quick_end(preview);
}
@@ -1430,9 +1433,50 @@
}
rs_preview_widget_update(preview, TRUE);
- GUI_CATCHUP();
+ GUI_CATCHUP_DISPLAY(preview->display);
}
+void
+rs_preview_widget_blank(RSPreviewWidget *preview)
+{
+ preview->photo_blank_stored = preview->photo;
+ preview->photo = NULL;
+ GtkWidget *widget = GTK_WIDGET(preview->canvas);
+ GdkWindow *window = widget->window;
+ GdkRectangle rect;
+ g_return_if_fail (RS_IS_PREVIEW_WIDGET(preview));
+
+ if (GTK_WIDGET_REALIZED(GTK_WIDGET(preview->canvas)))
+ {
+ rect.x = 0;
+ rect.y = 0;
+ rect.width = GTK_WIDGET(preview->canvas)->allocation.width;
+ rect.height = GTK_WIDGET(preview->canvas)->allocation.height;
+ }
+
+ gdk_window_begin_paint_rect(window, &rect);
+
+ GdkDrawable *drawable = GDK_DRAWABLE(window);
+ GdkGC *gc = gdk_gc_new(drawable);
+ gdk_gc_set_background(gc, &preview->bgcolor);
+ gdk_gc_set_foreground(gc, &preview->bgcolor);
+ gdk_draw_rectangle(drawable,gc, TRUE, 0,0,rect.width,rect.height);
+ g_object_unref(gc);
+ gdk_window_end_paint(window);
+ GUI_CATCHUP_DISPLAY(preview->display);
+}
+
+void
+rs_preview_widget_unblank(RSPreviewWidget *preview)
+{
+ preview->photo = preview->photo_blank_stored;
+ preview->photo_blank_stored = NULL;
+
+ rs_preview_widget_update(preview, TRUE);
+
+ GUI_CATCHUP_DISPLAY(preview->display);
+}
+
static void
get_max_size(RSPreviewWidget *preview, gint *width, gint *height)
{
@@ -1711,7 +1755,7 @@
if (preview->state == SCROLL)
preview->state = WB_PICKER;
- GUI_CATCHUP();
+ GUI_CATCHUP_DISPLAY(preview->display);
rs_preview_widget_quick_end(preview);
return FALSE;
@@ -2612,7 +2656,7 @@
}
/* Render the photo itself */
- if (gdk_rectangle_intersect(dirty_area, &placement, &area))
+ if (preview->photo && gdk_rectangle_intersect(dirty_area,
&placement, &area))
{
GdkRectangle roi = area;
roi.x -= placement.x;
@@ -3061,7 +3105,7 @@
/* Do the render */
gdk_threads_enter();
rs_preview_do_render(t->preview, &dirty_area_accum);
- GUI_CATCHUP();
+ GUI_CATCHUP_DISPLAY(t->preview->display);
gdk_threads_leave();
}
return NULL;
Modified: trunk/src/rs-preview-widget.h
===================================================================
--- trunk/src/rs-preview-widget.h 2013-03-26 12:08:39 UTC (rev 4335)
+++ trunk/src/rs-preview-widget.h 2013-03-26 12:12:30 UTC (rev 4336)
@@ -184,6 +184,12 @@
extern void
rs_preview_widget_unlock_renderer(RSPreviewWidget *preview);
+extern void
+rs_preview_widget_blank(RSPreviewWidget *preview);
+
+extern void
+rs_preview_widget_unblank(RSPreviewWidget *preview);
+
#define RS_PREVIEW_TYPE_WIDGET (rs_preview_widget_get_type ())
#define RS_PREVIEW_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj),
RS_PREVIEW_TYPE_WIDGET, RSPreviewWidget))
#define RS_PREVIEW_WIDGET_CLASS(obj) (G_TYPE_CHECK_CLASS_CAST ((obj),
RS_PREVIEW_WIDGET, RSPreviewWidgetClass))
Modified: trunk/src/rs-tethered-shooting.c
===================================================================
--- trunk/src/rs-tethered-shooting.c 2013-03-26 12:08:39 UTC (rev 4335)
+++ trunk/src/rs-tethered-shooting.c 2013-03-26 12:12:30 UTC (rev 4336)
@@ -25,6 +25,7 @@
#include <config.h>
#include <gettext.h>
#include "rs-tethered-shooting.h"
+#include "rs-preview-widget.h"
#include <gphoto2/gphoto2-camera.h>
#include <stdlib.h>
#include <fcntl.h>
@@ -471,13 +472,19 @@
}
g_object_unref(src);
g_object_unref(dst);
- gdk_threads_lock();
- rs_store_set_iconview_size(t->rs->store,
rs_store_get_iconview_size(t->rs->store)+1);
- rs_store_load_file(t->rs->store, filename);
+ gboolean add_image = TRUE;
+ rs_conf_get_boolean_with_default("tether-add-image", &add_image, TRUE);
+ if (add_image)
+ {
+ gdk_threads_lock();
+ rs_store_set_iconview_size(t->rs->store,
rs_store_get_iconview_size(t->rs->store)+1);
+ rs_store_load_file(t->rs->store, filename);
+ gdk_threads_unlock();
+ }
+
/* Make sure we rotate this right */
- gdk_threads_unlock();
metadata = rs_metadata_new_from_file(filename);
g_object_unref(metadata);
gdk_threads_lock();
@@ -612,9 +619,17 @@
{
int retval;
CameraFilePath camera_file_path;
+ gboolean blank = FALSE;
+ rs_conf_get_boolean_with_default("tether-blank-screen", &blank, FALSE);
append_status(t, _("Capturing.\n"));
+ if (blank)
+ rs_preview_widget_blank(RS_PREVIEW_WIDGET(t->rs->preview));
+ gdk_threads_leave();
retval = gp_camera_capture(t->camera, GP_CAPTURE_IMAGE,
&camera_file_path, t->context);
+ gdk_threads_enter();
+ if (blank)
+ rs_preview_widget_unblank(RS_PREVIEW_WIDGET(t->rs->preview));
CHECKRETVAL(retval);
retval = transfer_file_captured(t, &camera_file_path);
return retval;
@@ -941,6 +956,7 @@
append_status(t, _("Shutting down interval capture thread.\n"));
shutdown_async_thread(t);
}
+ rs_preview_widget_quick_end(RS_PREVIEW_WIDGET(t->rs->preview));
}
static void
@@ -967,6 +983,8 @@
if (t->keep_thread_running)
shutdown_async_thread(t);
+ rs_preview_widget_quick_start(RS_PREVIEW_WIDGET(t->rs->preview), TRUE);
+
t->thread_type = ASYNC_THREAD_TYPE_INTERVAL;
t->keep_thread_running = TRUE;
append_status(t, _("Staring Interval Shooting Thread.\n"));
@@ -1161,11 +1179,22 @@
check_button = checkbox_from_conf("tether-open-image", _("Open new
images after capture"), TRUE);
gtk_button_set_alignment (GTK_BUTTON(check_button), 0.0, 0.5);
gtk_box_pack_start(h_box, check_button, FALSE, FALSE, 5);
+
check_button = checkbox_from_conf("tether-quick-export", _("Quick
Export"), FALSE);
gtk_button_set_alignment (GTK_BUTTON(check_button), 0.0, 0.5);
gtk_box_pack_start(h_box, check_button, FALSE, FALSE, 5);
gtk_box_pack_start(box, GTK_WIDGET(h_box), FALSE, FALSE, 0);
+
+ h_box = GTK_BOX(gtk_hbox_new (FALSE, 0));
+ check_button = checkbox_from_conf("tether-add-image", _("Add Image to
Icon Bar"), TRUE);
+ gtk_button_set_alignment (GTK_BUTTON(check_button), 0.0, 0.5);
+ gtk_box_pack_start(h_box, check_button, FALSE, FALSE, 5);
+ check_button = checkbox_from_conf("tether-blank-screen", _("Blank
Screen"), FALSE);
+ gtk_button_set_alignment (GTK_BUTTON(check_button), 0.0, 0.5);
+ gtk_box_pack_start(h_box, check_button, FALSE, FALSE, 5);
+ gtk_box_pack_start(box, GTK_WIDGET(h_box), FALSE, FALSE, 0);
+
/* Add preferences box */
gtk_box_pack_start(GTK_BOX(main_box), gui_box(_("Preferences"),
GTK_WIDGET(box), "tether_preferences", TRUE), FALSE, FALSE, 0);
_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit