Author: post
Date: 2010-10-24 22:30:15 +0200 (Sun, 24 Oct 2010)
New Revision: 3586

Modified:
   trunk/src/gtk-interface.c
   trunk/src/rs-preview-widget.c
   trunk/src/rs-preview-widget.h
Log:
Add preferences to select display and exposure mask colorspaces.

Modified: trunk/src/gtk-interface.c
===================================================================
--- trunk/src/gtk-interface.c   2010-10-24 18:29:20 UTC (rev 3585)
+++ trunk/src/gtk-interface.c   2010-10-24 20:30:15 UTC (rev 3586)
@@ -459,6 +459,20 @@
        update_example(quick);
 }
 
+static void
+closed_preferences(GtkEntry *entry, gint response_id, gpointer user_data)
+{
+       RS_BLOB *rs = (RS_BLOB*)user_data;
+       rs_preview_widget_update(RS_PREVIEW_WIDGET(rs->preview), TRUE);
+       gtk_widget_destroy(GTK_WIDGET(entry));
+}
+
+static void
+colorspace_changed(RSColorSpaceSelector *selector, RSColorSpace *color_space, 
gpointer user_data)
+{
+       rs_conf_set_string((const gchar*)user_data, 
G_OBJECT_TYPE_NAME(color_space));
+}
+
 static GtkWidget *
 gui_make_preference_quick_export()
 {
@@ -575,8 +589,13 @@
        GtkWidget *histsize_hbox;
        GtkObject *histsize_adj;
        gint histogram_height;
+       GtkWidget *cs_hbox;
+       GtkWidget *cs_label;
+       GtkWidget* cs_widget;
        GtkWidget *local_cache_check;
        GtkWidget *system_theme_check;
+       gchar *str;
+       RSColorSpace *color_space;
 
 /*
        GtkWidget *batch_page;
@@ -599,8 +618,6 @@
        gtk_dialog_set_has_separator (GTK_DIALOG(dialog), FALSE);
        g_signal_connect_swapped(dialog, "delete_event",
                G_CALLBACK (gtk_widget_destroy), dialog);
-       g_signal_connect_swapped(dialog, "response",
-               G_CALLBACK (gtk_widget_destroy), dialog);
 
        vbox = GTK_DIALOG (dialog)->vbox;
 
@@ -639,6 +656,31 @@
 
        local_cache_check = checkbox_from_conf(CONF_CACHEDIR_IS_LOCAL, _("Place 
cache in home directory"), FALSE);
        gtk_box_pack_start (GTK_BOX (preview_page), local_cache_check, FALSE, 
TRUE, 0);
+       
+       cs_hbox = gtk_hbox_new(FALSE, 0);
+       cs_label = gtk_label_new(_("Display Colorspace:"));
+       cs_widget = rs_color_space_selector_new();
+       rs_color_space_selector_add_all(RS_COLOR_SPACE_SELECTOR(cs_widget));
+       
rs_color_space_selector_set_selected_by_name(RS_COLOR_SPACE_SELECTOR(cs_widget),
 "RSSrgb");
+       if ((str = rs_conf_get_string("display-colorspace")))
+               color_space = 
rs_color_space_selector_set_selected_by_name(RS_COLOR_SPACE_SELECTOR(cs_widget),
 str);
+       g_signal_connect(cs_widget, "colorspace-selected", 
G_CALLBACK(colorspace_changed), "display-colorspace");
+       gtk_box_pack_start (GTK_BOX (cs_hbox), cs_label, FALSE, FALSE, 0);
+       gtk_box_pack_start (GTK_BOX (cs_hbox), cs_widget, TRUE, TRUE, 0);
+       gtk_box_pack_start (GTK_BOX (preview_page), cs_hbox, FALSE, TRUE, 0);
+
+       cs_hbox = gtk_hbox_new(FALSE, 0);
+       cs_label = gtk_label_new(_("Exposure Mask Colorspace:"));
+       cs_widget = rs_color_space_selector_new();
+       rs_color_space_selector_add_all(RS_COLOR_SPACE_SELECTOR(cs_widget));
+       
rs_color_space_selector_set_selected_by_name(RS_COLOR_SPACE_SELECTOR(cs_widget),
 "RSSrgb");
+       if ((str = rs_conf_get_string("exposure-mask-colorspace")))
+               color_space = 
rs_color_space_selector_set_selected_by_name(RS_COLOR_SPACE_SELECTOR(cs_widget),
 str);
+       g_signal_connect(cs_widget, "colorspace-selected", 
G_CALLBACK(colorspace_changed), "exposure-mask-colorspace");
+       gtk_box_pack_start (GTK_BOX (cs_hbox), cs_label, FALSE, FALSE, 0);
+       gtk_box_pack_start (GTK_BOX (cs_hbox), cs_widget, TRUE, TRUE, 0);
+       gtk_box_pack_start (GTK_BOX (preview_page), cs_hbox, FALSE, TRUE, 0);
+
 /*
        batch_page = gtk_vbox_new(FALSE, 4);
        gtk_container_set_border_width (GTK_CONTAINER (batch_page), 6);
@@ -708,7 +750,7 @@
 
        button_close = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
        gtk_dialog_add_action_widget (GTK_DIALOG (dialog), button_close, 
GTK_RESPONSE_CLOSE);
-
+       g_signal_connect(dialog, "response", G_CALLBACK(closed_preferences), 
rs);
        gtk_widget_show_all(dialog);
 
        return;

Modified: trunk/src/rs-preview-widget.c
===================================================================
--- trunk/src/rs-preview-widget.c       2010-10-24 18:29:20 UTC (rev 3585)
+++ trunk/src/rs-preview-widget.c       2010-10-24 20:30:15 UTC (rev 3586)
@@ -333,8 +333,13 @@
        preview->exposure_mask = FALSE;
        preview->crop_near = CROP_NEAR_NOTHING;
        preview->keep_quick_enabled = FALSE;
-       preview->display_color_space = rs_color_space_new_singleton("RSSrgb");
+       gchar* name;
+       if ((name = rs_conf_get_string("display-colorspace")))
+               preview->display_color_space = 
rs_color_space_new_singleton(name);
+       else
+               preview->display_color_space = 
rs_color_space_new_singleton("RSSrgb");
 
+
        preview->vadjustment = GTK_ADJUSTMENT(gtk_adjustment_new(0.0, 0.0, 
100.0, 1.0, 10.0, 10.0));
        preview->hadjustment = GTK_ADJUSTMENT(gtk_adjustment_new(0.0, 0.0, 
100.0, 1.0, 10.0, 10.0));
        g_signal_connect(G_OBJECT(preview->vadjustment), "value-changed", 
G_CALLBACK(adjustment_changed), preview);
@@ -444,6 +449,32 @@
        return widget;
 }
 
+void
+rs_preview_widget_update_display_colorspace(RSPreviewWidget *preview, gboolean 
force)
+{
+       gint i;
+       gchar *name;
+       RSColorSpace *new_cs = rs_color_space_new_singleton("RSSrgb");
+       if (preview->exposure_mask && (name = 
rs_conf_get_string("exposure-mask-colorspace")))
+               new_cs = rs_color_space_new_singleton(name);
+       else if (!preview->exposure_mask && (name = 
rs_conf_get_string("display-colorspace")))
+               new_cs = rs_color_space_new_singleton(name);
+
+       if (new_cs == preview->display_color_space && !force)
+               return;
+
+       preview->display_color_space = new_cs;
+       
+       rs_toolbox_set_histogram_input(preview->toolbox, 
preview->navigator_filter_end, preview->display_color_space);
+       if (preview->navigator)
+               rs_navigator_set_colorspace(RS_NAVIGATOR(preview->navigator), 
preview->display_color_space);
+       rs_loupe_set_colorspace(preview->loupe, preview->display_color_space);
+       for(i=0;i<MAX_VIEWS;i++)
+       {
+               DIRTY(preview->dirty[i], ALL);
+               
rs_filter_param_set_object(RS_FILTER_PARAM(preview->request[i]), "colorspace", 
preview->display_color_space);
+       }
+}
 /**
  * Select zoom-to-fit of a RSPreviewWidget
  * @param preview A RSPreviewWidget
@@ -644,7 +675,7 @@
                "height", NAVIGATOR_HEIGHT,
                NULL);
 
-       rs_toolbox_set_histogram_input(preview->toolbox, 
preview->navigator_filter_end, preview->display_color_space);
+       rs_preview_widget_update_display_colorspace(preview, TRUE);
 }
 
 /**
@@ -926,9 +957,13 @@
        {
                gint view;
                preview->exposure_mask = show_exposure_mask;
+
+               rs_preview_widget_update_display_colorspace(preview, FALSE);
                for(view=0;view<preview->views;view++)
+               {
                        rs_filter_set_recursive(preview->filter_end[view], 
"exposure-mask", preview->exposure_mask, NULL);
                        DIRTY(preview->dirty[view], SCREEN);
+               }
                rs_preview_widget_update(preview, FALSE);
        }
 }
@@ -970,6 +1005,8 @@
        if (rs_filter_request_get_quick(preview->request[0]) && 
!preview->keep_quick_enabled)
                full_redraw = TRUE;
 
+       rs_preview_widget_update_display_colorspace(preview, FALSE);
+
        if (full_redraw)
        {
                rect.x = 0;

Modified: trunk/src/rs-preview-widget.h
===================================================================
--- trunk/src/rs-preview-widget.h       2010-10-24 18:29:20 UTC (rev 3585)
+++ trunk/src/rs-preview-widget.h       2010-10-24 20:30:15 UTC (rev 3586)
@@ -169,6 +169,9 @@
 extern void
 rs_preview_widget_quick_end(RSPreviewWidget *preview);
 
+extern void 
+rs_preview_widget_update_display_colorspace(RSPreviewWidget *preview, gboolean 
force);
+
 #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))


_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit

Reply via email to