/* TransitionEffects.c generated by valac 0.40.4, the Vala compiler
 * generated from TransitionEffects.vala, do not modify */

/* Copyright 2010 Maxim Kartashev
 * Copyright 2016 Software Freedom Conservancy Inc.
 *
 * This software is licensed under the GNU LGPL (version 2.1 or later).
 * See the COPYING file in this distribution.
 */


#include <glib.h>
#include <glib-object.h>
#include <gee.h>
#include <stdlib.h>
#include <string.h>
#include "shotwell-plugin-dev-1.0.h"
#include <glib/gi18n-lib.h>
#include <float.h>
#include <math.h>
#include <cairo.h>
#include <gobject/gvaluecollector.h>


#define TYPE_TRANSITION_EFFECTS_MANAGER (transition_effects_manager_get_type ())
#define TRANSITION_EFFECTS_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_TRANSITION_EFFECTS_MANAGER, TransitionEffectsManager))
#define TRANSITION_EFFECTS_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_TRANSITION_EFFECTS_MANAGER, TransitionEffectsManagerClass))
#define IS_TRANSITION_EFFECTS_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_TRANSITION_EFFECTS_MANAGER))
#define IS_TRANSITION_EFFECTS_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_TRANSITION_EFFECTS_MANAGER))
#define TRANSITION_EFFECTS_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_TRANSITION_EFFECTS_MANAGER, TransitionEffectsManagerClass))

typedef struct _TransitionEffectsManager TransitionEffectsManager;
typedef struct _TransitionEffectsManagerClass TransitionEffectsManagerClass;
typedef struct _TransitionEffectsManagerPrivate TransitionEffectsManagerPrivate;

#define PLUGINS_TYPE_NOTIFIER (plugins_notifier_get_type ())
#define PLUGINS_NOTIFIER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PLUGINS_TYPE_NOTIFIER, PluginsNotifier))
#define PLUGINS_NOTIFIER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PLUGINS_TYPE_NOTIFIER, PluginsNotifierClass))
#define PLUGINS_IS_NOTIFIER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PLUGINS_TYPE_NOTIFIER))
#define PLUGINS_IS_NOTIFIER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PLUGINS_TYPE_NOTIFIER))
#define PLUGINS_NOTIFIER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PLUGINS_TYPE_NOTIFIER, PluginsNotifierClass))

typedef struct _PluginsNotifier PluginsNotifier;
typedef struct _PluginsNotifierClass PluginsNotifierClass;
#define _plugins_notifier_unref0(var) ((var == NULL) ? NULL : (var = (plugins_notifier_unref (var), NULL)))
#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))

#define TYPE_NULL_TRANSITION_DESCRIPTOR (null_transition_descriptor_get_type ())
#define NULL_TRANSITION_DESCRIPTOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_NULL_TRANSITION_DESCRIPTOR, NullTransitionDescriptor))
#define NULL_TRANSITION_DESCRIPTOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_NULL_TRANSITION_DESCRIPTOR, NullTransitionDescriptorClass))
#define IS_NULL_TRANSITION_DESCRIPTOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_NULL_TRANSITION_DESCRIPTOR))
#define IS_NULL_TRANSITION_DESCRIPTOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_NULL_TRANSITION_DESCRIPTOR))
#define NULL_TRANSITION_DESCRIPTOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_NULL_TRANSITION_DESCRIPTOR, NullTransitionDescriptorClass))

typedef struct _NullTransitionDescriptor NullTransitionDescriptor;
typedef struct _NullTransitionDescriptorClass NullTransitionDescriptorClass;

#define TYPE_RANDOM_EFFECT_DESCRIPTOR (random_effect_descriptor_get_type ())
#define RANDOM_EFFECT_DESCRIPTOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_RANDOM_EFFECT_DESCRIPTOR, RandomEffectDescriptor))
#define RANDOM_EFFECT_DESCRIPTOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_RANDOM_EFFECT_DESCRIPTOR, RandomEffectDescriptorClass))
#define IS_RANDOM_EFFECT_DESCRIPTOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_RANDOM_EFFECT_DESCRIPTOR))
#define IS_RANDOM_EFFECT_DESCRIPTOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_RANDOM_EFFECT_DESCRIPTOR))
#define RANDOM_EFFECT_DESCRIPTOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_RANDOM_EFFECT_DESCRIPTOR, RandomEffectDescriptorClass))

typedef struct _RandomEffectDescriptor RandomEffectDescriptor;
typedef struct _RandomEffectDescriptorClass RandomEffectDescriptorClass;
#define _g_free0(var) (var = (g_free (var), NULL))
#define _transition_effects_manager_unref0(var) ((var == NULL) ? NULL : (var = (transition_effects_manager_unref (var), NULL)))

#define TYPE_TRANSITION_CLOCK (transition_clock_get_type ())
#define TRANSITION_CLOCK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_TRANSITION_CLOCK, TransitionClock))
#define TRANSITION_CLOCK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_TRANSITION_CLOCK, TransitionClockClass))
#define IS_TRANSITION_CLOCK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_TRANSITION_CLOCK))
#define IS_TRANSITION_CLOCK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_TRANSITION_CLOCK))
#define TRANSITION_CLOCK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_TRANSITION_CLOCK, TransitionClockClass))

typedef struct _TransitionClock TransitionClock;
typedef struct _TransitionClockClass TransitionClockClass;
#define _transition_clock_unref0(var) ((var == NULL) ? NULL : (var = (transition_clock_unref (var), NULL)))
typedef struct _ParamSpecTransitionEffectsManager ParamSpecTransitionEffectsManager;
typedef struct _TransitionClockPrivate TransitionClockPrivate;

#define TYPE_OP_TIMER (op_timer_get_type ())
#define OP_TIMER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_OP_TIMER, OpTimer))
#define OP_TIMER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_OP_TIMER, OpTimerClass))
#define IS_OP_TIMER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_OP_TIMER))
#define IS_OP_TIMER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_OP_TIMER))
#define OP_TIMER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_OP_TIMER, OpTimerClass))

typedef struct _OpTimer OpTimer;
typedef struct _OpTimerClass OpTimerClass;
#define _op_timer_unref0(var) ((var == NULL) ? NULL : (var = (op_timer_unref (var), NULL)))

#define PLUGINS_TYPE_STANDARD_HOST_INTERFACE (plugins_standard_host_interface_get_type ())
#define PLUGINS_STANDARD_HOST_INTERFACE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PLUGINS_TYPE_STANDARD_HOST_INTERFACE, PluginsStandardHostInterface))
#define PLUGINS_STANDARD_HOST_INTERFACE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PLUGINS_TYPE_STANDARD_HOST_INTERFACE, PluginsStandardHostInterfaceClass))
#define PLUGINS_IS_STANDARD_HOST_INTERFACE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PLUGINS_TYPE_STANDARD_HOST_INTERFACE))
#define PLUGINS_IS_STANDARD_HOST_INTERFACE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PLUGINS_TYPE_STANDARD_HOST_INTERFACE))
#define PLUGINS_STANDARD_HOST_INTERFACE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PLUGINS_TYPE_STANDARD_HOST_INTERFACE, PluginsStandardHostInterfaceClass))

typedef struct _PluginsStandardHostInterface PluginsStandardHostInterface;
typedef struct _PluginsStandardHostInterfaceClass PluginsStandardHostInterfaceClass;
typedef struct _ParamSpecTransitionClock ParamSpecTransitionClock;
typedef struct _NullTransitionDescriptorPrivate NullTransitionDescriptorPrivate;
enum  {
	NULL_TRANSITION_DESCRIPTOR_0_PROPERTY,
	NULL_TRANSITION_DESCRIPTOR_NUM_PROPERTIES
};
static GParamSpec* null_transition_descriptor_properties[NULL_TRANSITION_DESCRIPTOR_NUM_PROPERTIES];

#define TYPE_NULL_EFFECT (null_effect_get_type ())
#define NULL_EFFECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_NULL_EFFECT, NullEffect))
#define NULL_EFFECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_NULL_EFFECT, NullEffectClass))
#define IS_NULL_EFFECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_NULL_EFFECT))
#define IS_NULL_EFFECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_NULL_EFFECT))
#define NULL_EFFECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_NULL_EFFECT, NullEffectClass))

typedef struct _NullEffect NullEffect;
typedef struct _NullEffectClass NullEffectClass;
typedef struct _NullEffectPrivate NullEffectPrivate;
enum  {
	NULL_EFFECT_0_PROPERTY,
	NULL_EFFECT_NUM_PROPERTIES
};
static GParamSpec* null_effect_properties[NULL_EFFECT_NUM_PROPERTIES];
typedef struct _RandomEffectDescriptorPrivate RandomEffectDescriptorPrivate;
enum  {
	RANDOM_EFFECT_DESCRIPTOR_0_PROPERTY,
	RANDOM_EFFECT_DESCRIPTOR_NUM_PROPERTIES
};
static GParamSpec* random_effect_descriptor_properties[RANDOM_EFFECT_DESCRIPTOR_NUM_PROPERTIES];
#define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
#define _vala_return_if_fail(expr, msg) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return; }
#define _vala_return_val_if_fail(expr, msg, val) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return val; }
#define _vala_warn_if_fail(expr, msg) if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);

struct _TransitionEffectsManager {
	GTypeInstance parent_instance;
	volatile int ref_count;
	TransitionEffectsManagerPrivate * priv;
};

struct _TransitionEffectsManagerClass {
	GTypeClass parent_class;
	void (*finalize) (TransitionEffectsManager *self);
};

struct _TransitionEffectsManagerPrivate {
	GeeMap* effects;
	SpitTransitionsDescriptor* null_descriptor;
	SpitTransitionsDescriptor* random_descriptor;
};

struct _ParamSpecTransitionEffectsManager {
	GParamSpec parent_instance;
};

struct _TransitionClock {
	GTypeInstance parent_instance;
	volatile int ref_count;
	TransitionClockPrivate * priv;
};

struct _TransitionClockClass {
	GTypeClass parent_class;
	void (*finalize) (TransitionClock *self);
};

typedef void (*TransitionClockRepaintCallback) (void* user_data);
struct _TransitionClockPrivate {
	SpitTransitionsDescriptor* desc;
	SpitTransitionsEffect* effect;
	gint desired_fps;
	gint min_fps;
	gint current_fps;
	OpTimer* paint_timer;
	SpitTransitionsVisuals* visuals;
	SpitTransitionsMotion* motion;
	TransitionClockRepaintCallback repaint;
	gpointer repaint_target;
	guint timer_id;
	gulong time_started;
	gint frame_number;
	gboolean cancelled;
};

struct _ParamSpecTransitionClock {
	GParamSpec parent_instance;
};

struct _NullTransitionDescriptor {
	GObject parent_instance;
	NullTransitionDescriptorPrivate * priv;
};

struct _NullTransitionDescriptorClass {
	GObjectClass parent_class;
};

struct _NullEffect {
	GObject parent_instance;
	NullEffectPrivate * priv;
};

struct _NullEffectClass {
	GObjectClass parent_class;
};

struct _RandomEffectDescriptor {
	GObject parent_instance;
	RandomEffectDescriptorPrivate * priv;
};

struct _RandomEffectDescriptorClass {
	GObjectClass parent_class;
};


static gpointer transition_effects_manager_parent_class = NULL;
static TransitionEffectsManager* transition_effects_manager_instance;
static TransitionEffectsManager* transition_effects_manager_instance = NULL;
static gpointer transition_clock_parent_class = NULL;
static gpointer null_transition_descriptor_parent_class = NULL;
static SpitPluggableIface * null_transition_descriptor_spit_pluggable_parent_iface = NULL;
static SpitTransitionsDescriptorIface * null_transition_descriptor_spit_transitions_descriptor_parent_iface = NULL;
static gpointer null_effect_parent_class = NULL;
static SpitTransitionsEffectIface * null_effect_spit_transitions_effect_parent_iface = NULL;
static gpointer random_effect_descriptor_parent_class = NULL;
static SpitPluggableIface * random_effect_descriptor_spit_pluggable_parent_iface = NULL;
static SpitTransitionsDescriptorIface * random_effect_descriptor_spit_transitions_descriptor_parent_iface = NULL;

gpointer transition_effects_manager_ref (gpointer instance);
void transition_effects_manager_unref (gpointer instance);
GParamSpec* param_spec_transition_effects_manager (const gchar* name,
                                                   const gchar* nick,
                                                   const gchar* blurb,
                                                   GType object_type,
                                                   GParamFlags flags);
void value_set_transition_effects_manager (GValue* value,
                                           gpointer v_object);
void value_take_transition_effects_manager (GValue* value,
                                            gpointer v_object);
gpointer value_get_transition_effects_manager (const GValue* value);
GType transition_effects_manager_get_type (void) G_GNUC_CONST;
#define TRANSITION_EFFECTS_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_TRANSITION_EFFECTS_MANAGER, TransitionEffectsManagerPrivate))
gpointer plugins_notifier_ref (gpointer instance);
void plugins_notifier_unref (gpointer instance);
GParamSpec* plugins_param_spec_notifier (const gchar* name,
                                         const gchar* nick,
                                         const gchar* blurb,
                                         GType object_type,
                                         GParamFlags flags);
void plugins_value_set_notifier (GValue* value,
                                 gpointer v_object);
void plugins_value_take_notifier (GValue* value,
                                  gpointer v_object);
gpointer plugins_value_get_notifier (const GValue* value);
GType plugins_notifier_get_type (void) G_GNUC_CONST;
PluginsNotifier* plugins_notifier_get_instance (void);
static void transition_effects_manager_load_transitions (TransitionEffectsManager* self);
static void _transition_effects_manager_load_transitions_plugins_notifier_pluggable_activation (PluginsNotifier* _sender,
                                                                                         SpitPluggable* pluggable,
                                                                                         gboolean enabled,
                                                                                         gpointer self);
NullTransitionDescriptor* null_transition_descriptor_new (void);
NullTransitionDescriptor* null_transition_descriptor_construct (GType object_type);
GType null_transition_descriptor_get_type (void) G_GNUC_CONST;
RandomEffectDescriptor* random_effect_descriptor_new (void);
RandomEffectDescriptor* random_effect_descriptor_construct (GType object_type);
GType random_effect_descriptor_get_type (void) G_GNUC_CONST;
#define NULL_TRANSITION_DESCRIPTOR_EFFECT_ID "org.yorba.shotwell.transitions.null"
#define TRANSITION_EFFECTS_MANAGER_NULL_EFFECT_ID NULL_TRANSITION_DESCRIPTOR_EFFECT_ID
#define RANDOM_EFFECT_DESCRIPTOR_EFFECT_ID "org.yorba.shotwell.transitions.random"
#define TRANSITION_EFFECTS_MANAGER_RANDOM_EFFECT_ID RANDOM_EFFECT_DESCRIPTOR_EFFECT_ID
static TransitionEffectsManager* transition_effects_manager_new (void);
static TransitionEffectsManager* transition_effects_manager_construct (GType object_type);
GeeCollection* plugins_get_pluggables_for_type (GType type,
                                                GCompareDataFunc compare_func,
                                                void* compare_func_target,
                                                GDestroyNotify compare_func_target_destroy_notify,
                                                gboolean include_disabled);
gchar* plugins_get_pluggable_module_id (SpitPluggable* needle);
void transition_effects_manager_init (void);
void transition_effects_manager_terminate (void);
TransitionEffectsManager* transition_effects_manager_get_instance (void);
GeeCollection* transition_effects_manager_get_effect_ids (TransitionEffectsManager* self);
GeeCollection* transition_effects_manager_get_effect_names (TransitionEffectsManager* self,
                                                            GCompareDataFunc comparator,
                                                            void* comparator_target,
                                                            GDestroyNotify comparator_target_destroy_notify);
gchar* transition_effects_manager_get_id_for_effect_name (TransitionEffectsManager* self,
                                                          const gchar* effect_name);
SpitTransitionsDescriptor* transition_effects_manager_get_effect_descriptor (TransitionEffectsManager* self,
                                                                             const gchar* effect_id);
gchar* transition_effects_manager_get_effect_name (TransitionEffectsManager* self,
                                                   const gchar* effect_id);
SpitTransitionsDescriptor* transition_effects_manager_get_null_descriptor (TransitionEffectsManager* self);
gpointer transition_clock_ref (gpointer instance);
void transition_clock_unref (gpointer instance);
GParamSpec* param_spec_transition_clock (const gchar* name,
                                         const gchar* nick,
                                         const gchar* blurb,
                                         GType object_type,
                                         GParamFlags flags);
void value_set_transition_clock (GValue* value,
                                 gpointer v_object);
void value_take_transition_clock (GValue* value,
                                  gpointer v_object);
gpointer value_get_transition_clock (const GValue* value);
GType transition_clock_get_type (void) G_GNUC_CONST;
TransitionClock* transition_effects_manager_create_transition_clock (TransitionEffectsManager* self,
                                                                     const gchar* effect_id);
TransitionClock* transition_clock_new (SpitTransitionsDescriptor* desc);
TransitionClock* transition_clock_construct (GType object_type,
                                             SpitTransitionsDescriptor* desc);
TransitionClock* transition_effects_manager_create_null_transition_clock (TransitionEffectsManager* self);
static void transition_effects_manager_finalize (TransitionEffectsManager * obj);
gpointer op_timer_ref (gpointer instance);
void op_timer_unref (gpointer instance);
GParamSpec* param_spec_op_timer (const gchar* name,
                                 const gchar* nick,
                                 const gchar* blurb,
                                 GType object_type,
                                 GParamFlags flags);
void value_set_op_timer (GValue* value,
                         gpointer v_object);
void value_take_op_timer (GValue* value,
                          gpointer v_object);
gpointer value_get_op_timer (const GValue* value);
GType op_timer_get_type (void) G_GNUC_CONST;
#define TRANSITION_CLOCK_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_TRANSITION_CLOCK, TransitionClockPrivate))
static void transition_clock_cancel_timer (TransitionClock* self);
gchar* op_timer_to_string (OpTimer* self);
PluginsStandardHostInterface* plugins_standard_host_interface_new (SpitPluggable* pluggable,
                                                                   const gchar* config_domain);
PluginsStandardHostInterface* plugins_standard_host_interface_construct (GType object_type,
                                                                         SpitPluggable* pluggable,
                                                                         const gchar* config_domain);
GType plugins_standard_host_interface_get_type (void) G_GNUC_CONST;
OpTimer* op_timer_new (const gchar* name);
OpTimer* op_timer_construct (GType object_type,
                             const gchar* name);
gboolean transition_clock_is_in_progress (TransitionClock* self);
void transition_clock_start (TransitionClock* self,
                             SpitTransitionsVisuals* visuals,
                             SpitTransitionsDirection direction,
                             gint duration_msec,
                             TransitionClockRepaintCallback repaint,
                             void* repaint_target);
static void transition_clock_reset (TransitionClock* self);
gulong now_ms (void);
static gboolean transition_clock_tick (TransitionClock* self);
static gboolean _transition_clock_tick_gsource_func (gpointer self);
static gboolean transition_clock_is_fps_ok (TransitionClock* self);
void transition_clock_cancel (TransitionClock* self);
gboolean transition_clock_paint (TransitionClock* self,
                                 cairo_t* ctx,
                                 gint width,
                                 gint height);
void op_timer_start (OpTimer* self);
void op_timer_stop (OpTimer* self);
static void transition_clock_finalize (TransitionClock * obj);
static gint null_transition_descriptor_real_get_pluggable_interface (SpitPluggable* base,
                                                              gint min_host_version,
                                                              gint max_host_version);
static const gchar* null_transition_descriptor_real_get_id (SpitPluggable* base);
static const gchar* null_transition_descriptor_real_get_pluggable_name (SpitPluggable* base);
static void null_transition_descriptor_real_get_info (SpitPluggable* base,
                                               SpitPluggableInfo* info);
static void null_transition_descriptor_real_activation (SpitPluggable* base,
                                                 gboolean enabled);
static SpitTransitionsEffect* null_transition_descriptor_real_create (SpitTransitionsDescriptor* base,
                                                               SpitHostInterface* host);
NullEffect* null_effect_new (void);
NullEffect* null_effect_construct (GType object_type);
GType null_effect_get_type (void) G_GNUC_CONST;
static void null_effect_real_get_fps (SpitTransitionsEffect* base,
                               gint* desired_fps,
                               gint* min_fps);
static void null_effect_real_start (SpitTransitionsEffect* base,
                             SpitTransitionsVisuals* visuals,
                             SpitTransitionsMotion* motion);
static gboolean null_effect_real_needs_clear_background (SpitTransitionsEffect* base);
static void null_effect_real_paint (SpitTransitionsEffect* base,
                             SpitTransitionsVisuals* visuals,
                             SpitTransitionsMotion* motion,
                             cairo_t* ctx,
                             gint width,
                             gint height,
                             gint frame_number);
static void null_effect_real_advance (SpitTransitionsEffect* base,
                               SpitTransitionsVisuals* visuals,
                               SpitTransitionsMotion* motion,
                               gint frame_number);
static void null_effect_real_cancel (SpitTransitionsEffect* base);
static gint random_effect_descriptor_real_get_pluggable_interface (SpitPluggable* base,
                                                            gint min_host_version,
                                                            gint max_host_version);
static const gchar* random_effect_descriptor_real_get_id (SpitPluggable* base);
static const gchar* random_effect_descriptor_real_get_pluggable_name (SpitPluggable* base);
static void random_effect_descriptor_real_get_info (SpitPluggable* base,
                                             SpitPluggableInfo* info);
static void random_effect_descriptor_real_activation (SpitPluggable* base,
                                               gboolean enabled);
static SpitTransitionsEffect* random_effect_descriptor_real_create (SpitTransitionsDescriptor* base,
                                                             SpitHostInterface* host);


static void
_transition_effects_manager_load_transitions_plugins_notifier_pluggable_activation (PluginsNotifier* _sender,
                                                                                    SpitPluggable* pluggable,
                                                                                    gboolean enabled,
                                                                                    gpointer self)
{
#line 25 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	transition_effects_manager_load_transitions ((TransitionEffectsManager*) self);
#line 418 "TransitionEffects.c"
}


static TransitionEffectsManager*
transition_effects_manager_construct (GType object_type)
{
	TransitionEffectsManager* self = NULL;
	PluginsNotifier* _tmp0_;
	PluginsNotifier* _tmp1_;
#line 19 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self = (TransitionEffectsManager*) g_type_create_instance (object_type);
#line 20 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	transition_effects_manager_load_transitions (self);
#line 21 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp0_ = plugins_notifier_get_instance ();
#line 21 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp1_ = _tmp0_;
#line 21 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_signal_connect (_tmp1_, "pluggable-activation", (GCallback) _transition_effects_manager_load_transitions_plugins_notifier_pluggable_activation, self);
#line 21 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_plugins_notifier_unref0 (_tmp1_);
#line 19 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return self;
#line 442 "TransitionEffects.c"
}


static TransitionEffectsManager*
transition_effects_manager_new (void)
{
#line 19 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return transition_effects_manager_construct (TYPE_TRANSITION_EFFECTS_MANAGER);
#line 451 "TransitionEffects.c"
}


static gpointer
_g_object_ref0 (gpointer self)
{
#line 48 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return self ? g_object_ref (self) : NULL;
#line 460 "TransitionEffects.c"
}


static void
transition_effects_manager_load_transitions (TransitionEffectsManager* self)
{
	GeeMap* _tmp0_;
	GeeMap* _tmp1_;
	SpitTransitionsDescriptor* _tmp2_;
	const gchar* _tmp3_;
	SpitTransitionsDescriptor* _tmp4_;
	GeeMap* _tmp5_;
	SpitTransitionsDescriptor* _tmp6_;
	const gchar* _tmp7_;
	SpitTransitionsDescriptor* _tmp8_;
	GeeCollection* pluggables = NULL;
	GeeCollection* _tmp9_;
#line 28 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_if_fail (IS_TRANSITION_EFFECTS_MANAGER (self));
#line 29 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp0_ = self->priv->effects;
#line 29 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	gee_map_clear (_tmp0_);
#line 32 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp1_ = self->priv->effects;
#line 32 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp2_ = self->priv->null_descriptor;
#line 32 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp3_ = spit_pluggable_get_id (G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, SPIT_TYPE_PLUGGABLE, SpitPluggable));
#line 32 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp4_ = self->priv->null_descriptor;
#line 32 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	gee_map_set (_tmp1_, _tmp3_, _tmp4_);
#line 33 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp5_ = self->priv->effects;
#line 33 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp6_ = self->priv->random_descriptor;
#line 33 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp7_ = spit_pluggable_get_id (G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, SPIT_TYPE_PLUGGABLE, SpitPluggable));
#line 33 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp8_ = self->priv->random_descriptor;
#line 33 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	gee_map_set (_tmp5_, _tmp7_, _tmp8_);
#line 36 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp9_ = plugins_get_pluggables_for_type (SPIT_TRANSITIONS_TYPE_DESCRIPTOR, NULL, NULL, NULL, FALSE);
#line 36 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	pluggables = _tmp9_;
#line 508 "TransitionEffects.c"
	{
		GeeIterator* _pluggable_it = NULL;
		GeeCollection* _tmp10_;
		GeeIterator* _tmp11_;
#line 38 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp10_ = pluggables;
#line 38 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp11_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp10_, GEE_TYPE_ITERABLE, GeeIterable));
#line 38 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_pluggable_it = _tmp11_;
#line 38 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		while (TRUE) {
#line 521 "TransitionEffects.c"
			GeeIterator* _tmp12_;
			SpitPluggable* pluggable = NULL;
			GeeIterator* _tmp13_;
			gpointer _tmp14_;
			gint pluggable_interface = 0;
			SpitPluggable* _tmp15_;
			gint _tmp16_;
			SpitTransitionsDescriptor* desc = NULL;
			SpitPluggable* _tmp21_;
			SpitTransitionsDescriptor* _tmp22_;
			GeeMap* _tmp23_;
			SpitTransitionsDescriptor* _tmp24_;
			const gchar* _tmp25_;
#line 38 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp12_ = _pluggable_it;
#line 38 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			if (!gee_iterator_next (_tmp12_)) {
#line 38 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				break;
#line 541 "TransitionEffects.c"
			}
#line 38 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp13_ = _pluggable_it;
#line 38 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp14_ = gee_iterator_get (_tmp13_);
#line 38 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			pluggable = (SpitPluggable*) _tmp14_;
#line 39 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp15_ = pluggable;
#line 39 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			pluggable_interface = spit_pluggable_get_pluggable_interface (_tmp15_, SPIT_TRANSITIONS_CURRENT_INTERFACE, SPIT_TRANSITIONS_CURRENT_INTERFACE);
#line 41 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp16_ = pluggable_interface;
#line 41 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			if (_tmp16_ != SPIT_TRANSITIONS_CURRENT_INTERFACE) {
#line 557 "TransitionEffects.c"
				SpitPluggable* _tmp17_;
				gchar* _tmp18_;
				gchar* _tmp19_;
				gint _tmp20_;
#line 42 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				_tmp17_ = pluggable;
#line 42 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				_tmp18_ = plugins_get_pluggable_module_id (_tmp17_);
#line 42 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				_tmp19_ = _tmp18_;
#line 42 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				_tmp20_ = pluggable_interface;
#line 42 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				g_warning ("TransitionEffects.vala:42: Unable to load transitions plug-in %s: repo" \
"rted interface %d", _tmp19_, _tmp20_);
#line 42 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				_g_free0 (_tmp19_);
#line 45 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				_g_object_unref0 (pluggable);
#line 45 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				continue;
#line 578 "TransitionEffects.c"
			}
#line 48 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp21_ = pluggable;
#line 48 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp22_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp21_, SPIT_TRANSITIONS_TYPE_DESCRIPTOR, SpitTransitionsDescriptor));
#line 48 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			desc = _tmp22_;
#line 49 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp23_ = self->priv->effects;
#line 49 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp24_ = desc;
#line 49 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp25_ = spit_pluggable_get_id (G_TYPE_CHECK_INSTANCE_CAST (_tmp24_, SPIT_TYPE_PLUGGABLE, SpitPluggable));
#line 49 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			if (gee_map_has_key (_tmp23_, _tmp25_)) {
#line 594 "TransitionEffects.c"
				SpitTransitionsDescriptor* _tmp26_;
				const gchar* _tmp27_;
#line 50 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				_tmp26_ = desc;
#line 50 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				_tmp27_ = spit_pluggable_get_id (G_TYPE_CHECK_INSTANCE_CAST (_tmp26_, SPIT_TYPE_PLUGGABLE, SpitPluggable));
#line 50 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				g_warning ("TransitionEffects.vala:50: Multiple transitions loaded with same effec" \
"t ID %s", _tmp27_);
#line 603 "TransitionEffects.c"
			} else {
				GeeMap* _tmp28_;
				SpitTransitionsDescriptor* _tmp29_;
				const gchar* _tmp30_;
				SpitTransitionsDescriptor* _tmp31_;
#line 52 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				_tmp28_ = self->priv->effects;
#line 52 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				_tmp29_ = desc;
#line 52 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				_tmp30_ = spit_pluggable_get_id (G_TYPE_CHECK_INSTANCE_CAST (_tmp29_, SPIT_TYPE_PLUGGABLE, SpitPluggable));
#line 52 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				_tmp31_ = desc;
#line 52 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				gee_map_set (_tmp28_, _tmp30_, _tmp31_);
#line 619 "TransitionEffects.c"
			}
#line 38 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_g_object_unref0 (desc);
#line 38 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_g_object_unref0 (pluggable);
#line 625 "TransitionEffects.c"
		}
#line 38 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_g_object_unref0 (_pluggable_it);
#line 629 "TransitionEffects.c"
	}
#line 28 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_g_object_unref0 (pluggables);
#line 633 "TransitionEffects.c"
}


void
transition_effects_manager_init (void)
{
	TransitionEffectsManager* _tmp0_;
#line 57 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp0_ = transition_effects_manager_new ();
#line 57 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_transition_effects_manager_unref0 (transition_effects_manager_instance);
#line 57 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	transition_effects_manager_instance = _tmp0_;
#line 647 "TransitionEffects.c"
}


void
transition_effects_manager_terminate (void)
{
#line 61 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_transition_effects_manager_unref0 (transition_effects_manager_instance);
#line 61 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	transition_effects_manager_instance = NULL;
#line 658 "TransitionEffects.c"
}


static gpointer
_transition_effects_manager_ref0 (gpointer self)
{
#line 67 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return self ? transition_effects_manager_ref (self) : NULL;
#line 667 "TransitionEffects.c"
}


TransitionEffectsManager*
transition_effects_manager_get_instance (void)
{
	TransitionEffectsManager* result = NULL;
	TransitionEffectsManager* _tmp0_;
	TransitionEffectsManager* _tmp1_;
	TransitionEffectsManager* _tmp2_;
#line 65 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp0_ = transition_effects_manager_instance;
#line 65 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_vala_assert (_tmp0_ != NULL, "instance != null");
#line 67 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp1_ = transition_effects_manager_instance;
#line 67 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp2_ = _transition_effects_manager_ref0 (_tmp1_);
#line 67 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	result = _tmp2_;
#line 67 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return result;
#line 690 "TransitionEffects.c"
}


GeeCollection*
transition_effects_manager_get_effect_ids (TransitionEffectsManager* self)
{
	GeeCollection* result = NULL;
	GeeMap* _tmp0_;
	GeeSet* _tmp1_;
	GeeSet* _tmp2_;
#line 70 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_val_if_fail (IS_TRANSITION_EFFECTS_MANAGER (self), NULL);
#line 71 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp0_ = self->priv->effects;
#line 71 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp1_ = gee_map_get_keys (_tmp0_);
#line 71 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp2_ = _tmp1_;
#line 71 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	result = G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, GEE_TYPE_COLLECTION, GeeCollection);
#line 71 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return result;
#line 713 "TransitionEffects.c"
}


GeeCollection*
transition_effects_manager_get_effect_names (TransitionEffectsManager* self,
                                             GCompareDataFunc comparator,
                                             void* comparator_target,
                                             GDestroyNotify comparator_target_destroy_notify)
{
	GeeCollection* result = NULL;
	GeeCollection* effect_names = NULL;
	GCompareDataFunc _tmp0_;
	void* _tmp0__target;
	GDestroyNotify _tmp0__target_destroy_notify;
	GeeTreeSet* _tmp1_;
#line 74 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_val_if_fail (IS_TRANSITION_EFFECTS_MANAGER (self), NULL);
#line 75 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp0_ = comparator;
#line 75 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp0__target = comparator_target;
#line 75 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp0__target_destroy_notify = comparator_target_destroy_notify;
#line 75 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	comparator = NULL;
#line 75 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	comparator_target = NULL;
#line 75 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	comparator_target_destroy_notify = NULL;
#line 75 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp1_ = gee_tree_set_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, (GDestroyNotify) g_free, _tmp0_, _tmp0__target, _tmp0__target_destroy_notify);
#line 75 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	effect_names = G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, GEE_TYPE_COLLECTION, GeeCollection);
#line 747 "TransitionEffects.c"
	{
		GeeIterator* _desc_it = NULL;
		GeeMap* _tmp2_;
		GeeCollection* _tmp3_;
		GeeCollection* _tmp4_;
		GeeCollection* _tmp5_;
		GeeIterator* _tmp6_;
		GeeIterator* _tmp7_;
#line 76 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp2_ = self->priv->effects;
#line 76 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp3_ = gee_map_get_values (_tmp2_);
#line 76 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp4_ = _tmp3_;
#line 76 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp5_ = _tmp4_;
#line 76 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp6_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp5_, GEE_TYPE_ITERABLE, GeeIterable));
#line 76 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp7_ = _tmp6_;
#line 76 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_g_object_unref0 (_tmp5_);
#line 76 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_desc_it = _tmp7_;
#line 76 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		while (TRUE) {
#line 774 "TransitionEffects.c"
			GeeIterator* _tmp8_;
			SpitTransitionsDescriptor* desc = NULL;
			GeeIterator* _tmp9_;
			gpointer _tmp10_;
			GeeCollection* _tmp11_;
			SpitTransitionsDescriptor* _tmp12_;
			const gchar* _tmp13_;
#line 76 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp8_ = _desc_it;
#line 76 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			if (!gee_iterator_next (_tmp8_)) {
#line 76 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				break;
#line 788 "TransitionEffects.c"
			}
#line 76 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp9_ = _desc_it;
#line 76 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp10_ = gee_iterator_get (_tmp9_);
#line 76 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			desc = (SpitTransitionsDescriptor*) _tmp10_;
#line 77 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp11_ = effect_names;
#line 77 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp12_ = desc;
#line 77 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp13_ = spit_pluggable_get_pluggable_name (G_TYPE_CHECK_INSTANCE_CAST (_tmp12_, SPIT_TYPE_PLUGGABLE, SpitPluggable));
#line 77 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			gee_collection_add (_tmp11_, _tmp13_);
#line 76 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_g_object_unref0 (desc);
#line 806 "TransitionEffects.c"
		}
#line 76 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_g_object_unref0 (_desc_it);
#line 810 "TransitionEffects.c"
	}
#line 79 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	result = effect_names;
#line 79 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	(comparator_target_destroy_notify == NULL) ? NULL : (comparator_target_destroy_notify (comparator_target), NULL);
#line 79 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	comparator = NULL;
#line 79 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	comparator_target = NULL;
#line 79 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	comparator_target_destroy_notify = NULL;
#line 79 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return result;
#line 824 "TransitionEffects.c"
}


gchar*
transition_effects_manager_get_id_for_effect_name (TransitionEffectsManager* self,
                                                   const gchar* effect_name)
{
	gchar* result = NULL;
#line 82 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_val_if_fail (IS_TRANSITION_EFFECTS_MANAGER (self), NULL);
#line 82 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_val_if_fail (effect_name != NULL, NULL);
#line 837 "TransitionEffects.c"
	{
		GeeIterator* _desc_it = NULL;
		GeeMap* _tmp0_;
		GeeCollection* _tmp1_;
		GeeCollection* _tmp2_;
		GeeCollection* _tmp3_;
		GeeIterator* _tmp4_;
		GeeIterator* _tmp5_;
#line 83 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp0_ = self->priv->effects;
#line 83 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp1_ = gee_map_get_values (_tmp0_);
#line 83 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp2_ = _tmp1_;
#line 83 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp3_ = _tmp2_;
#line 83 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp4_ = gee_iterable_iterator (G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, GEE_TYPE_ITERABLE, GeeIterable));
#line 83 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp5_ = _tmp4_;
#line 83 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_g_object_unref0 (_tmp3_);
#line 83 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_desc_it = _tmp5_;
#line 83 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		while (TRUE) {
#line 864 "TransitionEffects.c"
			GeeIterator* _tmp6_;
			SpitTransitionsDescriptor* desc = NULL;
			GeeIterator* _tmp7_;
			gpointer _tmp8_;
			SpitTransitionsDescriptor* _tmp9_;
			const gchar* _tmp10_;
#line 83 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp6_ = _desc_it;
#line 83 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			if (!gee_iterator_next (_tmp6_)) {
#line 83 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				break;
#line 877 "TransitionEffects.c"
			}
#line 83 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp7_ = _desc_it;
#line 83 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp8_ = gee_iterator_get (_tmp7_);
#line 83 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			desc = (SpitTransitionsDescriptor*) _tmp8_;
#line 84 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp9_ = desc;
#line 84 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp10_ = spit_pluggable_get_pluggable_name (G_TYPE_CHECK_INSTANCE_CAST (_tmp9_, SPIT_TYPE_PLUGGABLE, SpitPluggable));
#line 84 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			if (g_strcmp0 (_tmp10_, effect_name) == 0) {
#line 891 "TransitionEffects.c"
				SpitTransitionsDescriptor* _tmp11_;
				const gchar* _tmp12_;
				gchar* _tmp13_;
#line 85 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				_tmp11_ = desc;
#line 85 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				_tmp12_ = spit_pluggable_get_id (G_TYPE_CHECK_INSTANCE_CAST (_tmp11_, SPIT_TYPE_PLUGGABLE, SpitPluggable));
#line 85 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				_tmp13_ = g_strdup (_tmp12_);
#line 85 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				result = _tmp13_;
#line 85 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				_g_object_unref0 (desc);
#line 85 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				_g_object_unref0 (_desc_it);
#line 85 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				return result;
#line 909 "TransitionEffects.c"
			}
#line 83 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_g_object_unref0 (desc);
#line 913 "TransitionEffects.c"
		}
#line 83 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_g_object_unref0 (_desc_it);
#line 917 "TransitionEffects.c"
	}
#line 88 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	result = NULL;
#line 88 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return result;
#line 923 "TransitionEffects.c"
}


SpitTransitionsDescriptor*
transition_effects_manager_get_effect_descriptor (TransitionEffectsManager* self,
                                                  const gchar* effect_id)
{
	SpitTransitionsDescriptor* result = NULL;
	GeeMap* _tmp0_;
	gpointer _tmp1_;
#line 91 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_val_if_fail (IS_TRANSITION_EFFECTS_MANAGER (self), NULL);
#line 91 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_val_if_fail (effect_id != NULL, NULL);
#line 92 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp0_ = self->priv->effects;
#line 92 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp1_ = gee_map_get (_tmp0_, effect_id);
#line 92 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	result = (SpitTransitionsDescriptor*) _tmp1_;
#line 92 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return result;
#line 946 "TransitionEffects.c"
}


gchar*
transition_effects_manager_get_effect_name (TransitionEffectsManager* self,
                                            const gchar* effect_id)
{
	gchar* result = NULL;
	SpitTransitionsDescriptor* desc = NULL;
	SpitTransitionsDescriptor* _tmp0_;
	const gchar* _tmp1_ = NULL;
	SpitTransitionsDescriptor* _tmp2_;
	gchar* _tmp5_;
#line 95 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_val_if_fail (IS_TRANSITION_EFFECTS_MANAGER (self), NULL);
#line 95 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_val_if_fail (effect_id != NULL, NULL);
#line 96 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp0_ = transition_effects_manager_get_effect_descriptor (self, effect_id);
#line 96 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	desc = _tmp0_;
#line 98 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp2_ = desc;
#line 98 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (_tmp2_ != NULL) {
#line 972 "TransitionEffects.c"
		SpitTransitionsDescriptor* _tmp3_;
		const gchar* _tmp4_;
#line 98 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp3_ = desc;
#line 98 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp4_ = spit_pluggable_get_pluggable_name (G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, SPIT_TYPE_PLUGGABLE, SpitPluggable));
#line 98 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp1_ = _tmp4_;
#line 981 "TransitionEffects.c"
	} else {
#line 98 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp1_ = _ ("(None)");
#line 985 "TransitionEffects.c"
	}
#line 98 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp5_ = g_strdup (_tmp1_);
#line 98 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	result = _tmp5_;
#line 98 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_g_object_unref0 (desc);
#line 98 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return result;
#line 995 "TransitionEffects.c"
}


SpitTransitionsDescriptor*
transition_effects_manager_get_null_descriptor (TransitionEffectsManager* self)
{
	SpitTransitionsDescriptor* result = NULL;
	SpitTransitionsDescriptor* _tmp0_;
	SpitTransitionsDescriptor* _tmp1_;
#line 101 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_val_if_fail (IS_TRANSITION_EFFECTS_MANAGER (self), NULL);
#line 102 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp0_ = self->priv->null_descriptor;
#line 102 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp1_ = _g_object_ref0 (_tmp0_);
#line 102 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	result = _tmp1_;
#line 102 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return result;
#line 1015 "TransitionEffects.c"
}


TransitionClock*
transition_effects_manager_create_transition_clock (TransitionEffectsManager* self,
                                                    const gchar* effect_id)
{
	TransitionClock* result = NULL;
	SpitTransitionsDescriptor* desc = NULL;
	SpitTransitionsDescriptor* _tmp0_;
	TransitionClock* _tmp1_ = NULL;
	SpitTransitionsDescriptor* _tmp2_;
#line 105 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_val_if_fail (IS_TRANSITION_EFFECTS_MANAGER (self), NULL);
#line 105 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_val_if_fail (effect_id != NULL, NULL);
#line 106 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp0_ = transition_effects_manager_get_effect_descriptor (self, effect_id);
#line 106 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	desc = _tmp0_;
#line 108 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp2_ = desc;
#line 108 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (_tmp2_ != NULL) {
#line 1040 "TransitionEffects.c"
		SpitTransitionsDescriptor* _tmp3_;
		TransitionClock* _tmp4_;
#line 108 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp3_ = desc;
#line 108 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp4_ = transition_clock_new (_tmp3_);
#line 108 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_transition_clock_unref0 (_tmp1_);
#line 108 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp1_ = _tmp4_;
#line 1051 "TransitionEffects.c"
	} else {
#line 108 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_transition_clock_unref0 (_tmp1_);
#line 108 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp1_ = NULL;
#line 1057 "TransitionEffects.c"
	}
#line 108 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	result = _tmp1_;
#line 108 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_g_object_unref0 (desc);
#line 108 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return result;
#line 1065 "TransitionEffects.c"
}


TransitionClock*
transition_effects_manager_create_null_transition_clock (TransitionEffectsManager* self)
{
	TransitionClock* result = NULL;
	SpitTransitionsDescriptor* _tmp0_;
	TransitionClock* _tmp1_;
#line 111 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_val_if_fail (IS_TRANSITION_EFFECTS_MANAGER (self), NULL);
#line 112 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp0_ = self->priv->null_descriptor;
#line 112 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp1_ = transition_clock_new (_tmp0_);
#line 112 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	result = _tmp1_;
#line 112 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return result;
#line 1085 "TransitionEffects.c"
}


static void
value_transition_effects_manager_init (GValue* value)
{
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	value->data[0].v_pointer = NULL;
#line 1094 "TransitionEffects.c"
}


static void
value_transition_effects_manager_free_value (GValue* value)
{
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (value->data[0].v_pointer) {
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		transition_effects_manager_unref (value->data[0].v_pointer);
#line 1105 "TransitionEffects.c"
	}
}


static void
value_transition_effects_manager_copy_value (const GValue* src_value,
                                             GValue* dest_value)
{
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (src_value->data[0].v_pointer) {
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		dest_value->data[0].v_pointer = transition_effects_manager_ref (src_value->data[0].v_pointer);
#line 1118 "TransitionEffects.c"
	} else {
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		dest_value->data[0].v_pointer = NULL;
#line 1122 "TransitionEffects.c"
	}
}


static gpointer
value_transition_effects_manager_peek_pointer (const GValue* value)
{
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return value->data[0].v_pointer;
#line 1132 "TransitionEffects.c"
}


static gchar*
value_transition_effects_manager_collect_value (GValue* value,
                                                guint n_collect_values,
                                                GTypeCValue* collect_values,
                                                guint collect_flags)
{
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (collect_values[0].v_pointer) {
#line 1144 "TransitionEffects.c"
		TransitionEffectsManager * object;
		object = collect_values[0].v_pointer;
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		if (object->parent_instance.g_class == NULL) {
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
#line 1151 "TransitionEffects.c"
		} else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
#line 1155 "TransitionEffects.c"
		}
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		value->data[0].v_pointer = transition_effects_manager_ref (object);
#line 1159 "TransitionEffects.c"
	} else {
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		value->data[0].v_pointer = NULL;
#line 1163 "TransitionEffects.c"
	}
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return NULL;
#line 1167 "TransitionEffects.c"
}


static gchar*
value_transition_effects_manager_lcopy_value (const GValue* value,
                                              guint n_collect_values,
                                              GTypeCValue* collect_values,
                                              guint collect_flags)
{
	TransitionEffectsManager ** object_p;
	object_p = collect_values[0].v_pointer;
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (!object_p) {
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
#line 1183 "TransitionEffects.c"
	}
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (!value->data[0].v_pointer) {
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		*object_p = NULL;
#line 1189 "TransitionEffects.c"
	} else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		*object_p = value->data[0].v_pointer;
#line 1193 "TransitionEffects.c"
	} else {
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		*object_p = transition_effects_manager_ref (value->data[0].v_pointer);
#line 1197 "TransitionEffects.c"
	}
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return NULL;
#line 1201 "TransitionEffects.c"
}


GParamSpec*
param_spec_transition_effects_manager (const gchar* name,
                                       const gchar* nick,
                                       const gchar* blurb,
                                       GType object_type,
                                       GParamFlags flags)
{
	ParamSpecTransitionEffectsManager* spec;
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_val_if_fail (g_type_is_a (object_type, TYPE_TRANSITION_EFFECTS_MANAGER), NULL);
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	G_PARAM_SPEC (spec)->value_type = object_type;
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return G_PARAM_SPEC (spec);
#line 1221 "TransitionEffects.c"
}


gpointer
value_get_transition_effects_manager (const GValue* value)
{
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_TRANSITION_EFFECTS_MANAGER), NULL);
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return value->data[0].v_pointer;
#line 1232 "TransitionEffects.c"
}


void
value_set_transition_effects_manager (GValue* value,
                                      gpointer v_object)
{
	TransitionEffectsManager * old;
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_TRANSITION_EFFECTS_MANAGER));
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	old = value->data[0].v_pointer;
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (v_object) {
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_TRANSITION_EFFECTS_MANAGER));
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		value->data[0].v_pointer = v_object;
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		transition_effects_manager_ref (value->data[0].v_pointer);
#line 1255 "TransitionEffects.c"
	} else {
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		value->data[0].v_pointer = NULL;
#line 1259 "TransitionEffects.c"
	}
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (old) {
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		transition_effects_manager_unref (old);
#line 1265 "TransitionEffects.c"
	}
}


void
value_take_transition_effects_manager (GValue* value,
                                       gpointer v_object)
{
	TransitionEffectsManager * old;
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_TRANSITION_EFFECTS_MANAGER));
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	old = value->data[0].v_pointer;
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (v_object) {
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_TRANSITION_EFFECTS_MANAGER));
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		value->data[0].v_pointer = v_object;
#line 1287 "TransitionEffects.c"
	} else {
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		value->data[0].v_pointer = NULL;
#line 1291 "TransitionEffects.c"
	}
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (old) {
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		transition_effects_manager_unref (old);
#line 1297 "TransitionEffects.c"
	}
}


static void
transition_effects_manager_class_init (TransitionEffectsManagerClass * klass)
{
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	transition_effects_manager_parent_class = g_type_class_peek_parent (klass);
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	((TransitionEffectsManagerClass *) klass)->finalize = transition_effects_manager_finalize;
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_type_class_add_private (klass, sizeof (TransitionEffectsManagerPrivate));
#line 1311 "TransitionEffects.c"
}


static void
transition_effects_manager_instance_init (TransitionEffectsManager * self)
{
	GeeHashMap* _tmp0_;
	NullTransitionDescriptor* _tmp1_;
	RandomEffectDescriptor* _tmp2_;
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->priv = TRANSITION_EFFECTS_MANAGER_GET_PRIVATE (self);
#line 14 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp0_ = gee_hash_map_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, (GDestroyNotify) g_free, SPIT_TRANSITIONS_TYPE_DESCRIPTOR, (GBoxedCopyFunc) g_object_ref, (GDestroyNotify) g_object_unref, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
#line 14 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->priv->effects = G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, GEE_TYPE_MAP, GeeMap);
#line 16 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp1_ = null_transition_descriptor_new ();
#line 16 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->priv->null_descriptor = G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, SPIT_TRANSITIONS_TYPE_DESCRIPTOR, SpitTransitionsDescriptor);
#line 17 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp2_ = random_effect_descriptor_new ();
#line 17 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->priv->random_descriptor = G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, SPIT_TRANSITIONS_TYPE_DESCRIPTOR, SpitTransitionsDescriptor);
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->ref_count = 1;
#line 1337 "TransitionEffects.c"
}


static void
transition_effects_manager_finalize (TransitionEffectsManager * obj)
{
	TransitionEffectsManager * self;
	PluginsNotifier* _tmp0_;
	PluginsNotifier* _tmp1_;
	guint _tmp2_;
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self = G_TYPE_CHECK_INSTANCE_CAST (obj, TYPE_TRANSITION_EFFECTS_MANAGER, TransitionEffectsManager);
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_signal_handlers_destroy (self);
#line 25 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp0_ = plugins_notifier_get_instance ();
#line 25 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp1_ = _tmp0_;
#line 25 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_signal_parse_name ("pluggable-activation", PLUGINS_TYPE_NOTIFIER, &_tmp2_, NULL, FALSE);
#line 25 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_signal_handlers_disconnect_matched (_tmp1_, G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, _tmp2_, 0, NULL, (GCallback) _transition_effects_manager_load_transitions_plugins_notifier_pluggable_activation, self);
#line 25 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_plugins_notifier_unref0 (_tmp1_);
#line 14 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_g_object_unref0 (self->priv->effects);
#line 16 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_g_object_unref0 (self->priv->null_descriptor);
#line 17 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_g_object_unref0 (self->priv->random_descriptor);
#line 1368 "TransitionEffects.c"
}


GType
transition_effects_manager_get_type (void)
{
	static volatile gsize transition_effects_manager_type_id__volatile = 0;
	if (g_once_init_enter (&transition_effects_manager_type_id__volatile)) {
		static const GTypeValueTable g_define_type_value_table = { value_transition_effects_manager_init, value_transition_effects_manager_free_value, value_transition_effects_manager_copy_value, value_transition_effects_manager_peek_pointer, "p", value_transition_effects_manager_collect_value, "p", value_transition_effects_manager_lcopy_value };
		static const GTypeInfo g_define_type_info = { sizeof (TransitionEffectsManagerClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) transition_effects_manager_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (TransitionEffectsManager), 0, (GInstanceInitFunc) transition_effects_manager_instance_init, &g_define_type_value_table };
		static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
		GType transition_effects_manager_type_id;
		transition_effects_manager_type_id = g_type_register_fundamental (g_type_fundamental_next (), "TransitionEffectsManager", &g_define_type_info, &g_define_type_fundamental_info, 0);
		g_once_init_leave (&transition_effects_manager_type_id__volatile, transition_effects_manager_type_id);
	}
	return transition_effects_manager_type_id__volatile;
}


gpointer
transition_effects_manager_ref (gpointer instance)
{
	TransitionEffectsManager * self;
	self = instance;
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_atomic_int_inc (&self->ref_count);
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return instance;
#line 1397 "TransitionEffects.c"
}


void
transition_effects_manager_unref (gpointer instance)
{
	TransitionEffectsManager * self;
	self = instance;
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (g_atomic_int_dec_and_test (&self->ref_count)) {
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		TRANSITION_EFFECTS_MANAGER_GET_CLASS (self)->finalize (self);
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		g_type_free_instance ((GTypeInstance *) self);
#line 1412 "TransitionEffects.c"
	}
}


TransitionClock*
transition_clock_construct (GType object_type,
                            SpitTransitionsDescriptor* desc)
{
	TransitionClock* self = NULL;
	SpitTransitionsDescriptor* _tmp0_;
	PluginsStandardHostInterface* _tmp1_;
	PluginsStandardHostInterface* _tmp2_;
	SpitTransitionsEffect* _tmp3_;
	SpitTransitionsEffect* _tmp4_;
	gint _tmp5_ = 0;
	gint _tmp6_ = 0;
	const gchar* _tmp7_;
	OpTimer* _tmp8_;
#line 136 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_val_if_fail (SPIT_TRANSITIONS_IS_DESCRIPTOR (desc), NULL);
#line 136 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self = (TransitionClock*) g_type_create_instance (object_type);
#line 137 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp0_ = _g_object_ref0 (desc);
#line 137 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_g_object_unref0 (self->priv->desc);
#line 137 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->priv->desc = _tmp0_;
#line 139 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp1_ = plugins_standard_host_interface_new (G_TYPE_CHECK_INSTANCE_CAST (desc, SPIT_TYPE_PLUGGABLE, SpitPluggable), "transitions");
#line 139 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp2_ = _tmp1_;
#line 139 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp3_ = spit_transitions_descriptor_create (desc, G_TYPE_CHECK_INSTANCE_CAST (_tmp2_, SPIT_TYPE_HOST_INTERFACE, SpitHostInterface));
#line 139 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_g_object_unref0 (self->priv->effect);
#line 139 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->priv->effect = _tmp3_;
#line 139 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_g_object_unref0 (_tmp2_);
#line 140 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp4_ = self->priv->effect;
#line 140 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	spit_transitions_effect_get_fps (_tmp4_, &_tmp5_, &_tmp6_);
#line 140 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->priv->desired_fps = _tmp5_;
#line 140 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->priv->min_fps = _tmp6_;
#line 142 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp7_ = spit_pluggable_get_pluggable_name (G_TYPE_CHECK_INSTANCE_CAST (desc, SPIT_TYPE_PLUGGABLE, SpitPluggable));
#line 142 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp8_ = op_timer_new (_tmp7_);
#line 142 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_op_timer_unref0 (self->priv->paint_timer);
#line 142 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->priv->paint_timer = _tmp8_;
#line 136 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return self;
#line 1471 "TransitionEffects.c"
}


TransitionClock*
transition_clock_new (SpitTransitionsDescriptor* desc)
{
#line 136 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return transition_clock_construct (TYPE_TRANSITION_CLOCK, desc);
#line 1480 "TransitionEffects.c"
}


gboolean
transition_clock_is_in_progress (TransitionClock* self)
{
	gboolean result = FALSE;
	gboolean _tmp0_ = FALSE;
	gboolean _tmp1_ = FALSE;
	gboolean _tmp2_;
#line 151 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_val_if_fail (IS_TRANSITION_CLOCK (self), FALSE);
#line 152 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp2_ = self->priv->cancelled;
#line 152 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (!_tmp2_) {
#line 1497 "TransitionEffects.c"
		SpitTransitionsMotion* _tmp3_;
#line 152 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp3_ = self->priv->motion;
#line 152 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp1_ = _tmp3_ != NULL;
#line 1503 "TransitionEffects.c"
	} else {
#line 152 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp1_ = FALSE;
#line 1507 "TransitionEffects.c"
	}
#line 152 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (_tmp1_) {
#line 1511 "TransitionEffects.c"
		gint _tmp4_;
		SpitTransitionsMotion* _tmp5_;
		gint _tmp6_;
		gint _tmp7_;
#line 152 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp4_ = self->priv->frame_number;
#line 152 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp5_ = self->priv->motion;
#line 152 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp6_ = spit_transitions_motion_get_total_frames (_tmp5_);
#line 152 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp7_ = _tmp6_;
#line 152 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp0_ = _tmp4_ < _tmp7_;
#line 1526 "TransitionEffects.c"
	} else {
#line 152 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp0_ = FALSE;
#line 1530 "TransitionEffects.c"
	}
#line 152 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	result = _tmp0_;
#line 152 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return result;
#line 1536 "TransitionEffects.c"
}


static gboolean
_transition_clock_tick_gsource_func (gpointer self)
{
	gboolean result;
	result = transition_clock_tick ((TransitionClock*) self);
#line 173 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return result;
#line 1547 "TransitionEffects.c"
}


void
transition_clock_start (TransitionClock* self,
                        SpitTransitionsVisuals* visuals,
                        SpitTransitionsDirection direction,
                        gint duration_msec,
                        TransitionClockRepaintCallback repaint,
                        void* repaint_target)
{
	gint _tmp0_;
	SpitTransitionsVisuals* _tmp1_;
	gint _tmp2_;
	SpitTransitionsMotion* _tmp3_;
	SpitTransitionsEffect* _tmp4_;
	SpitTransitionsMotion* _tmp5_;
	SpitTransitionsMotion* _tmp6_;
	gint _tmp7_;
	gint _tmp8_;
#line 155 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_if_fail (IS_TRANSITION_CLOCK (self));
#line 155 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_if_fail (SPIT_TRANSITIONS_IS_VISUALS (visuals));
#line 157 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	transition_clock_reset (self);
#line 160 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp0_ = self->priv->desired_fps;
#line 160 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (_tmp0_ == 0) {
#line 161 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		return;
#line 1580 "TransitionEffects.c"
	}
#line 163 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp1_ = _g_object_ref0 (visuals);
#line 163 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_g_object_unref0 (self->priv->visuals);
#line 163 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->priv->visuals = _tmp1_;
#line 164 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->priv->repaint = repaint;
#line 164 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->priv->repaint_target = repaint_target;
#line 165 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp2_ = self->priv->desired_fps;
#line 165 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp3_ = spit_transitions_motion_new (direction, _tmp2_, duration_msec);
#line 165 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_g_object_unref0 (self->priv->motion);
#line 165 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->priv->motion = _tmp3_;
#line 167 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp4_ = self->priv->effect;
#line 167 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp5_ = self->priv->motion;
#line 167 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	spit_transitions_effect_start (_tmp4_, visuals, _tmp5_);
#line 172 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->priv->time_started = now_ms ();
#line 173 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp6_ = self->priv->motion;
#line 173 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp7_ = spit_transitions_motion_get_tick_msec (_tmp6_);
#line 173 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp8_ = _tmp7_;
#line 173 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->priv->timer_id = g_timeout_add_full (G_PRIORITY_HIGH, (guint) _tmp8_, _transition_clock_tick_gsource_func, transition_clock_ref (self), transition_clock_unref);
#line 1616 "TransitionEffects.c"
}


static void
transition_clock_reset (TransitionClock* self)
{
#line 177 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_if_fail (IS_TRANSITION_CLOCK (self));
#line 178 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_g_object_unref0 (self->priv->visuals);
#line 178 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->priv->visuals = NULL;
#line 179 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_g_object_unref0 (self->priv->motion);
#line 179 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->priv->motion = NULL;
#line 180 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->priv->repaint = NULL;
#line 180 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->priv->repaint_target = NULL;
#line 181 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	transition_clock_cancel_timer (self);
#line 182 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->priv->time_started = (gulong) 0;
#line 183 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->priv->frame_number = 1;
#line 184 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->priv->current_fps = 0;
#line 185 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->priv->cancelled = FALSE;
#line 1647 "TransitionEffects.c"
}


static void
transition_clock_cancel_timer (TransitionClock* self)
{
	guint _tmp0_;
#line 188 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_if_fail (IS_TRANSITION_CLOCK (self));
#line 189 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp0_ = self->priv->timer_id;
#line 189 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (_tmp0_ != ((guint) 0)) {
#line 1661 "TransitionEffects.c"
		guint _tmp1_;
#line 190 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp1_ = self->priv->timer_id;
#line 190 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		g_source_remove (_tmp1_);
#line 191 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		self->priv->timer_id = (guint) 0;
#line 1669 "TransitionEffects.c"
	}
}


static gboolean
transition_clock_is_fps_ok (TransitionClock* self)
{
	gboolean result = FALSE;
	gulong _tmp0_;
	gint _tmp1_;
	gdouble elapsed_msec = 0.0;
	gulong _tmp2_;
	gdouble _tmp3_;
	gint _tmp4_;
	gdouble _tmp5_;
	gint _tmp6_;
	gint _tmp7_;
	gint _tmp12_;
	gint _tmp13_;
#line 196 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_val_if_fail (IS_TRANSITION_CLOCK (self), FALSE);
#line 197 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp0_ = self->priv->time_started;
#line 197 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_vala_assert (_tmp0_ > ((gulong) 0), "time_started > 0");
#line 199 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp1_ = self->priv->frame_number;
#line 199 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (_tmp1_ <= 3) {
#line 200 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		result = TRUE;
#line 200 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		return result;
#line 1703 "TransitionEffects.c"
	}
#line 202 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp2_ = self->priv->time_started;
#line 202 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	elapsed_msec = (gdouble) (now_ms () - _tmp2_);
#line 203 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp3_ = elapsed_msec;
#line 203 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (_tmp3_ <= 0.0) {
#line 204 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		result = TRUE;
#line 204 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		return result;
#line 1717 "TransitionEffects.c"
	}
#line 206 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp4_ = self->priv->frame_number;
#line 206 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp5_ = elapsed_msec;
#line 206 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->priv->current_fps = (gint) ((_tmp4_ * 1000.0) / _tmp5_);
#line 207 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp6_ = self->priv->current_fps;
#line 207 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp7_ = self->priv->min_fps;
#line 207 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (_tmp6_ < _tmp7_) {
#line 1731 "TransitionEffects.c"
		gint _tmp8_;
		gint _tmp9_;
		gdouble _tmp10_;
		gint _tmp11_;
#line 208 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp8_ = self->priv->current_fps;
#line 208 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp9_ = self->priv->min_fps;
#line 208 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp10_ = elapsed_msec;
#line 208 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp11_ = self->priv->frame_number;
#line 208 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		g_debug ("TransitionEffects.vala:208: Transition rate of %dfps below minimum of " \
"%dfps (elapsed=%lf frames=%d)", _tmp8_, _tmp9_, _tmp10_, _tmp11_);
#line 1746 "TransitionEffects.c"
	}
#line 212 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp12_ = self->priv->current_fps;
#line 212 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp13_ = self->priv->min_fps;
#line 212 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	result = _tmp12_ >= _tmp13_;
#line 212 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return result;
#line 1756 "TransitionEffects.c"
}


void
transition_clock_cancel (TransitionClock* self)
{
	SpitTransitionsEffect* _tmp0_;
	TransitionClockRepaintCallback _tmp1_;
	void* _tmp1__target;
#line 216 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_if_fail (IS_TRANSITION_CLOCK (self));
#line 217 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->priv->cancelled = TRUE;
#line 218 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	transition_clock_cancel_timer (self);
#line 219 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp0_ = self->priv->effect;
#line 219 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	spit_transitions_effect_cancel (_tmp0_);
#line 222 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp1_ = self->priv->repaint;
#line 222 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp1__target = self->priv->repaint_target;
#line 222 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp1_ (_tmp1__target);
#line 1782 "TransitionEffects.c"
}


gboolean
transition_clock_paint (TransitionClock* self,
                        cairo_t* ctx,
                        gint width,
                        gint height)
{
	gboolean result = FALSE;
	OpTimer* _tmp0_;
	SpitTransitionsEffect* _tmp1_;
	SpitTransitionsEffect* _tmp18_;
	SpitTransitionsVisuals* _tmp19_;
	SpitTransitionsMotion* _tmp20_;
	gint _tmp21_;
	OpTimer* _tmp22_;
#line 227 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_val_if_fail (IS_TRANSITION_CLOCK (self), FALSE);
#line 227 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_val_if_fail (ctx != NULL, FALSE);
#line 228 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (!transition_clock_is_in_progress (self)) {
#line 229 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		result = FALSE;
#line 229 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		return result;
#line 1810 "TransitionEffects.c"
	}
#line 231 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp0_ = self->priv->paint_timer;
#line 231 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	op_timer_start (_tmp0_);
#line 233 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	cairo_save (ctx);
#line 235 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp1_ = self->priv->effect;
#line 235 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (spit_transitions_effect_needs_clear_background (_tmp1_)) {
#line 1822 "TransitionEffects.c"
		SpitTransitionsVisuals* _tmp2_;
		GdkRGBA _tmp3_ = {0};
		GdkRGBA _tmp4_;
		gdouble _tmp5_;
		SpitTransitionsVisuals* _tmp6_;
		GdkRGBA _tmp7_ = {0};
		GdkRGBA _tmp8_;
		gdouble _tmp9_;
		SpitTransitionsVisuals* _tmp10_;
		GdkRGBA _tmp11_ = {0};
		GdkRGBA _tmp12_;
		gdouble _tmp13_;
		SpitTransitionsVisuals* _tmp14_;
		GdkRGBA _tmp15_ = {0};
		GdkRGBA _tmp16_;
		gdouble _tmp17_;
#line 236 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp2_ = self->priv->visuals;
#line 236 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		spit_transitions_visuals_get_bg_color (_tmp2_, &_tmp3_);
#line 236 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp4_ = _tmp3_;
#line 236 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp5_ = _tmp4_.red;
#line 236 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp6_ = self->priv->visuals;
#line 236 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		spit_transitions_visuals_get_bg_color (_tmp6_, &_tmp7_);
#line 236 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp8_ = _tmp7_;
#line 236 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp9_ = _tmp8_.green;
#line 236 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp10_ = self->priv->visuals;
#line 236 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		spit_transitions_visuals_get_bg_color (_tmp10_, &_tmp11_);
#line 236 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp12_ = _tmp11_;
#line 236 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp13_ = _tmp12_.blue;
#line 236 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp14_ = self->priv->visuals;
#line 236 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		spit_transitions_visuals_get_bg_color (_tmp14_, &_tmp15_);
#line 236 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp16_ = _tmp15_;
#line 236 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp17_ = _tmp16_.alpha;
#line 236 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		cairo_set_source_rgba (ctx, _tmp5_, _tmp9_, _tmp13_, _tmp17_);
#line 238 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		cairo_rectangle (ctx, (gdouble) 0, (gdouble) 0, (gdouble) width, (gdouble) height);
#line 239 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		cairo_fill (ctx);
#line 1877 "TransitionEffects.c"
	}
#line 242 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp18_ = self->priv->effect;
#line 242 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp19_ = self->priv->visuals;
#line 242 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp20_ = self->priv->motion;
#line 242 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp21_ = self->priv->frame_number;
#line 242 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	spit_transitions_effect_paint (_tmp18_, _tmp19_, _tmp20_, ctx, width, height, _tmp21_);
#line 244 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	cairo_restore (ctx);
#line 246 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp22_ = self->priv->paint_timer;
#line 246 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	op_timer_stop (_tmp22_);
#line 248 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	result = TRUE;
#line 248 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return result;
#line 1899 "TransitionEffects.c"
}


static gboolean
transition_clock_tick (TransitionClock* self)
{
	gboolean result = FALSE;
	TransitionClockRepaintCallback _tmp0_;
	void* _tmp0__target;
	gint _tmp1_;
	SpitTransitionsMotion* _tmp2_;
	gint _tmp3_;
	gint _tmp4_;
#line 251 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_val_if_fail (IS_TRANSITION_CLOCK (self), FALSE);
#line 252 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (!transition_clock_is_fps_ok (self)) {
#line 253 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		g_debug ("TransitionEffects.vala:253: Cancelling transition: below minimum fps");
#line 254 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		transition_clock_cancel (self);
#line 1921 "TransitionEffects.c"
	}
#line 259 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp0_ = self->priv->repaint;
#line 259 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp0__target = self->priv->repaint_target;
#line 259 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp0_ (_tmp0__target);
#line 261 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (!transition_clock_is_in_progress (self)) {
#line 262 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		transition_clock_cancel_timer (self);
#line 264 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		result = FALSE;
#line 264 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		return result;
#line 1937 "TransitionEffects.c"
	}
#line 268 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp1_ = self->priv->frame_number;
#line 268 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp2_ = self->priv->motion;
#line 268 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp3_ = spit_transitions_motion_get_total_frames (_tmp2_);
#line 268 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp4_ = _tmp3_;
#line 268 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (_tmp1_ < _tmp4_) {
#line 1949 "TransitionEffects.c"
		SpitTransitionsEffect* _tmp5_;
		SpitTransitionsVisuals* _tmp6_;
		SpitTransitionsMotion* _tmp7_;
		gint _tmp8_;
		gint _tmp9_;
#line 269 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp5_ = self->priv->effect;
#line 269 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp6_ = self->priv->visuals;
#line 269 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp7_ = self->priv->motion;
#line 269 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp8_ = self->priv->frame_number;
#line 269 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		self->priv->frame_number = _tmp8_ + 1;
#line 269 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp9_ = self->priv->frame_number;
#line 269 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		spit_transitions_effect_advance (_tmp5_, _tmp6_, _tmp7_, _tmp9_);
#line 1969 "TransitionEffects.c"
	}
#line 271 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	result = TRUE;
#line 271 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return result;
#line 1975 "TransitionEffects.c"
}


static void
value_transition_clock_init (GValue* value)
{
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	value->data[0].v_pointer = NULL;
#line 1984 "TransitionEffects.c"
}


static void
value_transition_clock_free_value (GValue* value)
{
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (value->data[0].v_pointer) {
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		transition_clock_unref (value->data[0].v_pointer);
#line 1995 "TransitionEffects.c"
	}
}


static void
value_transition_clock_copy_value (const GValue* src_value,
                                   GValue* dest_value)
{
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (src_value->data[0].v_pointer) {
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		dest_value->data[0].v_pointer = transition_clock_ref (src_value->data[0].v_pointer);
#line 2008 "TransitionEffects.c"
	} else {
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		dest_value->data[0].v_pointer = NULL;
#line 2012 "TransitionEffects.c"
	}
}


static gpointer
value_transition_clock_peek_pointer (const GValue* value)
{
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return value->data[0].v_pointer;
#line 2022 "TransitionEffects.c"
}


static gchar*
value_transition_clock_collect_value (GValue* value,
                                      guint n_collect_values,
                                      GTypeCValue* collect_values,
                                      guint collect_flags)
{
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (collect_values[0].v_pointer) {
#line 2034 "TransitionEffects.c"
		TransitionClock * object;
		object = collect_values[0].v_pointer;
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		if (object->parent_instance.g_class == NULL) {
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
#line 2041 "TransitionEffects.c"
		} else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
#line 2045 "TransitionEffects.c"
		}
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		value->data[0].v_pointer = transition_clock_ref (object);
#line 2049 "TransitionEffects.c"
	} else {
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		value->data[0].v_pointer = NULL;
#line 2053 "TransitionEffects.c"
	}
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return NULL;
#line 2057 "TransitionEffects.c"
}


static gchar*
value_transition_clock_lcopy_value (const GValue* value,
                                    guint n_collect_values,
                                    GTypeCValue* collect_values,
                                    guint collect_flags)
{
	TransitionClock ** object_p;
	object_p = collect_values[0].v_pointer;
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (!object_p) {
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
#line 2073 "TransitionEffects.c"
	}
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (!value->data[0].v_pointer) {
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		*object_p = NULL;
#line 2079 "TransitionEffects.c"
	} else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		*object_p = value->data[0].v_pointer;
#line 2083 "TransitionEffects.c"
	} else {
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		*object_p = transition_clock_ref (value->data[0].v_pointer);
#line 2087 "TransitionEffects.c"
	}
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return NULL;
#line 2091 "TransitionEffects.c"
}


GParamSpec*
param_spec_transition_clock (const gchar* name,
                             const gchar* nick,
                             const gchar* blurb,
                             GType object_type,
                             GParamFlags flags)
{
	ParamSpecTransitionClock* spec;
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_val_if_fail (g_type_is_a (object_type, TYPE_TRANSITION_CLOCK), NULL);
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	G_PARAM_SPEC (spec)->value_type = object_type;
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return G_PARAM_SPEC (spec);
#line 2111 "TransitionEffects.c"
}


gpointer
value_get_transition_clock (const GValue* value)
{
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_TRANSITION_CLOCK), NULL);
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return value->data[0].v_pointer;
#line 2122 "TransitionEffects.c"
}


void
value_set_transition_clock (GValue* value,
                            gpointer v_object)
{
	TransitionClock * old;
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_TRANSITION_CLOCK));
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	old = value->data[0].v_pointer;
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (v_object) {
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_TRANSITION_CLOCK));
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		value->data[0].v_pointer = v_object;
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		transition_clock_ref (value->data[0].v_pointer);
#line 2145 "TransitionEffects.c"
	} else {
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		value->data[0].v_pointer = NULL;
#line 2149 "TransitionEffects.c"
	}
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (old) {
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		transition_clock_unref (old);
#line 2155 "TransitionEffects.c"
	}
}


void
value_take_transition_clock (GValue* value,
                             gpointer v_object)
{
	TransitionClock * old;
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_TRANSITION_CLOCK));
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	old = value->data[0].v_pointer;
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (v_object) {
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_TRANSITION_CLOCK));
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		value->data[0].v_pointer = v_object;
#line 2177 "TransitionEffects.c"
	} else {
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		value->data[0].v_pointer = NULL;
#line 2181 "TransitionEffects.c"
	}
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (old) {
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		transition_clock_unref (old);
#line 2187 "TransitionEffects.c"
	}
}


static void
transition_clock_class_init (TransitionClockClass * klass)
{
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	transition_clock_parent_class = g_type_class_peek_parent (klass);
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	((TransitionClockClass *) klass)->finalize = transition_clock_finalize;
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_type_class_add_private (klass, sizeof (TransitionClockPrivate));
#line 2201 "TransitionEffects.c"
}


static void
transition_clock_instance_init (TransitionClock * self)
{
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->priv = TRANSITION_CLOCK_GET_PRIVATE (self);
#line 126 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->priv->current_fps = 0;
#line 128 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->priv->visuals = NULL;
#line 129 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->priv->motion = NULL;
#line 130 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->priv->repaint = NULL;
#line 130 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->priv->repaint_target = self;
#line 131 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->priv->timer_id = (guint) 0;
#line 132 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->priv->time_started = (gulong) 0;
#line 133 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->priv->frame_number = 0;
#line 134 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->priv->cancelled = FALSE;
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->ref_count = 1;
#line 2230 "TransitionEffects.c"
}


static void
transition_clock_finalize (TransitionClock * obj)
{
	TransitionClock * self;
	gint _tmp0_ = 0;
	SpitTransitionsMotion* _tmp1_;
	OpTimer* _tmp5_;
	gchar* _tmp6_;
	gchar* _tmp7_;
	gint _tmp8_;
	gint _tmp9_;
	gint _tmp10_;
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self = G_TYPE_CHECK_INSTANCE_CAST (obj, TYPE_TRANSITION_CLOCK, TransitionClock);
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_signal_handlers_destroy (self);
#line 146 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	transition_clock_cancel_timer (self);
#line 148 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp1_ = self->priv->motion;
#line 148 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (_tmp1_ != NULL) {
#line 2256 "TransitionEffects.c"
		SpitTransitionsMotion* _tmp2_;
		gint _tmp3_;
		gint _tmp4_;
#line 148 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp2_ = self->priv->motion;
#line 148 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp3_ = spit_transitions_motion_get_tick_msec (_tmp2_);
#line 148 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp4_ = _tmp3_;
#line 148 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp0_ = _tmp4_;
#line 2268 "TransitionEffects.c"
	} else {
#line 148 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp0_ = 0;
#line 2272 "TransitionEffects.c"
	}
#line 147 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp5_ = self->priv->paint_timer;
#line 147 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp6_ = op_timer_to_string (_tmp5_);
#line 147 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp7_ = _tmp6_;
#line 147 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp8_ = self->priv->min_fps;
#line 147 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp9_ = self->priv->desired_fps;
#line 147 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp10_ = self->priv->current_fps;
#line 147 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_debug ("TransitionEffects.vala:147: %s tick_msec=%d min/desired/current fps=%d" \
"/%d/%d", _tmp7_, _tmp0_, _tmp8_, _tmp9_, _tmp10_);
#line 147 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_g_free0 (_tmp7_);
#line 122 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_g_object_unref0 (self->priv->desc);
#line 123 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_g_object_unref0 (self->priv->effect);
#line 127 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_op_timer_unref0 (self->priv->paint_timer);
#line 128 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_g_object_unref0 (self->priv->visuals);
#line 129 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_g_object_unref0 (self->priv->motion);
#line 2300 "TransitionEffects.c"
}


GType
transition_clock_get_type (void)
{
	static volatile gsize transition_clock_type_id__volatile = 0;
	if (g_once_init_enter (&transition_clock_type_id__volatile)) {
		static const GTypeValueTable g_define_type_value_table = { value_transition_clock_init, value_transition_clock_free_value, value_transition_clock_copy_value, value_transition_clock_peek_pointer, "p", value_transition_clock_collect_value, "p", value_transition_clock_lcopy_value };
		static const GTypeInfo g_define_type_info = { sizeof (TransitionClockClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) transition_clock_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (TransitionClock), 0, (GInstanceInitFunc) transition_clock_instance_init, &g_define_type_value_table };
		static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
		GType transition_clock_type_id;
		transition_clock_type_id = g_type_register_fundamental (g_type_fundamental_next (), "TransitionClock", &g_define_type_info, &g_define_type_fundamental_info, 0);
		g_once_init_leave (&transition_clock_type_id__volatile, transition_clock_type_id);
	}
	return transition_clock_type_id__volatile;
}


gpointer
transition_clock_ref (gpointer instance)
{
	TransitionClock * self;
	self = instance;
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_atomic_int_inc (&self->ref_count);
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return instance;
#line 2329 "TransitionEffects.c"
}


void
transition_clock_unref (gpointer instance)
{
	TransitionClock * self;
	self = instance;
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (g_atomic_int_dec_and_test (&self->ref_count)) {
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		TRANSITION_CLOCK_GET_CLASS (self)->finalize (self);
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		g_type_free_instance ((GTypeInstance *) self);
#line 2344 "TransitionEffects.c"
	}
}


static gint
null_transition_descriptor_real_get_pluggable_interface (SpitPluggable* base,
                                                         gint min_host_version,
                                                         gint max_host_version)
{
	NullTransitionDescriptor * self;
	gint result = 0;
#line 278 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_NULL_TRANSITION_DESCRIPTOR, NullTransitionDescriptor);
#line 279 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	result = SPIT_TRANSITIONS_CURRENT_INTERFACE;
#line 279 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return result;
#line 2362 "TransitionEffects.c"
}


static const gchar*
null_transition_descriptor_real_get_id (SpitPluggable* base)
{
	NullTransitionDescriptor * self;
	const gchar* result = NULL;
#line 282 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_NULL_TRANSITION_DESCRIPTOR, NullTransitionDescriptor);
#line 283 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	result = NULL_TRANSITION_DESCRIPTOR_EFFECT_ID;
#line 283 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return result;
#line 2377 "TransitionEffects.c"
}


static const gchar*
null_transition_descriptor_real_get_pluggable_name (SpitPluggable* base)
{
	NullTransitionDescriptor * self;
	const gchar* result = NULL;
#line 286 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_NULL_TRANSITION_DESCRIPTOR, NullTransitionDescriptor);
#line 287 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	result = _ ("None");
#line 287 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return result;
#line 2392 "TransitionEffects.c"
}


static void
null_transition_descriptor_real_get_info (SpitPluggable* base,
                                          SpitPluggableInfo* info)
{
	NullTransitionDescriptor * self;
#line 290 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_NULL_TRANSITION_DESCRIPTOR, NullTransitionDescriptor);
#line 290 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_if_fail (info != NULL);
#line 2405 "TransitionEffects.c"
}


static void
null_transition_descriptor_real_activation (SpitPluggable* base,
                                            gboolean enabled)
{
	NullTransitionDescriptor * self;
#line 293 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_NULL_TRANSITION_DESCRIPTOR, NullTransitionDescriptor);
#line 2416 "TransitionEffects.c"
}


static SpitTransitionsEffect*
null_transition_descriptor_real_create (SpitTransitionsDescriptor* base,
                                        SpitHostInterface* host)
{
	NullTransitionDescriptor * self;
	SpitTransitionsEffect* result = NULL;
	NullEffect* _tmp0_;
#line 296 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_NULL_TRANSITION_DESCRIPTOR, NullTransitionDescriptor);
#line 296 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_val_if_fail (SPIT_IS_HOST_INTERFACE (host), NULL);
#line 297 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp0_ = null_effect_new ();
#line 297 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	result = G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, SPIT_TRANSITIONS_TYPE_EFFECT, SpitTransitionsEffect);
#line 297 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return result;
#line 2437 "TransitionEffects.c"
}


NullTransitionDescriptor*
null_transition_descriptor_construct (GType object_type)
{
	NullTransitionDescriptor * self = NULL;
#line 275 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self = (NullTransitionDescriptor*) g_object_new (object_type, NULL);
#line 275 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return self;
#line 2449 "TransitionEffects.c"
}


NullTransitionDescriptor*
null_transition_descriptor_new (void)
{
#line 275 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return null_transition_descriptor_construct (TYPE_NULL_TRANSITION_DESCRIPTOR);
#line 2458 "TransitionEffects.c"
}


static void
null_transition_descriptor_class_init (NullTransitionDescriptorClass * klass)
{
#line 275 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	null_transition_descriptor_parent_class = g_type_class_peek_parent (klass);
#line 2467 "TransitionEffects.c"
}


static void
null_transition_descriptor_spit_pluggable_interface_init (SpitPluggableIface * iface)
{
#line 275 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	null_transition_descriptor_spit_pluggable_parent_iface = g_type_interface_peek_parent (iface);
#line 275 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	iface->get_pluggable_interface = (gint (*) (SpitPluggable *, gint, gint)) null_transition_descriptor_real_get_pluggable_interface;
#line 275 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	iface->get_id = (const gchar* (*) (SpitPluggable *)) null_transition_descriptor_real_get_id;
#line 275 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	iface->get_pluggable_name = (const gchar* (*) (SpitPluggable *)) null_transition_descriptor_real_get_pluggable_name;
#line 275 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	iface->get_info = (void (*) (SpitPluggable *, SpitPluggableInfo*)) null_transition_descriptor_real_get_info;
#line 275 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	iface->activation = (void (*) (SpitPluggable *, gboolean)) null_transition_descriptor_real_activation;
#line 2486 "TransitionEffects.c"
}


static void
null_transition_descriptor_spit_transitions_descriptor_interface_init (SpitTransitionsDescriptorIface * iface)
{
#line 275 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	null_transition_descriptor_spit_transitions_descriptor_parent_iface = g_type_interface_peek_parent (iface);
#line 275 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	iface->create = (SpitTransitionsEffect* (*) (SpitTransitionsDescriptor *, SpitHostInterface*)) null_transition_descriptor_real_create;
#line 2497 "TransitionEffects.c"
}


static void
null_transition_descriptor_instance_init (NullTransitionDescriptor * self)
{
}


GType
null_transition_descriptor_get_type (void)
{
	static volatile gsize null_transition_descriptor_type_id__volatile = 0;
	if (g_once_init_enter (&null_transition_descriptor_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (NullTransitionDescriptorClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) null_transition_descriptor_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (NullTransitionDescriptor), 0, (GInstanceInitFunc) null_transition_descriptor_instance_init, NULL };
		static const GInterfaceInfo spit_pluggable_info = { (GInterfaceInitFunc) null_transition_descriptor_spit_pluggable_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
		static const GInterfaceInfo spit_transitions_descriptor_info = { (GInterfaceInitFunc) null_transition_descriptor_spit_transitions_descriptor_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
		GType null_transition_descriptor_type_id;
		null_transition_descriptor_type_id = g_type_register_static (G_TYPE_OBJECT, "NullTransitionDescriptor", &g_define_type_info, 0);
		g_type_add_interface_static (null_transition_descriptor_type_id, SPIT_TYPE_PLUGGABLE, &spit_pluggable_info);
		g_type_add_interface_static (null_transition_descriptor_type_id, SPIT_TRANSITIONS_TYPE_DESCRIPTOR, &spit_transitions_descriptor_info);
		g_once_init_leave (&null_transition_descriptor_type_id__volatile, null_transition_descriptor_type_id);
	}
	return null_transition_descriptor_type_id__volatile;
}


NullEffect*
null_effect_construct (GType object_type)
{
	NullEffect * self = NULL;
#line 302 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self = (NullEffect*) g_object_new (object_type, NULL);
#line 302 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return self;
#line 2533 "TransitionEffects.c"
}


NullEffect*
null_effect_new (void)
{
#line 302 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return null_effect_construct (TYPE_NULL_EFFECT);
#line 2542 "TransitionEffects.c"
}


static void
null_effect_real_get_fps (SpitTransitionsEffect* base,
                          gint* desired_fps,
                          gint* min_fps)
{
	NullEffect * self;
	gint _vala_desired_fps = 0;
	gint _vala_min_fps = 0;
#line 305 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_NULL_EFFECT, NullEffect);
#line 306 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_vala_desired_fps = 0;
#line 307 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_vala_min_fps = 0;
#line 305 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (desired_fps) {
#line 305 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		*desired_fps = _vala_desired_fps;
#line 2564 "TransitionEffects.c"
	}
#line 305 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (min_fps) {
#line 305 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		*min_fps = _vala_min_fps;
#line 2570 "TransitionEffects.c"
	}
}


static void
null_effect_real_start (SpitTransitionsEffect* base,
                        SpitTransitionsVisuals* visuals,
                        SpitTransitionsMotion* motion)
{
	NullEffect * self;
#line 310 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_NULL_EFFECT, NullEffect);
#line 310 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_if_fail (SPIT_TRANSITIONS_IS_VISUALS (visuals));
#line 310 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_if_fail (SPIT_TRANSITIONS_IS_MOTION (motion));
#line 2587 "TransitionEffects.c"
}


static gboolean
null_effect_real_needs_clear_background (SpitTransitionsEffect* base)
{
	NullEffect * self;
	gboolean result = FALSE;
#line 313 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_NULL_EFFECT, NullEffect);
#line 314 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	result = FALSE;
#line 314 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return result;
#line 2602 "TransitionEffects.c"
}


static void
null_effect_real_paint (SpitTransitionsEffect* base,
                        SpitTransitionsVisuals* visuals,
                        SpitTransitionsMotion* motion,
                        cairo_t* ctx,
                        gint width,
                        gint height,
                        gint frame_number)
{
	NullEffect * self;
#line 317 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_NULL_EFFECT, NullEffect);
#line 317 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_if_fail (SPIT_TRANSITIONS_IS_VISUALS (visuals));
#line 317 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_if_fail (SPIT_TRANSITIONS_IS_MOTION (motion));
#line 317 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_if_fail (ctx != NULL);
#line 2624 "TransitionEffects.c"
}


static void
null_effect_real_advance (SpitTransitionsEffect* base,
                          SpitTransitionsVisuals* visuals,
                          SpitTransitionsMotion* motion,
                          gint frame_number)
{
	NullEffect * self;
#line 321 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_NULL_EFFECT, NullEffect);
#line 321 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_if_fail (SPIT_TRANSITIONS_IS_VISUALS (visuals));
#line 321 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_if_fail (SPIT_TRANSITIONS_IS_MOTION (motion));
#line 2641 "TransitionEffects.c"
}


static void
null_effect_real_cancel (SpitTransitionsEffect* base)
{
	NullEffect * self;
#line 324 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_NULL_EFFECT, NullEffect);
#line 2651 "TransitionEffects.c"
}


static void
null_effect_class_init (NullEffectClass * klass)
{
#line 301 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	null_effect_parent_class = g_type_class_peek_parent (klass);
#line 2660 "TransitionEffects.c"
}


static void
null_effect_spit_transitions_effect_interface_init (SpitTransitionsEffectIface * iface)
{
#line 301 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	null_effect_spit_transitions_effect_parent_iface = g_type_interface_peek_parent (iface);
#line 301 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	iface->get_fps = (void (*) (SpitTransitionsEffect *, gint*, gint*)) null_effect_real_get_fps;
#line 301 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	iface->start = (void (*) (SpitTransitionsEffect *, SpitTransitionsVisuals*, SpitTransitionsMotion*)) null_effect_real_start;
#line 301 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	iface->needs_clear_background = (gboolean (*) (SpitTransitionsEffect *)) null_effect_real_needs_clear_background;
#line 301 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	iface->paint = (void (*) (SpitTransitionsEffect *, SpitTransitionsVisuals*, SpitTransitionsMotion*, cairo_t*, gint, gint, gint)) null_effect_real_paint;
#line 301 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	iface->advance = (void (*) (SpitTransitionsEffect *, SpitTransitionsVisuals*, SpitTransitionsMotion*, gint)) null_effect_real_advance;
#line 301 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	iface->cancel = (void (*) (SpitTransitionsEffect *)) null_effect_real_cancel;
#line 2681 "TransitionEffects.c"
}


static void
null_effect_instance_init (NullEffect * self)
{
}


GType
null_effect_get_type (void)
{
	static volatile gsize null_effect_type_id__volatile = 0;
	if (g_once_init_enter (&null_effect_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (NullEffectClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) null_effect_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (NullEffect), 0, (GInstanceInitFunc) null_effect_instance_init, NULL };
		static const GInterfaceInfo spit_transitions_effect_info = { (GInterfaceInitFunc) null_effect_spit_transitions_effect_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
		GType null_effect_type_id;
		null_effect_type_id = g_type_register_static (G_TYPE_OBJECT, "NullEffect", &g_define_type_info, 0);
		g_type_add_interface_static (null_effect_type_id, SPIT_TRANSITIONS_TYPE_EFFECT, &spit_transitions_effect_info);
		g_once_init_leave (&null_effect_type_id__volatile, null_effect_type_id);
	}
	return null_effect_type_id__volatile;
}


static gint
random_effect_descriptor_real_get_pluggable_interface (SpitPluggable* base,
                                                       gint min_host_version,
                                                       gint max_host_version)
{
	RandomEffectDescriptor * self;
	gint result = 0;
#line 330 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_RANDOM_EFFECT_DESCRIPTOR, RandomEffectDescriptor);
#line 331 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	result = SPIT_TRANSITIONS_CURRENT_INTERFACE;
#line 331 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return result;
#line 2720 "TransitionEffects.c"
}


static const gchar*
random_effect_descriptor_real_get_id (SpitPluggable* base)
{
	RandomEffectDescriptor * self;
	const gchar* result = NULL;
#line 334 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_RANDOM_EFFECT_DESCRIPTOR, RandomEffectDescriptor);
#line 335 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	result = RANDOM_EFFECT_DESCRIPTOR_EFFECT_ID;
#line 335 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return result;
#line 2735 "TransitionEffects.c"
}


static const gchar*
random_effect_descriptor_real_get_pluggable_name (SpitPluggable* base)
{
	RandomEffectDescriptor * self;
	const gchar* result = NULL;
#line 338 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_RANDOM_EFFECT_DESCRIPTOR, RandomEffectDescriptor);
#line 339 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	result = _ ("Random");
#line 339 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return result;
#line 2750 "TransitionEffects.c"
}


static void
random_effect_descriptor_real_get_info (SpitPluggable* base,
                                        SpitPluggableInfo* info)
{
	RandomEffectDescriptor * self;
#line 342 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_RANDOM_EFFECT_DESCRIPTOR, RandomEffectDescriptor);
#line 342 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_if_fail (info != NULL);
#line 2763 "TransitionEffects.c"
}


static void
random_effect_descriptor_real_activation (SpitPluggable* base,
                                          gboolean enabled)
{
	RandomEffectDescriptor * self;
#line 345 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_RANDOM_EFFECT_DESCRIPTOR, RandomEffectDescriptor);
#line 2774 "TransitionEffects.c"
}


static SpitTransitionsEffect*
random_effect_descriptor_real_create (SpitTransitionsDescriptor* base,
                                      SpitHostInterface* host)
{
	RandomEffectDescriptor * self;
	SpitTransitionsEffect* result = NULL;
	NullEffect* _tmp0_;
#line 348 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self = G_TYPE_CHECK_INSTANCE_CAST (base, TYPE_RANDOM_EFFECT_DESCRIPTOR, RandomEffectDescriptor);
#line 348 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	g_return_val_if_fail (SPIT_IS_HOST_INTERFACE (host), NULL);
#line 349 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp0_ = null_effect_new ();
#line 349 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	result = G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, SPIT_TRANSITIONS_TYPE_EFFECT, SpitTransitionsEffect);
#line 349 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return result;
#line 2795 "TransitionEffects.c"
}


RandomEffectDescriptor*
random_effect_descriptor_construct (GType object_type)
{
	RandomEffectDescriptor * self = NULL;
#line 327 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self = (RandomEffectDescriptor*) g_object_new (object_type, NULL);
#line 327 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return self;
#line 2807 "TransitionEffects.c"
}


RandomEffectDescriptor*
random_effect_descriptor_new (void)
{
#line 327 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return random_effect_descriptor_construct (TYPE_RANDOM_EFFECT_DESCRIPTOR);
#line 2816 "TransitionEffects.c"
}


static void
random_effect_descriptor_class_init (RandomEffectDescriptorClass * klass)
{
#line 327 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	random_effect_descriptor_parent_class = g_type_class_peek_parent (klass);
#line 2825 "TransitionEffects.c"
}


static void
random_effect_descriptor_spit_pluggable_interface_init (SpitPluggableIface * iface)
{
#line 327 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	random_effect_descriptor_spit_pluggable_parent_iface = g_type_interface_peek_parent (iface);
#line 327 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	iface->get_pluggable_interface = (gint (*) (SpitPluggable *, gint, gint)) random_effect_descriptor_real_get_pluggable_interface;
#line 327 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	iface->get_id = (const gchar* (*) (SpitPluggable *)) random_effect_descriptor_real_get_id;
#line 327 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	iface->get_pluggable_name = (const gchar* (*) (SpitPluggable *)) random_effect_descriptor_real_get_pluggable_name;
#line 327 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	iface->get_info = (void (*) (SpitPluggable *, SpitPluggableInfo*)) random_effect_descriptor_real_get_info;
#line 327 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	iface->activation = (void (*) (SpitPluggable *, gboolean)) random_effect_descriptor_real_activation;
#line 2844 "TransitionEffects.c"
}


static void
random_effect_descriptor_spit_transitions_descriptor_interface_init (SpitTransitionsDescriptorIface * iface)
{
#line 327 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	random_effect_descriptor_spit_transitions_descriptor_parent_iface = g_type_interface_peek_parent (iface);
#line 327 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	iface->create = (SpitTransitionsEffect* (*) (SpitTransitionsDescriptor *, SpitHostInterface*)) random_effect_descriptor_real_create;
#line 2855 "TransitionEffects.c"
}


static void
random_effect_descriptor_instance_init (RandomEffectDescriptor * self)
{
}


GType
random_effect_descriptor_get_type (void)
{
	static volatile gsize random_effect_descriptor_type_id__volatile = 0;
	if (g_once_init_enter (&random_effect_descriptor_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (RandomEffectDescriptorClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) random_effect_descriptor_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (RandomEffectDescriptor), 0, (GInstanceInitFunc) random_effect_descriptor_instance_init, NULL };
		static const GInterfaceInfo spit_pluggable_info = { (GInterfaceInitFunc) random_effect_descriptor_spit_pluggable_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
		static const GInterfaceInfo spit_transitions_descriptor_info = { (GInterfaceInitFunc) random_effect_descriptor_spit_transitions_descriptor_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
		GType random_effect_descriptor_type_id;
		random_effect_descriptor_type_id = g_type_register_static (G_TYPE_OBJECT, "RandomEffectDescriptor", &g_define_type_info, 0);
		g_type_add_interface_static (random_effect_descriptor_type_id, SPIT_TYPE_PLUGGABLE, &spit_pluggable_info);
		g_type_add_interface_static (random_effect_descriptor_type_id, SPIT_TRANSITIONS_TYPE_DESCRIPTOR, &spit_transitions_descriptor_info);
		g_once_init_leave (&random_effect_descriptor_type_id__volatile, random_effect_descriptor_type_id);
	}
	return random_effect_descriptor_type_id__volatile;
}



