[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