~noskcaj/ubuntu/trusty/gthumb/3.2.5

« back to all changes in this revision

Viewing changes to extensions/red_eye_removal/gth-file-tool-red-eye.c

  • Committer: Package Import Robot
  • Author(s): David Paleino
  • Date: 2011-12-22 22:40:29 UTC
  • mfrom: (5.2.19 sid)
  • Revision ID: package-import@ubuntu.com-20111222224029-l58g65u1nfa6ojtg
Tags: 3:2.14.1-1
* New upstream version (Closes: #652692)
* Patches refreshed
* Bump build-dependencies requirements
* Fix FTBFS, added missing #include
* debian/watch fixed to point to new location (.xz tarballs)

Show diffs side-by-side

added added

removed removed

Lines of Context:
39
39
        GdkPixbuf        *src_pixbuf;
40
40
        GtkBuilder       *builder;
41
41
        GthImageSelector *selector;
 
42
        GthZoomChange     original_zoom_change;
 
43
        GdkPixbuf        *new_pixbuf;
42
44
        char             *is_red;
43
45
};
44
46
 
59
61
 
60
62
 
61
63
static void
 
64
ok_button_clicked_cb (GtkButton         *button,
 
65
                      GthFileToolRedEye *self)
 
66
{
 
67
        GtkWidget *window;
 
68
        GtkWidget *viewer_page;
 
69
        GtkWidget *viewer;
 
70
 
 
71
        if (self->priv->new_pixbuf == NULL)
 
72
                return;
 
73
 
 
74
        window = gth_file_tool_get_window (GTH_FILE_TOOL (self));
 
75
        viewer_page = gth_browser_get_viewer_page (GTH_BROWSER (window));
 
76
        viewer = gth_image_viewer_page_get_image_viewer (GTH_IMAGE_VIEWER_PAGE (viewer_page));
 
77
 
 
78
        gth_image_viewer_set_zoom_change (GTH_IMAGE_VIEWER (viewer), self->priv->original_zoom_change);
 
79
        gth_image_viewer_page_set_pixbuf (GTH_IMAGE_VIEWER_PAGE (viewer_page), self->priv->new_pixbuf, TRUE);
 
80
        gth_file_tool_hide_options (GTH_FILE_TOOL (self));
 
81
}
 
82
 
 
83
 
 
84
static void
62
85
cancel_button_clicked_cb (GtkButton         *button,
63
86
                          GthFileToolRedEye *self)
64
87
{
 
88
        GtkWidget *window;
 
89
        GtkWidget *viewer_page;
 
90
        GtkWidget *viewer;
 
91
 
 
92
        window = gth_file_tool_get_window (GTH_FILE_TOOL (self));
 
93
        viewer_page = gth_browser_get_viewer_page (GTH_BROWSER (window));
 
94
        viewer = gth_image_viewer_page_get_image_viewer (GTH_IMAGE_VIEWER_PAGE (viewer_page));
 
95
 
 
96
        gth_image_viewer_set_zoom_change (GTH_IMAGE_VIEWER (viewer), self->priv->original_zoom_change);
 
97
        gth_image_viewer_page_reset (GTH_IMAGE_VIEWER_PAGE (viewer_page));
65
98
        gth_file_tool_hide_options (GTH_FILE_TOOL (self));
66
99
}
67
100
 
272
305
        int       channels;
273
306
        guchar   *pixels;
274
307
        int       search, i, j, ii, jj;
275
 
        int       ad_red, ad_blue, ad_green;
 
308
        int       ad_blue, ad_green;
276
309
        int       rtop, rbot, rleft, rright; /* edges of region */
277
 
        int       num_pix;
278
310
 
279
311
        width = gdk_pixbuf_get_width (pixbuf);
280
312
        height = gdk_pixbuf_get_height (pixbuf);
295
327
 
296
328
                                isred[j + i * width] = 2;
297
329
 
298
 
                                num_pix = find_region (i, j, &rtop, &rbot, &rleft, &rright, isred, width, height);
 
330
                                find_region (i, j, &rtop, &rbot, &rleft, &rright, isred, width, height);
299
331
 
300
332
                                /* Fix the region. */
301
333
                                for (ii = rtop; ii <= rbot; ii++)
304
336
                                                        int ofs;
305
337
 
306
338
                                                        ofs = channels*jj + ii*rowstride;
307
 
                                                        ad_red = pixels[ofs] * RED_FACTOR;
 
339
                                                        /*ad_red = pixels[ofs] * RED_FACTOR;*/
308
340
                                                        ad_green = pixels[ofs + 1] * GREEN_FACTOR;
309
341
                                                        ad_blue = pixels[ofs + 2] * BLUE_FACTOR;
310
342
 
328
360
{
329
361
        GtkWidget *window;
330
362
        GtkWidget *viewer_page;
331
 
        GdkPixbuf *old_pixbuf;
332
 
        GdkPixbuf *new_pixbuf;
333
363
 
334
364
        window = gth_file_tool_get_window (GTH_FILE_TOOL (self));
335
365
        viewer_page = gth_browser_get_viewer_page (GTH_BROWSER (window));
336
366
 
337
 
        old_pixbuf = gth_image_viewer_page_get_pixbuf (GTH_IMAGE_VIEWER_PAGE (viewer_page));
338
 
        new_pixbuf = gdk_pixbuf_copy (old_pixbuf);
339
 
        init_is_red (self, new_pixbuf);
340
 
        if (fix_redeye (new_pixbuf, self->priv->is_red, x, y)) {
341
 
                gth_image_viewer_page_set_pixbuf (GTH_IMAGE_VIEWER_PAGE (viewer_page), new_pixbuf, TRUE);
342
 
                gth_file_tool_hide_options (GTH_FILE_TOOL (self));
343
 
        }
344
 
 
345
 
        g_object_unref (new_pixbuf);
 
367
        _g_object_unref (self->priv->new_pixbuf);
 
368
        self->priv->new_pixbuf = gth_image_viewer_page_get_pixbuf (GTH_IMAGE_VIEWER_PAGE (viewer_page));
 
369
        init_is_red (self, self->priv->new_pixbuf);
 
370
        if (fix_redeye (self->priv->new_pixbuf, self->priv->is_red, x, y))
 
371
                gth_image_viewer_page_set_pixbuf (GTH_IMAGE_VIEWER_PAGE (viewer_page), self->priv->new_pixbuf, FALSE);
346
372
}
347
373
 
348
374
 
380
406
                          "clicked",
381
407
                          G_CALLBACK (cancel_button_clicked_cb),
382
408
                          self);
383
 
 
 
409
        g_signal_connect (GET_WIDGET ("ok_button"),
 
410
                          "clicked",
 
411
                          G_CALLBACK (ok_button_clicked_cb),
 
412
                          self);
384
413
        viewer = gth_image_viewer_page_get_image_viewer (GTH_IMAGE_VIEWER_PAGE (viewer_page));
385
 
        self->priv->selector = (GthImageSelector *) gth_image_selector_new (GTH_IMAGE_VIEWER (viewer), GTH_SELECTOR_TYPE_POINT);
 
414
        self->priv->original_zoom_change = gth_image_viewer_get_zoom_change (GTH_IMAGE_VIEWER (viewer));
 
415
        gth_image_viewer_set_zoom_change (GTH_IMAGE_VIEWER (viewer), GTH_ZOOM_CHANGE_KEEP_PREV);
 
416
        self->priv->selector = (GthImageSelector *) gth_image_selector_new (GTH_SELECTOR_TYPE_POINT);
386
417
        gth_image_selector_set_mask_visible (self->priv->selector, FALSE);
387
418
        g_signal_connect (self->priv->selector,
388
419
                          "selected",
433
464
gth_file_tool_red_eye_instance_init (GthFileToolRedEye *self)
434
465
{
435
466
        self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_FILE_TOOL_RED_EYE, GthFileToolRedEyePrivate);
 
467
        self->priv->new_pixbuf = NULL;
436
468
        self->priv->is_red = NULL;
437
469
        gth_file_tool_construct (GTH_FILE_TOOL (self), "tool-red-eye", _("Red Eye Removal..."), _("Red Eye Removal"), FALSE);
438
470
        gtk_widget_set_tooltip_text (GTK_WIDGET (self), _("Remove the red eye effect caused by camera flashes"));
449
481
 
450
482
        self = (GthFileToolRedEye *) object;
451
483
 
 
484
        _g_object_unref (self->priv->new_pixbuf);
452
485
        g_free (self->priv->is_red);
453
486
        _g_object_unref (self->priv->selector);
454
487
        _g_object_unref (self->priv->builder);