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