Do you guys usually work this fast or is it just some collected work being
committed? :-)

On Sat, Sep 10, 2011 at 22:22, Klaus Post <[email protected]> wrote:

> Author: post
> Date: 2011-09-10 22:22:43 +0200 (Sat, 10 Sep 2011)
> New Revision: 4039
>
> Modified:
>   trunk/librawstudio/rs-lens-db-editor.c
>   trunk/librawstudio/rs-lens-db-editor.h
>   trunk/librawstudio/rs-lens-db.c
>   trunk/librawstudio/rs-lens.c
>   trunk/librawstudio/rs-lens.h
>   trunk/plugins/lensfun/lensfun.c
> Log:
> Add option to lenses for correcting for fisheye effect. Selectable per
> lens.
>
> Modified: trunk/librawstudio/rs-lens-db-editor.c
> ===================================================================
> --- trunk/librawstudio/rs-lens-db-editor.c      2011-09-10 16:42:03 UTC
> (rev 4038)
> +++ trunk/librawstudio/rs-lens-db-editor.c      2011-09-10 20:22:43 UTC
> (rev 4039)
> @@ -46,6 +46,7 @@
>        GtkWidget *lensfun_model;
>        GtkWidget *button;
>        GtkWidget *checkbutton_enabled;
> +       GtkWidget *checkbutton_defish;
>        RSLens *lens;
>  } SingleLensData;
>
> @@ -121,6 +122,7 @@
>                            RS_LENS_DB_EDITOR_LENS_MODEL, lens->Model,
>                            RS_LENS_DB_EDITOR_ENABLED_ACTIVATABLE, TRUE,
>                            RS_LENS_DB_EDITOR_ENABLED, TRUE,
> +                           RS_LENS_DB_EDITOR_DEFISH, FALSE,
>                            -1);
>
>        RSLens *rs_lens = NULL;
> @@ -132,6 +134,7 @@
>        rs_lens_set_lensfun_make(rs_lens, lens->Maker);
>        rs_lens_set_lensfun_model(rs_lens, lens->Model);
>        rs_lens_set_lensfun_enabled(rs_lens, TRUE);
> +       rs_lens_set_lensfun_defish(rs_lens, FALSE);
>
>        RSLensDb *lens_db = rs_lens_db_get_default();
>
> @@ -489,6 +492,34 @@
>  }
>
>  void
> +defish_clicked (GtkCellRendererToggle *cell_renderer_toggle, const gchar
> *path, gpointer user_data)
> +{
> +       GtkTreeIter iter;
> +       gboolean enabled;
> +       GtkTreeView *tree_view = GTK_TREE_VIEW(user_data);
> +       GtkTreeModel *tree_model = gtk_tree_view_get_model(tree_view);
> +       GtkTreePath* tree_path = gtk_tree_path_new_from_string(path);
> +
> +       gtk_tree_model_get_iter(GTK_TREE_MODEL (tree_model), &iter,
> tree_path);
> +       gtk_tree_model_get(GTK_TREE_MODEL (tree_model), &iter,
> RS_LENS_DB_EDITOR_DEFISH, &enabled, -1);
> +
> +       gtk_list_store_set(GTK_LIST_STORE (tree_model), &iter,
> RS_LENS_DB_EDITOR_DEFISH, !enabled, -1);
> +
> +       RSLens *rs_lens = NULL;
> +       gtk_tree_model_get (tree_model, &iter,
> +                           RS_LENS_DB_EDITOR_LENS, &rs_lens,
> +                           -1);
> +
> +       /* Set enabled/disabled to the selected RSLens */
> +       rs_lens_set_lensfun_defish(rs_lens, !enabled);
> +
> +       RSLensDb *lens_db = rs_lens_db_get_default();
> +
> +       /* Force save of RSLensDb */
> +       rs_lens_db_save(lens_db);
> +}
> +
> +void
>  update_lensfun(GtkButton *button, gpointer user_data)
>  {
>        GtkWidget *window = GTK_WIDGET(user_data);
> @@ -556,7 +587,7 @@
>  void
>  rs_lens_db_editor(void)
>  {
> -       GtkTreeModel *tree_model = GTK_TREE_MODEL(gtk_list_store_new(10,
> G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
> G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN,
> G_TYPE_OBJECT));
> +       GtkTreeModel *tree_model = GTK_TREE_MODEL(gtk_list_store_new(11,
> G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
> G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN,
> G_TYPE_BOOLEAN, G_TYPE_OBJECT));
>
>        RSLensDb *lens_db = rs_lens_db_get_default();
>        fill_model(lens_db, tree_model);
> @@ -586,6 +617,7 @@
>         GtkCellRenderer *renderer_camera_make =
> gtk_cell_renderer_text_new();
>         GtkCellRenderer *renderer_camera_model =
> gtk_cell_renderer_text_new();
>         GtkCellRenderer *renderer_enabled = gtk_cell_renderer_toggle_new();
> +        GtkCellRenderer *renderer_defish = gtk_cell_renderer_toggle_new();
>
>         GtkTreeViewColumn *column_lens_make =
> gtk_tree_view_column_new_with_attributes (_("Lens make"),
>
>  renderer_lens_make,
> @@ -616,6 +648,11 @@
>                                                                  "active",
> RS_LENS_DB_EDITOR_ENABLED,
>
>  "activatable", RS_LENS_DB_EDITOR_ENABLED_ACTIVATABLE,
>
>       NULL);
> +        GtkTreeViewColumn *column_defish =
> gtk_tree_view_column_new_with_attributes (_("Defish"),
> +
> renderer_defish,
> +                                                                 "active",
> RS_LENS_DB_EDITOR_DEFISH,
> +
> "activatable", RS_LENS_DB_EDITOR_ENABLED_ACTIVATABLE,
> +
>        NULL);
>
>        gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(tree_model),
> RS_LENS_DB_EDITOR_CAMERA_MODEL, GTK_SORT_ASCENDING);
>        gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(tree_model),
> RS_LENS_DB_EDITOR_CAMERA_MODEL, rs_lens_db_editor_sort, NULL, NULL);
> @@ -625,6 +662,7 @@
>
>         g_signal_connect (renderer_enabled, "toggled",
>                          G_CALLBACK (toggle_clicked), view);
> +                       g_signal_connect (renderer_defish, "toggled",
> G_CALLBACK (defish_clicked), view);
>                g_signal_connect(G_OBJECT(view), "button-press-event",
> G_CALLBACK(view_on_button_pressed), NULL);
>                g_signal_connect(view, "popup-menu", (GCallback)
> view_popupmenu, NULL);
>
> @@ -635,6 +673,7 @@
>         gtk_tree_view_append_column (GTK_TREE_VIEW (view),
> column_camera_make);
>         gtk_tree_view_append_column (GTK_TREE_VIEW (view),
> column_camera_model);
>         gtk_tree_view_append_column (GTK_TREE_VIEW (view), column_enabled);
> +        gtk_tree_view_append_column (GTK_TREE_VIEW (view), column_defish);
>
>         gtk_tree_view_set_headers_visible(GTK_TREE_VIEW (view), TRUE);
>
> @@ -672,6 +711,7 @@
>                 gchar *camera_make;
>                 gchar *camera_model;
>                gboolean enabled;
> +               gboolean defish;
>
>                 RSLens *lens = list->data;
>
> @@ -687,6 +727,7 @@
>                             "camera-make", &camera_make,
>                             "camera-model", &camera_model,
>                             "enabled", &enabled,
> +                            "defish", &defish,
>                             NULL);
>
>                const gchar *human_focal = rs_human_focal(min_focal,
> max_focal);
> @@ -708,6 +749,7 @@
>                                    RS_LENS_DB_EDITOR_CAMERA_MAKE,
> camera_make,
>                                    RS_LENS_DB_EDITOR_CAMERA_MODEL,
> camera_model,
>                                    RS_LENS_DB_EDITOR_ENABLED, enabled,
> +                                   RS_LENS_DB_EDITOR_DEFISH, defish,
>                                    RS_LENS_DB_EDITOR_ENABLED_ACTIVATABLE,
> enabled_activatable,
>                                    RS_LENS_DB_EDITOR_LENS, lens,
>                                    -1);
> @@ -898,6 +940,13 @@
>  }
>
>  void
> +defish_lens(GtkCheckButton *checkbutton, gpointer user_data)
> +{
> +       RSLens *lens = user_data;
> +       rs_lens_set_lensfun_defish(lens,
> gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbutton)));
> +}
> +
> +void
>  open_full_lens_editor(GtkCheckButton *checkbutton, gpointer user_data)
>  {
>        rs_lens_db_editor();
> @@ -920,6 +969,7 @@
>        gchar *camera_make;
>        gchar *camera_model;
>        gboolean enabled;
> +       gboolean defish;
>
>        g_assert(RS_IS_LENS(lens));
>        g_object_get(lens,
> @@ -933,6 +983,7 @@
>                     "camera-make", &camera_make,
>                     "camera-model", &camera_model,
>                     "enabled", &enabled,
> +                    "defish", &defish,
>                     NULL);
>
>        GtkWidget *editor = gtk_dialog_new();
> @@ -993,7 +1044,9 @@
>        GtkWidget *label_camera_make = gtk_label_new(camera_make);
>        GtkWidget *label_camera_model = gtk_label_new(camera_model);
>        GtkWidget *checkbutton_enabled =
> gtk_check_button_new_with_label(_("Enable this lens"));
> +       GtkWidget *checkbutton_defish =
> gtk_check_button_new_with_label(_("Enable Defish"));
>        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton_enabled),
> rs_lens_get_lensfun_enabled(lens));
> +       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton_defish),
> rs_lens_get_lensfun_defish(lens));
>
>        GtkWidget *button_set_lens = gtk_button_new_with_label(_("Set
> lens"));
>
> @@ -1006,6 +1059,7 @@
>        single_lens_data->lens = lens;
>        single_lens_data->button = button_set_lens;
>        single_lens_data->checkbutton_enabled = checkbutton_enabled;
> +       single_lens_data->checkbutton_defish = checkbutton_defish;
>
>        g_signal_connect(button_set_lens, "clicked", G_CALLBACK(set_lens),
> single_lens_data);
>
> @@ -1026,7 +1080,8 @@
>        gtk_table_attach_defaults(GTK_TABLE(table), label_lensfun_model,
> 1,2,7,8);
>        gtk_table_attach_defaults(GTK_TABLE(table), button_set_lens,
> 1,2,6,8);
>        gtk_table_attach_defaults(GTK_TABLE(table), sep2, 0,2,8,9);
> -       gtk_table_attach_defaults(GTK_TABLE(table), checkbutton_enabled,
> 0,2,9,10);
> +       gtk_table_attach_defaults(GTK_TABLE(table), checkbutton_enabled,
> 0,1,9,10);
> +       gtk_table_attach_defaults(GTK_TABLE(table), checkbutton_defish,
> 1,2,9,10);
>
>        /* Set spacing around separator in table */
>        gtk_table_set_row_spacing(GTK_TABLE(table), 4, 10);
> @@ -1043,6 +1098,7 @@
>        gtk_container_add (GTK_CONTAINER (frame), table);
>
>        g_signal_connect(checkbutton_enabled, "toggled",
> G_CALLBACK(enable_lens), lens);
> +       g_signal_connect(checkbutton_defish, "toggled",
> G_CALLBACK(defish_lens), lens);
>
>        /* FIXME: Put lensfun update button in editor - for this to work, we
> cannot close the window when updating */
>  //     GtkWidget *button_update_lensfun =
> gtk_button_new_with_label(_("Update lensfun database"));
>
> Modified: trunk/librawstudio/rs-lens-db-editor.h
> ===================================================================
> --- trunk/librawstudio/rs-lens-db-editor.h      2011-09-10 16:42:03 UTC
> (rev 4038)
> +++ trunk/librawstudio/rs-lens-db-editor.h      2011-09-10 20:22:43 UTC
> (rev 4039)
> @@ -29,6 +29,7 @@
>        RS_LENS_DB_EDITOR_CAMERA_MAKE,
>        RS_LENS_DB_EDITOR_CAMERA_MODEL,
>        RS_LENS_DB_EDITOR_ENABLED,
> +       RS_LENS_DB_EDITOR_DEFISH,
>        RS_LENS_DB_EDITOR_ENABLED_ACTIVATABLE,
>        RS_LENS_DB_EDITOR_LENS
>  };
>
> Modified: trunk/librawstudio/rs-lens-db.c
> ===================================================================
> --- trunk/librawstudio/rs-lens-db.c     2011-09-10 16:42:03 UTC (rev 4038)
> +++ trunk/librawstudio/rs-lens-db.c     2011-09-10 20:22:43 UTC (rev 4039)
> @@ -137,6 +137,7 @@
>                gchar *camera_make;
>                gchar *camera_model;
>                gboolean enabled;
> +               gboolean defish;
>
>                RSLens *lens = list->data;
>
> @@ -152,6 +153,7 @@
>                        "camera-make", &camera_make,
>                        "camera-model", &camera_model,
>                        "enabled", &enabled,
> +                       "defish", &defish,
>                        NULL);
>
>                xmlTextWriterStartElement(writer, BAD_CAST "lens");
> @@ -177,6 +179,7 @@
>                                xmlTextWriterWriteFormatElement(writer,
> BAD_CAST "enabled", "%s", "TRUE");
>                        if (!enabled)
>                                xmlTextWriterWriteFormatElement(writer,
> BAD_CAST "enabled", "%s", "FALSE");
> +                       xmlTextWriterWriteFormatElement(writer, BAD_CAST
> "defish", "%s", defish ? "TRUE": "FALSE");
>                xmlTextWriterEndElement(writer);
>
>                g_free(identifier);
> @@ -258,6 +261,11 @@
>                                                        enabled = TRUE;
>                                                g_object_set(lens,
> "enabled", enabled, NULL);
>                                        }
> +                                       else if ((!xmlStrcmp(entry->name,
> BAD_CAST "defish")))
> +                                       {
> +                                               gboolean defish =
> g_strcmp0((gchar *) val, "TRUE") == 0;
> +                                               g_object_set(lens,
> "defish", defish, NULL);
> +                                       }
>                                        xmlFree(val);
>                                        entry = entry->next;
>                                }
>
> Modified: trunk/librawstudio/rs-lens.c
> ===================================================================
> --- trunk/librawstudio/rs-lens.c        2011-09-10 16:42:03 UTC (rev 4038)
> +++ trunk/librawstudio/rs-lens.c        2011-09-10 20:22:43 UTC (rev 4039)
> @@ -34,6 +34,7 @@
>        gchar *camera_make;
>        gchar *camera_model;
>        gboolean enabled;
> +       gboolean defish;
>  };
>
>  G_DEFINE_TYPE (RSLens, rs_lens, G_TYPE_OBJECT)
> @@ -50,7 +51,8 @@
>        PROP_LENSFUN_MODEL,
>        PROP_CAMERA_MAKE,
>        PROP_CAMERA_MODEL,
> -       PROP_ENABLED
> +       PROP_ENABLED,
> +       PROP_DEFISH
>  };
>
>  static void
> @@ -93,6 +95,9 @@
>                case PROP_ENABLED:
>                        g_value_set_boolean(value, lens->enabled);
>                        break;
> +               case PROP_DEFISH:
> +                       g_value_set_boolean(value, lens->defish);
> +                       break;
>                default:
>                        G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
> property_id, pspec);
>        }
> @@ -140,6 +145,9 @@
>                case PROP_ENABLED:
>                        lens->enabled = g_value_get_boolean(value);
>                        break;
> +               case PROP_DEFISH:
> +                       lens->defish = g_value_get_boolean(value);
> +                       break;
>                default:
>                        G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
> property_id, pspec);
>        }
> @@ -223,6 +231,12 @@
>                PROP_ENABLED, g_param_spec_boolean(
>                "enabled", "enabled", "Specify whether the lens should be
> corrected or not",
>                FALSE, G_PARAM_READWRITE));
> +
> +               g_object_class_install_property(object_class,
> +               PROP_DEFISH, g_param_spec_boolean(
> +               "defish", "defish", "Specify whether fisheye distortion
> should be corrected or not",
> +               FALSE, G_PARAM_READWRITE));
> +
>  }
>
>  static void
> @@ -240,6 +254,7 @@
>        lens->camera_make = NULL;
>        lens->camera_model = NULL;
>        lens->enabled = FALSE;
> +       lens->defish = FALSE;
>  }
>
>  /**
> @@ -367,3 +382,19 @@
>
>        return lens->enabled;
>  }
> +
> +void
> +rs_lens_set_lensfun_defish(RSLens *lens, gboolean enabled)
> +{
> +       g_assert(RS_IS_LENS(lens));
> +
> +       lens->defish = enabled;
> +}
> +
> +gboolean
> +rs_lens_get_lensfun_defish(RSLens *lens)
> +{
> +       g_assert(RS_IS_LENS(lens));
> +
> +       return lens->defish;
> +}
>
> Modified: trunk/librawstudio/rs-lens.h
> ===================================================================
> --- trunk/librawstudio/rs-lens.h        2011-09-10 16:42:03 UTC (rev 4038)
> +++ trunk/librawstudio/rs-lens.h        2011-09-10 20:22:43 UTC (rev 4039)
> @@ -77,6 +77,8 @@
>  void rs_lens_set_lensfun_model(RSLens *lens, gchar *model);
>  void rs_lens_set_lensfun_enabled(RSLens *lens, gboolean enabled);
>  gboolean rs_lens_get_lensfun_enabled(RSLens *lens);
> +void rs_lens_set_lensfun_defish(RSLens *lens, gboolean enabled);
> +gboolean rs_lens_get_lensfun_defish(RSLens *lens);
>
>  G_END_DECLS
>
>
> Modified: trunk/plugins/lensfun/lensfun.c
> ===================================================================
> --- trunk/plugins/lensfun/lensfun.c     2011-09-10 16:42:03 UTC (rev 4038)
> +++ trunk/plugins/lensfun/lensfun.c     2011-09-10 20:22:43 UTC (rev 4039)
> @@ -53,6 +53,7 @@
>        gfloat tca_kb;
>        gfloat vignetting;
>        gboolean distortion_enabled;
> +       gboolean defish;
>
>        lfLens *selected_lens;
>        const lfCamera *selected_camera;
> @@ -79,6 +80,7 @@
>        PROP_TCA_KB,
>        PROP_VIGNETTING,
>        PROP_DISTORTION_ENABLED,
> +       PROP_DEFISH,
>  };
>
>  static void get_property (GObject *object, guint property_id, GValue
> *value, GParamSpec *pspec);
> @@ -166,6 +168,11 @@
>                        "distortion-enabled", "distortion-enabled",
> "distortion-enabled",
>                   FALSE, G_PARAM_READWRITE)
>        );
> +       g_object_class_install_property(object_class,
> +               PROP_DISTORTION_ENABLED, g_param_spec_boolean(
> +                       "defish", "defish", "defish",
> +                  FALSE, G_PARAM_READWRITE)
> +       );
>
>        filter_class->name = "Lensfun filter";
>        filter_class->get_image = get_image;
> @@ -187,6 +194,7 @@
>        lensfun->tca_kb = 0.0;
>        lensfun->vignetting = 0.0;
>        lensfun->distortion_enabled = FALSE;
> +       lensfun->defish = FALSE;
>
>        /* Initialize Lensfun database */
>        lensfun->ldb = lf_db_new ();
> @@ -233,6 +241,9 @@
>                case PROP_DISTORTION_ENABLED:
>                        g_value_set_boolean(value,
> lensfun->distortion_enabled);
>                        break;
> +               case PROP_DEFISH:
> +                       g_value_set_boolean(value, lensfun->defish);
> +                       break;
>                default:
>                        G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
> property_id, pspec);
>        }
> @@ -284,6 +295,11 @@
>                        lensfun->distortion_enabled =
> g_value_get_boolean(value);
>                        rs_filter_changed(RS_FILTER(lensfun),
> RS_FILTER_CHANGED_PIXELDATA);
>                        break;
> +               case PROP_DEFISH:
> +                       lensfun->DIRTY = TRUE;
> +                       lensfun->defish = g_value_get_boolean(value);
> +                       rs_filter_changed(RS_FILTER(lensfun),
> RS_FILTER_CHANGED_PIXELDATA);
> +                       break;
>                default:
>                        G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
> property_id, pspec);
>        }
> @@ -533,6 +549,7 @@
>                }
>
>                lensfun->distortion_enabled =
> rs_lens_get_lensfun_enabled(lensfun->lens);
> +               lensfun->defish =
> rs_lens_get_lensfun_defish(lensfun->lens);
>                if ((!lensfun->selected_lens ||
> !lensfun->distortion_enabled) && lensfun->selected_camera)
>                {
>  //                     g_debug("Lensfun: Lens not found or lens is
> disabled. Using neutral lense.");
> @@ -583,7 +600,6 @@
>        if (lensfun->selected_lens && lf_lens_check((lfLens *)
> lensfun->selected_lens))
>        {
>                gint effective_flags;
> -
>                /* Set TCA */
>                if (ABS(lensfun->tca_kr) > 0.01f || ABS(lensfun->tca_kb) >
> 0.01f)
>                {
> @@ -637,12 +653,13 @@
>                        lensfun->aperture, /* aperture */
>                        1.0, /* distance */
>                        1.0, /* scale */
> -                       LF_UNKNOWN, /* lfLensType targeom, */ /* FIXME: ?
> */
> +                       lensfun->defish ? LF_RECTILINEAR : LF_UNKNOWN, /*
> lfLensType targeom, */
>                        LF_MODIFY_ALL, /* flags */ /* FIXME: ? */
>                        FALSE); /* reverse */
> -
> +#if 0
>                /* Print flags used */
> -#if 0
> +               g_debug("defish:%d", (int)lensfun->defish);
> +               g_debug("crop:%f, focal:%f, aperture:%f ",
> lensfun->selected_camera->CropFactor, lensfun->focal, lensfun->aperture);
>                GString *flags = g_string_new("");
>                if (effective_flags & LF_MODIFY_TCA)
>                        g_string_append(flags, " LF_MODIFY_TCA");
>
>
> _______________________________________________
> Rawstudio-commit mailing list
> [email protected]
> http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit
>
_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit

Reply via email to