[Rawstudio-commit] r1988 - trunk/src
Anders Brander
anders at brander.dk
Thu Sep 11 21:00:25 CEST 2008
Author: abrander
Date: 2008-09-11 21:00:25 +0200 (Thu, 11 Sep 2008)
New Revision: 1988
Modified:
trunk/src/rs-actions.c
trunk/src/rs-cache.c
trunk/src/rs-cache.h
trunk/src/rs-photo.c
Log:
Changed rs_cache_load() to return mask instead of boolean.
Modified: trunk/src/rs-actions.c
===================================================================
--- trunk/src/rs-actions.c 2008-09-11 18:36:59 UTC (rev 1987)
+++ trunk/src/rs-actions.c 2008-09-11 19:00:25 UTC (rev 1988)
@@ -419,6 +419,7 @@
gint cur;
GList *selected = NULL;
gint num_selected;
+ guint new_mask;
/* Apply to all selected photos */
selected = rs_store_get_selected_names(rs->store);
@@ -442,9 +443,9 @@
break;
}
}
- rs_cache_load(photo);
+ new_mask = rs_cache_load(photo);
rs_settings_double_copy(rs->settings_buffer, photo->settings[rs->current_setting], mask);
- rs_cache_save(photo, mask);
+ rs_cache_save(photo, new_mask | mask);
}
g_object_unref(photo);
}
Modified: trunk/src/rs-cache.c
===================================================================
--- trunk/src/rs-cache.c 2008-09-11 18:36:59 UTC (rev 1987)
+++ trunk/src/rs-cache.c 2008-09-11 19:00:25 UTC (rev 1988)
@@ -28,7 +28,7 @@
/* This will be written to XML files for making backward compatibility easier to implement */
#define CACHEVERSION 2
-static void rs_cache_load_setting(RS_SETTINGS_DOUBLE *rss, xmlDocPtr doc, xmlNodePtr cur);
+static guint rs_cache_load_setting(RS_SETTINGS_DOUBLE *rss, xmlDocPtr doc, xmlNodePtr cur);
gchar *
rs_cache_get_name(const gchar *src)
@@ -125,9 +125,10 @@
return;
}
-static void
+static guint
rs_cache_load_setting(RS_SETTINGS_DOUBLE *rss, xmlDocPtr doc, xmlNodePtr cur)
{
+ guint mask = 0;
xmlChar *val;
gdouble *target=NULL;
xmlNodePtr curve = NULL;
@@ -135,19 +136,40 @@
{
target = NULL;
if ((!xmlStrcmp(cur->name, BAD_CAST "exposure")))
+ {
+ mask |= MASK_EXPOSURE;
target = &rss->exposure;
+ }
else if ((!xmlStrcmp(cur->name, BAD_CAST "saturation")))
+ {
+ mask |= MASK_SATURATION;
target = &rss->saturation;
+ }
else if ((!xmlStrcmp(cur->name, BAD_CAST "hue")))
+ {
+ mask |= MASK_HUE;
target = &rss->hue;
+ }
else if ((!xmlStrcmp(cur->name, BAD_CAST "contrast")))
+ {
+ mask |= MASK_CONTRAST;
target = &rss->contrast;
+ }
else if ((!xmlStrcmp(cur->name, BAD_CAST "warmth")))
+ {
+ mask |= MASK_WARMTH;
target = &rss->warmth;
+ }
else if ((!xmlStrcmp(cur->name, BAD_CAST "tint")))
+ {
+ mask |= MASK_TINT;
target = &rss->tint;
+ }
else if ((!xmlStrcmp(cur->name, BAD_CAST "sharpen")))
+ {
+ mask |= MASK_SHARPEN;
target = &rss->sharpen;
+ }
else if ((!xmlStrcmp(cur->name, BAD_CAST "curve")))
{
gchar **vals;
@@ -167,6 +189,7 @@
{
if ((!xmlStrcmp(curve->name, BAD_CAST "knot")))
{
+ mask |= MASK_CURVE;
val = xmlNodeListGetString(doc, curve->xmlChildrenNode, 1);
vals = g_strsplit((gchar *)val, " ", 4);
if (vals[0] && vals[1])
@@ -193,11 +216,14 @@
}
cur = cur->next;
}
+
+ return mask;
}
-gboolean
+guint
rs_cache_load(RS_PHOTO *photo)
{
+ guint mask = 0;
xmlDocPtr doc;
xmlNodePtr cur;
xmlChar *val;
@@ -207,12 +233,15 @@
RS_SETTINGS_DOUBLE *settings;
cachename = rs_cache_get_name(photo->filename);
- if (!cachename) return(FALSE);
+ if (!cachename) return mask;
if (!g_file_test(cachename, G_FILE_TEST_IS_REGULAR)) return FALSE;
photo->exported = FALSE;
doc = xmlParseFile(cachename);
- if(doc==NULL) return(FALSE);
+ if(doc==NULL) return mask;
+ /* Return something if the file exists */
+ mask = 0x80000000;
+
cur = xmlDocGetRootElement(doc);
if ((!xmlStrcmp(cur->name, BAD_CAST "rawstudio-cache")))
@@ -233,7 +262,7 @@
if (id>2) id=0;
if (id<0) id=0;
settings = rs_settings_double_new();
- rs_cache_load_setting(settings, doc, cur->xmlChildrenNode);
+ mask |= rs_cache_load_setting(settings, doc, cur->xmlChildrenNode);
rs_photo_apply_settings_double(photo, id, settings, MASK_ALL);
rs_settings_double_free(settings);
}
@@ -366,6 +395,7 @@
rs_cache_save_flags(const gchar *filename, const guint *priority, const gboolean *exported)
{
RS_PHOTO *photo;
+ guint mask;
g_assert(filename != NULL);
@@ -375,14 +405,14 @@
photo = rs_photo_new();
photo->filename = (gchar *) filename;
- if (rs_cache_load(photo))
+ if ((mask = rs_cache_load(photo)))
{
/* If we got a cache file, save as normal */
if (priority)
photo->priority = *priority;
if (exported)
photo->exported = *exported;
- rs_cache_save(photo, 0);
+ rs_cache_save(photo, mask);
}
else
{
Modified: trunk/src/rs-cache.h
===================================================================
--- trunk/src/rs-cache.h 2008-09-11 18:36:59 UTC (rev 1987)
+++ trunk/src/rs-cache.h 2008-09-11 19:00:25 UTC (rev 1988)
@@ -22,7 +22,7 @@
extern gchar *rs_cache_get_name(const gchar *src);
extern void rs_cache_save(RS_PHOTO *photo, guint mask);
-extern gboolean rs_cache_load(RS_PHOTO *photo);
+extern guint rs_cache_load(RS_PHOTO *photo);
extern void rs_cache_load_quick(const gchar *filename, gint *priority, gboolean *exported);
extern void rs_cache_save_flags(const gchar *filename, const guint *priority, const gboolean *exported);
Modified: trunk/src/rs-photo.c
===================================================================
--- trunk/src/rs-photo.c 2008-09-11 18:36:59 UTC (rev 1987)
+++ trunk/src/rs-photo.c 2008-09-11 19:00:25 UTC (rev 1988)
@@ -562,6 +562,8 @@
RS_PHOTO *photo = NULL;
RS_FILETYPE *filetype;
RS_IMAGE16 *image;
+ guint mask;
+ gint i;
/* Try preloaded first! */
photo = rs_get_preloaded(filename);
@@ -600,24 +602,22 @@
}
/* Load cache */
- if (!rs_cache_load(photo))
+ mask = rs_cache_load(photo);
+ /* If we have no cache, try to set some sensible defaults */
+ for (i=0;i<3;i++)
{
- /* If we have no cache, try to set some sensible defaults */
- gint i;
- for (i=0;i<3;i++)
- {
- /* White balance */
+ /* White balance */
+ if (!(mask & MASK_WB))
if (!rs_photo_set_wb_from_camera(photo, i))
rs_photo_set_wb_auto(photo, i);
- /* Contrast */
- if (photo->metadata->contrast != -1.0)
- rs_photo_set_contrast(photo, i, photo->metadata->contrast);
+ /* Contrast */
+ if (!(mask & MASK_CONTRAST) && (photo->metadata->contrast != -1.0))
+ rs_photo_set_contrast(photo, i, photo->metadata->contrast);
- /* Saturation */
- if (photo->metadata->saturation != -1.0)
- rs_photo_set_saturation(photo, i, photo->metadata->saturation);
- }
+ /* Saturation */
+ if (!(mask & MASK_SATURATION) && (photo->metadata->saturation != -1.0))
+ rs_photo_set_saturation(photo, i, photo->metadata->saturation);
}
}
}
More information about the Rawstudio-commit
mailing list