1 /* ev-transition-effect.c
2 * this file is part of evince, a gnome document viewer
4 * Copyright (C) 2007 Carlos Garnacho <carlos@imendio.com>
6 * Evince is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * Evince is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
21 #include "ev-transition-effect.h"
23 #define EV_TRANSITION_EFFECT_GET_PRIV(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EV_TYPE_TRANSITION_EFFECT, EvTransitionEffectPrivate))
25 typedef struct EvTransitionEffectPrivate EvTransitionEffectPrivate;
27 struct EvTransitionEffectPrivate {
28 EvTransitionEffectType type;
29 EvTransitionEffectAlignment alignment;
30 EvTransitionEffectDirection direction;
36 guint rectangular : 1;
50 G_DEFINE_TYPE (EvTransitionEffect, ev_transition_effect, G_TYPE_OBJECT)
54 ev_transition_effect_type_get_type (void)
56 static GType type = 0;
58 if (G_UNLIKELY (type == 0)) {
59 const GEnumValue values[] = {
60 { EV_TRANSITION_EFFECT_REPLACE, "EV_TRANSITION_EFFECT_REPLACE", "replace" },
61 { EV_TRANSITION_EFFECT_SPLIT, "EV_TRANSITION_EFFECT_SPLIT", "split" },
62 { EV_TRANSITION_EFFECT_BLINDS, "EV_TRANSITION_EFFECT_BLINDS", "blinds" },
63 { EV_TRANSITION_EFFECT_BOX, "EV_TRANSITION_EFFECT_BOX", "box" },
64 { EV_TRANSITION_EFFECT_WIPE, "EV_TRANSITION_EFFECT_WIPE", "wipe" },
65 { EV_TRANSITION_EFFECT_DISSOLVE, "EV_TRANSITION_EFFECT_DISSOLVE", "dissolve" },
66 { EV_TRANSITION_EFFECT_GLITTER, "EV_TRANSITION_EFFECT_GLITTER", "glitter" },
67 { EV_TRANSITION_EFFECT_FLY, "EV_TRANSITION_EFFECT_FLY", "fly" },
68 { EV_TRANSITION_EFFECT_PUSH, "EV_TRANSITION_EFFECT_PUSH", "push" },
69 { EV_TRANSITION_EFFECT_COVER, "EV_TRANSITION_EFFECT_COVER", "cover" },
70 { EV_TRANSITION_EFFECT_UNCOVER, "EV_TRANSITION_EFFECT_UNCOVER", "uncover" },
71 { EV_TRANSITION_EFFECT_FADE, "EV_TRANSITION_EFFECT_FADE", "fade" },
75 type = g_enum_register_static ("EvTransitionEffectType", values);
82 ev_transition_effect_alignment_get_type (void)
84 static GType type = 0;
86 if (G_UNLIKELY (type == 0)) {
87 const GEnumValue values[] = {
88 { EV_TRANSITION_ALIGNMENT_HORIZONTAL, "EV_TRANSITION_ALIGNMENT_HORIZONTAL", "horizontal" },
89 { EV_TRANSITION_ALIGNMENT_VERTICAL, "EV_TRANSITION_ALIGNMENT_VERTICAL", "vertical" },
93 type = g_enum_register_static ("EvTransitionEffectAlignment", values);
100 ev_transition_effect_direction_get_type (void)
102 static GType type = 0;
104 if (G_UNLIKELY (type == 0)) {
105 const GEnumValue values[] = {
106 { EV_TRANSITION_DIRECTION_INWARD, "EV_TRANSITION_DIRECTION_INWARD", "inward" },
107 { EV_TRANSITION_DIRECTION_OUTWARD, "EV_TRANSITION_DIRECTION_OUTWARD", "outward" },
111 type = g_enum_register_static ("EvTransitionEffectDirection", values);
118 ev_transition_effect_set_property (GObject *object,
123 EvTransitionEffectPrivate *priv;
125 priv = EV_TRANSITION_EFFECT_GET_PRIV (object);
129 priv->type = g_value_get_enum (value);
132 priv->alignment = g_value_get_enum (value);
135 priv->direction = g_value_get_enum (value);
138 priv->duration = g_value_get_int (value);
141 priv->angle = g_value_get_int (value);
144 priv->scale = g_value_get_double (value);
146 case PROP_RECTANGULAR:
147 priv->rectangular = g_value_get_boolean (value);
150 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
156 ev_transition_effect_get_property (GObject *object,
161 EvTransitionEffectPrivate *priv;
163 priv = EV_TRANSITION_EFFECT_GET_PRIV (object);
167 g_value_set_enum (value, priv->type);
170 g_value_set_enum (value, priv->alignment);
173 g_value_set_enum (value, priv->direction);
176 g_value_set_int (value, priv->duration);
179 g_value_set_int (value, priv->angle);
182 g_value_set_double (value, priv->scale);
184 case PROP_RECTANGULAR:
185 g_value_set_enum (value, priv->rectangular);
188 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
194 ev_transition_effect_init (EvTransitionEffect *effect)
196 EvTransitionEffectPrivate *priv;
198 priv = EV_TRANSITION_EFFECT_GET_PRIV (effect);
204 ev_transition_effect_class_init (EvTransitionEffectClass *klass)
206 GObjectClass *object_class = G_OBJECT_CLASS (klass);
208 object_class->set_property = ev_transition_effect_set_property;
209 object_class->get_property = ev_transition_effect_get_property;
211 g_object_class_install_property (object_class,
213 g_param_spec_enum ("type",
215 "Page transition effect type",
216 EV_TYPE_TRANSITION_EFFECT_TYPE,
217 EV_TRANSITION_EFFECT_REPLACE,
219 g_object_class_install_property (object_class,
221 g_param_spec_enum ("alignment",
223 "Alignment for the effect",
224 EV_TYPE_TRANSITION_EFFECT_ALIGNMENT,
225 EV_TRANSITION_ALIGNMENT_HORIZONTAL,
227 g_object_class_install_property (object_class,
229 g_param_spec_enum ("direction",
231 "Direction for the effect",
232 EV_TYPE_TRANSITION_EFFECT_DIRECTION,
233 EV_TRANSITION_DIRECTION_INWARD,
235 g_object_class_install_property (object_class,
237 g_param_spec_int ("duration",
239 "Effect duration in seconds",
242 g_object_class_install_property (object_class,
244 g_param_spec_int ("angle",
246 "Effect angle in degrees, counted "
247 "counterclockwise from left to right",
250 g_object_class_install_property (object_class,
252 g_param_spec_double ("scale",
254 "Scale at which the effect is applied",
257 g_object_class_install_property (object_class,
259 g_param_spec_boolean ("rectangular",
261 "Whether the covered area is rectangular",
265 g_type_class_add_private (klass, sizeof (EvTransitionEffectPrivate));
269 ev_transition_effect_new (EvTransitionEffectType type,
270 const gchar *first_property_name,
276 object = g_object_new (EV_TYPE_TRANSITION_EFFECT,
280 va_start (args, first_property_name);
281 g_object_set_valist (object, first_property_name, args);
284 return EV_TRANSITION_EFFECT (object);