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

Reply via email to