Author: post
Date: 2010-01-07 21:09:53 +0100 (Thu, 07 Jan 2010)
New Revision: 2973

Modified:
   branches/rawstudio-ng-color/src/application.c
   branches/rawstudio-ng-color/src/application.h
   branches/rawstudio-ng-color/src/gtk-interface.c
   branches/rawstudio-ng-color/src/rs-navigator.c
   branches/rawstudio-ng-color/src/rs-navigator.h
   branches/rawstudio-ng-color/src/rs-preview-widget.c
   branches/rawstudio-ng-color/src/rs-preview-widget.h
Log:
Add a "fast" filter for the display navigator, that doesn't include lensfun.

Modified: branches/rawstudio-ng-color/src/application.c
===================================================================
--- branches/rawstudio-ng-color/src/application.c       2010-01-05 21:09:28 UTC 
(rev 2972)
+++ branches/rawstudio-ng-color/src/application.c       2010-01-07 20:09:53 UTC 
(rev 2973)
@@ -214,12 +214,12 @@
        /* Build basic filter chain */
        rs->filter_input = rs_filter_new("RSInputImage16", NULL);
        rs->filter_demosaic = rs_filter_new("RSDemosaic", rs->filter_input);
-       cache = rs_filter_new("RSCache", rs->filter_demosaic);
+       rs->filter_demosaic_cache = rs_filter_new("RSCache", 
rs->filter_demosaic);
 
        /* We need this for 100% zoom */
-       g_object_set(cache, "ignore-roi", TRUE, NULL);
+       g_object_set(rs->filter_demosaic_cache, "ignore-roi", TRUE, NULL);
 
-       rs->filter_lensfun = rs_filter_new("RSLensfun", cache);
+       rs->filter_lensfun = rs_filter_new("RSLensfun", 
rs->filter_demosaic_cache);
        rs->filter_rotate = rs_filter_new("RSRotate", rs->filter_lensfun);
        rs->filter_crop = rs_filter_new("RSCrop", rs->filter_rotate);
        cache = rs_filter_new("RSCache", rs->filter_crop);

Modified: branches/rawstudio-ng-color/src/application.h
===================================================================
--- branches/rawstudio-ng-color/src/application.h       2010-01-05 21:09:28 UTC 
(rev 2972)
+++ branches/rawstudio-ng-color/src/application.h       2010-01-07 20:09:53 UTC 
(rev 2973)
@@ -74,6 +74,7 @@
        /* Generic filter chain */
        RSFilter *filter_input;
        RSFilter *filter_demosaic;
+       RSFilter *filter_demosaic_cache;
        RSFilter *filter_lensfun;
        RSFilter *filter_rotate;
        RSFilter *filter_crop;

Modified: branches/rawstudio-ng-color/src/gtk-interface.c
===================================================================
--- branches/rawstudio-ng-color/src/gtk-interface.c     2010-01-05 21:09:28 UTC 
(rev 2972)
+++ branches/rawstudio-ng-color/src/gtk-interface.c     2010-01-07 20:09:53 UTC 
(rev 2973)
@@ -1095,7 +1095,7 @@
 
        /* Preview area */
        rs->preview = rs_preview_widget_new(tools);
-       rs_preview_widget_set_filter(RS_PREVIEW_WIDGET(rs->preview), 
rs->filter_end);
+       rs_preview_widget_set_filter(RS_PREVIEW_WIDGET(rs->preview), 
rs->filter_end, rs->filter_demosaic_cache);
 
        gchar *profile_filename = rs_conf_get_cms_profile(CMS_PROFILE_DISPLAY);
 

Modified: branches/rawstudio-ng-color/src/rs-navigator.c
===================================================================
--- branches/rawstudio-ng-color/src/rs-navigator.c      2010-01-05 21:09:28 UTC 
(rev 2972)
+++ branches/rawstudio-ng-color/src/rs-navigator.c      2010-01-07 20:09:53 UTC 
(rev 2973)
@@ -47,7 +47,8 @@
 
        g_object_unref(navigator->vadjustment);
        g_object_unref(navigator->hadjustment);
-
+       if (navigator->display_color_space)
+               g_object_unref(navigator->display_color_space);
        G_OBJECT_CLASS (rs_navigator_parent_class)->finalize (object);
 }
 
@@ -77,7 +78,7 @@
                | GDK_BUTTON_RELEASE_MASK
                | GDK_POINTER_MOTION_MASK);
        gtk_widget_set_app_paintable(GTK_WIDGET(navigator), TRUE);
-
+       navigator->display_color_space = NULL;
 }
 
 RSNavigator *
@@ -295,6 +296,20 @@
        }
 }
 
+/**
+ * Set display colorspace
+ * @param navigator A RSNavigator
+ * @param colorspace An RSColorSpace that should be used to display the 
content of the navigator
+ */
+void
+rs_navigator_set_colorspace(RSNavigator *navigator, RSColorSpace 
*display_color_space)
+{
+       g_assert(RS_IS_NAVIGATOR(navigator));
+
+       g_object_ref(display_color_space);
+       navigator->display_color_space = display_color_space;
+}
+
 static void
 filter_changed(RSFilter *filter, RSFilterChangedMask mask, RSNavigator 
*navigator)
 {
@@ -318,7 +333,13 @@
 
        if (navigator->cache->previous)
        {
-               RSFilterResponse *response = 
rs_filter_get_image8(navigator->cache, NULL);
+               RSFilterRequest *request = rs_filter_request_new();
+               rs_filter_request_set_quick(RS_FILTER_REQUEST(request), FALSE);
+               rs_filter_param_set_object(RS_FILTER_PARAM(request), 
"colorspace", navigator->display_color_space);
+               
+               RSFilterResponse *response = 
rs_filter_get_image8(navigator->cache, request);
+               g_object_unref(request);
+               
                GdkPixbuf *pixbuf = rs_filter_response_get_image8(response);
                GdkRectangle placement, rect;
 

Modified: branches/rawstudio-ng-color/src/rs-navigator.h
===================================================================
--- branches/rawstudio-ng-color/src/rs-navigator.h      2010-01-05 21:09:28 UTC 
(rev 2972)
+++ branches/rawstudio-ng-color/src/rs-navigator.h      2010-01-07 20:09:53 UTC 
(rev 2973)
@@ -62,6 +62,7 @@
        gint y_page;
 
        RSPreviewWidget *preview;
+       RSColorSpace *display_color_space;
 
 } RSNavigator;
 
@@ -76,6 +77,12 @@
 void rs_navigator_set_adjustments(RSNavigator *navigator, GtkAdjustment 
*vadjustment, GtkAdjustment *hadjustment);
 void rs_navigator_set_source_filter(RSNavigator *navigator, RSFilter 
*source_filter);
 void rs_navigator_set_preview_widget(RSNavigator *navigator, RSPreviewWidget 
*preview);
+/**
+ * Set display colorspace
+ * @param navigator A RSNavigator
+ * @param colorspace An RSColorSpace that should be used to display the 
content of the navigator
+ */
+void rs_navigator_set_colorspace(RSNavigator *navigator, RSColorSpace 
*display_color_space);
 
 G_END_DECLS
 

Modified: branches/rawstudio-ng-color/src/rs-preview-widget.c
===================================================================
--- branches/rawstudio-ng-color/src/rs-preview-widget.c 2010-01-05 21:09:28 UTC 
(rev 2972)
+++ branches/rawstudio-ng-color/src/rs-preview-widget.c 2010-01-07 20:09:53 UTC 
(rev 2973)
@@ -178,8 +178,14 @@
        RSFilter *loupe_filter_end;
 
        RSFilter *navigator_filter_scale;
+       RSFilter *navigator_transform_input;
+       RSFilter *navigator_filter_rotate;
+       RSFilter *navigator_filter_crop;
        RSFilter *navigator_filter_cache;
-       RSFilter *navigator_filter_render;
+       RSFilter *navigator_filter_cache2;
+       RSFilter *navigator_filter_scale2;
+       RSFilter *navigator_filter_dcp;
+       RSFilter *navigator_transform_display;
        RSFilter *navigator_filter_end;
        GtkWidget *navigator;
 
@@ -380,9 +386,15 @@
 
        preview->navigator_filter_scale = rs_filter_new("RSResample", NULL);
        preview->navigator_filter_cache = rs_filter_new("RSCache", 
preview->navigator_filter_scale);
-       preview->navigator_filter_render = rs_filter_new("RSBasicRender", 
preview->navigator_filter_cache);
-       preview->navigator_filter_end = preview->navigator_filter_render;
-
+       preview->navigator_transform_input = 
rs_filter_new("RSColorspaceTransform", preview->navigator_filter_cache);
+       preview->navigator_filter_crop = rs_filter_new("RSCrop", 
preview->navigator_transform_input);
+       preview->navigator_filter_rotate = rs_filter_new("RSRotate", 
preview->navigator_filter_crop);
+       preview->navigator_filter_scale2 = rs_filter_new("RSResample", 
preview->navigator_filter_rotate);
+       preview->navigator_filter_cache2 = rs_filter_new("RSCache", 
preview->navigator_filter_scale2);
+       preview->navigator_filter_dcp = rs_filter_new("RSDcp", 
preview->navigator_filter_cache2);
+       preview->navigator_transform_display = 
rs_filter_new("RSColorspaceTransform", preview->navigator_filter_dcp);
+       preview->navigator_filter_end = preview->navigator_transform_display;
+       
        /* We'll take care of double buffering ourself */
        gtk_widget_set_double_buffered(GTK_WIDGET(preview), TRUE);
 
@@ -512,6 +524,9 @@
                        "bounding-box", TRUE,
                        "width", NAVIGATOR_WIDTH,
                        "height", NAVIGATOR_HEIGHT,
+                       "orientation", preview->photo->orientation,
+                       "rectangle", rs_photo_get_crop(preview->photo),
+                       "angle", rs_photo_get_angle(preview->photo),
                        "settings", 
preview->photo->settings[preview->snapshot[0]],
                        NULL);
 
@@ -522,6 +537,7 @@
 
                preview->navigator = rs_toolbox_add_widget(preview->toolbox, 
GTK_WIDGET(navigator), _("Display Navigation"));
                rs_navigator_set_preview_widget(navigator, preview);
+               rs_navigator_set_colorspace(navigator, 
preview->display_color_space);
                gtk_widget_show_all(GTK_WIDGET(preview->navigator));
        }
 
@@ -603,7 +619,7 @@
  * @param filter A filter to listen for
  */
 void
-rs_preview_widget_set_filter(RSPreviewWidget *preview, RSFilter *filter)
+rs_preview_widget_set_filter(RSPreviewWidget *preview, RSFilter *filter, 
RSFilter *fast_filter)
 {
        g_assert(RS_IS_PREVIEW_WIDGET(preview));
        g_assert(RS_IS_FILTER(filter));
@@ -611,7 +627,12 @@
        preview->filter_input = filter;
        rs_filter_set_previous(preview->filter_resample[0], 
preview->filter_input);
        rs_filter_set_previous(preview->filter_resample[1], 
preview->filter_input);
-       rs_filter_set_previous(preview->navigator_filter_scale, 
preview->filter_input);
+       if (fast_filter)
+       {
+               g_assert(RS_IS_FILTER(fast_filter));
+               rs_filter_set_previous(preview->navigator_filter_scale, 
fast_filter);
+       } else
+               rs_filter_set_previous(preview->navigator_filter_scale, 
preview->filter_input);
 }
 
 /**
@@ -2231,11 +2252,15 @@
 
        if (photo == preview->photo)
        {
+               /* Set view profile */
                for(view=0;view<MAX_VIEWS;view++)
                {
                        g_object_set(preview->filter_dcp[view], "profile", dcp, 
NULL);
                        rs_filter_set_recursive(preview->filter_end[view], 
"settings", preview->photo->settings[preview->snapshot[view]], NULL);
                }
+               /* Set navigator profile, uses view 0 */
+               g_object_set(preview->navigator_filter_dcp, "profile", dcp, 
NULL);
+               rs_filter_set_recursive(preview->navigator_filter_end, 
"settings", preview->photo->settings[preview->snapshot[0]], NULL);
        }
 }
 

Modified: branches/rawstudio-ng-color/src/rs-preview-widget.h
===================================================================
--- branches/rawstudio-ng-color/src/rs-preview-widget.h 2010-01-05 21:09:28 UTC 
(rev 2972)
+++ branches/rawstudio-ng-color/src/rs-preview-widget.h 2010-01-07 20:09:53 UTC 
(rev 2973)
@@ -65,8 +65,9 @@
  * Set input filter for a RSPreviewWidget
  * @param preview A RSPreviewWidget
  * @param filter A filter to listen for
+ * @param fast_filter A fast, never updating filter to listen for
  */
-extern void rs_preview_widget_set_filter(RSPreviewWidget *preview, RSFilter 
*filter);
+extern void rs_preview_widget_set_filter(RSPreviewWidget *preview, RSFilter 
*filter, RSFilter *fast_filter);
 
 /**
  * Sets the CMS profile used in preview


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

Reply via email to