Update of /cvsroot/ufraw/ufraw
In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv1143

Modified Files:
        ufobject.cc ufobject.h ufraw_lensfun.cc 
Log Message:
Set lensfun defaults correctly when load ID files.


Index: ufobject.h
===================================================================
RCS file: /cvsroot/ufraw/ufraw/ufobject.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- ufobject.h  26 Feb 2010 07:01:04 -0000      1.4
+++ ufobject.h  2 Mar 2010 20:06:09 -0000       1.5
@@ -295,6 +295,9 @@
     void Set(const char *string);
     bool IsDefault() const;
     void SetDefault();
+    /// Set @a string as a default value.
+    /// A #uf_default_changed event is triggered.
+    void SetDefault(const char *string);
     void Reset();
     /// Return true if object value is equal to @a string.
     bool IsEqual(const char *string) const;
@@ -361,6 +364,11 @@
     const char *StringValue() const;
     bool IsDefault() const;
     void SetDefault();
+    /// Set @a string as a default string value for the UFArray. As opposed
+    /// to the SetDefault() method with no arguments, this method does not
+    /// changes the default of the array's elements.
+    /// A #uf_default_changed event is triggered.
+    void SetDefault(const char *string);
     void Reset();
     /// Set the current index position in the array.
     /// Return false if @a index is out of range.

Index: ufraw_lensfun.cc
===================================================================
RCS file: /cvsroot/ufraw/ufraw/ufraw_lensfun.cc,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- ufraw_lensfun.cc    1 Mar 2010 23:34:21 -0000       1.7
+++ ufraw_lensfun.cc    2 Mar 2010 20:06:09 -0000       1.8
@@ -29,8 +29,9 @@
 namespace UFRaw {
 
 class Lensfun : public UFGroup {
+private:
+    static lfDatabase *_LensDB;
 public:
-    static lfDatabase *LensDB;
     lfLens Transformation;
     lfLens Interpolation;
     double FocalLengthValue;
@@ -49,6 +50,14 @@
            return static_cast<Lensfun &>(object.Parent());
        return Lensfun::Parent(object.Parent());
     }
+    static lfDatabase *LensDB() {
+       /* Load lens database only once */
+       if (_LensDB == NULL) {
+           _LensDB = lfDatabase::Create();
+           _LensDB->Load();
+       }
+       return _LensDB;
+    }
     void Interpolate();
     void Init();
 };
@@ -473,22 +482,25 @@
     static_cast<Distortion &>((*this)[ufDistortion]).Interpolate();
 }
 
-lfDatabase *Lensfun::LensDB = NULL;
+lfDatabase *Lensfun::_LensDB = NULL;
 
 void Lensfun::Init() {
-    /* Load lens database only once */
-    if (LensDB == NULL) {
-       LensDB = lfDatabase::Create();
-       LensDB->Load();
-    }
     ufraw_data *uf = ufraw_image_get_data(this);
 
+    char buffer[_buffer_size];
+    UFArray &FocalLength = (*this)[ufFocalLength];
+    FocalLength.SetDefault(_StringNumber(buffer, uf->conf->focal_len));
+    UFArray &Aperture = (*this)[ufAperture];
+    Aperture.SetDefault(_StringNumber(buffer, uf->conf->aperture));
+    UFArray &Distance = (*this)[ufDistance];
+    Distance.SetDefault(_StringNumber(buffer, uf->conf->subject_distance));
+
     /* Create a default camera */
     uf->conf->camera = lf_camera_new();
 
     /* Set lens and camera from EXIF info, if possible */
     if (uf->conf->real_make[0] || uf->conf->real_model[0]) {
-       const lfCamera **cams = LensDB->FindCameras(
+       const lfCamera **cams = LensDB()->FindCameras(
                uf->conf->real_make, uf->conf->real_model);
        if (cams != NULL) {
            lf_camera_copy(uf->conf->camera, cams[0]);
@@ -496,7 +508,7 @@
        }
     }
     if (strlen(uf->conf->lensText) > 0) {
-       const lfLens **lenses = LensDB->FindLenses(
+       const lfLens **lenses = LensDB()->FindLenses(
                uf->conf->camera, NULL, uf->conf->lensText);
        if (lenses != NULL) {
            Interpolation = *lenses[0];
@@ -513,23 +525,19 @@
        }
        uf->conf->lensfunMode = lensfun_auto;
     }
+    FocalLength.Reset();
+    Aperture.Reset();
+    Distance.Reset();
     if (uf->conf->lensfunMode == lensfun_none) {
        (*this)[ufTCA].Reset();
        (*this)[ufVignetting].Reset();
        (*this)[ufDistortion].Reset();
     } else {
-       static_cast<FocalLength &>((*this)[ufFocalLength]).CreatePresets();
-       static_cast<Aperture &>((*this)[ufAperture]).CreatePresets();
-       static_cast<Distance &>((*this)[ufDistance]).CreatePresets();
+       static_cast<UFRaw::FocalLength &>(FocalLength).CreatePresets();
+       static_cast<UFRaw::Aperture &>(Aperture).CreatePresets();
+       static_cast<UFRaw::Distance &>(Distance).CreatePresets();
        Interpolate();
     }
-    char buffer[_buffer_size];
-    (*this)[ufFocalLength].Set(_StringNumber(buffer, uf->conf->focal_len));
-    (*this)[ufFocalLength].SetDefault();
-    (*this)[ufAperture].Set(_StringNumber(buffer, uf->conf->aperture));
-    (*this)[ufAperture].SetDefault();
-    (*this)[ufDistance].Set(_StringNumber(buffer, uf->conf->subject_distance));
-    (*this)[ufDistance].SetDefault();
 }
 
 extern "C" {
@@ -607,7 +615,7 @@
 }
 
 lfDatabase *ufraw_lensfun_db() {
-    return Lensfun::LensDB;
+    return Lensfun::LensDB();
 }
 
 } // extern "C"

Index: ufobject.cc
===================================================================
RCS file: /cvsroot/ufraw/ufraw/ufobject.cc,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- ufobject.cc 26 Feb 2010 07:01:04 -0000      1.6
+++ ufobject.cc 2 Mar 2010 20:06:09 -0000       1.7
@@ -513,12 +513,16 @@
     return this->IsEqual(ufstring->Default);
 }
 
-void UFString::SetDefault() {
+void UFString::SetDefault(const char *string) {
     g_free(ufstring->Default);
-    ufstring->Default = g_strdup(ufstring->String);
+    ufstring->Default = g_strdup(string);
     Event(uf_default_changed);
 }
 
+void UFString::SetDefault() {
+    SetDefault(ufstring->String);
+}
+
 void UFString::Reset() {
     Set(ufstring->Default);
 }
@@ -820,9 +824,13 @@
     return UFGroup::IsDefault();
 }
 
-void UFArray::SetDefault() {
+void UFArray::SetDefault(const char *string) {
     g_free(ufgroup->DefaultIndex);
-    ufgroup->DefaultIndex = g_strdup(ufgroup->String);
+    ufgroup->DefaultIndex = g_strdup(string);
+}
+
+void UFArray::SetDefault() {
+    SetDefault(ufgroup->String);
     UFGroup::SetDefault();
 }
 


------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
ufraw-cvs mailing list
ufraw-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ufraw-cvs

Reply via email to