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

Modified Files:
        ufraw.h ufraw_lens_ui.c ufraw_lensfun.cc ufraw_ufraw.c 
        ufraw_ui.h 
Log Message:
Add ufLensGeometry and ufTargetLensGeometry UFObjects.


Index: ufraw.h
===================================================================
RCS file: /cvsroot/ufraw/ufraw/ufraw.h,v
retrieving revision 1.152
retrieving revision 1.153
diff -u -d -r1.152 -r1.153
--- ufraw.h     26 Feb 2010 07:01:04 -0000      1.152
+++ ufraw.h     27 Feb 2010 06:36:21 -0000      1.153
@@ -73,6 +73,8 @@
 extern UFName ufVignetting;
 extern UFName ufDistortion;
 extern UFName ufModel;
+extern UFName ufLensGeometry;
+extern UFName ufTargetLensGeometry;
 extern UFName ufRawImage;
 extern UFName ufRawResources;
 extern UFName ufCommandLine;

Index: ufraw_lensfun.cc
===================================================================
RCS file: /cvsroot/ufraw/ufraw/ufraw_lensfun.cc,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- ufraw_lensfun.cc    26 Feb 2010 07:01:04 -0000      1.3
+++ ufraw_lensfun.cc    27 Feb 2010 06:36:21 -0000      1.4
@@ -21,6 +21,10 @@
 #include <math.h>
 
 #ifdef HAVE_LENSFUN
+
+#define UF_LF_TRANSFORM ( \
+       LF_MODIFY_DISTORTION | LF_MODIFY_GEOMETRY | LF_MODIFY_SCALE)
+
 namespace UFRaw {
 
 class Lensfun : public UFGroup {
@@ -60,10 +64,10 @@
     // The criteria is to have 2 or 3 significant digits.
     int precision;
     if (number > 10.0 && (int)(10*number)%10 != 0)
-        // Support focal length such as 10.5mm fisheye.
-        precision = MAX(-floor(log(number) / log(10) - 1.99), 0);
+       // Support focal length such as 10.5mm fisheye.
+       precision = MAX(-floor(log(number) / log(10) - 1.99), 0);
     else
-        precision = MAX(-floor(log(number) / log(10) - 0.99), 0);
+       precision = MAX(-floor(log(number) / log(10) - 0.99), 0);
     snprintf(buffer, _buffer_size, "%.*f", precision, number);
     return buffer;
 }
@@ -95,9 +99,9 @@
            *this << new UFString(ufPreset, _StringNumber(buffer, min));
        int i = 0;
        while (focalValues[i] < min && focalValues[i] != 0)
-           i++; 
+           i++;
        if (Has(_StringNumber(buffer, focalValues[i])))
-           i++; // Comparing string works better than comparing doubles.
+           i++; // Comparing strings works better than comparing doubles.
        while (focalValues[i] < max && focalValues[i] != 0) {
            *this << new UFString(ufPreset, _StringNumber(buffer,
                    focalValues[i]));
@@ -137,7 +141,7 @@
        while (apertureValues[i] < min && apertureValues[i] != 0)
            i++;
        if (Has(_StringNumber(buffer, apertureValues[i])))
-           i++; // Comparing string works better than comparing doubles.
+           i++; // Comparing strings works better than comparing doubles.
        while (apertureValues[i] != 0) {
            *this << new UFString(ufPreset, _StringNumber(buffer,
                    apertureValues[i]));
@@ -400,6 +404,39 @@
     }
 };
 
+extern "C" { UFName ufLensGeometry = "LensGeometry"; }
+class LensGeometry : public UFArray {
+public:
+    explicit LensGeometry(UFName name = ufLensGeometry) : UFArray(name,
+           lfLens::GetLensTypeDesc(LF_UNKNOWN, NULL)) {
+       for (lfLensType type = LF_UNKNOWN; ; type = lfLensType(type+1)) {
+           const char *typeName = lfLens::GetLensTypeDesc(type, NULL);
+           if (typeName == NULL)
+               break; // End of loop.
+           *this << new UFString("Type", typeName);
+       }
+    }
+    void OriginalValueChangedEvent() {
+       ufraw_data *uf = ufraw_image_get_data(this);
+       if (uf == NULL)
+           return;
+       Lensfun::Parent(*this).Transformation.Type = lfLensType(Index());
+       ufraw_invalidate_layer(uf, ufraw_transform_phase);
+    }
+};
+
+extern "C" { UFName ufTargetLensGeometry = "TargetLensGeometry"; }
+class TargetLensGeometry : public LensGeometry {
+public:
+    TargetLensGeometry() : LensGeometry(ufTargetLensGeometry) { }
+    void OriginalValueChangedEvent() {
+       ufraw_data *uf = ufraw_image_get_data(this);
+       if (uf == NULL)
+           return;
+       ufraw_invalidate_layer(uf, ufraw_transform_phase);
+    }
+};
+
 extern "C" { UFName ufLensfun = "Lensfun"; }
 Lensfun::Lensfun() : UFGroup(ufLensfun), FocalLengthValue(0.0),
        ApertureValue(0.0), DistanceValue(0.0) {
@@ -410,6 +447,8 @@
        << new TCA
        << new Vignetting
        << new Distortion
+       << new LensGeometry
+       << new TargetLensGeometry
     ;
 }
 
@@ -497,6 +536,56 @@
     Lensfun.Init();
 }
 
+void ufraw_convert_prepare_transform(ufraw_data *uf,
+       int width, int height, gboolean reverse, float scale)
+{
+    UFGroup &Image = *uf->conf->ufobject;
+    UFRaw::Lensfun &Lensfun =  static_cast<UFRaw::Lensfun &>(Image[ufLensfun]);
+    conf_data *conf = uf->conf;
+    if (uf->modifier != NULL)
+       uf->modifier->Destroy();
+    uf->modifier = lfModifier::Create(&Lensfun.Transformation,
+           conf->camera->CropFactor, width, height);
+    if (uf->modifier == NULL)
+       return;
+
+    UFArray &targetLensGeometry = Lensfun[ufTargetLensGeometry];
+    uf->modFlags = uf->modifier->Initialize(&Lensfun.Transformation,
+           LF_PF_U16, Lensfun.FocalLengthValue, Lensfun.ApertureValue,
+           Lensfun.DistanceValue, scale,
+           lfLensType(targetLensGeometry.Index()),
+           UF_LF_TRANSFORM | LF_MODIFY_VIGNETTING, reverse);
+    if ((uf->modFlags & (UF_LF_TRANSFORM | LF_MODIFY_VIGNETTING)) == 0) {
+       uf->modifier->Destroy();
+       uf->modifier = NULL;
+    }
+}
+
+void ufraw_prepare_tca(ufraw_data *uf)
+{
+    UFGroup &Image = *uf->conf->ufobject;
+    UFRaw::Lensfun &Lensfun =  static_cast<UFRaw::Lensfun &>(Image[ufLensfun]);
+    ufraw_image_data *img = &uf->Images[ufraw_raw_phase];
+
+    if (uf->TCAmodifier != NULL)
+       uf->TCAmodifier->Destroy();
+    uf->TCAmodifier = lfModifier::Create(&Lensfun.Transformation,
+           uf->conf->camera->CropFactor, img->width, img->height);
+    if (uf->TCAmodifier == NULL)
+       return;
+
+    UFArray &targetLensGeometry = Lensfun[ufTargetLensGeometry];
+    int modFlags = uf->TCAmodifier->Initialize(&Lensfun.Transformation,
+           LF_PF_U16, Lensfun.FocalLengthValue, Lensfun.ApertureValue,
+           Lensfun.DistanceValue, 1.0,
+           lfLensType(targetLensGeometry.Index()),
+           LF_MODIFY_TCA, false);
+    if ((modFlags & LF_MODIFY_TCA) == 0) {
+       uf->TCAmodifier->Destroy();
+       uf->TCAmodifier = NULL;
+    }
+}
+
 }
 
 } // namespace UFRaw

Index: ufraw_ui.h
===================================================================
RCS file: /cvsroot/ufraw/ufraw/ufraw_ui.h,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -d -r1.39 -r1.40
--- ufraw_ui.h  26 Feb 2010 07:01:04 -0000      1.39
+++ ufraw_ui.h  27 Feb 2010 06:36:21 -0000      1.40
@@ -126,10 +126,6 @@
     GtkWidget *LensTCATable, *LensTCADesc;
     /* The lens fix notebook vignetting page */
     GtkWidget *LensVignettingTable, *LensVignettingDesc;
-    /* The lens fix notebook geometry page */
-    GtkWidget *LensGeometryTable, *LensFromGeometryDesc, *LensToGeometryDesc;
-    /* The 'from' and 'to' geometry selectors */
-    GtkWidget *LensFromGeometrySel, *LensToGeometrySel;
     /* The hbox containing focal, aperture, distance combos */
     GtkWidget *LensParamBox;
 #endif /* HAVE_LENSFUN */

Index: ufraw_lens_ui.c
===================================================================
RCS file: /cvsroot/ufraw/ufraw/ufraw_lens_ui.c,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -d -r1.35 -r1.36
--- ufraw_lens_ui.c     26 Feb 2010 07:01:04 -0000      1.35
+++ ufraw_lens_ui.c     27 Feb 2010 06:36:21 -0000      1.36
@@ -170,15 +170,6 @@
            0, gtk_get_current_event_time());
 }
 
-/* Update all lens model-related controls to reflect current model */
-static void lens_update_controls(preview_data *data)
-{
-    gtk_combo_box_set_active(GTK_COMBO_BOX(data->LensFromGeometrySel),
-           CFG->lens->Type);
-    gtk_combo_box_set_active(GTK_COMBO_BOX(data->LensToGeometrySel),
-           CFG->cur_lens_type);
-}
-
 static void combo_entry_new(UFObject *object, GtkWidget *box,
        const char *labelText, const char *tooltip)
 {
@@ -270,7 +261,6 @@
     UFObject *lensfun = ufgroup_element(CFG->ufobject, ufLensfun);
     ufraw_lensfun_interpolate(lensfun, lens);
     lens_set(data);
-    lens_update_controls(data);
 }
 
 static void lens_menu_fill(preview_data *data, const lfLens *const *lenslist)
@@ -552,7 +542,7 @@
 
 /* --- Lens geometry page --- */
 
-static void geometry_model_changed(GtkComboBox *widget, preview_data *data)
+static void geometry_model_changed(GtkComboBox *widget, GtkLabel *label)
 {
     lfLensType type = gtk_combo_box_get_active(widget);
 
@@ -560,88 +550,57 @@
     if (!lf_get_lens_type_desc(type, &details))
        return; // should never happen
 
-    lfLensType *target = (lfLensType *)g_object_get_data(G_OBJECT(widget),
-           "LensType");
-
-    *target = type;
-
-    if (target == &CFG->cur_lens_type)
-       gtk_label_set_text(GTK_LABEL(data->LensToGeometryDesc), details);
-    else
-       gtk_label_set_text(GTK_LABEL(data->LensFromGeometryDesc), details);
-
-    ufraw_invalidate_layer(data->UF, ufraw_transform_phase);
-    render_preview(data);
+    gtk_label_set_text(label, details);
 }
 
-static void fill_geometry_page(preview_data *data, GtkWidget *page)
+static GtkWidget *fill_geometry_page(UFObject *ufobject)
 {
-    data->LensGeometryTable = gtk_table_new(10, 1, FALSE);
-    gtk_box_pack_start(GTK_BOX(page),
-           data->LensGeometryTable, TRUE, TRUE, 0);
+    UFObject *lensfun = ufgroup_element(ufobject, ufLensfun);
+    GtkTable *geometryTable = GTK_TABLE(gtk_table_new(10, 1, FALSE));
 
-    /* Add the model combobox */
+    /* Lens geometry combobox */
     GtkWidget *label = gtk_label_new(_("Lens geometry:"));
     gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5);
-    gtk_table_attach(GTK_TABLE(data->LensGeometryTable), label,
-           0, 1, 0, 1, GTK_FILL, 0, 5, 0);
-    data->LensFromGeometrySel = gtk_combo_box_new_text();
-    uf_widget_set_tooltip(data->LensFromGeometrySel,
+    gtk_table_attach(geometryTable, label, 0, 1, 0, 1, GTK_FILL, 0, 5, 0);
+    UFObject *lensGeometry = ufgroup_element(lensfun, ufLensGeometry);
+    GtkWidget *combo = ufarray_combo_box_new(lensGeometry);
+    uf_widget_set_tooltip(combo,
            _("The geometry of the lens used to make the shot"));
-    gtk_table_attach(GTK_TABLE(data->LensGeometryTable),
-           data->LensFromGeometrySel, 1, 2, 0, 1,
+    gtk_table_attach(geometryTable, combo, 1, 2, 0, 1,
            GTK_EXPAND | GTK_FILL, 0, 0, 0);
 
-    data->LensFromGeometryDesc = gtk_label_new("");
-    gtk_label_set_line_wrap(GTK_LABEL(data->LensFromGeometryDesc), TRUE);
-    gtk_label_set_ellipsize(GTK_LABEL(data->LensFromGeometryDesc),
-           PANGO_ELLIPSIZE_END);
-    gtk_label_set_selectable(GTK_LABEL(data->LensFromGeometryDesc), TRUE);
-    gtk_misc_set_alignment(GTK_MISC(data->LensFromGeometryDesc), 0.5, 0.5);
-    gtk_table_attach(GTK_TABLE(data->LensGeometryTable),
-           data->LensFromGeometryDesc, 0, 2, 1, 2,
+    GtkWidget *description = gtk_label_new("");
+    gtk_label_set_line_wrap(GTK_LABEL(description), TRUE);
+    gtk_label_set_ellipsize(GTK_LABEL(description), PANGO_ELLIPSIZE_END);
+    gtk_label_set_selectable(GTK_LABEL(description), TRUE);
+    gtk_misc_set_alignment(GTK_MISC(description), 0.5, 0.5);
+    gtk_table_attach(geometryTable, description, 0, 2, 1, 2,
            GTK_EXPAND | GTK_FILL, 0, 0, 10);
+    g_signal_connect(G_OBJECT(combo), "changed",
+           G_CALLBACK(geometry_model_changed), description);
 
+    /* Target lens geometry combobox */
     label = gtk_label_new(_("Target geometry:"));
     gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5);
-    gtk_table_attach(GTK_TABLE(data->LensGeometryTable), label,
-           0, 1, 2, 3, GTK_FILL, 0, 5, 0);
-    data->LensToGeometrySel = gtk_combo_box_new_text();
-    uf_widget_set_tooltip(data->LensToGeometrySel,
-           _("The target geometry for output image"));
-    gtk_table_attach(GTK_TABLE(data->LensGeometryTable),
-           data->LensToGeometrySel, 1, 2, 2, 3,
+    gtk_table_attach(geometryTable, label, 0, 1, 2, 3, GTK_FILL, 0, 5, 0);
+    UFObject *targetLensGeometry =
+           ufgroup_element(lensfun, ufTargetLensGeometry);
+    combo = ufarray_combo_box_new(targetLensGeometry);
+    uf_widget_set_tooltip(combo, _("The target geometry for output image"));
+    gtk_table_attach(geometryTable, combo, 1, 2, 2, 3,
            GTK_EXPAND | GTK_FILL, 0, 0, 0);
 
-    data->LensToGeometryDesc = gtk_label_new("");
-    gtk_label_set_line_wrap(GTK_LABEL(data->LensToGeometryDesc), TRUE);
-    gtk_label_set_ellipsize(GTK_LABEL(data->LensToGeometryDesc),
-           PANGO_ELLIPSIZE_END);
-    gtk_label_set_selectable(GTK_LABEL(data->LensToGeometryDesc), TRUE);
-    gtk_misc_set_alignment(GTK_MISC(data->LensToGeometryDesc), 0.5, 0.5);
-    gtk_table_attach(GTK_TABLE(data->LensGeometryTable),
-           data->LensToGeometryDesc, 0, 2, 3, 4,
+    description = gtk_label_new("");
+    gtk_label_set_line_wrap(GTK_LABEL(description), TRUE);
+    gtk_label_set_ellipsize(GTK_LABEL(description), PANGO_ELLIPSIZE_END);
+    gtk_label_set_selectable(GTK_LABEL(description), TRUE);
+    gtk_misc_set_alignment(GTK_MISC(description), 0.5, 0.5);
+    gtk_table_attach(geometryTable, description, 0, 2, 3, 4,
            GTK_EXPAND | GTK_FILL, 0, 0, 10);
+    g_signal_connect(G_OBJECT(combo), "changed",
+           G_CALLBACK(geometry_model_changed), description);
 
-    int i;
-    for (i = 0; ; i++) {
-       lfLensType type = LF_UNKNOWN + i;
-       const char *type_name = lf_get_lens_type_desc(type, NULL);
-       if (type_name == NULL)
-           break;
-       gtk_combo_box_append_text(GTK_COMBO_BOX(data->LensFromGeometrySel),
-               type_name);
-       gtk_combo_box_append_text(GTK_COMBO_BOX(data->LensToGeometrySel),
-               type_name);
-    }
-    g_object_set_data(G_OBJECT(data->LensFromGeometrySel), "LensType",
-           &CFG->lens->Type);
-    g_signal_connect(G_OBJECT(data->LensFromGeometrySel), "changed",
-           G_CALLBACK(geometry_model_changed), data);
-    g_object_set_data(G_OBJECT(data->LensToGeometrySel), "LensType",
-           &CFG->cur_lens_type);
-    g_signal_connect(G_OBJECT(data->LensToGeometrySel), "changed",
-           G_CALLBACK(geometry_model_changed), data);
+    return GTK_WIDGET(geometryTable);
 }
 
 /**
@@ -723,9 +682,8 @@
     gtk_notebook_set_current_page(subnb, pageNum);
 
     subpage = notebook_page_new(subnb, _("Lens geometry"), "geometry");
-    fill_geometry_page(data, subpage);
-
-    lens_update_controls(data);
+    gtk_box_pack_start(GTK_BOX(subpage), fill_geometry_page(CFG->ufobject),
+           TRUE, TRUE, 0);
 }
 
 #endif /* HAVE_LENSFUN */

Index: ufraw_ufraw.c
===================================================================
RCS file: /cvsroot/ufraw/ufraw/ufraw_ufraw.c,v
retrieving revision 1.246
retrieving revision 1.247
diff -u -d -r1.246 -r1.247
--- ufraw_ufraw.c       26 Feb 2010 07:01:04 -0000      1.246
+++ ufraw_ufraw.c       27 Feb 2010 06:36:21 -0000      1.247
@@ -30,9 +30,6 @@
 void (*ufraw_progress)(int what, int ticks) = NULL;
 
 #ifdef HAVE_LENSFUN
-/* What about LF_MODIFY_ALL? */
-#define UF_LF_ALL (LF_MODIFY_TCA | LF_MODIFY_VIGNETTING | \
-       LF_MODIFY_DISTORTION | LF_MODIFY_GEOMETRY | LF_MODIFY_SCALE)
 #define UF_LF_TRANSFORM ( \
        LF_MODIFY_DISTORTION | LF_MODIFY_GEOMETRY | LF_MODIFY_SCALE)
 void ufraw_lensfun_init(ufraw_data *uf);
@@ -40,7 +37,7 @@
        ufraw_image_data *img, UFRectangle *area);
 static void ufraw_convert_image_tca(ufraw_data *uf, ufraw_image_data *img,
        ufraw_image_data *outimg, UFRectangle *area);
-static void ufraw_prepare_tca(ufraw_data *uf);
+void ufraw_prepare_tca(ufraw_data *uf);
 #endif
 static void ufraw_image_format(int *colors, int *bytes, ufraw_image_data *img,
        const char *formats, const char *caller);
@@ -1348,47 +1345,18 @@
     }
 }
  
-static void ufraw_convert_prepare_transform(ufraw_data *uf,
-       int width, int height, gboolean reverse, float scale)
-{
 #ifdef HAVE_LENSFUN
-    conf_data *conf = uf->conf;
-    if (uf->modifier != NULL)
-       lf_modifier_destroy(uf->modifier);
-    uf->modifier = NULL;
-
-    if (conf->camera == NULL || conf->lens == NULL)
-       return;
-
-    uf->modifier = lf_modifier_new(conf->lens, conf->camera->CropFactor,
-           width, height);
-    if (uf->modifier == NULL)
-       return;
-
-    uf->modFlags = lf_modifier_initialize(uf->modifier, conf->lens,
-           LF_PF_U16, conf->focal_len, conf->aperture, conf->subject_distance,
-           scale, conf->cur_lens_type,
-           UF_LF_TRANSFORM | LF_MODIFY_VIGNETTING, reverse);
-    if ((uf->modFlags & UF_LF_ALL) == 0) {
-       lf_modifier_destroy(uf->modifier);
-       uf->modifier = NULL;
-    }
-#else /* HAVE_LENSFUN */
-    (void)uf;
-    (void)width;
-    (void)height;
-    (void)reverse;
-    (void)scale;
-#endif /* HAVE_LENSFUN */
-}
+void ufraw_convert_prepare_transform(ufraw_data *uf,
+       int width, int height, gboolean reverse, float scale);
+#endif
 
 static void ufraw_convert_prepare_transform_buffer(ufraw_data *uf,
        ufraw_image_data *img, int width, int height)
 {
     const int iWidth = uf->initialWidth;
     const int iHeight = uf->initialHeight;
-    ufraw_convert_prepare_transform(uf, iWidth, iHeight, TRUE, 1.0);
 #ifdef HAVE_LENSFUN
+    ufraw_convert_prepare_transform(uf, iWidth, iHeight, TRUE, 1.0);
     if (uf->conf->rotationAngle == 0 &&
        (uf->modifier == NULL || !(uf->modFlags & UF_LF_TRANSFORM)))
 #else
@@ -1400,7 +1368,9 @@
        img->width = width;
        img->height = height;
        // We still need the transform for vignetting
+#ifdef HAVE_LENSFUN
        ufraw_convert_prepare_transform(uf, width, height, FALSE, 1.0);
+#endif
        uf->rotatedWidth = iWidth;
        uf->rotatedHeight = iHeight;
        uf->autoCropWidth = iWidth;
@@ -1468,7 +1438,9 @@
     int newWidth = uf->rotatedWidth * width / iWidth;
     int newHeight = uf->rotatedHeight * height / iHeight;
     ufraw_image_init(img, newWidth, newHeight, 8);
+#ifdef HAVE_LENSFUN
     ufraw_convert_prepare_transform(uf, width, height, FALSE, scale);
+#endif
 }
 
 /*
@@ -1515,34 +1487,6 @@
     }
 }
 
-#ifdef HAVE_LENSFUN
-static void ufraw_prepare_tca(ufraw_data *uf)
-{
-    ufraw_image_data *img = &uf->Images[ufraw_raw_phase];
-
-    if (uf->TCAmodifier != NULL)
-       lf_modifier_destroy(uf->TCAmodifier);
-    uf->TCAmodifier = NULL;
-
-    if (uf->conf->camera == NULL || uf->conf->lens == NULL)
-       return;
-
-    uf->TCAmodifier = lf_modifier_new(uf->conf->lens,
-           uf->conf->camera->CropFactor, img->width, img->height);
-    if (uf->TCAmodifier == NULL)
-       return;
-
-    int modFlags = lf_modifier_initialize(uf->TCAmodifier, uf->conf->lens,
-           LF_PF_U16, uf->conf->focal_len, uf->conf->aperture,
-           uf->conf->subject_distance, 1.0, uf->conf->cur_lens_type,
-           LF_MODIFY_TCA, FALSE);
-    if ((modFlags & LF_MODIFY_TCA) == 0) {
-       lf_modifier_destroy(uf->TCAmodifier);
-       uf->TCAmodifier = NULL;
-    }
-}
-#endif
-
 /*
  * This function is very permissive in accepting NULL pointers but it does
  * so to make it easy to call this function: consider it documentation with


------------------------------------------------------------------------------
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