2
* Copyright (c) 2009 Tadej Borovšak <tadeboro@gmail.com>
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 2 of the License,or
7
* (at your option) any later version.
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 Library General Public License for more details.
14
* You should have received a copy of the GNU General Public License
15
* along with this program; if not,write to the Free Software
16
* Foundation,Inc.,59 Temple Place - Suite 330,Boston,MA 02111-1307,USA.
20
#include "export_to_ppm.h"
23
/* Local functions declarations */
25
transition_render( GdkDrawable *window,
26
GdkPixbuf *image_from,
34
img_get_plugin_info( gchar **group,
38
*group = "Misc Diagonal Wipe";
40
*trans = g_new( gchar *, 7 );
41
(*trans)[i++] = "Double Barn Door";
42
(*trans)[i++] = "img_barn";
43
(*trans)[i++] = GINT_TO_POINTER( 38 );
44
(*trans)[i++] = "Double Diamond";
45
(*trans)[i++] = "img_diamond";
46
(*trans)[i++] = GINT_TO_POINTER( 39 );
51
img_barn( GdkDrawable *window,
52
GdkPixbuf *image_from,
57
transition_render( window, image_from, image_to, progress, file_desc, 1 );
61
img_diamond( GdkDrawable *window,
62
GdkPixbuf *image_from,
67
transition_render( window, image_from, image_to, progress, file_desc, 2 );
71
/* Local functions definitions */
73
transition_render( GdkDrawable *window,
74
GdkPixbuf *image_from,
81
cairo_surface_t *surface;
85
gdk_drawable_get_size( window, &width, &height );
89
cr = gdk_cairo_create( window );
93
surface = cairo_image_surface_create( CAIRO_FORMAT_RGB24,
95
cr = cairo_create( surface );
98
gdk_cairo_set_source_pixbuf( cr, image_from, 0, 0 );
101
gdk_cairo_set_source_pixbuf( cr, image_to, 0, 0 );
107
cairo_move_to( cr, 0, 0 );
108
cairo_line_to( cr, 0, h2 * progress );
109
cairo_line_to( cr, w2 * ( 1 - progress ), h2 );
110
cairo_line_to( cr, 0, h2 * ( 2 - progress ) );
111
cairo_line_to( cr, 0, height );
112
cairo_line_to( cr, w2 * progress, height );
113
cairo_line_to( cr, w2, h2 * ( 1 + progress ) );
114
cairo_line_to( cr, w2 * ( 2 - progress ), height );
115
cairo_line_to( cr, width, height );
116
cairo_line_to( cr, width, h2 * ( 2 - progress ) );
117
cairo_line_to( cr, w2 * ( 1 + progress ), h2 );
118
cairo_line_to( cr, width, h2 * progress );
119
cairo_line_to( cr, width, 0 );
120
cairo_line_to( cr, w2 * ( 2 - progress ), 0 );
121
cairo_line_to( cr, w2, h2 * ( 1 - progress ) );
122
cairo_line_to( cr, w2 * progress, 0 );
123
cairo_close_path( cr );
127
cairo_set_fill_rule( cr, CAIRO_FILL_RULE_EVEN_ODD );
129
cairo_move_to( cr, 0, h2 * ( 1 - progress ) );
130
cairo_line_to( cr, 0, h2 * ( 1 + progress ) );
131
cairo_line_to( cr, w2 * ( 1 - progress ), height );
132
cairo_line_to( cr, w2 * ( 1 + progress ), height );
133
cairo_line_to( cr, width, h2 * ( 1 + progress ) );
134
cairo_line_to( cr, width, h2 * ( 1 - progress ) );
135
cairo_line_to( cr, w2 * ( 1 + progress ), 0 );
136
cairo_line_to( cr, w2 * ( 1 - progress ), 0 );
137
cairo_close_path( cr );
139
cairo_new_sub_path( cr );
140
cairo_move_to( cr, w2 * progress, h2 );
141
cairo_line_to( cr, w2, h2 * ( 2 - progress ) );
142
cairo_line_to( cr, w2 * ( 2 - progress ), h2 );
143
cairo_line_to( cr, w2, h2 * progress );
144
cairo_close_path( cr );
154
img_export_cairo_to_ppm( surface, file_desc );
155
cairo_surface_destroy( surface );