[Rawstudio-commit] r2973 - branches/rawstudio-ng-color/src

Klaus Post klauspost at gmail.com
Thu Jan 7 21:09:53 CET 2010


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




More information about the Rawstudio-commit mailing list