1 /**
2  * Copyright (C) 2012 hejian <hejian.he@gmail.com>
3  *
4  * This program is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 3 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
16  */
17 
18 #include <libgimp/gimp.h>
19 
20 // fix gimp-2.6 issue: Procedure 'gimp-layer-new' has been called with value '100' for argument 'mode'
21 #include <libgimp/gimpui.h>
22 
23 #include "beautify-effect.h"
24 #include "beautify-textures.h"
25 
black_and_white(gint32 image_ID,gint32 drawable_ID)26 static void black_and_white (gint32 image_ID, gint32 drawable_ID)
27 {
28   gint       nreturn_vals;
29   GimpParam *return_vals;
30 
31   return_vals = gimp_run_procedure ("plug-in-colors-channel-mixer",
32                                     &nreturn_vals,
33                                     GIMP_PDB_INT32, 1,
34                                     GIMP_PDB_IMAGE, image_ID,
35                                     GIMP_PDB_DRAWABLE, drawable_ID,
36                                     GIMP_PDB_INT32, 0,
37                                     GIMP_PDB_FLOAT, 0.30,
38                                     GIMP_PDB_FLOAT, 0.59,
39                                     GIMP_PDB_FLOAT, 0.11,
40                                     GIMP_PDB_FLOAT, 0.30,
41                                     GIMP_PDB_FLOAT, 0.59,
42                                     GIMP_PDB_FLOAT, 0.11,
43                                     GIMP_PDB_FLOAT, 0.30,
44                                     GIMP_PDB_FLOAT, 0.59,
45                                     GIMP_PDB_FLOAT, 0.11,
46                                     GIMP_PDB_END);
47   gimp_destroy_params (return_vals, nreturn_vals);
48 
49   //gimp_desaturate_full (drawable_ID, GIMP_DESATURATE_LUMINOSITY);
50 }
51 
52 void
run_effect(gint32 image_ID,BeautifyEffectType effect)53 run_effect (gint32 image_ID, BeautifyEffectType effect)
54 {
55   gimp_context_push ();
56 
57   gint32 layer = gimp_image_get_active_layer (image_ID);
58   gint32 effect_layer = gimp_layer_copy (layer);
59   gimp_image_add_layer (image_ID, effect_layer, -1);
60   //gimp_layer_set_lock_alpha (effect_layer, TRUE);
61 
62   gint width = gimp_image_width (image_ID);
63   gint height = gimp_image_height (image_ID);
64 
65   switch (effect)
66   {
67     case BEAUTIFY_EFFECT_SOFT_LIGHT:
68     {
69       gint32     layer;
70 
71       layer = gimp_layer_copy (effect_layer);
72       gimp_image_add_layer (image_ID, layer, -1);
73       gimp_levels (layer, GIMP_HISTOGRAM_VALUE, 20, 255, 1, 0, 255);
74 
75       GimpParam *return_vals;
76       gint nreturn_vals;
77       return_vals = gimp_run_procedure ("plug-in-gauss",
78                                         &nreturn_vals,
79                                         GIMP_PDB_INT32, GIMP_RUN_NONINTERACTIVE,
80                                         GIMP_PDB_IMAGE, image_ID,
81                                         GIMP_PDB_DRAWABLE, layer,
82                                         GIMP_PDB_FLOAT, 15.0,
83                                         GIMP_PDB_FLOAT, 15.0,
84                                         GIMP_PDB_INT32, 1,
85                                         GIMP_PDB_END);
86       gimp_destroy_params (return_vals, nreturn_vals);
87 
88       gimp_layer_set_mode (layer, GIMP_SCREEN_MODE);
89       gimp_layer_set_opacity (layer, 35);
90       gimp_image_merge_down (image_ID, layer, GIMP_CLIP_TO_IMAGE);
91 
92       break;
93     }
94     case BEAUTIFY_EFFECT_WARM:
95     {
96       guint8 red_pts[] = {
97         0.0, 0.082031 * 255,
98         0.405488 * 255, 0.621094 * 255,
99         0.954268 * 255, 1.000000 * 255,
100       };
101       guint8 green_pts[] = {
102         0.0, 0.0,
103         0.503049 * 255, 0.636719 * 255,
104         1.000000 * 255, 1.000000 * 255,
105       };
106       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_RED, 6, red_pts);
107       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_GREEN, 6, green_pts);
108     }
109       break;
110 
111     case BEAUTIFY_EFFECT_SHARPEN:
112     {
113       gint nreturn_vals;
114       GimpParam *return_vals = gimp_run_procedure ("plug-in-sharpen",
115                                                    &nreturn_vals,
116                                                    GIMP_PDB_INT32, 1,
117                                                    GIMP_PDB_IMAGE, image_ID,
118                                                    GIMP_PDB_DRAWABLE, effect_layer,
119                                                    GIMP_PDB_INT32, 50,
120                                                    GIMP_PDB_END);
121       gimp_destroy_params (return_vals, nreturn_vals);
122       break;
123     }
124     case BEAUTIFY_EFFECT_SOFT:
125     {
126       gint nreturn_vals;
127       GimpParam *return_vals = gimp_run_procedure ("plug-in-gauss",
128                                                    &nreturn_vals,
129                                                    GIMP_PDB_INT32, 1,
130                                                    GIMP_PDB_IMAGE, image_ID,
131                                                    GIMP_PDB_DRAWABLE, effect_layer,
132                                                    GIMP_PDB_FLOAT, 1.2,
133                                                    GIMP_PDB_FLOAT, 1.2,
134                                                    GIMP_PDB_INT32, 1,
135                                                    GIMP_PDB_END);
136       gimp_destroy_params (return_vals, nreturn_vals);
137       break;
138     }
139     case BEAUTIFY_EFFECT_STRONG_CONTRAST:
140     {
141       guint8 red_pts[] = {
142         0.000000 * 255, 0.003922 * 255,
143         0.121569 * 255, 0.039216 * 255,
144         0.247059 * 255, 0.105882 * 255,
145         0.372549 * 255, 0.235294 * 255,
146         0.498039 * 255, 0.537255 * 255,
147         0.623529 * 255, 0.768627 * 255,
148         0.749020 * 255, 0.858824 * 255,
149         0.874510 * 255, 0.929412 * 255,
150         1.000000 * 255, 1.000000 * 255,
151       };
152       guint8 green_pts[] = {
153         0.000000 * 255, 0.003922 * 255,
154         0.121569 * 255, 0.027451 * 255,
155         0.247059 * 255, 0.117647 * 255,
156         0.372549 * 255, 0.286275 * 255,
157         0.498039 * 255, 0.576471 * 255,
158         0.623529 * 255, 0.780392 * 255,
159         0.749020 * 255, 0.890196 * 255,
160         0.874510 * 255, 0.952941 * 255,
161         1.000000 * 255, 1.000000 * 255,
162       };
163       guint8 blue_pts[] = {
164         0.000000 * 255, 0.003922 * 255,
165         0.121569 * 255, 0.050980 * 255,
166         0.247059 * 255, 0.133333 * 255,
167         0.372549 * 255, 0.294118 * 255,
168         0.498039 * 255, 0.568627 * 255,
169         0.623529 * 255, 0.772549 * 255,
170         0.749020 * 255, 0.874510 * 255,
171         0.874510 * 255, 0.941176 * 255,
172         1.000000 * 255, 1.000000 * 255,
173       };
174       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_RED, 18, red_pts);
175       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_GREEN, 18, green_pts);
176       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_BLUE, 18, blue_pts);
177       break;
178     }
179     case BEAUTIFY_EFFECT_SMART_COLOR:
180     {
181       guint8 red_pts[] = {
182         0.0, 0.001012 * 255, 0.121569 * 255, 0.126695 * 255,
183         0.247059 * 255, 0.279821 * 255, 0.372549 * 255, 0.428038 * 255,
184         0.498039 * 255, 0.567700 * 255, 0.623529 * 255, 0.699439 * 255,
185         0.749020 * 255, 0.821423 * 255, 0.874510 * 255, 0.953474 * 255,
186         1.000000 * 255, 0.997988 * 255,
187       };
188       guint8 green_pts[] = {
189         0.0, 0.004278 * 255, 0.121569 * 255, 0.107139 * 255,
190         0.247059 * 255, 0.225961 * 255, 0.372549 * 255, 0.346578 * 255,
191         0.498039 * 255, 0.472647 * 255, 0.623529 * 255, 0.602136 * 255,
192         0.749020 * 255, 0.730046 * 255, 0.874510 * 255, 0.873495 * 255,
193         1.000000 * 255, 0.996787 * 255,
194       };
195       guint8 blue_pts[] = {
196         0.0, 0.000105 * 255, 0.121569 * 255, 0.060601 * 255,
197         0.247059 * 255, 0.146772 * 255, 0.372549 * 255, 0.262680 * 255,
198         0.498039 * 255, 0.408053 * 255, 0.623529 * 255, 0.566459 * 255,
199         0.749020 * 255, 0.691468 * 255, 0.874510 * 255, 0.847356 * 255,
200         1.000000 * 255, 0.999226 * 255,
201       };
202       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_RED, 18, red_pts);
203       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_GREEN, 18, green_pts);
204       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_BLUE, 18, blue_pts);
205     }
206       break;
207     case BEAUTIFY_EFFECT_BLACK_AND_WHITE:
208     {
209       black_and_white (image_ID, effect_layer);
210       break;
211     }
212     case BEAUTIFY_EFFECT_INVERT:
213       gimp_invert (effect_layer);
214       break;
215     case BEAUTIFY_EFFECT_CLASSIC_LOMO:
216     {
217       gint32     layer;
218       GdkPixbuf *pixbuf;
219 
220       pixbuf = gdk_pixbuf_new_from_inline (-1, texture_classic_LOMO_1, FALSE, NULL);
221       layer = gimp_layer_new_from_pixbuf (image_ID, "texture", pixbuf, 100, GIMP_OVERLAY_MODE, 0, 0);
222       gimp_image_add_layer (image_ID, layer, -1);
223       gimp_layer_scale (layer, width, height, FALSE);
224       gimp_image_merge_down (image_ID, layer, GIMP_CLIP_TO_BOTTOM_LAYER);
225 
226       guint8 red_pts[] = {
227         0.000000 * 255, 0.000430 * 255,
228         0.121569 * 255, 0.034226 * 255,
229         0.247059 * 255, 0.156268 * 255,
230         0.372549 * 255, 0.337497 * 255,
231         0.498039 * 255, 0.542195 * 255,
232         0.623529 * 255, 0.728355 * 255,
233         0.749020 * 255, 0.862534 * 255,
234         0.874510 * 255, 0.942754 * 255,
235         1.000000 * 255, 0.994413 * 255,
236       };
237       guint8 green_pts[] = {
238         0.000000 * 255, 0.000167 * 255,
239         0.121569 * 255, 0.023472 * 255,
240         0.247059 * 255, 0.139498 * 255,
241         0.372549 * 255, 0.318074 * 255,
242         0.498039 * 255, 0.520901 * 255,
243         0.623529 * 255, 0.705862 * 255,
244         0.749020 * 255, 0.849380 * 255,
245         0.874510 * 255, 0.952092 * 255,
246         1.000000 * 255, 0.994484 * 255,
247       };
248       guint8 blue_pts[] = {
249         0.000000 * 255, 0.000377 * 255,
250         0.121569 * 255, 0.030137 * 255,
251         0.247059 * 255, 0.160170 * 255,
252         0.372549 * 255, 0.335944 * 255,
253         0.498039 * 255, 0.545279 * 255,
254         0.623529 * 255, 0.719690 * 255,
255         0.749020 * 255, 0.867722 * 255,
256         0.874510 * 255, 0.965811 * 255,
257         1.000000 * 255, 0.995110 * 255,
258       };
259       layer = gimp_image_get_active_layer (image_ID);
260       gimp_curves_spline (layer, GIMP_HISTOGRAM_RED, 18, red_pts);
261       gimp_curves_spline (layer, GIMP_HISTOGRAM_GREEN, 18, green_pts);
262       gimp_curves_spline (layer, GIMP_HISTOGRAM_BLUE, 18, blue_pts);
263 
264       pixbuf = gdk_pixbuf_new_from_inline (-1, texture_classic_LOMO_2, FALSE, NULL);
265       layer = gimp_layer_new_from_pixbuf (image_ID, "texture", pixbuf, 100, GIMP_MULTIPLY_MODE, 0, 0);
266       gimp_image_add_layer (image_ID, layer, -1);
267       gimp_layer_scale (layer, width, height, FALSE);
268       gimp_image_merge_down (image_ID, layer, GIMP_CLIP_TO_BOTTOM_LAYER);
269 
270       break;
271     }
272     case BEAUTIFY_EFFECT_RETRO_LOMO:
273     {
274       guint8 red_pts[] = {
275         0.000000 * 255, 0.009477 * 255,
276         0.121569 * 255, 0.066342 * 255,
277         0.247059 * 255, 0.211570 * 255,
278         0.372549 * 255, 0.391796 * 255,
279         0.498039 * 255, 0.576389 * 255,
280         0.623529 * 255, 0.745091 * 255,
281         0.749020 * 255, 0.875015 * 255,
282         0.874510 * 255, 0.959604 * 255,
283         1.000000 * 255, 0.989234 * 255,
284       };
285       guint8 green_pts[] = {
286         0.000000 * 255, 0.075980 * 255,
287         0.121569 * 255, 0.176692 * 255,
288         0.247059 * 255, 0.294329 * 255,
289         0.372549 * 255, 0.415297 * 255,
290         0.498039 * 255, 0.536491 * 255,
291         0.623529 * 255, 0.651230 * 255,
292         0.749020 * 255, 0.751355 * 255,
293         0.874510 * 255, 0.843675 * 255,
294         1.000000 * 255, 0.921772 * 255,
295       };
296       guint8 blue_pts[] = {
297         0.000000 * 255, 0.246068 * 255,
298         0.121569 * 255, 0.310134 * 255,
299         0.247059 * 255, 0.373558 * 255,
300         0.372549 * 255, 0.435251 * 255,
301         0.498039 * 255, 0.503361 * 255,
302         0.623529 * 255, 0.565592 * 255,
303         0.749020 * 255, 0.629995 * 255,
304         0.874510 * 255, 0.690267 * 255,
305         1.000000 * 255, 0.751997 * 255,
306       };
307       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_RED, 18, red_pts);
308       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_GREEN, 18, green_pts);
309       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_BLUE, 18, blue_pts);
310 
311       gint       nreturn_vals;
312       GimpParam *return_vals;
313 
314       return_vals = gimp_run_procedure ("plug-in-rgb-noise",
315                                         &nreturn_vals,
316                                         GIMP_PDB_INT32, 1,
317                                         GIMP_PDB_IMAGE, image_ID,
318                                         GIMP_PDB_DRAWABLE, effect_layer,
319                                         GIMP_PDB_INT32, 0,
320                                         GIMP_PDB_INT32, 0,
321                                         GIMP_PDB_FLOAT, 0.03,
322                                         GIMP_PDB_FLOAT, 0.03,
323                                         GIMP_PDB_FLOAT, 0.03,
324                                         GIMP_PDB_FLOAT, 0.03,
325                                         GIMP_PDB_END);
326       gimp_destroy_params (return_vals, nreturn_vals);
327 
328       break;
329     }
330     case BEAUTIFY_EFFECT_GOTHIC_STYLE:
331     {
332       guint8 red_pts[] = {
333         0.0, 0.003922 * 255, 0.121569 * 255, 0.011765 * 255,
334         0.247059 * 255, 0.074510 * 255, 0.372549 * 255, 0.200000 * 255,
335         0.498039 * 255, 0.380392 * 255, 0.623529 * 255, 0.584314 * 255,
336         0.749020 * 255, 0.784314 * 255, 0.874510 * 255, 0.933333 * 255,
337         1.000000 * 255, 1.000000 * 255,
338       };
339       guint8 green_pts[] = {
340         0.0, 0.003922 * 255, 0.121569 * 255, 0.039216 * 255,
341         0.247059 * 255, 0.160784 * 255, 0.372549 * 255, 0.317647 * 255,
342         0.498039 * 255, 0.501961 * 255, 0.623529 * 255, 0.682353 * 255,
343         0.749020 * 255, 0.843137 * 255, 0.874510 * 255, 0.952941 * 255,
344         1.000000 * 255, 1.000000 * 255,
345       };
346       guint8 blue_pts[] = {
347         0.0, 0.003922 * 255, 0.121569 * 255, 0.007843 * 255,
348         0.247059 * 255, 0.058824 * 255, 0.372549 * 255, 0.172549 * 255,
349         0.498039 * 255, 0.349020 * 255, 0.623529 * 255, 0.556863 * 255,
350         0.749020 * 255, 0.768627 * 255, 0.874510 * 255, 0.929412 * 255,
351         1.000000 * 255, 1.000000 * 255,
352       };
353       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_RED, 18, red_pts);
354       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_GREEN, 18, green_pts);
355       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_BLUE, 18, blue_pts);
356     }
357       break;
358     case BEAUTIFY_EFFECT_FILM:
359     {
360       guint8 red_pts[] = {
361         0.000000 * 255, 0.101961 * 255,
362         0.121569 * 255, 0.101961 * 255,
363         0.247059 * 255, 0.164706 * 255,
364         0.372549 * 255, 0.333333 * 255,
365         0.498039 * 255, 0.521569 * 255,
366         0.623529 * 255, 0.701961 * 255,
367         0.749020 * 255, 0.850980 * 255,
368         0.874510 * 255, 0.956863 * 255,
369         1.000000 * 255, 1.000000 * 255,
370       };
371       guint8 green_pts[] = {
372         0.000000 * 255, 0.192157 * 255,
373         0.121569 * 255, 0.192157 * 255,
374         0.247059 * 255, 0.192157 * 255,
375         0.372549 * 255, 0.329412 * 255,
376         0.498039 * 255, 0.517647 * 255,
377         0.623529 * 255, 0.698039 * 255,
378         0.749020 * 255, 0.850980 * 255,
379         0.874510 * 255, 0.956863 * 255,
380         1.000000 * 255, 1.000000 * 255,
381       };
382       guint8 blue_pts[] = {
383         0.000000 * 255, 0.266667 * 255,
384         0.121569 * 255, 0.266667 * 255,
385         0.247059 * 255, 0.266667 * 255,
386         0.372549 * 255, 0.290196 * 255,
387         0.498039 * 255, 0.470588 * 255,
388         0.623529 * 255, 0.658824 * 255,
389         0.749020 * 255, 0.827451 * 255,
390         0.874510 * 255, 0.949020 * 255,
391         1.000000 * 255, 1.000000 * 255,
392       };
393       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_RED, 18, red_pts);
394       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_GREEN, 18, green_pts);
395       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_BLUE, 18, blue_pts);
396       break;
397     }
398     case BEAUTIFY_EFFECT_HDR:
399     {
400       guint8 red_pts[] = {
401         0.000000 * 255, 0.003922 * 255,
402         0.121569 * 255, 0.015686 * 255,
403         0.247059 * 255, 0.207843 * 255,
404         0.372549 * 255, 0.396078 * 255,
405         0.498039 * 255, 0.556863 * 255,
406         0.623529 * 255, 0.698039 * 255,
407         0.749020 * 255, 0.811765 * 255,
408         0.874510 * 255, 0.909804 * 255,
409         1.000000 * 255, 1.000000 * 255,
410       };
411       guint8 green_pts[] = {
412         0.000000 * 255, 0.003922 * 255,
413         0.121569 * 255, 0.015686 * 255,
414         0.247059 * 255, 0.200000 * 255,
415         0.372549 * 255, 0.384314 * 255,
416         0.498039 * 255, 0.541176 * 255,
417         0.623529 * 255, 0.682353 * 255,
418         0.749020 * 255, 0.800000 * 255,
419         0.874510 * 255, 0.901961 * 255,
420         1.000000 * 255, 1.000000 * 255,
421       };
422       guint8 blue_pts[] = {
423         0.000000 * 255, 0.054902 * 255,
424         0.121569 * 255, 0.121569 * 255,
425         0.247059 * 255, 0.262745 * 255,
426         0.372549 * 255, 0.407843 * 255,
427         0.498039 * 255, 0.537255 * 255,
428         0.623529 * 255, 0.662745 * 255,
429         0.749020 * 255, 0.780392 * 255,
430         0.874510 * 255, 0.890196 * 255,
431         1.000000 * 255, 1.000000 * 255,
432       };
433       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_RED, 18, red_pts);
434       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_GREEN, 18, green_pts);
435       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_BLUE, 18, blue_pts);
436       break;
437     }
438     case BEAUTIFY_EFFECT_CLASSIC_HDR:
439     {
440       guint8 red_pts[] = {
441         0.0, 0.054902 * 255, 0.121569 * 255, 0.070588 * 255,
442         0.247059 * 255, 0.243137 * 255, 0.372549 * 255, 0.407843 * 255,
443         0.498039 * 255, 0.552941 * 255, 0.623529 * 255, 0.678431 * 255,
444         0.749020 * 255, 0.780392 * 255, 0.874510 * 255, 0.866667 * 255,
445         1.000000 * 255, 0.949020 * 255,
446       };
447       guint8 green_pts[] = {
448         0.0, 0.007843 * 255, 0.121569 * 255, 0.023529 * 255,
449         0.247059 * 255, 0.207843 * 255, 0.372549 * 255, 0.388235 * 255,
450         0.498039 * 255, 0.541176 * 255, 0.623529 * 255, 0.682353 * 255,
451         0.749020 * 255, 0.796078 * 255, 0.874510 * 255, 0.898039 * 255,
452         1.000000 * 255, 0.996078 * 255,
453       };
454       guint8 blue_pts[] = {
455         0.0, 0.258824 * 255, 0.121569 * 255, 0.294118 * 255,
456         0.247059 * 255, 0.372549 * 255, 0.372549 * 255, 0.450980 * 255,
457         0.498039 * 255, 0.521569 * 255, 0.623529 * 255, 0.592157 * 255,
458         0.749020 * 255, 0.654902 * 255, 0.874510 * 255, 0.717647 * 255,
459         1.000000 * 255, 0.776471 * 255,
460       };
461       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_RED, 18, red_pts);
462       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_GREEN, 18, green_pts);
463       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_BLUE, 18, blue_pts);
464     }
465       break;
466     case BEAUTIFY_EFFECT_YELLOWING_DARK_CORNERS:
467     {
468       guint8 red_pts[] = {
469         0.000000 * 255, 0.093137 * 255,
470         0.121569 * 255, 0.125134 * 255,
471         0.247059 * 255, 0.227000 * 255,
472         0.372549 * 255, 0.372794 * 255,
473         0.498039 * 255, 0.537491 * 255,
474         0.623529 * 255, 0.706434 * 255,
475         0.749020 * 255, 0.852155 * 255,
476         0.874510 * 255, 0.953969 * 255,
477         1.000000 * 255, 0.996078 * 255,
478       };
479       guint8 green_pts[] = {
480         0.000000 * 255, 0.092647 * 255,
481         0.121569 * 255, 0.125205 * 255,
482         0.247059 * 255, 0.227129 * 255,
483         0.372549 * 255, 0.372871 * 255,
484         0.498039 * 255, 0.537711 * 255,
485         0.623529 * 255, 0.706357 * 255,
486         0.749020 * 255, 0.851153 * 255,
487         0.874510 * 255, 0.953240 * 255,
488         1.000000 * 255, 0.996078 * 255,
489       };
490       guint8 blue_pts[] = {
491         0.000000 * 255, 0.003922 * 255,
492         0.121569 * 255, 0.029810 * 255,
493         0.247059 * 255, 0.143778 * 255,
494         0.372549 * 255, 0.305764 * 255,
495         0.498039 * 255, 0.488796 * 255,
496         0.623529 * 255, 0.672134 * 255,
497         0.749020 * 255, 0.833704 * 255,
498         0.874510 * 255, 0.948010 * 255,
499         1.000000 * 255, 0.996078 * 255,
500       };
501       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_RED, 18, red_pts);
502       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_GREEN, 18, green_pts);
503       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_BLUE, 18, blue_pts);
504 
505       gint32     layer;
506       GdkPixbuf *pixbuf;
507 
508       pixbuf = gdk_pixbuf_new_from_inline (-1, texture_yellowing_dark_corners, FALSE, NULL);
509       layer = gimp_layer_new_from_pixbuf (image_ID, "texture", pixbuf, 100, GIMP_MULTIPLY_MODE, 0, 0);
510       gimp_image_add_layer (image_ID, layer, -1);
511       gimp_layer_scale (layer, width, height, FALSE);
512       gimp_image_merge_down (image_ID, layer, GIMP_CLIP_TO_BOTTOM_LAYER);
513 
514       break;
515     }
516     case BEAUTIFY_EFFECT_IMPRESSION:
517     {
518       guint8 red_pts[] = {
519         0.000000 * 255, 0.113725 * 255,
520         0.121569 * 255, 0.213975 * 255,
521         0.247059 * 255, 0.323494 * 255,
522         0.372549 * 255, 0.460137 * 255,
523         0.498039 * 255, 0.621504 * 255,
524         0.623529 * 255, 0.716847 * 255,
525         0.749020 * 255, 0.766909 * 255,
526         0.874510 * 255, 0.817666 * 255,
527         1.000000 * 255, 0.862745 * 255,
528       };
529       guint8 green_pts[] = {
530         0.000000 * 255, 0.200000 * 255,
531         0.121569 * 255, 0.317329 * 255,
532         0.247059 * 255, 0.407881 * 255,
533         0.372549 * 255, 0.535429 * 255,
534         0.498039 * 255, 0.682828 * 255,
535         0.623529 * 255, 0.770688 * 255,
536         0.749020 * 255, 0.813005 * 255,
537         0.874510 * 255, 0.852891 * 255,
538         1.000000 * 255, 0.902716 * 255,
539       };
540       guint8 blue_pts[] = {
541         0.000000 * 255, 0.317714 * 255,
542         0.121569 * 255, 0.364205 * 255,
543         0.247059 * 255, 0.417294 * 255,
544         0.372549 * 255, 0.495841 * 255,
545         0.498039 * 255, 0.612710 * 255,
546         0.623529 * 255, 0.719834 * 255,
547         0.749020 * 255, 0.795937 * 255,
548         0.874510 * 255, 0.845977 * 255,
549         1.000000 * 255, 0.883024 * 255,
550       };
551       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_RED, 18, red_pts);
552       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_GREEN, 18, green_pts);
553       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_BLUE, 18, blue_pts);
554       break;
555     }
556     case BEAUTIFY_EFFECT_DEEP_BLUE_TEAR_RAIN:
557     {
558       guint8 red_pts[] = {
559         0.000000 * 255, 0.003922 * 255,
560         0.121569 * 255, 0.094118 * 255,
561         0.247059 * 255, 0.254902 * 255,
562         0.372549 * 255, 0.439216 * 255,
563         0.498039 * 255, 0.603922 * 255,
564         0.623529 * 255, 0.745098 * 255,
565         0.749020 * 255, 0.850980 * 255,
566         0.874510 * 255, 0.941176 * 255,
567         1.000000 * 255, 0.992157 * 255,
568       };
569       guint8 green_pts[] = {
570         0.000000 * 255, 0.019608 * 255,
571         0.121569 * 255, 0.164706 * 255,
572         0.247059 * 255, 0.337255 * 255,
573         0.372549 * 255, 0.509804 * 255,
574         0.498039 * 255, 0.666667 * 255,
575         0.623529 * 255, 0.784314 * 255,
576         0.749020 * 255, 0.878431 * 255,
577         0.874510 * 255, 0.941176 * 255,
578         1.000000 * 255, 0.992157 * 255,
579       };
580       guint8 blue_pts[] = {
581         0.000000 * 255, 0.133333 * 255,
582         0.121569 * 255, 0.333333 * 255,
583         0.247059 * 255, 0.494118 * 255,
584         0.372549 * 255, 0.643137 * 255,
585         0.498039 * 255, 0.760784 * 255,
586         0.623529 * 255, 0.850980 * 255,
587         0.749020 * 255, 0.913725 * 255,
588         0.874510 * 255, 0.964706 * 255,
589         1.000000 * 255, 0.988235 * 255,
590       };
591       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_RED, 18, red_pts);
592       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_GREEN, 18, green_pts);
593       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_BLUE, 18, blue_pts);
594       break;
595     }
596     case BEAUTIFY_EFFECT_PURPLE_SENSATION:
597     {
598       guint8 red_pts[] = {
599         0.000000 * 255, 0.003922 * 255,
600         0.121569 * 255, 0.003922 * 255,
601         0.247059 * 255, 0.149020 * 255,
602         0.372549 * 255, 0.345098 * 255,
603         0.498039 * 255, 0.541176 * 255,
604         0.623529 * 255, 0.725490 * 255,
605         0.749020 * 255, 0.870588 * 255,
606         0.874510 * 255, 0.960784 * 255,
607         1.000000 * 255, 1.000000 * 255,
608       };
609       guint8 green_pts[] = {
610         0.000000 * 255, 0.003922 * 255,
611         0.121569 * 255, 0.003922 * 255,
612         0.247059 * 255, 0.003922 * 255,
613         0.372549 * 255, 0.274510 * 255,
614         0.498039 * 255, 0.521569 * 255,
615         0.623529 * 255, 0.713725 * 255,
616         0.749020 * 255, 0.862745 * 255,
617         0.874510 * 255, 0.952941 * 255,
618         1.000000 * 255, 1.000000 * 255,
619       };
620       guint8 blue_pts[] = {
621         0.000000 * 255, 0.007843 * 255,
622         0.121569 * 255, 0.070588 * 255,
623         0.247059 * 255, 0.313725 * 255,
624         0.372549 * 255, 0.513725 * 255,
625         0.498039 * 255, 0.682353 * 255,
626         0.623529 * 255, 0.811765 * 255,
627         0.749020 * 255, 0.905882 * 255,
628         0.874510 * 255, 0.968627 * 255,
629         1.000000 * 255, 1.000000 * 255,
630       };
631       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_RED, 18, red_pts);
632       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_GREEN, 18, green_pts);
633       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_BLUE, 18, blue_pts);
634       break;
635     }
636     case BEAUTIFY_EFFECT_BRONZE:
637     {
638       guint8 red_pts[] = {
639         0.000000 * 255, 0.003922 * 255,
640         0.121569 * 255, 0.078431 * 255,
641         0.247059 * 255, 0.196078 * 255,
642         0.372549 * 255, 0.341176 * 255,
643         0.498039 * 255, 0.494118 * 255,
644         0.623529 * 255, 0.650980 * 255,
645         0.749020 * 255, 0.729412 * 255,
646         0.874510 * 255, 0.729412 * 255,
647         1.000000 * 255, 0.729412 * 255,
648       };
649       guint8 green_pts[] = {
650         0.000000 * 255, 0.003922 * 255,
651         0.121569 * 255, 0.078431 * 255,
652         0.247059 * 255, 0.196078 * 255,
653         0.372549 * 255, 0.341176 * 255,
654         0.498039 * 255, 0.494118 * 255,
655         0.623529 * 255, 0.650980 * 255,
656         0.749020 * 255, 0.792157 * 255,
657         0.874510 * 255, 0.913725 * 255,
658         1.000000 * 255, 0.925490 * 255,
659       };
660       guint8 blue_pts[] = {
661         0.000000 * 255, 0.450980 * 255,
662         0.121569 * 255, 0.450980 * 255,
663         0.247059 * 255, 0.450980 * 255,
664         0.372549 * 255, 0.450980 * 255,
665         0.498039 * 255, 0.494118 * 255,
666         0.623529 * 255, 0.650980 * 255,
667         0.749020 * 255, 0.792157 * 255,
668         0.874510 * 255, 0.913725 * 255,
669         1.000000 * 255, 1.000000 * 255,
670       };
671       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_RED, 18, red_pts);
672       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_GREEN, 18, green_pts);
673       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_BLUE, 18, blue_pts);
674       break;
675     }
676     case BEAUTIFY_EFFECT_RECALL:
677     {
678       gint32     layer;
679       GdkPixbuf *pixbuf;
680 
681       pixbuf = gdk_pixbuf_new_from_inline (-1, texture_recall, FALSE, NULL);
682       layer = gimp_layer_new_from_pixbuf (image_ID, "texture", pixbuf, 100, GIMP_MULTIPLY_MODE, 0, 0);
683       gimp_image_add_layer (image_ID, layer, -1);
684       gimp_layer_scale (layer, width, height, FALSE);
685       gimp_image_merge_down (image_ID, layer, GIMP_CLIP_TO_BOTTOM_LAYER);
686       break;
687     }
688     case BEAUTIFY_EFFECT_ELEGANT:
689     {
690       gimp_hue_saturation (effect_layer, GIMP_ALL_HUES, 0, 0, -40);
691 
692       guint8 red_pts[] = {
693         0.000000 * 255, 0.000171 * 255,
694         0.121569 * 255, 0.047560 * 255,
695         0.247059 * 255, 0.162212 * 255,
696         0.372549 * 255, 0.329729 * 255,
697         0.498039 * 255, 0.520206 * 255,
698         0.623529 * 255, 0.704597 * 255,
699         0.749020 * 255, 0.849098 * 255,
700         0.874510 * 255, 0.971076 * 255,
701         1.000000 * 255, 0.996078 * 255,
702       };
703       guint8 green_pts[] = {
704         0.000000 * 255, 0.007843 * 255,
705         0.121569 * 255, 0.063296 * 255,
706         0.247059 * 255, 0.177207 * 255,
707         0.372549 * 255, 0.326921 * 255,
708         0.498039 * 255, 0.494137 * 255,
709         0.623529 * 255, 0.653138 * 255,
710         0.749020 * 255, 0.799763 * 255,
711         0.874510 * 255, 0.903914 * 255,
712         1.000000 * 255, 0.949020 * 255,
713       };
714       guint8 blue_pts[] = {
715         0.000000 * 255, 0.031373 * 255,
716         0.121569 * 255, 0.103265 * 255,
717         0.247059 * 255, 0.214688 * 255,
718         0.372549 * 255, 0.347533 * 255,
719         0.498039 * 255, 0.485165 * 255,
720         0.623529 * 255, 0.619805 * 255,
721         0.749020 * 255, 0.751388 * 255,
722         0.874510 * 255, 0.868222 * 255,
723         1.000000 * 255, 0.949020 * 255,
724       };
725       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_RED, 18, red_pts);
726       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_GREEN, 18, green_pts);
727       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_BLUE, 18, blue_pts);
728 
729       break;
730     }
731     case BEAUTIFY_EFFECT_LITTLE_FRESH:
732     {
733       guint8 red_pts[] = {
734         0.0, 0.002975 * 255, 0.121569 * 255, 0.135413 * 255,
735         0.247059 * 255, 0.271797 * 255, 0.372549 * 255, 0.420642 * 255,
736         0.498039 * 255, 0.587088 * 255, 0.623529 * 255, 0.672206 * 255,
737         0.749020 * 255, 0.781208 * 255, 0.874510 * 255, 0.881668 * 255,
738         1.000000 * 255, 0.993149 * 255,
739       };
740       guint8 green_pts[] = {
741         0.0, 0.001070 * 255, 0.121569 * 255, 0.123393 * 255,
742         0.247059 * 255, 0.254300 * 255, 0.372549 * 255, 0.377336 * 255,
743         0.498039 * 255, 0.486582 * 255, 0.623529 * 255, 0.607331 * 255,
744         0.749020 * 255, 0.722174 * 255, 0.874510 * 255, 0.858206 * 255,
745         1.000000 * 255, 0.992154 * 255,
746       };
747       guint8 blue_pts[] = {
748         0.0, 0.003917 * 255, 0.121569 * 255, 0.098807 * 255,
749         0.247059 * 255, 0.234746 * 255, 0.372549 * 255, 0.378388 * 255,
750         0.498039 * 255, 0.520273 * 255, 0.623529 * 255, 0.633239 * 255,
751         0.749020 * 255, 0.748242 * 255, 0.874510 * 255, 0.862234 * 255,
752         1.000000 * 255, 0.964176 * 255,
753       };
754       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_RED, 18, red_pts);
755       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_GREEN, 18, green_pts);
756       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_BLUE, 18, blue_pts);
757     }
758       break;
759     case BEAUTIFY_EFFECT_CLASSIC_STUDIO:
760     {
761       guint8 red_pts[] = {
762         0.000000 * 255, 0.002941 * 255,
763         0.121569 * 255, 0.105177 * 255,
764         0.247059 * 255, 0.276869 * 255,
765         0.372549 * 255, 0.449951 * 255,
766         0.498039 * 255, 0.615011 * 255,
767         0.623529 * 255, 0.765528 * 255,
768         0.749020 * 255, 0.884498 * 255,
769         0.874510 * 255, 0.964439 * 255,
770         1.000000 * 255, 0.996641 * 255,
771       };
772       guint8 green_pts[] = {
773         0.000000 * 255, 0.000980 * 255,
774         0.121569 * 255, 0.023976 * 255,
775         0.247059 * 255, 0.117564 * 255,
776         0.372549 * 255, 0.268570 * 255,
777         0.498039 * 255, 0.450785 * 255,
778         0.623529 * 255, 0.640827 * 255,
779         0.749020 * 255, 0.821280 * 255,
780         0.874510 * 255, 0.944143 * 255,
781         1.000000 * 255, 0.994046 * 255,
782       };
783       guint8 blue_pts[] = {
784         0.000000 * 255, 0.001705 * 255,
785         0.121569 * 255, 0.091176 * 255,
786         0.247059 * 255, 0.255272 * 255,
787         0.372549 * 255, 0.426934 * 255,
788         0.498039 * 255, 0.599930 * 255,
789         0.623529 * 255, 0.749604 * 255,
790         0.749020 * 255, 0.879809 * 255,
791         0.874510 * 255, 0.963030 * 255,
792         1.000000 * 255, 0.994565 * 255,
793       };
794       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_RED, 18, red_pts);
795       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_GREEN, 18, green_pts);
796       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_BLUE, 18, blue_pts);
797       break;
798     }
799     case BEAUTIFY_EFFECT_RETRO:
800     {
801       guint8 red_pts[] = {
802         0.000000 * 255, 0.011765 * 255,
803         0.121569 * 255, 0.050275 * 255,
804         0.247059 * 255, 0.163976 * 255,
805         0.372549 * 255, 0.316983 * 255,
806         0.498039 * 255, 0.493141 * 255,
807         0.623529 * 255, 0.671170 * 255,
808         0.749020 * 255, 0.829955 * 255,
809         0.874510 * 255, 0.941938 * 255,
810         1.000000 * 255, 0.988797 * 255,
811       };
812       guint8 green_pts[] = {
813         0.000000 * 255, 0.044118 * 255,
814         0.121569 * 255, 0.081048 * 255,
815         0.247059 * 255, 0.181188 * 255,
816         0.372549 * 255, 0.327417 * 255,
817         0.498039 * 255, 0.493717 * 255,
818         0.623529 * 255, 0.658936 * 255,
819         0.749020 * 255, 0.811563 * 255,
820         0.874510 * 255, 0.915557 * 255,
821         1.000000 * 255, 0.956299 * 255,
822       };
823       guint8 blue_pts[] = {
824         0.000000 * 255, 0.247630 * 255,
825         0.121569 * 255, 0.268491 * 255,
826         0.247059 * 255, 0.325230 * 255,
827         0.372549 * 255, 0.405204 * 255,
828         0.498039 * 255, 0.497829 * 255,
829         0.623529 * 255, 0.588839 * 255,
830         0.749020 * 255, 0.675181 * 255,
831         0.874510 * 255, 0.731610 * 255,
832         1.000000 * 255, 0.752075 * 255,
833       };
834       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_RED, 18, red_pts);
835       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_GREEN, 18, green_pts);
836       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_BLUE, 18, blue_pts);
837       break;
838     }
839     case BEAUTIFY_EFFECT_PINK_LADY:
840     {
841       guint8 red_pts[] = {
842         0.000000 * 255, 0.003922 * 255,
843         0.121569 * 255, 0.196078 * 255,
844         0.247059 * 255, 0.356863 * 255,
845         0.372549 * 255, 0.509804 * 255,
846         0.498039 * 255, 0.647059 * 255,
847         0.623529 * 255, 0.760784 * 255,
848         0.749020 * 255, 0.858824 * 255,
849         0.874510 * 255, 0.937255 * 255,
850         1.000000 * 255, 1.000000 * 255,
851       };
852       guint8 green_pts[] = {
853         0.000000 * 255, 0.003922 * 255,
854         0.121569 * 255, 0.180392 * 255,
855         0.247059 * 255, 0.329412 * 255,
856         0.372549 * 255, 0.478431 * 255,
857         0.498039 * 255, 0.611765 * 255,
858         0.623529 * 255, 0.729412 * 255,
859         0.749020 * 255, 0.831373 * 255,
860         0.874510 * 255, 0.921569 * 255,
861         1.000000 * 255, 1.000000 * 255,
862       };
863       guint8 blue_pts[] = {
864         0.000000 * 255, 0.003922 * 255,
865         0.121569 * 255, 0.168627 * 255,
866         0.247059 * 255, 0.317647 * 255,
867         0.372549 * 255, 0.458824 * 255,
868         0.498039 * 255, 0.592157 * 255,
869         0.623529 * 255, 0.709804 * 255,
870         0.749020 * 255, 0.819608 * 255,
871         0.874510 * 255, 0.913725 * 255,
872         1.000000 * 255, 1.000000 * 255,
873       };
874       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_RED, 18, red_pts);
875       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_GREEN, 18, green_pts);
876       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_BLUE, 18, blue_pts);
877       break;
878     }
879     case BEAUTIFY_EFFECT_ABAO_COLOR:
880     {
881       gint       nreturn_vals;
882       GimpParam *return_vals;
883       gint      *layers;
884       gint       num_layers;
885       gint32     layer;
886       gint32     image;
887 
888       return_vals = gimp_run_procedure ("plug-in-decompose",
889                                         &nreturn_vals,
890                                         GIMP_PDB_INT32, 1,
891                                         GIMP_PDB_IMAGE, image_ID,
892                                         GIMP_PDB_DRAWABLE, effect_layer,
893                                         GIMP_PDB_STRING, "LAB",
894                                         GIMP_PDB_INT32, 1,
895                                         GIMP_PDB_END);
896       gint32 lab = return_vals[1].data.d_int32;
897       gimp_destroy_params (return_vals, nreturn_vals);
898 
899       layers = gimp_image_get_layers (lab, &num_layers);
900       return_vals = gimp_run_procedure ("plug-in-drawable-compose",
901                                         &nreturn_vals,
902                                         GIMP_PDB_INT32, 1,
903                                         GIMP_PDB_IMAGE, lab,
904                                         GIMP_PDB_DRAWABLE, layers[0],
905                                         GIMP_PDB_DRAWABLE, layers[1],
906                                         GIMP_PDB_DRAWABLE, layers[2],
907                                         GIMP_PDB_DRAWABLE, 0,
908                                         GIMP_PDB_STRING, "RGB",
909                                         GIMP_PDB_END);
910       gimp_image_delete (lab);
911       image = return_vals[1].data.d_int32;
912       gimp_destroy_params (return_vals, nreturn_vals);
913 
914       guint8 red_pts[] = {
915         0.000000 * 255, 0.003922 * 255,
916         0.121569 * 255, 0.132068 * 255,
917         0.247059 * 255, 0.270845 * 255,
918         0.372549 * 255, 0.400251 * 255,
919         0.498039 * 255, 0.526639 * 255,
920         0.623529 * 255, 0.644370 * 255,
921         0.749020 * 255, 0.777614 * 255,
922         0.874510 * 255, 0.890458 * 255,
923         1.000000 * 255, 0.998224 * 255,
924       };
925       guint8 green_pts[] = {
926         0.000000 * 255, 0.247059 * 255,
927         0.121569 * 255, 0.258731 * 255,
928         0.247059 * 255, 0.288818 * 255,
929         0.372549 * 255, 0.362942 * 255,
930         0.498039 * 255, 0.494041 * 255,
931         0.623529 * 255, 0.613636 * 255,
932         0.749020 * 255, 0.736961 * 255,
933         0.874510 * 255, 0.860510 * 255,
934         1.000000 * 255, 0.905882 * 255,
935       };
936       guint8 blue_pts[] = {
937         0.000000 * 255, 0.766094 * 255,
938         0.121569 * 255, 0.762986 * 255,
939         0.247059 * 255, 0.708980 * 255,
940         0.372549 * 255, 0.587155 * 255,
941         0.498039 * 255, 0.507613 * 255,
942         0.623529 * 255, 0.478932 * 255,
943         0.749020 * 255, 0.458030 * 255,
944         0.874510 * 255, 0.434199 * 255,
945         1.000000 * 255, 0.454517 * 255,
946       };
947       layer = gimp_image_get_active_layer (image);
948       gimp_curves_spline (layer, GIMP_HISTOGRAM_RED, 18, red_pts);
949       gimp_curves_spline (layer, GIMP_HISTOGRAM_GREEN, 18, green_pts);
950       gimp_curves_spline (layer, GIMP_HISTOGRAM_BLUE, 18, blue_pts);
951 
952       layer = gimp_image_get_active_layer (image);
953       return_vals = gimp_run_procedure ("plug-in-decompose",
954                                         &nreturn_vals,
955                                         GIMP_PDB_INT32, 1,
956                                         GIMP_PDB_IMAGE, image,
957                                         GIMP_PDB_DRAWABLE, layer,
958                                         GIMP_PDB_STRING, "RGB",
959                                         GIMP_PDB_INT32, 1,
960                                         GIMP_PDB_END);
961       gimp_image_delete (image);
962       gint32 rgb = return_vals[1].data.d_int32;
963       gimp_destroy_params (return_vals, nreturn_vals);
964 
965       layers = gimp_image_get_layers (rgb, &num_layers);
966       return_vals = gimp_run_procedure ("plug-in-drawable-compose",
967                                         &nreturn_vals,
968                                         GIMP_PDB_INT32, 1,
969                                         GIMP_PDB_IMAGE, rgb,
970                                         GIMP_PDB_DRAWABLE, layers[0],
971                                         GIMP_PDB_DRAWABLE, layers[1],
972                                         GIMP_PDB_DRAWABLE, layers[2],
973                                         GIMP_PDB_DRAWABLE, 0,
974                                         GIMP_PDB_STRING, "LAB",
975                                         GIMP_PDB_END);
976       gimp_image_delete (rgb);
977       image = return_vals[1].data.d_int32;
978       gimp_destroy_params (return_vals, nreturn_vals);
979 
980       layer = gimp_image_get_active_layer (image);
981       gimp_edit_copy (layer);
982       gint32 floating_sel = gimp_edit_paste (effect_layer, FALSE);
983       gimp_floating_sel_anchor (floating_sel);
984 
985       gimp_image_delete (image);
986 
987       /*GimpPixelRgn src_rgn, dest_rgn;
988       gint x1, y1;
989       gint width, height;
990       gpointer pr;
991 
992       GimpDrawable *drawable = gimp_drawable_get (effect_layer);
993       if (!gimp_drawable_mask_intersect (drawable->drawable_id,
994           &x1, &y1, &width, &height))
995         return;
996 
997       gimp_pixel_rgn_init (&src_rgn, drawable, x1, y1, width, height, FALSE, FALSE);
998       gimp_pixel_rgn_init (&dest_rgn, drawable, x1, y1, width, height, TRUE, TRUE);
999       for (pr = gimp_pixel_rgns_register (2, &src_rgn, &dest_rgn);
1000            pr != NULL;
1001            pr = gimp_pixel_rgns_process (pr))
1002       {
1003         const guchar *src = src_rgn.data;
1004         guchar *dest = dest_rgn.data;
1005         gint x, y;
1006 
1007         for (y = 0; y < src_rgn.h; y++)
1008         {
1009           const guchar *s = src;
1010           guchar *d = dest;
1011 
1012           for (x = 0; x < src_rgn.w; x++)
1013           {
1014             gdouble r, g, b;
1015             gdouble v;
1016 
1017             r = (gdouble) s[0] / 255;
1018             g = (gdouble) s[1] / 255;
1019             b = (gdouble) s[2] / 255;
1020 
1021             v = b - 154.0 / 255;
1022             v = MAX (0, v);
1023             v = r + v - g * 172.0 / 255;
1024             v = MIN (1, MAX (0, v));
1025             v = sin(v * G_PI_2);
1026             d[0] = v * 255;
1027 
1028             v = g + (27.0 - r * 27) / 255;
1029             v = MIN (1, v);
1030             d[1] = v * 255;
1031 
1032             v = g + (0.4 + b * 0.2 - sin(r));
1033             v = MIN (1, MAX (0, v));
1034             d[2] = v * 255;
1035 
1036             s += src_rgn.bpp;
1037             d += dest_rgn.bpp;
1038           }
1039 
1040           src += src_rgn.rowstride;
1041           dest += dest_rgn.rowstride;
1042         }
1043       }
1044 
1045       gimp_drawable_flush (drawable);
1046       gimp_drawable_merge_shadow (drawable->drawable_id, TRUE);
1047       gimp_drawable_update (drawable->drawable_id, x1, y1, width, height);*/
1048 
1049       break;
1050     }
1051     case BEAUTIFY_EFFECT_ICE_SPIRIT:
1052     {
1053       guint8 red_pts[] = {
1054         0.0, 0.007843 * 255, 0.121569 * 255, 0.141176 * 255,
1055         0.247059 * 255, 0.286275 * 255, 0.372549 * 255, 0.423529 * 255,
1056         0.498039 * 255, 0.552941 * 255, 0.623529 * 255, 0.674510 * 255,
1057         0.749020 * 255, 0.792157 * 255, 0.874510 * 255, 0.898039 * 255,
1058         1.000000 * 255, 1.000000 * 255,
1059       };
1060       guint8 green_pts[] = {
1061         0.0, 0.007843 * 255, 0.121569 * 255, 0.184314 * 255,
1062         0.247059 * 255, 0.360784 * 255, 0.372549 * 255, 0.517647 * 255,
1063         0.498039 * 255, 0.654902 * 255, 0.623529 * 255, 0.768627 * 255,
1064         0.749020 * 255, 0.866667 * 255, 0.874510 * 255, 0.945098 * 255,
1065         1.000000 * 255, 1.000000 * 255,
1066       };
1067       guint8 blue_pts[] = {
1068         0.0, 0.007843 * 255, 0.121569 * 255, 0.211765 * 255,
1069         0.247059 * 255, 0.407843 * 255, 0.372549 * 255, 0.576471 * 255,
1070         0.498039 * 255, 0.717647 * 255, 0.623529 * 255, 0.827451 * 255,
1071         0.749020 * 255, 0.913725 * 255, 0.874510 * 255, 0.972549 * 255,
1072         1.000000 * 255, 1.000000 * 255,
1073       };
1074       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_RED, 18, red_pts);
1075       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_GREEN, 18, green_pts);
1076       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_BLUE, 18, blue_pts);
1077     }
1078       break;
1079     case BEAUTIFY_EFFECT_JAPANESE_STYLE:
1080     {
1081       guint8 red_pts[] = {
1082         0.0, 0.098039 * 255, 0.121569 * 255, 0.188479 * 255,
1083         0.247059 * 255, 0.329761 * 255, 0.372549 * 255, 0.496682 * 255,
1084         0.498039 * 255, 0.657383 * 255, 0.623529 * 255, 0.787002 * 255,
1085         0.749020 * 255, 0.864444 * 255, 0.874510 * 255, 0.900704 * 255,
1086         1.000000 * 255, 0.917552 * 255,
1087       };
1088       guint8 green_pts[] = {
1089         0.0, 0.103431 * 255, 0.121569 * 255, 0.224676 * 255,
1090         0.247059 * 255, 0.394142 * 255, 0.372549 * 255, 0.541888 * 255,
1091         0.498039 * 255, 0.675963 * 255, 0.623529 * 255, 0.785613 * 255,
1092         0.749020 * 255, 0.893224 * 255, 0.874510 * 255, 0.943625 * 255,
1093         1.000000 * 255, 0.972720 * 255,
1094       };
1095       guint8 blue_pts[] = {
1096         0.0, 0.412025 * 255, 0.121569 * 255, 0.469119 * 255,
1097         0.247059 * 255, 0.615777 * 255, 0.372549 * 255, 0.751174 * 255,
1098         0.498039 * 255, 0.862955 * 255, 0.623529 * 255, 0.954468 * 255,
1099         0.749020 * 255, 0.995760 * 255, 0.874510 * 255, 1.000000 * 255,
1100         1.000000 * 255, 1.000000 * 255,
1101       };
1102       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_RED, 18, red_pts);
1103       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_GREEN, 18, green_pts);
1104       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_BLUE, 18, blue_pts);
1105     }
1106       break;
1107     case BEAUTIFY_EFFECT_NEW_JAPANESE_STYLE:
1108     {
1109       guint8 red_pts[] = {
1110         0.0, 0.042969 * 255,
1111         0.350610 * 255, 0.320312 * 255,
1112         0.621951 * 255, 0.566406 * 255,
1113         0.847561 * 255, 0.632812 * 255,
1114         1.000000 * 255, 0.769531 * 255,
1115       };
1116       guint8 green_pts[] = {
1117         0.0, 0.031250 * 255,
1118         0.125000 * 255, 0.144531 * 255,
1119         0.500000 * 255, 0.523438 * 255,
1120         0.881098 * 255, 0.738281 * 255,
1121         1.000000 * 255, 0.882812 * 255,
1122       };
1123       guint8 blue_pts[] = {
1124         0.0, 0.0,
1125         0.121951 * 255, 0.039062 * 255,
1126         1.000000 * 255, 0.972656 * 255,
1127       };
1128       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_RED, 10, red_pts);
1129       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_GREEN, 10, green_pts);
1130       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_BLUE, 6, blue_pts);
1131     }
1132       break;
1133     case BEAUTIFY_EFFECT_MILK:
1134     {
1135       gint32     layer;
1136       GdkPixbuf *pixbuf;
1137 
1138       pixbuf = gdk_pixbuf_new_from_inline (-1, texture_milk, FALSE, NULL);
1139       layer = gimp_layer_new_from_pixbuf (image_ID, "texture", pixbuf, 20, GIMP_SCREEN_MODE, 0, 0);
1140       gimp_image_add_layer (image_ID, layer, -1);
1141       gimp_layer_scale (layer, width, height, FALSE);
1142       gimp_image_merge_down (image_ID, layer, GIMP_CLIP_TO_BOTTOM_LAYER);
1143 
1144       guint8 red_pts[] = {
1145         0.000000 * 255, 0.309804 * 255,
1146         0.121569 * 255, 0.392252 * 255,
1147         0.247059 * 255, 0.496494 * 255,
1148         0.372549 * 255, 0.597570 * 255,
1149         0.498039 * 255, 0.684511 * 255,
1150         0.623529 * 255, 0.768060 * 255,
1151         0.749020 * 255, 0.843330 * 255,
1152         0.874510 * 255, 0.917231 * 255,
1153         1.000000 * 255, 0.992213 * 255,
1154       };
1155       guint8 green_pts[] = {
1156         0.000000 * 255, 0.299346 * 255,
1157         0.121569 * 255, 0.395641 * 255,
1158         0.247059 * 255, 0.498204 * 255,
1159         0.372549 * 255, 0.597187 * 255,
1160         0.498039 * 255, 0.680991 * 255,
1161         0.623529 * 255, 0.762936 * 255,
1162         0.749020 * 255, 0.841731 * 255,
1163         0.874510 * 255, 0.910444 * 255,
1164         1.000000 * 255, 0.980896 * 255,
1165       };
1166       guint8 blue_pts[] = {
1167         0.000000 * 255, 0.296899 * 255,
1168         0.121569 * 255, 0.400465 * 255,
1169         0.247059 * 255, 0.501991 * 255,
1170         0.372549 * 255, 0.598690 * 255,
1171         0.498039 * 255, 0.685437 * 255,
1172         0.623529 * 255, 0.766052 * 255,
1173         0.749020 * 255, 0.842140 * 255,
1174         0.874510 * 255, 0.913442 * 255,
1175         1.000000 * 255, 0.981385 * 255,
1176       };
1177       layer = gimp_image_get_active_layer (image_ID);
1178       gimp_curves_spline (layer, GIMP_HISTOGRAM_RED, 18, red_pts);
1179       gimp_curves_spline (layer, GIMP_HISTOGRAM_GREEN, 18, green_pts);
1180       gimp_curves_spline (layer, GIMP_HISTOGRAM_BLUE, 18, blue_pts);
1181       break;
1182     }
1183     case BEAUTIFY_EFFECT_OLD_PHOTOS:
1184     {
1185       guint8 red_pts[] = {
1186         0.000000 * 255, 0.030719 * 255,
1187         0.121569 * 255, 0.094286 * 255,
1188         0.247059 * 255, 0.215434 * 255,
1189         0.372549 * 255, 0.446688 * 255,
1190         0.498039 * 255, 0.744585 * 255,
1191         0.623529 * 255, 0.854446 * 255,
1192         0.749020 * 255, 0.909348 * 255,
1193         0.874510 * 255, 0.948601 * 255,
1194         1.000000 * 255, 0.975656 * 255,
1195       };
1196       guint8 green_pts[] = {
1197         0.000000 * 255, 0.111275 * 255,
1198         0.121569 * 255, 0.172338 * 255,
1199         0.247059 * 255, 0.301636 * 255,
1200         0.372549 * 255, 0.462942 * 255,
1201         0.498039 * 255, 0.615155 * 255,
1202         0.623529 * 255, 0.736568 * 255,
1203         0.749020 * 255, 0.807584 * 255,
1204         0.874510 * 255, 0.874171 * 255,
1205         1.000000 * 255, 0.892938 * 255,
1206       };
1207       guint8 blue_pts[] = {
1208         0.000000 * 255, 0.333451 * 255,
1209         0.121569 * 255, 0.423250 * 255,
1210         0.247059 * 255, 0.517089 * 255,
1211         0.372549 * 255, 0.591683 * 255,
1212         0.498039 * 255, 0.631057 * 255,
1213         0.623529 * 255, 0.658333 * 255,
1214         0.749020 * 255, 0.678149 * 255,
1215         0.874510 * 255, 0.678550 * 255,
1216         1.000000 * 255, 0.677872 * 255,
1217       };
1218       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_RED, 18, red_pts);
1219       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_GREEN, 18, green_pts);
1220       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_BLUE, 18, blue_pts);
1221 
1222       gint32     layer;
1223       GdkPixbuf *pixbuf;
1224 
1225       pixbuf = gdk_pixbuf_new_from_inline (-1, texture_old_photos, FALSE, NULL);
1226       layer = gimp_layer_new_from_pixbuf (image_ID, "texture", pixbuf, 100, GIMP_SCREEN_MODE, 0, 0);
1227       gimp_image_add_layer (image_ID, layer, -1);
1228       gimp_layer_scale (layer, width, height, FALSE);
1229       gimp_image_merge_down (image_ID, layer, GIMP_CLIP_TO_BOTTOM_LAYER);
1230 
1231       break;
1232     }
1233     case BEAUTIFY_EFFECT_WARM_YELLOW:
1234     {
1235       guint8 red_pts[] = {
1236         0.0, 0.000980 * 255, 0.121569 * 255, 0.065574 * 255,
1237         0.247059 * 255, 0.213677 * 255, 0.372549 * 255, 0.383298 * 255,
1238         0.498039 * 255, 0.556855 * 255, 0.623529 * 255, 0.726149 * 255,
1239         0.749020 * 255, 0.864046 * 255, 0.874510 * 255, 0.958157 * 255,
1240         1.000000 * 255, 0.996641 * 255,
1241       };
1242       guint8 green_pts[] = {
1243         0.0, 0.005882 * 255, 0.121569 * 255, 0.107837 * 255,
1244         0.247059 * 255, 0.276792 * 255, 0.372549 * 255, 0.452811 * 255,
1245         0.498039 * 255, 0.617782 * 255, 0.623529 * 255, 0.763782 * 255,
1246         0.749020 * 255, 0.886822 * 255, 0.874510 * 255, 0.965223 * 255,
1247         1.000000 * 255, 0.996993 * 255,
1248       };
1249       guint8 blue_pts[] = {
1250         0.0, 0.000495 * 255, 0.121569 * 255, 0.035825 * 255,
1251         0.247059 * 255, 0.149480 * 255, 0.372549 * 255, 0.305398 * 255,
1252         0.498039 * 255, 0.491352 * 255, 0.623529 * 255, 0.670305 * 255,
1253         0.749020 * 255, 0.838898 * 255, 0.874510 * 255, 0.951301 * 255,
1254         1.000000 * 255, 0.994118 * 255,
1255       };
1256       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_RED, 18, red_pts);
1257       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_GREEN, 18, green_pts);
1258       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_BLUE, 18, blue_pts);
1259     }
1260       break;
1261     case BEAUTIFY_EFFECT_BLUES:
1262     {
1263       guint8 red_pts[] = {
1264         0.000000 * 255, 0.003922 * 255,
1265         0.121569 * 255, 0.321569 * 255,
1266         0.247059 * 255, 0.541176 * 255,
1267         0.372549 * 255, 0.713725 * 255,
1268         0.498039 * 255, 0.831373 * 255,
1269         0.623529 * 255, 0.905882 * 255,
1270         0.749020 * 255, 0.952941 * 255,
1271         0.874510 * 255, 0.980392 * 255,
1272         1.000000 * 255, 1.000000 * 255,
1273       };
1274       guint8 green_pts[] = {
1275         0.000000 * 255, 0.003922 * 255,
1276         0.121569 * 255, 0.266667 * 255,
1277         0.247059 * 255, 0.466667 * 255,
1278         0.372549 * 255, 0.627451 * 255,
1279         0.498039 * 255, 0.756863 * 255,
1280         0.623529 * 255, 0.847059 * 255,
1281         0.749020 * 255, 0.917647 * 255,
1282         0.874510 * 255, 0.964706 * 255,
1283         1.000000 * 255, 1.000000 * 255,
1284       };
1285       guint8 blue_pts[] = {
1286         0.000000 * 255, 0.007843 * 255,
1287         0.121569 * 255, 0.286275 * 255,
1288         0.247059 * 255, 0.505882 * 255,
1289         0.372549 * 255, 0.682353 * 255,
1290         0.498039 * 255, 0.811765 * 255,
1291         0.623529 * 255, 0.901961 * 255,
1292         0.749020 * 255, 0.960784 * 255,
1293         0.874510 * 255, 0.988235 * 255,
1294         1.000000 * 255, 0.996078 * 255,
1295       };
1296       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_RED, 18, red_pts);
1297       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_GREEN, 18, green_pts);
1298       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_BLUE, 18, blue_pts);
1299       break;
1300     }
1301     case BEAUTIFY_EFFECT_COLD_BLUE:
1302     {
1303       guint8 red_pts[] = {
1304         0.000000 * 255, 0.000040 * 255,
1305         0.121569 * 255, 0.008043 * 255,
1306         0.247059 * 255, 0.066237 * 255,
1307         0.372549 * 255, 0.184771 * 255,
1308         0.498039 * 255, 0.359165 * 255,
1309         0.623529 * 255, 0.568527 * 255,
1310         0.749020 * 255, 0.772928 * 255,
1311         0.874510 * 255, 0.927927 * 255,
1312         1.000000 * 255, 0.993301 * 255,
1313       };
1314       guint8 green_pts[] = {
1315         0.000000 * 255, 0.001961 * 255,
1316         0.121569 * 255, 0.069848 * 255,
1317         0.247059 * 255, 0.214185 * 255,
1318         0.372549 * 255, 0.386385 * 255,
1319         0.498039 * 255, 0.560533 * 255,
1320         0.623529 * 255, 0.722231 * 255,
1321         0.749020 * 255, 0.865600 * 255,
1322         0.874510 * 255, 0.958973 * 255,
1323         1.000000 * 255, 0.996979 * 255,
1324       };
1325       guint8 blue_pts[] = {
1326         0.000000 * 255, 0.006332 * 255,
1327         0.121569 * 255, 0.225447 * 255,
1328         0.247059 * 255, 0.425338 * 255,
1329         0.372549 * 255, 0.585919 * 255,
1330         0.498039 * 255, 0.724790 * 255,
1331         0.623529 * 255, 0.833296 * 255,
1332         0.749020 * 255, 0.922240 * 255,
1333         0.874510 * 255, 0.975900 * 255,
1334         1.000000 * 255, 0.995237 * 255,
1335       };
1336       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_RED, 18, red_pts);
1337       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_GREEN, 18, green_pts);
1338       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_BLUE, 18, blue_pts);
1339       break;
1340     }
1341     case BEAUTIFY_EFFECT_COLD_GREEN:
1342     {
1343       guint8 red_pts[] = {
1344         0.000000 * 255, 0.000058 * 255,
1345         0.121569 * 255, 0.013332 * 255,
1346         0.247059 * 255, 0.092201 * 255,
1347         0.372549 * 255, 0.228389 * 255,
1348         0.498039 * 255, 0.407339 * 255,
1349         0.623529 * 255, 0.610095 * 255,
1350         0.749020 * 255, 0.797573 * 255,
1351         0.874510 * 255, 0.937331 * 255,
1352         1.000000 * 255, 0.993303 * 255,
1353       };
1354       guint8 green_pts[] = {
1355         0.000000 * 255, 0.008824 * 255,
1356         0.121569 * 255, 0.140109 * 255,
1357         0.247059 * 255, 0.324052 * 255,
1358         0.372549 * 255, 0.497982 * 255,
1359         0.498039 * 255, 0.655209 * 255,
1360         0.623529 * 255, 0.789734 * 255,
1361         0.749020 * 255, 0.900202 * 255,
1362         0.874510 * 255, 0.969304 * 255,
1363         1.000000 * 255, 0.997007 * 255,
1364       };
1365       guint8 blue_pts[] = {
1366         0.000000 * 255, 0.000495 * 255,
1367         0.121569 * 255, 0.035825 * 255,
1368         0.247059 * 255, 0.149480 * 255,
1369         0.372549 * 255, 0.305398 * 255,
1370         0.498039 * 255, 0.491352 * 255,
1371         0.623529 * 255, 0.670305 * 255,
1372         0.749020 * 255, 0.838898 * 255,
1373         0.874510 * 255, 0.951301 * 255,
1374         1.000000 * 255, 0.994118 * 255,
1375       };
1376       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_RED, 18, red_pts);
1377       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_GREEN, 18, green_pts);
1378       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_BLUE, 18, blue_pts);
1379       break;
1380     }
1381     case BEAUTIFY_EFFECT_PURPLE_FANTASY:
1382     {
1383       guint8 red_pts[] = {
1384         0.000000 * 255, 0.003922 * 255,
1385         0.121569 * 255, 0.184314 * 255,
1386         0.247059 * 255, 0.376471 * 255,
1387         0.372549 * 255, 0.533333 * 255,
1388         0.498039 * 255, 0.662745 * 255,
1389         0.623529 * 255, 0.788235 * 255,
1390         0.749020 * 255, 0.878431 * 255,
1391         0.874510 * 255, 0.941176 * 255,
1392         1.000000 * 255, 1.000000 * 255,
1393       };
1394       guint8 green_pts[] = {
1395         0.000000 * 255, 0.003922 * 255,
1396         0.121569 * 255, 0.113725 * 255,
1397         0.247059 * 255, 0.243137 * 255,
1398         0.372549 * 255, 0.407843 * 255,
1399         0.498039 * 255, 0.623529 * 255,
1400         0.623529 * 255, 0.760784 * 255,
1401         0.749020 * 255, 0.847059 * 255,
1402         0.874510 * 255, 0.925490 * 255,
1403         1.000000 * 255, 1.000000 * 255,
1404       };
1405       guint8 blue_pts[] = {
1406         0.000000 * 255, 0.007843 * 255,
1407         0.121569 * 255, 0.309804 * 255,
1408         0.247059 * 255, 0.505882 * 255,
1409         0.372549 * 255, 0.603922 * 255,
1410         0.498039 * 255, 0.709804 * 255,
1411         0.623529 * 255, 0.784314 * 255,
1412         0.749020 * 255, 0.854902 * 255,
1413         0.874510 * 255, 0.929412 * 255,
1414         1.000000 * 255, 1.000000 * 255,
1415       };
1416       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_RED, 18, red_pts);
1417       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_GREEN, 18, green_pts);
1418       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_BLUE, 18, blue_pts);
1419       break;
1420     }
1421     case BEAUTIFY_EFFECT_COLD_PURPLE:
1422     {
1423       guint8 red_pts[] = {
1424         0.000000 * 255, 0.004412 * 255,
1425         0.121569 * 255, 0.137411 * 255,
1426         0.247059 * 255, 0.308078 * 255,
1427         0.372549 * 255, 0.470911 * 255,
1428         0.498039 * 255, 0.617224 * 255,
1429         0.623529 * 255, 0.745202 * 255,
1430         0.749020 * 255, 0.851077 * 255,
1431         0.874510 * 255, 0.936608 * 255,
1432         1.000000 * 255, 0.991056 * 255,
1433       };
1434       guint8 green_pts[] = {
1435         0.000000 * 255, 0.033824 * 255,
1436         0.121569 * 255, 0.044738 * 255,
1437         0.247059 * 255, 0.161690 * 255,
1438         0.372549 * 255, 0.319742 * 255,
1439         0.498039 * 255, 0.492767 * 255,
1440         0.623529 * 255, 0.662258 * 255,
1441         0.749020 * 255, 0.830133 * 255,
1442         0.874510 * 255, 0.940380 * 255,
1443         1.000000 * 255, 0.996802 * 255,
1444       };
1445       guint8 blue_pts[] = {
1446         0.000000 * 255, 0.140723 * 255,
1447         0.121569 * 255, 0.295178 * 255,
1448         0.247059 * 255, 0.504249 * 255,
1449         0.372549 * 255, 0.648502 * 255,
1450         0.498039 * 255, 0.757808 * 255,
1451         0.623529 * 255, 0.853601 * 255,
1452         0.749020 * 255, 0.928529 * 255,
1453         0.874510 * 255, 0.975401 * 255,
1454         1.000000 * 255, 0.992089 * 255,
1455       };
1456       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_RED, 18, red_pts);
1457       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_GREEN, 18, green_pts);
1458       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_BLUE, 18, blue_pts);
1459       break;
1460     }
1461     case BEAUTIFY_EFFECT_BRIGHT_RED:
1462     {
1463       gint32     layer;
1464       GdkPixbuf *pixbuf;
1465 
1466       pixbuf = gdk_pixbuf_new_from_inline (-1, texture_bright_red, FALSE, NULL);
1467       layer = gimp_layer_new_from_pixbuf (image_ID, "texture", pixbuf, 100, GIMP_SCREEN_MODE, 0, 0);
1468       gimp_image_add_layer (image_ID, layer, -1);
1469       gimp_layer_scale (layer, width, height, FALSE);
1470       gimp_image_merge_down (image_ID, layer, GIMP_CLIP_TO_BOTTOM_LAYER);
1471 
1472       guint8 red_pts[] = {
1473         0.000000 * 255, 0.001183 * 255,
1474         0.121569 * 255, 0.131140 * 255,
1475         0.247059 * 255, 0.353431 * 255,
1476         0.372549 * 255, 0.538498 * 255,
1477         0.498039 * 255, 0.690185 * 255,
1478         0.623529 * 255, 0.804008 * 255,
1479         0.749020 * 255, 0.900806 * 255,
1480         0.874510 * 255, 0.988271 * 255,
1481         1.000000 * 255, 1.000000 * 255,
1482       };
1483       guint8 green_pts[] = {
1484         0.000000 * 255, 0.000098 * 255,
1485         0.121569 * 255, 0.097098 * 255,
1486         0.247059 * 255, 0.286323 * 255,
1487         0.372549 * 255, 0.458654 * 255,
1488         0.498039 * 255, 0.611045 * 255,
1489         0.623529 * 255, 0.744221 * 255,
1490         0.749020 * 255, 0.858522 * 255,
1491         0.874510 * 255, 0.968540 * 255,
1492         1.000000 * 255, 1.000000 * 255,
1493       };
1494       guint8 blue_pts[] = {
1495         0.000000 * 255, 0.000369 * 255,
1496         0.121569 * 255, 0.100320 * 255,
1497         0.247059 * 255, 0.285806 * 255,
1498         0.372549 * 255, 0.459693 * 255,
1499         0.498039 * 255, 0.612676 * 255,
1500         0.623529 * 255, 0.745027 * 255,
1501         0.749020 * 255, 0.860280 * 255,
1502         0.874510 * 255, 0.967918 * 255,
1503         1.000000 * 255, 1.000000 * 255,
1504       };
1505       layer = gimp_image_get_active_layer (image_ID);
1506       gimp_curves_spline (layer, GIMP_HISTOGRAM_RED, 18, red_pts);
1507       gimp_curves_spline (layer, GIMP_HISTOGRAM_GREEN, 18, green_pts);
1508       gimp_curves_spline (layer, GIMP_HISTOGRAM_BLUE, 18, blue_pts);
1509       break;
1510     }
1511     case BEAUTIFY_EFFECT_CHRISTMAS_EVE:
1512     {
1513       gint32 layer = gimp_layer_new (image_ID, "color", width, height, GIMP_RGB_IMAGE, 100, GIMP_OVERLAY_MODE);
1514       gimp_image_add_layer (image_ID, layer, -1);
1515       GimpRGB color =
1516       {
1517         (gdouble) 156.0 / 255.0,
1518         (gdouble) 208.0 / 255.0,
1519         (gdouble) 240.0 / 255.0,
1520         1.0,
1521       };
1522       gimp_context_set_foreground (&color);
1523       gimp_edit_fill (layer, GIMP_FOREGROUND_FILL);
1524       gimp_image_merge_down (image_ID, layer, GIMP_CLIP_TO_BOTTOM_LAYER);
1525 
1526       GdkPixbuf *pixbuf = gdk_pixbuf_new_from_inline (-1, texture_christmas_eve, FALSE, NULL);
1527       gint32 texture_layer = gimp_layer_new_from_pixbuf (image_ID, "texture", pixbuf, 100, GIMP_SCREEN_MODE, 0, 0);
1528       gimp_image_add_layer (image_ID, texture_layer, -1);
1529       gimp_layer_scale (texture_layer, width, height, FALSE);
1530       gimp_image_merge_down (image_ID, texture_layer, GIMP_CLIP_TO_BOTTOM_LAYER);
1531       break;
1532     }
1533     case BEAUTIFY_EFFECT_NIGHT_VIEW:
1534     {
1535       guint8 red_pts[] = {
1536         0.000000 * 255, 0.003922 * 255,
1537         0.121569 * 255, 0.181978 * 255,
1538         0.247059 * 255, 0.348183 * 255,
1539         0.372549 * 255, 0.498116 * 255,
1540         0.498039 * 255, 0.630567 * 255,
1541         0.623529 * 255, 0.746150 * 255,
1542         0.749020 * 255, 0.848447 * 255,
1543         0.874510 * 255, 0.939235 * 255,
1544         1.000000 * 255, 1.000000 * 255,
1545       };
1546       guint8 green_pts[] = {
1547         0.000000 * 255, 0.002451 * 255,
1548         0.121569 * 255, 0.182281 * 255,
1549         0.247059 * 255, 0.347678 * 255,
1550         0.372549 * 255, 0.495968 * 255,
1551         0.498039 * 255, 0.629733 * 255,
1552         0.623529 * 255, 0.747508 * 255,
1553         0.749020 * 255, 0.852278 * 255,
1554         0.874510 * 255, 0.937573 * 255,
1555         1.000000 * 255, 1.000000 * 255,
1556       };
1557       guint8 blue_pts[] = {
1558         0.000000 * 255, 0.005240 * 255,
1559         0.121569 * 255, 0.182529 * 255,
1560         0.247059 * 255, 0.347919 * 255,
1561         0.372549 * 255, 0.496757 * 255,
1562         0.498039 * 255, 0.638620 * 255,
1563         0.623529 * 255, 0.753394 * 255,
1564         0.749020 * 255, 0.852676 * 255,
1565         0.874510 * 255, 0.948770 * 255,
1566         1.000000 * 255, 1.000000 * 255,
1567       };
1568       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_RED, 18, red_pts);
1569       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_GREEN, 18, green_pts);
1570       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_BLUE, 18, blue_pts);
1571 
1572       gint32     layer;
1573       GdkPixbuf *pixbuf;
1574 
1575       pixbuf = gdk_pixbuf_new_from_inline (-1, texture_night_view, FALSE, NULL);
1576       layer = gimp_layer_new_from_pixbuf (image_ID, "texture", pixbuf, 100, GIMP_SCREEN_MODE, 0, 0);
1577       gimp_image_add_layer (image_ID, layer, -1);
1578       gimp_layer_scale (layer, width, height, FALSE);
1579       gimp_image_merge_down (image_ID, layer, GIMP_CLIP_TO_BOTTOM_LAYER);
1580 
1581       break;
1582     }
1583     case BEAUTIFY_EFFECT_ASTRAL:
1584     {
1585       GdkPixbuf *pixbuf = gdk_pixbuf_new_from_inline (-1, texture_astral, FALSE, NULL);
1586       gint32 texture_layer = gimp_layer_new_from_pixbuf (image_ID, "texture", pixbuf, 100, GIMP_SOFTLIGHT_MODE, 0, 0);
1587       gimp_image_add_layer (image_ID, texture_layer, -1);
1588       gimp_layer_scale (texture_layer, width, height, FALSE);
1589       gimp_image_merge_down (image_ID, texture_layer, GIMP_CLIP_TO_BOTTOM_LAYER);
1590     }
1591       break;
1592     case BEAUTIFY_EFFECT_COLORFUL_GLOW:
1593     {
1594       guint8 red_pts[] = {
1595         0.000000 * 255, 0.151307 * 255,
1596         0.121569 * 255, 0.322524 * 255,
1597         0.247059 * 255, 0.448847 * 255,
1598         0.372549 * 255, 0.575643 * 255,
1599         0.498039 * 255, 0.686567 * 255,
1600         0.623529 * 255, 0.782251 * 255,
1601         0.749020 * 255, 0.867647 * 255,
1602         0.874510 * 255, 0.945974 * 255,
1603         1.000000 * 255, 1.000000 * 255,
1604       };
1605       guint8 green_pts[] = {
1606         0.000000 * 255, 0.141176 * 255,
1607         0.121569 * 255, 0.293870 * 255,
1608         0.247059 * 255, 0.430463 * 255,
1609         0.372549 * 255, 0.557343 * 255,
1610         0.498039 * 255, 0.673448 * 255,
1611         0.623529 * 255, 0.772324 * 255,
1612         0.749020 * 255, 0.849510 * 255,
1613         0.874510 * 255, 0.933274 * 255,
1614         1.000000 * 255, 0.991523 * 255,
1615       };
1616       guint8 blue_pts[] = {
1617         0.000000 * 255, 0.141529 * 255,
1618         0.121569 * 255, 0.292286 * 255,
1619         0.247059 * 255, 0.434369 * 255,
1620         0.372549 * 255, 0.557046 * 255,
1621         0.498039 * 255, 0.669468 * 255,
1622         0.623529 * 255, 0.772360 * 255,
1623         0.749020 * 255, 0.858682 * 255,
1624         0.874510 * 255, 0.932288 * 255,
1625         1.000000 * 255, 0.987544 * 255,
1626       };
1627       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_RED, 18, red_pts);
1628       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_GREEN, 18, green_pts);
1629       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_BLUE, 18, blue_pts);
1630 
1631       gint32     layer;
1632       GdkPixbuf *pixbuf;
1633 
1634       pixbuf = gdk_pixbuf_new_from_inline (-1, texture_colorful_glow, FALSE, NULL);
1635       layer = gimp_layer_new_from_pixbuf (image_ID, "texture", pixbuf, 100, GIMP_SCREEN_MODE, 0, 0);
1636       gimp_image_add_layer (image_ID, layer, -1);
1637       gimp_layer_scale (layer, width, height, FALSE);
1638       gimp_image_merge_down (image_ID, layer, GIMP_CLIP_TO_BOTTOM_LAYER);
1639 
1640       break;
1641     }
1642     case BEAUTIFY_EFFECT_PICK_LIGHT:
1643     {
1644       gint32     layer;
1645       GdkPixbuf *pixbuf;
1646 
1647       layer = gimp_layer_new (image_ID, "color", width, height, GIMP_RGB_IMAGE, 100, GIMP_SCREEN_MODE);
1648       gimp_image_add_layer (image_ID, layer, -1);
1649       GimpRGB color =
1650       {
1651         (gdouble) 62.0 / 255.0,
1652         (gdouble) 62.0 / 255.0,
1653         (gdouble) 62.0 / 255.0,
1654         1.0,
1655       };
1656       gimp_context_set_foreground (&color);
1657       gimp_edit_fill (layer, GIMP_FOREGROUND_FILL);
1658       gimp_image_merge_down (image_ID, layer, GIMP_CLIP_TO_BOTTOM_LAYER);
1659 
1660       pixbuf = gdk_pixbuf_new_from_inline (-1, texture_pick_light_1, FALSE, NULL);
1661       layer = gimp_layer_new_from_pixbuf (image_ID, "texture 1", pixbuf, 100, GIMP_SCREEN_MODE, 0, 0);
1662       gimp_image_add_layer (image_ID, layer, -1);
1663       gimp_layer_scale (layer, width, height, FALSE);
1664       gimp_image_merge_down (image_ID, layer, GIMP_CLIP_TO_BOTTOM_LAYER);
1665 
1666       pixbuf = gdk_pixbuf_new_from_inline (-1, texture_pick_light_2, FALSE, NULL);
1667       layer = gimp_layer_new_from_pixbuf (image_ID, "texture 2", pixbuf, 100, GIMP_SCREEN_MODE, 0, 0);
1668       gimp_image_add_layer (image_ID, layer, -1);
1669       gimp_layer_scale (layer, width, height, FALSE);
1670       gimp_image_merge_down (image_ID, layer, GIMP_CLIP_TO_BOTTOM_LAYER);
1671       break;
1672     }
1673     case BEAUTIFY_EFFECT_GLASS_DROPS:
1674     {
1675       gint32     layer;
1676       GdkPixbuf *pixbuf;
1677 
1678       pixbuf = gdk_pixbuf_new_from_inline (-1, texture_glass_drops, FALSE, NULL);
1679       layer = gimp_layer_new_from_pixbuf (image_ID, "texture", pixbuf, 100, GIMP_SCREEN_MODE, 0, 0);
1680       gimp_image_add_layer (image_ID, layer, -1);
1681       gimp_layer_scale (layer, width, height, FALSE);
1682       gimp_image_merge_down (image_ID, layer, GIMP_CLIP_TO_BOTTOM_LAYER);
1683 
1684       break;
1685     }
1686     case BEAUTIFY_EFFECT_SKETCH:
1687     {
1688       gint32     layer;
1689 
1690       black_and_white (image_ID, effect_layer);
1691 
1692       layer = gimp_layer_copy (effect_layer);
1693       gimp_image_add_layer (image_ID, layer, -1);
1694       gimp_layer_set_mode  (layer, GIMP_DODGE_MODE);
1695       gimp_invert (layer);
1696 
1697       GimpParam *return_vals;
1698       gint nreturn_vals;
1699       return_vals = gimp_run_procedure ("plug-in-gauss",
1700                                         &nreturn_vals,
1701                                         GIMP_PDB_INT32, GIMP_RUN_NONINTERACTIVE,
1702                                         GIMP_PDB_IMAGE, image_ID,
1703                                         GIMP_PDB_DRAWABLE, layer,
1704                                         GIMP_PDB_FLOAT, 20.0,
1705                                         GIMP_PDB_FLOAT, 20.0,
1706                                         GIMP_PDB_INT32, 1,
1707                                         GIMP_PDB_END);
1708       gimp_destroy_params (return_vals, nreturn_vals);
1709 
1710       gimp_levels (layer, GIMP_HISTOGRAM_VALUE, 0, 255, 1, 0, 251);
1711 
1712       gimp_image_merge_down (image_ID, layer, GIMP_CLIP_TO_BOTTOM_LAYER);
1713 
1714       break;
1715     }
1716     case BEAUTIFY_EFFECT_LIFE_SKETCH:
1717     {
1718       gimp_desaturate_full (effect_layer, GIMP_DESATURATE_LUMINOSITY);
1719 
1720       gint32     layer;
1721       GdkPixbuf *pixbuf;
1722 
1723       pixbuf = gdk_pixbuf_new_from_inline (-1, texture_life_sketch_1, FALSE, NULL);
1724       layer = gimp_layer_new_from_pixbuf (image_ID, "texture", pixbuf, 60, GIMP_OVERLAY_MODE, 0, 0);
1725       gimp_image_add_layer (image_ID, layer, -1);
1726       gimp_layer_scale (layer, width, height, FALSE);
1727       gimp_image_merge_down (image_ID, layer, GIMP_CLIP_TO_BOTTOM_LAYER);
1728 
1729       pixbuf = gdk_pixbuf_new_from_inline (-1, texture_life_sketch_2, FALSE, NULL);
1730       layer = gimp_layer_new_from_pixbuf (image_ID, "texture", pixbuf, 100, GIMP_SCREEN_MODE, 0, 0);
1731       gimp_image_add_layer (image_ID, layer, -1);
1732       gimp_layer_scale (layer, width, height, FALSE);
1733       gimp_image_merge_down (image_ID, layer, GIMP_CLIP_TO_BOTTOM_LAYER);
1734 
1735       guint8 red_pts[] = {
1736         0.000000 * 255, 0.074510 * 255,
1737         0.121569 * 255, 0.105882 * 255,
1738         0.247059 * 255, 0.203391 * 255,
1739         0.372549 * 255, 0.325314 * 255,
1740         0.498039 * 255, 0.451172 * 255,
1741         0.623529 * 255, 0.582024 * 255,
1742         0.749020 * 255, 0.717003 * 255,
1743         0.874510 * 255, 0.855324 * 255,
1744         1.000000 * 255, 0.995987 * 255,
1745       };
1746       guint8 green_pts[] = {
1747         0.000000 * 255, 0.070588 * 255,
1748         0.121569 * 255, 0.102941 * 255,
1749         0.247059 * 255, 0.205857 * 255,
1750         0.372549 * 255, 0.330846 * 255,
1751         0.498039 * 255, 0.457491 * 255,
1752         0.623529 * 255, 0.591683 * 255,
1753         0.749020 * 255, 0.724243 * 255,
1754         0.874510 * 255, 0.859604 * 255,
1755         1.000000 * 255, 0.996069 * 255,
1756       };
1757       guint8 blue_pts[] = {
1758         0.000000 * 255, 0.062745 * 255,
1759         0.121569 * 255, 0.110294 * 255,
1760         0.247059 * 255, 0.223629 * 255,
1761         0.372549 * 255, 0.355159 * 255,
1762         0.498039 * 255, 0.490793 * 255,
1763         0.623529 * 255, 0.626121 * 255,
1764         0.749020 * 255, 0.753347 * 255,
1765         0.874510 * 255, 0.877884 * 255,
1766         1.000000 * 255, 0.996034 * 255,
1767       };
1768       layer = gimp_image_get_active_layer (image_ID);
1769       gimp_curves_spline (layer, GIMP_HISTOGRAM_RED, 18, red_pts);
1770       gimp_curves_spline (layer, GIMP_HISTOGRAM_GREEN, 18, green_pts);
1771       gimp_curves_spline (layer, GIMP_HISTOGRAM_BLUE, 18, blue_pts);
1772 
1773       break;
1774     }
1775     case BEAUTIFY_EFFECT_CLASSIC_SKETCH:
1776     {
1777       gimp_desaturate_full (effect_layer, GIMP_DESATURATE_LUMINOSITY);
1778 
1779       gint32     layer;
1780       GdkPixbuf *pixbuf;
1781 
1782       pixbuf = gdk_pixbuf_new_from_inline (-1, texture_classic_sketch_1, FALSE, NULL);
1783       layer = gimp_layer_new_from_pixbuf (image_ID, "texture", pixbuf, 100, GIMP_SCREEN_MODE, 0, 0);
1784       gimp_image_add_layer (image_ID, layer, -1);
1785       gimp_layer_scale (layer, width, height, FALSE);
1786       gimp_image_merge_down (image_ID, layer, GIMP_CLIP_TO_BOTTOM_LAYER);
1787 
1788       pixbuf = gdk_pixbuf_new_from_inline (-1, texture_classic_sketch_2, FALSE, NULL);
1789       layer = gimp_layer_new_from_pixbuf (image_ID, "texture", pixbuf, 100, GIMP_SCREEN_MODE, 0, 0);
1790       gimp_image_add_layer (image_ID, layer, -1);
1791       gimp_layer_scale (layer, width, height, FALSE);
1792       gimp_image_merge_down (image_ID, layer, GIMP_CLIP_TO_BOTTOM_LAYER);
1793 
1794       guint8 red_pts[] = {
1795         0.000000 * 255, 0.035294 * 255,
1796         0.121569 * 255, 0.035294 * 255,
1797         0.247059 * 255, 0.100000 * 255,
1798         0.372549 * 255, 0.219095 * 255,
1799         0.498039 * 255, 0.373810 * 255,
1800         0.623529 * 255, 0.541166 * 255,
1801         0.749020 * 255, 0.697497 * 255,
1802         0.874510 * 255, 0.850874 * 255,
1803         1.000000 * 255, 0.996065 * 255,
1804       };
1805       guint8 green_pts[] = {
1806         0.000000 * 255, 0.015686 * 255,
1807         0.121569 * 255, 0.015686 * 255,
1808         0.247059 * 255, 0.085098 * 255,
1809         0.372549 * 255, 0.206671 * 255,
1810         0.498039 * 255, 0.357512 * 255,
1811         0.623529 * 255, 0.526512 * 255,
1812         0.749020 * 255, 0.687917 * 255,
1813         0.874510 * 255, 0.845067 * 255,
1814         1.000000 * 255, 0.996069 * 255,
1815       };
1816       guint8 blue_pts[] = {
1817         0.000000 * 255, 0.001961 * 255,
1818         0.121569 * 255, 0.001961 * 255,
1819         0.247059 * 255, 0.054390 * 255,
1820         0.372549 * 255, 0.180870 * 255,
1821         0.498039 * 255, 0.328319 * 255,
1822         0.623529 * 255, 0.497803 * 255,
1823         0.749020 * 255, 0.665890 * 255,
1824         0.874510 * 255, 0.835076 * 255,
1825         1.000000 * 255, 0.996066 * 255,
1826       };
1827       layer = gimp_image_get_active_layer (image_ID);
1828       gimp_curves_spline (layer, GIMP_HISTOGRAM_RED, 18, red_pts);
1829       gimp_curves_spline (layer, GIMP_HISTOGRAM_GREEN, 18, green_pts);
1830       gimp_curves_spline (layer, GIMP_HISTOGRAM_BLUE, 18, blue_pts);
1831 
1832       pixbuf = gdk_pixbuf_new_from_inline (-1, texture_classic_sketch_3, FALSE, NULL);
1833       layer = gimp_layer_new_from_pixbuf (image_ID, "texture", pixbuf, 100, GIMP_MULTIPLY_MODE, 0, 0);
1834       gimp_image_add_layer (image_ID, layer, -1);
1835       gimp_layer_scale (layer, width, height, FALSE);
1836       gimp_image_merge_down (image_ID, layer, GIMP_CLIP_TO_BOTTOM_LAYER);
1837 
1838       break;
1839     }
1840     case BEAUTIFY_EFFECT_COLOR_PENCIL:
1841     {
1842       gint32     layer;
1843       GdkPixbuf *pixbuf;
1844 
1845       pixbuf = gdk_pixbuf_new_from_inline (-1, texture_color_pencil, FALSE, NULL);
1846 
1847       layer = gimp_layer_new_from_pixbuf (image_ID, "texture", pixbuf, 100, GIMP_SCREEN_MODE, 0, 0);
1848       gimp_image_add_layer (image_ID, layer, -1);
1849       gimp_layer_scale (layer, width, height, FALSE);
1850       gimp_image_merge_down (image_ID, layer, GIMP_CLIP_TO_BOTTOM_LAYER);
1851 
1852       layer = gimp_layer_new_from_pixbuf (image_ID, "texture", pixbuf, 100, GIMP_OVERLAY_MODE, 0, 0);
1853       gimp_image_add_layer (image_ID, layer, -1);
1854       gimp_layer_scale (layer, width, height, FALSE);
1855       gimp_image_merge_down (image_ID, layer, GIMP_CLIP_TO_IMAGE);
1856 
1857       break;
1858     }
1859     case BEAUTIFY_EFFECT_TV_LINES:
1860     {
1861       gint32     layer;
1862 
1863       layer = gimp_layer_new (image_ID, "texture", width, height, GIMP_RGBA_IMAGE, 60, GIMP_MULTIPLY_MODE);
1864       gimp_image_add_layer (image_ID, layer, -1);
1865       gimp_drawable_fill (layer, GIMP_TRANSPARENT_FILL);
1866       gimp_context_set_pattern ("Stripes Fine");
1867       gimp_edit_fill (layer, GIMP_PATTERN_FILL);
1868       gimp_image_merge_down (image_ID, layer, GIMP_CLIP_TO_IMAGE);
1869 
1870       break;
1871     }
1872     case BEAUTIFY_EFFECT_RELIEF:
1873     {
1874       gint32     layer;
1875 
1876       layer = gimp_layer_copy (effect_layer);
1877       gimp_image_add_layer (image_ID, layer, -1);
1878 
1879       gimp_layer_set_offsets (effect_layer, 1, -1);
1880       gimp_layer_set_offsets (layer, -1, 1);
1881 
1882       gimp_layer_set_mode (layer, GIMP_GRAIN_EXTRACT_MODE);
1883       gimp_image_merge_down (image_ID, layer, GIMP_CLIP_TO_IMAGE);
1884 
1885       //gimp_image_select_rectangle (image_ID, GIMP_CHANNEL_OP_REPLACE, 1, 1, width - 2, height - 2);
1886       gimp_rect_select (image_ID, 1, 1, width - 2, height - 2, GIMP_CHANNEL_OP_REPLACE, FALSE, 0);
1887       gimp_selection_invert (image_ID);
1888 
1889       layer = gimp_image_get_active_layer (image_ID);
1890       GimpRGB color = { 0.5, 0.5, 0.5, 1.0 };
1891       gimp_context_set_foreground (&color);
1892       gimp_edit_fill (layer, GIMP_FOREGROUND_FILL);
1893 
1894       gimp_selection_none (image_ID);
1895 
1896       break;
1897     }
1898     case BEAUTIFY_EFFECT_BEAM_GRADIENT:
1899     {
1900       guint8 red_pts[] = {
1901         0.000000 * 255, 0.003922 * 255,
1902         0.121569 * 255, 0.041976 * 255,
1903         0.247059 * 255, 0.156522 * 255,
1904         0.372549 * 255, 0.317488 * 255,
1905         0.498039 * 255, 0.499707 * 255,
1906         0.623529 * 255, 0.684590 * 255,
1907         0.749020 * 255, 0.845234 * 255,
1908         0.874510 * 255, 0.957891 * 255,
1909         1.000000 * 255, 1.000000 * 255,
1910       };
1911       guint8 green_pts[] = {
1912         0.000000 * 255, 0.005882 * 255,
1913         0.121569 * 255, 0.041838 * 255,
1914         0.247059 * 255, 0.156351 * 255,
1915         0.372549 * 255, 0.317066 * 255,
1916         0.498039 * 255, 0.499800 * 255,
1917         0.623529 * 255, 0.684389 * 255,
1918         0.749020 * 255, 0.843945 * 255,
1919         0.874510 * 255, 0.958236 * 255,
1920         1.000000 * 255, 1.000000 * 255,
1921       };
1922       guint8 blue_pts[] = {
1923         0.000000 * 255, 0.005064 * 255,
1924         0.121569 * 255, 0.043674 * 255,
1925         0.247059 * 255, 0.157355 * 255,
1926         0.372549 * 255, 0.318250 * 255,
1927         0.498039 * 255, 0.499405 * 255,
1928         0.623529 * 255, 0.683918 * 255,
1929         0.749020 * 255, 0.844833 * 255,
1930         0.874510 * 255, 0.957540 * 255,
1931         1.000000 * 255, 1.000000 * 255,
1932       };
1933       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_RED, 18, red_pts);
1934       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_GREEN, 18, green_pts);
1935       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_BLUE, 18, blue_pts);
1936 
1937       gint32     layer;
1938       GdkPixbuf *pixbuf;
1939 
1940       pixbuf = gdk_pixbuf_new_from_inline (-1, texture_beam_gradient, FALSE, NULL);
1941       layer = gimp_layer_new_from_pixbuf (image_ID, "texture", pixbuf, 100, GIMP_SCREEN_MODE, 0, 0);
1942       gimp_image_add_layer (image_ID, layer, -1);
1943       gimp_layer_scale (layer, width, height, FALSE);
1944       gimp_image_merge_down (image_ID, layer, GIMP_CLIP_TO_BOTTOM_LAYER);
1945 
1946       break;
1947     }
1948     case BEAUTIFY_EFFECT_SUNSET_GRADIENT:
1949     {
1950       gint32     layer;
1951       GdkPixbuf *pixbuf;
1952 
1953       pixbuf = gdk_pixbuf_new_from_inline (-1, texture_sunset_gradient, FALSE, NULL);
1954       layer = gimp_layer_new_from_pixbuf (image_ID, "texture", pixbuf, 100, GIMP_SCREEN_MODE, 0, 0);
1955       gimp_image_add_layer (image_ID, layer, -1);
1956       gimp_layer_scale (layer, width, height, FALSE);
1957       gimp_image_merge_down (image_ID, layer, GIMP_CLIP_TO_BOTTOM_LAYER);
1958 
1959       break;
1960     }
1961     case BEAUTIFY_EFFECT_RAINBOW_GRADIENT:
1962     {
1963       guint8 red_pts[] = {
1964         0.000000 * 255, 0.024183 * 255,
1965         0.121569 * 255, 0.048308 * 255,
1966         0.247059 * 255, 0.154831 * 255,
1967         0.372549 * 255, 0.314038 * 255,
1968         0.498039 * 255, 0.497584 * 255,
1969         0.623529 * 255, 0.683345 * 255,
1970         0.749020 * 255, 0.841507 * 255,
1971         0.874510 * 255, 0.957243 * 255,
1972         1.000000 * 255, 0.997723 * 255,
1973       };
1974       guint8 green_pts[] = {
1975         0.000000 * 255, 0.010784 * 255,
1976         0.121569 * 255, 0.042665 * 255,
1977         0.247059 * 255, 0.155542 * 255,
1978         0.372549 * 255, 0.319728 * 255,
1979         0.498039 * 255, 0.499008 * 255,
1980         0.623529 * 255, 0.686299 * 255,
1981         0.749020 * 255, 0.843454 * 255,
1982         0.874510 * 255, 0.957699 * 255,
1983         1.000000 * 255, 0.999459 * 255,
1984       };
1985       guint8 blue_pts[] = {
1986         0.000000 * 255, 0.005853 * 255,
1987         0.121569 * 255, 0.043693 * 255,
1988         0.247059 * 255, 0.154759 * 255,
1989         0.372549 * 255, 0.318024 * 255,
1990         0.498039 * 255, 0.499930 * 255,
1991         0.623529 * 255, 0.681052 * 255,
1992         0.749020 * 255, 0.850097 * 255,
1993         0.874510 * 255, 0.959228 * 255,
1994         1.000000 * 255, 0.994901 * 255,
1995       };
1996       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_RED, 18, red_pts);
1997       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_GREEN, 18, green_pts);
1998       gimp_curves_spline (effect_layer, GIMP_HISTOGRAM_BLUE, 18, blue_pts);
1999 
2000       gint32     layer;
2001       GdkPixbuf *pixbuf;
2002 
2003       pixbuf = gdk_pixbuf_new_from_inline (-1, texture_rainbow_gradient, FALSE, NULL);
2004       layer = gimp_layer_new_from_pixbuf (image_ID, "texture", pixbuf, 100, GIMP_SCREEN_MODE, 0, 0);
2005       gimp_image_add_layer (image_ID, layer, -1);
2006       gimp_layer_scale (layer, width, height, FALSE);
2007       gimp_image_merge_down (image_ID, layer, GIMP_CLIP_TO_BOTTOM_LAYER);
2008 
2009       break;
2010     }
2011     case BEAUTIFY_EFFECT_PINK_PURPLE_GRADIENG:
2012     {
2013       gint32     layer;
2014       GdkPixbuf *pixbuf;
2015 
2016       pixbuf = gdk_pixbuf_new_from_inline (-1, texture_pink_purple_gradient, FALSE, NULL);
2017       layer = gimp_layer_new_from_pixbuf (image_ID, "texture", pixbuf, 100, GIMP_SCREEN_MODE, 0, 0);
2018       gimp_image_add_layer (image_ID, layer, -1);
2019       gimp_layer_scale (layer, width, height, FALSE);
2020       gimp_image_merge_down (image_ID, layer, GIMP_CLIP_TO_BOTTOM_LAYER);
2021 
2022       break;
2023     }
2024     case BEAUTIFY_EFFECT_PINK_BLUE_GRADIENT:
2025     {
2026       gint32     layer;
2027       GdkPixbuf *pixbuf;
2028 
2029       pixbuf = gdk_pixbuf_new_from_inline (-1, texture_pink_blue_gradient, FALSE, NULL);
2030       layer = gimp_layer_new_from_pixbuf (image_ID, "texture", pixbuf, 100, GIMP_SCREEN_MODE, 0, 0);
2031       gimp_image_add_layer (image_ID, layer, -1);
2032       gimp_layer_scale (layer, width, height, FALSE);
2033       gimp_image_merge_down (image_ID, layer, GIMP_CLIP_TO_BOTTOM_LAYER);
2034 
2035       guint8 red_pts[] = {
2036         0.000000 * 255, 0.000392 * 255,
2037         0.121569 * 255, 0.038765 * 255,
2038         0.247059 * 255, 0.163053 * 255,
2039         0.372549 * 255, 0.298924 * 255,
2040         0.498039 * 255, 0.443050 * 255,
2041         0.623529 * 255, 0.612325 * 255,
2042         0.749020 * 255, 0.790453 * 255,
2043         0.874510 * 255, 0.939548 * 255,
2044         1.000000 * 255, 1.000000 * 255,
2045       };
2046       guint8 green_pts[] = {
2047         0.000000 * 255, 0.001569 * 255,
2048         0.121569 * 255, 0.044421 * 255,
2049         0.247059 * 255, 0.161120 * 255,
2050         0.372549 * 255, 0.300417 * 255,
2051         0.498039 * 255, 0.478406 * 255,
2052         0.623529 * 255, 0.664685 * 255,
2053         0.749020 * 255, 0.828593 * 255,
2054         0.874510 * 255, 0.954235 * 255,
2055         1.000000 * 255, 1.000000 * 255,
2056       };
2057       guint8 blue_pts[] = {
2058         0.000000 * 255, 0.260784 * 255,
2059         0.121569 * 255, 0.260784 * 255,
2060         0.247059 * 255, 0.260784 * 255,
2061         0.372549 * 255, 0.327074 * 255,
2062         0.498039 * 255, 0.447592 * 255,
2063         0.623529 * 255, 0.589356 * 255,
2064         0.749020 * 255, 0.776297 * 255,
2065         0.874510 * 255, 0.939428 * 255,
2066         1.000000 * 255, 1.000000 * 255,
2067       };
2068       layer = gimp_image_get_active_layer (image_ID);
2069       gimp_curves_spline (layer, GIMP_HISTOGRAM_RED, 18, red_pts);
2070       gimp_curves_spline (layer, GIMP_HISTOGRAM_GREEN, 18, green_pts);
2071       gimp_curves_spline (layer, GIMP_HISTOGRAM_BLUE, 18, blue_pts);
2072       break;
2073     }
2074   }
2075 
2076   gimp_context_pop ();
2077 }
2078 
2079