Author: abrander
Date: 2009-10-14 00:43:18 +0200 (Wed, 14 Oct 2009)
New Revision: 2710
Modified:
trunk/plugins/denoise/denoise.c
trunk/src/application.c
trunk/src/rs-batch.c
trunk/src/rs-preview-widget.c
trunk/src/rs-save-dialog.c
Log:
Made RSDenoise properly aware of RSSettings.
Modified: trunk/plugins/denoise/denoise.c
===================================================================
--- trunk/plugins/denoise/denoise.c 2009-10-13 16:00:09 UTC (rev 2709)
+++ trunk/plugins/denoise/denoise.c 2009-10-13 22:43:18 UTC (rev 2710)
@@ -35,6 +35,9 @@
struct _RSDenoise {
RSFilter parent;
+ RSSettings *settings;
+ gulong settings_signal_id;
+
FFTDenoiseInfo info;
gint sharpen;
gint denoise_luma;
@@ -58,6 +61,7 @@
static void get_property (GObject *object, guint property_id, GValue *value,
GParamSpec *pspec);
static void set_property (GObject *object, guint property_id, const GValue
*value, GParamSpec *pspec);
+static void settings_weak_notify(gpointer data, GObject *where_the_object_was);
static RSFilterResponse *get_image(RSFilter *filter, const RSFilterRequest
*request);
static void settings_changed(RSSettings *settings, RSSettingsMask mask,
RSDenoise *denoise);
@@ -81,31 +85,6 @@
object_class->set_property = set_property;
g_object_class_install_property(object_class,
- PROP_SHARPEN, g_param_spec_int (
- "sharpen",
- _("Sharpen Amount"),
- _("How much image will be sharpened"),
- 0, 100, 0,
- G_PARAM_READWRITE)
- );
- g_object_class_install_property(object_class,
- PROP_DENOISE_LUMA, g_param_spec_int (
- "denoise_luma",
- _("Denoise"),
- "FIXME",
- 0, 100, 0,
- G_PARAM_READWRITE)
- );
- g_object_class_install_property(object_class,
- PROP_DENOISE_CHROMA, g_param_spec_int (
- "denoise_chroma",
- _("Color denoise"),
- "FIXME",
- 0, 100, 0,
- G_PARAM_READWRITE)
- );
-
- g_object_class_install_property(object_class,
PROP_SETTINGS, g_param_spec_object(
"settings", "Settings", "Settings to render from",
RS_TYPE_SETTINGS, G_PARAM_READWRITE)
@@ -143,6 +122,28 @@
}
}
+ if (mask & (MASK_SHARPEN|MASK_DENOISE_LUMA|MASK_DENOISE_CHROMA))
+ {
+ const gfloat sharpen;
+ const gfloat denoise_luma;
+ const gfloat denoise_chroma;
+
+ g_object_get(settings,
+ "sharpen", &sharpen,
+ "denoise_luma", &denoise_luma,
+ "denoise_chroma", &denoise_chroma,
+ NULL);
+ if (ABS(((gint) sharpen) - denoise->sharpen) > 0
+ || ABS(((gint) denoise_luma) - denoise->denoise_luma) > 0
+ || ABS(((gint) denoise_chroma) -
denoise->denoise_chroma) > 0)
+ {
+ changed = TRUE;
+ denoise->sharpen = (gint) sharpen;
+ denoise->denoise_luma = (gint) denoise_luma;
+ denoise->denoise_chroma = (gint) denoise_chroma;
+ }
+ }
+
if (changed)
rs_filter_changed(RS_FILTER(denoise),
RS_FILTER_CHANGED_PIXELDATA);
}
@@ -186,42 +187,30 @@
set_property(GObject *object, guint property_id, const GValue *value,
GParamSpec *pspec)
{
RSDenoise *denoise = RS_DENOISE(object);
- RSFilter *filter = RS_FILTER(denoise);
- RSSettings *settings;
switch (property_id)
{
- case PROP_SHARPEN:
- if ((denoise->sharpen-g_value_get_int(value)) != 0)
- {
- denoise->sharpen = g_value_get_int(value);
- rs_filter_changed(filter,
RS_FILTER_CHANGED_PIXELDATA);
- }
- break;
- case PROP_DENOISE_LUMA:
- if ((denoise->denoise_luma-g_value_get_int(value)) != 0)
- {
- denoise->denoise_luma = g_value_get_int(value);
- rs_filter_changed(filter,
RS_FILTER_CHANGED_PIXELDATA);
- }
- break;
- case PROP_DENOISE_CHROMA:
- if ((denoise->denoise_chroma-g_value_get_int(value)) !=
0)
- {
- denoise->denoise_chroma =
g_value_get_int(value);
- rs_filter_changed(filter,
RS_FILTER_CHANGED_PIXELDATA);
- }
- break;
case PROP_SETTINGS:
- settings = g_value_get_object(value);
- g_signal_connect(settings, "settings-changed",
G_CALLBACK(settings_changed), denoise);
- settings_changed(settings, MASK_ALL, denoise);
+ if (denoise->settings && denoise->settings_signal_id)
+ g_signal_handler_disconnect(denoise->settings,
denoise->settings_signal_id);
+ denoise->settings = g_value_get_object(value);
+ denoise->settings_signal_id =
g_signal_connect(denoise->settings, "settings-changed",
G_CALLBACK(settings_changed), denoise);
+ settings_changed(denoise->settings, MASK_ALL, denoise);
+ g_object_weak_ref(G_OBJECT(denoise->settings),
settings_weak_notify, denoise);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id,
pspec);
}
}
+static void
+settings_weak_notify(gpointer data, GObject *where_the_object_was)
+{
+ RSDenoise *denoise = RS_DENOISE(data);
+
+ denoise->settings = NULL;
+}
+
static RSFilterResponse *
get_image(RSFilter *filter, const RSFilterRequest *request)
{
Modified: trunk/src/application.c
===================================================================
--- trunk/src/application.c 2009-10-13 16:00:09 UTC (rev 2709)
+++ trunk/src/application.c 2009-10-13 22:43:18 UTC (rev 2710)
@@ -140,9 +140,6 @@
g_object_set(frotate, "angle", photo->angle, "orientation",
photo->orientation, NULL);
g_object_set(fcrop, "rectangle", photo->crop, NULL);
actual_scale = ((gdouble) width / (gdouble)
rs_filter_get_width(finput));
- g_object_set(fdenoise, "sharpen", (gint) (actual_scale *
photo->settings[snapshot]->sharpen), NULL);
- g_object_set(fdenoise, "denoise_luma", (gint)
photo->settings[snapshot]->denoise_luma, NULL);
- g_object_set(fdenoise, "denoise_chroma", (gint)
photo->settings[snapshot]->denoise_chroma, NULL);
if (0 < width && 0 < height) /* We only wan't to set width and height
if they are not -1 */
g_object_set(fresample, "width", width, "height", height, NULL);
g_object_set(fbasic_render, "settings", photo->settings[snapshot],
NULL);
Modified: trunk/src/rs-batch.c
===================================================================
--- trunk/src/rs-batch.c 2009-10-13 16:00:09 UTC (rev 2709)
+++ trunk/src/rs-batch.c 2009-10-13 22:43:18 UTC (rev 2710)
@@ -564,9 +564,6 @@
break;
}
g_object_set(fresample, "width", width, "height",
height, NULL);
- g_object_set(fdenoise, "sharpen", (gint)
photo->settings[setting_id]->sharpen, NULL);
- g_object_set(fdenoise, "denoise_luma", (gint)
photo->settings[setting_id]->denoise_luma, NULL);
- g_object_set(fdenoise, "denoise_chroma", (gint)
photo->settings[setting_id]->denoise_chroma, NULL);
g_object_set(fdenoise, "settings",
photo->settings[setting_id], NULL);
/* Save the image */
Modified: trunk/src/rs-preview-widget.c
===================================================================
--- trunk/src/rs-preview-widget.c 2009-10-13 16:00:09 UTC (rev 2709)
+++ trunk/src/rs-preview-widget.c 2009-10-13 22:43:18 UTC (rev 2710)
@@ -115,7 +115,6 @@
GtkWidget *hscrollbar;
GtkDrawingArea *canvas;
- guint adjustment_changed_helper_timeout;
RSToolbox *toolbox;
gboolean zoom_to_fit;
@@ -531,20 +530,8 @@
rs_filter_set_previous(preview->loupe_filter_cache,
preview->filter_input);
/* FIXME: view is hardcoded to 0 */
g_object_set(preview->loupe_filter_render, "settings",
preview->photo->settings[preview->snapshot[0]], NULL);
- gfloat sharpen, denoise_luma, denoise_chroma;
+ g_object_set(preview->loupe_filter_denoise, "settings",
preview->photo->settings[preview->snapshot[0]], NULL);
-
g_object_get(preview->photo->settings[preview->snapshot[0]],
- "sharpen", &sharpen,
- "denoise_luma", &denoise_luma,
- "denoise_chroma", &denoise_chroma,
- NULL);
- g_object_set(preview->loupe_filter_denoise,
- "sharpen", (gint) sharpen,
- "denoise_luma", (gint) denoise_luma,
- "denoise_chroma", (gint) denoise_chroma,
- "settings",
preview->photo->settings[preview->snapshot[0]],
- NULL);
-
gtk_widget_show_all(GTK_WIDGET(preview->loupe));
}
else
@@ -580,21 +567,12 @@
if (preview->photo)
{
- g_signal_connect(G_OBJECT(preview->photo), "settings-changed",
G_CALLBACK(settings_changed), preview);
-
for(view=0;view<MAX_VIEWS;view++)
{
rs_filter_request_set_quick(preview->request[view],
TRUE);
g_object_set(preview->filter_render[view], "settings",
preview->photo->settings[preview->snapshot[view]], NULL);
g_object_set(preview->filter_denoise[view], "settings",
preview->photo->settings[preview->snapshot[view]], NULL);
}
-
- for(view=0;view<MAX_VIEWS;view++)
- g_object_set(preview->filter_denoise[view],
- "sharpen", (gint)
(preview->photo->settings[preview->snapshot[view]]->sharpen),
- "denoise_luma", (gint)
(preview->photo->settings[preview->snapshot[view]]->denoise_luma),
- "denoise_chroma", (gint)
(preview->photo->settings[preview->snapshot[view]]->denoise_chroma),
- NULL);
}
}
@@ -837,12 +815,6 @@
g_object_set(preview->filter_render[view], "settings",
preview->photo->settings[preview->snapshot[view]], NULL);
g_object_set(preview->filter_denoise[view], "settings",
preview->photo->settings[preview->snapshot[view]], NULL);
- g_object_set(preview->filter_denoise[view],
- "sharpen", (gint)
(preview->photo->settings[preview->snapshot[view]]->sharpen),
- "denoise_luma", (gint)
(preview->photo->settings[preview->snapshot[view]]->denoise_luma),
- "denoise_chroma", (gint)
(preview->photo->settings[preview->snapshot[view]]->denoise_chroma),
- NULL);
-
DIRTY(preview->dirty[view], SCREEN);
rs_preview_widget_update(preview, TRUE);
}
@@ -1758,18 +1730,6 @@
return FALSE;
}
-static gboolean
-adjustment_changed_helper(gpointer data)
-{
- RSPreviewWidget *preview = RS_PREVIEW_WIDGET(data);
-
- rs_preview_widget_update(preview, FALSE);
-
- preview->adjustment_changed_helper_timeout = 0;
-
- return FALSE;
-}
-
static void
adjustment_changed(GtkAdjustment *adjustment, gpointer user_data)
{
@@ -2191,46 +2151,6 @@
}
static void
-settings_changed(RS_PHOTO *photo, RSSettingsMask mask, RSPreviewWidget
*preview)
-{
- gint view;
-
- /* Seperate snapshot */
- const gint snapshot = mask>>24;
- mask &= 0x00ffffff;
-
- /* Return if no more relevant */
- if (photo != preview->photo)
- return;
-
- for(view=0;view<preview->views;view++)
- {
- if (preview->snapshot[view] == snapshot)
- {
- DIRTY(preview->dirty[view], SCREEN);
- if (mask & MASK_SHARPEN)
- {
- gfloat f = 0.0;
-
g_object_get(preview->photo->settings[preview->snapshot[view]], "sharpen", &f,
NULL);
- g_object_set(preview->filter_denoise[view],
"sharpen", (gint) f, NULL);
- }
- if (mask & MASK_DENOISE_LUMA)
- {
- gfloat f = 0.0;
-
g_object_get(preview->photo->settings[preview->snapshot[view]], "denoise_luma",
&f, NULL);
- g_object_set(preview->filter_denoise[view],
"denoise_luma", (gint) f, NULL);
- }
- if (mask & MASK_DENOISE_CHROMA)
- {
- gfloat f = 0.0;
-
g_object_get(preview->photo->settings[preview->snapshot[view]],
"denoise_chroma", &f, NULL);
- g_object_set(preview->filter_denoise[view],
"denoise_chroma", (gint) f, NULL);
- }
- }
- }
-}
-
-static void
filter_changed(RSFilter *filter, RSFilterChangedMask mask, RSPreviewWidget
*preview)
{
gint view;
Modified: trunk/src/rs-save-dialog.c
===================================================================
--- trunk/src/rs-save-dialog.c 2009-10-13 16:00:09 UTC (rev 2709)
+++ trunk/src/rs-save-dialog.c 2009-10-13 22:43:18 UTC (rev 2710)
@@ -248,9 +248,6 @@
actual_scale = ((gdouble) dialog->save_width / (gdouble)
rs_filter_get_width(dialog->filter_crop));
g_object_set(dialog->filter_resample, "width", dialog->save_width,
"height", dialog->save_height, NULL);
- g_object_set(dialog->filter_denoise, "sharpen", (gint) (actual_scale *
dialog->photo->settings[dialog->snapshot]->sharpen), NULL);
- g_object_set(dialog->filter_denoise, "denoise_luma", (gint)
dialog->photo->settings[dialog->snapshot]->denoise_luma, NULL);
- g_object_set(dialog->filter_denoise, "denoise_chroma", (gint)
dialog->photo->settings[dialog->snapshot]->denoise_chroma, NULL);
g_object_set(dialog->filter_basic_render, "settings",
dialog->photo->settings[dialog->snapshot], NULL);
g_object_set(dialog->filter_denoise, "settings",
dialog->photo->settings[dialog->snapshot], NULL);
_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit