/* TransitionEffects.c generated by valac 0.34.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;

#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;
typedef struct _RandomEffectDescriptorPrivate RandomEffectDescriptorPrivate;
#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))
enum  {
	TRANSITION_EFFECTS_MANAGER_DUMMY_PROPERTY
};
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))
enum  {
	TRANSITION_CLOCK_DUMMY_PROPERTY
};
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);
enum  {
	NULL_TRANSITION_DESCRIPTOR_DUMMY_PROPERTY
};
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;
enum  {
	NULL_EFFECT_DUMMY_PROPERTY
};
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);
enum  {
	RANDOM_EFFECT_DESCRIPTOR_DUMMY_PROPERTY
};
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 338 "TransitionEffects.c"
}


static TransitionEffectsManager* transition_effects_manager_construct (GType object_type) {
	TransitionEffectsManager* self = NULL;
	PluginsNotifier* _tmp0_ = NULL;
	PluginsNotifier* _tmp1_ = NULL;
#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 360 "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 367 "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 374 "TransitionEffects.c"
}


static void transition_effects_manager_load_transitions (TransitionEffectsManager* self) {
	GeeMap* _tmp0_ = NULL;
	GeeMap* _tmp1_ = NULL;
	SpitTransitionsDescriptor* _tmp2_ = NULL;
	const gchar* _tmp3_ = NULL;
	SpitTransitionsDescriptor* _tmp4_ = NULL;
	GeeMap* _tmp5_ = NULL;
	SpitTransitionsDescriptor* _tmp6_ = NULL;
	const gchar* _tmp7_ = NULL;
	SpitTransitionsDescriptor* _tmp8_ = NULL;
	GeeCollection* pluggables = NULL;
	GeeCollection* _tmp9_ = NULL;
#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 420 "TransitionEffects.c"
	{
		GeeIterator* _pluggable_it = NULL;
		GeeCollection* _tmp10_ = NULL;
		GeeIterator* _tmp11_ = NULL;
#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 433 "TransitionEffects.c"
			GeeIterator* _tmp12_ = NULL;
			gboolean _tmp13_ = FALSE;
			SpitPluggable* pluggable = NULL;
			GeeIterator* _tmp14_ = NULL;
			gpointer _tmp15_ = NULL;
			gint pluggable_interface = 0;
			SpitPluggable* _tmp16_ = NULL;
			gint _tmp17_ = 0;
			gint _tmp18_ = 0;
			SpitTransitionsDescriptor* desc = NULL;
			SpitPluggable* _tmp23_ = NULL;
			SpitTransitionsDescriptor* _tmp24_ = NULL;
			GeeMap* _tmp25_ = NULL;
			SpitTransitionsDescriptor* _tmp26_ = NULL;
			const gchar* _tmp27_ = NULL;
			gboolean _tmp28_ = FALSE;
#line 38 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp12_ = _pluggable_it;
#line 38 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp13_ = gee_iterator_next (_tmp12_);
#line 38 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			if (!_tmp13_) {
#line 38 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				break;
#line 458 "TransitionEffects.c"
			}
#line 38 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp14_ = _pluggable_it;
#line 38 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp15_ = gee_iterator_get (_tmp14_);
#line 38 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			pluggable = (SpitPluggable*) _tmp15_;
#line 39 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp16_ = pluggable;
#line 39 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp17_ = spit_pluggable_get_pluggable_interface (_tmp16_, SPIT_TRANSITIONS_CURRENT_INTERFACE, SPIT_TRANSITIONS_CURRENT_INTERFACE);
#line 39 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			pluggable_interface = _tmp17_;
#line 41 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp18_ = pluggable_interface;
#line 41 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			if (_tmp18_ != SPIT_TRANSITIONS_CURRENT_INTERFACE) {
#line 476 "TransitionEffects.c"
				SpitPluggable* _tmp19_ = NULL;
				gchar* _tmp20_ = NULL;
				gchar* _tmp21_ = NULL;
				gint _tmp22_ = 0;
#line 42 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				_tmp19_ = pluggable;
#line 42 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				_tmp20_ = plugins_get_pluggable_module_id (_tmp19_);
#line 42 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				_tmp21_ = _tmp20_;
#line 42 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				_tmp22_ = 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", _tmp21_, _tmp22_);
#line 42 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				_g_free0 (_tmp21_);
#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 497 "TransitionEffects.c"
			}
#line 48 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp23_ = pluggable;
#line 48 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp24_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp23_, SPIT_TRANSITIONS_TYPE_DESCRIPTOR, SpitTransitionsDescriptor));
#line 48 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			desc = _tmp24_;
#line 49 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp25_ = self->priv->effects;
#line 49 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp26_ = desc;
#line 49 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp27_ = spit_pluggable_get_id (G_TYPE_CHECK_INSTANCE_CAST (_tmp26_, SPIT_TYPE_PLUGGABLE, SpitPluggable));
#line 49 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp28_ = gee_map_has_key (_tmp25_, _tmp27_);
#line 49 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			if (_tmp28_) {
#line 515 "TransitionEffects.c"
				SpitTransitionsDescriptor* _tmp29_ = NULL;
				const gchar* _tmp30_ = NULL;
#line 50 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				_tmp29_ = desc;
#line 50 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				_tmp30_ = spit_pluggable_get_id (G_TYPE_CHECK_INSTANCE_CAST (_tmp29_, 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", _tmp30_);
#line 524 "TransitionEffects.c"
			} else {
				GeeMap* _tmp31_ = NULL;
				SpitTransitionsDescriptor* _tmp32_ = NULL;
				const gchar* _tmp33_ = NULL;
				SpitTransitionsDescriptor* _tmp34_ = NULL;
#line 52 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				_tmp31_ = self->priv->effects;
#line 52 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				_tmp32_ = desc;
#line 52 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				_tmp33_ = spit_pluggable_get_id (G_TYPE_CHECK_INSTANCE_CAST (_tmp32_, SPIT_TYPE_PLUGGABLE, SpitPluggable));
#line 52 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				_tmp34_ = desc;
#line 52 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				gee_map_set (_tmp31_, _tmp33_, _tmp34_);
#line 540 "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 546 "TransitionEffects.c"
		}
#line 38 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_g_object_unref0 (_pluggable_it);
#line 550 "TransitionEffects.c"
	}
#line 28 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_g_object_unref0 (pluggables);
#line 554 "TransitionEffects.c"
}


void transition_effects_manager_init (void) {
	TransitionEffectsManager* _tmp0_ = NULL;
#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 566 "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 575 "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 582 "TransitionEffects.c"
}


TransitionEffectsManager* transition_effects_manager_get_instance (void) {
	TransitionEffectsManager* result = NULL;
	TransitionEffectsManager* _tmp0_ = NULL;
	TransitionEffectsManager* _tmp1_ = NULL;
	TransitionEffectsManager* _tmp2_ = NULL;
#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 603 "TransitionEffects.c"
}


GeeCollection* transition_effects_manager_get_effect_ids (TransitionEffectsManager* self) {
	GeeCollection* result = NULL;
	GeeMap* _tmp0_ = NULL;
	GeeSet* _tmp1_ = NULL;
	GeeSet* _tmp2_ = NULL;
#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 624 "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_ = NULL;
	void* _tmp0__target = NULL;
	GDestroyNotify _tmp0__target_destroy_notify = NULL;
	GeeTreeSet* _tmp1_ = NULL;
#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_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, 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 649 "TransitionEffects.c"
	{
		GeeIterator* _desc_it = NULL;
		GeeMap* _tmp2_ = NULL;
		GeeCollection* _tmp3_ = NULL;
		GeeCollection* _tmp4_ = NULL;
		GeeCollection* _tmp5_ = NULL;
		GeeIterator* _tmp6_ = NULL;
		GeeIterator* _tmp7_ = NULL;
#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 676 "TransitionEffects.c"
			GeeIterator* _tmp8_ = NULL;
			gboolean _tmp9_ = FALSE;
			SpitTransitionsDescriptor* desc = NULL;
			GeeIterator* _tmp10_ = NULL;
			gpointer _tmp11_ = NULL;
			GeeCollection* _tmp12_ = NULL;
			SpitTransitionsDescriptor* _tmp13_ = NULL;
			const gchar* _tmp14_ = NULL;
#line 76 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp8_ = _desc_it;
#line 76 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp9_ = gee_iterator_next (_tmp8_);
#line 76 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			if (!_tmp9_) {
#line 76 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				break;
#line 693 "TransitionEffects.c"
			}
#line 76 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp10_ = _desc_it;
#line 76 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp11_ = gee_iterator_get (_tmp10_);
#line 76 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			desc = (SpitTransitionsDescriptor*) _tmp11_;
#line 77 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp12_ = effect_names;
#line 77 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp13_ = desc;
#line 77 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp14_ = spit_pluggable_get_pluggable_name (G_TYPE_CHECK_INSTANCE_CAST (_tmp13_, SPIT_TYPE_PLUGGABLE, SpitPluggable));
#line 77 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			gee_collection_add (_tmp12_, _tmp14_);
#line 76 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_g_object_unref0 (desc);
#line 711 "TransitionEffects.c"
		}
#line 76 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_g_object_unref0 (_desc_it);
#line 715 "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 729 "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 739 "TransitionEffects.c"
	{
		GeeIterator* _desc_it = NULL;
		GeeMap* _tmp0_ = NULL;
		GeeCollection* _tmp1_ = NULL;
		GeeCollection* _tmp2_ = NULL;
		GeeCollection* _tmp3_ = NULL;
		GeeIterator* _tmp4_ = NULL;
		GeeIterator* _tmp5_ = NULL;
#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 766 "TransitionEffects.c"
			GeeIterator* _tmp6_ = NULL;
			gboolean _tmp7_ = FALSE;
			SpitTransitionsDescriptor* desc = NULL;
			GeeIterator* _tmp8_ = NULL;
			gpointer _tmp9_ = NULL;
			SpitTransitionsDescriptor* _tmp10_ = NULL;
			const gchar* _tmp11_ = NULL;
			const gchar* _tmp12_ = NULL;
#line 83 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp6_ = _desc_it;
#line 83 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp7_ = gee_iterator_next (_tmp6_);
#line 83 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			if (!_tmp7_) {
#line 83 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				break;
#line 783 "TransitionEffects.c"
			}
#line 83 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp8_ = _desc_it;
#line 83 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp9_ = gee_iterator_get (_tmp8_);
#line 83 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			desc = (SpitTransitionsDescriptor*) _tmp9_;
#line 84 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp10_ = desc;
#line 84 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp11_ = spit_pluggable_get_pluggable_name (G_TYPE_CHECK_INSTANCE_CAST (_tmp10_, SPIT_TYPE_PLUGGABLE, SpitPluggable));
#line 84 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_tmp12_ = effect_name;
#line 84 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			if (g_strcmp0 (_tmp11_, _tmp12_) == 0) {
#line 799 "TransitionEffects.c"
				SpitTransitionsDescriptor* _tmp13_ = NULL;
				const gchar* _tmp14_ = NULL;
				gchar* _tmp15_ = NULL;
#line 85 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				_tmp13_ = desc;
#line 85 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				_tmp14_ = spit_pluggable_get_id (G_TYPE_CHECK_INSTANCE_CAST (_tmp13_, SPIT_TYPE_PLUGGABLE, SpitPluggable));
#line 85 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				_tmp15_ = g_strdup (_tmp14_);
#line 85 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
				result = _tmp15_;
#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 817 "TransitionEffects.c"
			}
#line 83 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
			_g_object_unref0 (desc);
#line 821 "TransitionEffects.c"
		}
#line 83 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_g_object_unref0 (_desc_it);
#line 825 "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 831 "TransitionEffects.c"
}


SpitTransitionsDescriptor* transition_effects_manager_get_effect_descriptor (TransitionEffectsManager* self, const gchar* effect_id) {
	SpitTransitionsDescriptor* result = NULL;
	GeeMap* _tmp0_ = NULL;
	const gchar* _tmp1_ = NULL;
	gpointer _tmp2_ = NULL;
#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_ = effect_id;
#line 92 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp2_ = gee_map_get (_tmp0_, _tmp1_);
#line 92 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	result = (SpitTransitionsDescriptor*) _tmp2_;
#line 92 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return result;
#line 854 "TransitionEffects.c"
}


gchar* transition_effects_manager_get_effect_name (TransitionEffectsManager* self, const gchar* effect_id) {
	gchar* result = NULL;
	SpitTransitionsDescriptor* desc = NULL;
	const gchar* _tmp0_ = NULL;
	SpitTransitionsDescriptor* _tmp1_ = NULL;
	const gchar* _tmp2_ = NULL;
	SpitTransitionsDescriptor* _tmp3_ = NULL;
	gchar* _tmp7_ = NULL;
#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_ = effect_id;
#line 96 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp1_ = transition_effects_manager_get_effect_descriptor (self, _tmp0_);
#line 96 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	desc = _tmp1_;
#line 98 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp3_ = desc;
#line 98 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (_tmp3_ != NULL) {
#line 880 "TransitionEffects.c"
		SpitTransitionsDescriptor* _tmp4_ = NULL;
		const gchar* _tmp5_ = NULL;
#line 98 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp4_ = desc;
#line 98 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp5_ = spit_pluggable_get_pluggable_name (G_TYPE_CHECK_INSTANCE_CAST (_tmp4_, SPIT_TYPE_PLUGGABLE, SpitPluggable));
#line 98 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp2_ = _tmp5_;
#line 889 "TransitionEffects.c"
	} else {
		const gchar* _tmp6_ = NULL;
#line 98 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp6_ = _ ("(None)");
#line 98 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp2_ = _tmp6_;
#line 896 "TransitionEffects.c"
	}
#line 98 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp7_ = g_strdup (_tmp2_);
#line 98 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	result = _tmp7_;
#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 906 "TransitionEffects.c"
}


SpitTransitionsDescriptor* transition_effects_manager_get_null_descriptor (TransitionEffectsManager* self) {
	SpitTransitionsDescriptor* result = NULL;
	SpitTransitionsDescriptor* _tmp0_ = NULL;
	SpitTransitionsDescriptor* _tmp1_ = NULL;
#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 924 "TransitionEffects.c"
}


TransitionClock* transition_effects_manager_create_transition_clock (TransitionEffectsManager* self, const gchar* effect_id) {
	TransitionClock* result = NULL;
	SpitTransitionsDescriptor* desc = NULL;
	const gchar* _tmp0_ = NULL;
	SpitTransitionsDescriptor* _tmp1_ = NULL;
	TransitionClock* _tmp2_ = NULL;
	SpitTransitionsDescriptor* _tmp3_ = NULL;
#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_ = effect_id;
#line 106 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp1_ = transition_effects_manager_get_effect_descriptor (self, _tmp0_);
#line 106 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	desc = _tmp1_;
#line 108 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp3_ = desc;
#line 108 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (_tmp3_ != NULL) {
#line 949 "TransitionEffects.c"
		SpitTransitionsDescriptor* _tmp4_ = NULL;
		TransitionClock* _tmp5_ = NULL;
#line 108 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp4_ = desc;
#line 108 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp5_ = transition_clock_new (_tmp4_);
#line 108 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_transition_clock_unref0 (_tmp2_);
#line 108 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp2_ = _tmp5_;
#line 960 "TransitionEffects.c"
	} else {
#line 108 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_transition_clock_unref0 (_tmp2_);
#line 108 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp2_ = NULL;
#line 966 "TransitionEffects.c"
	}
#line 108 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	result = _tmp2_;
#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 974 "TransitionEffects.c"
}


TransitionClock* transition_effects_manager_create_null_transition_clock (TransitionEffectsManager* self) {
	TransitionClock* result = NULL;
	SpitTransitionsDescriptor* _tmp0_ = NULL;
	TransitionClock* _tmp1_ = NULL;
#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 992 "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 999 "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 1008 "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 1018 "TransitionEffects.c"
	} else {
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		dest_value->data[0].v_pointer = NULL;
#line 1022 "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 1030 "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 1037 "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 1044 "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 1048 "TransitionEffects.c"
		}
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		value->data[0].v_pointer = transition_effects_manager_ref (object);
#line 1052 "TransitionEffects.c"
	} else {
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		value->data[0].v_pointer = NULL;
#line 1056 "TransitionEffects.c"
	}
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return NULL;
#line 1060 "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 1071 "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 1077 "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 1081 "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 1085 "TransitionEffects.c"
	}
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return NULL;
#line 1089 "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 1103 "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 1112 "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 1132 "TransitionEffects.c"
	} else {
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		value->data[0].v_pointer = NULL;
#line 1136 "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 1142 "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 1161 "TransitionEffects.c"
	} else {
#line 8 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		value->data[0].v_pointer = NULL;
#line 1165 "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 1171 "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 1183 "TransitionEffects.c"
}


static void transition_effects_manager_instance_init (TransitionEffectsManager * self) {
	GeeHashMap* _tmp0_ = NULL;
	NullTransitionDescriptor* _tmp1_ = NULL;
	RandomEffectDescriptor* _tmp2_ = NULL;
#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, g_free, SPIT_TRANSITIONS_TYPE_DESCRIPTOR, (GBoxedCopyFunc) g_object_ref, 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 1207 "TransitionEffects.c"
}


static void transition_effects_manager_finalize (TransitionEffectsManager* obj) {
	TransitionEffectsManager * self;
	PluginsNotifier* _tmp0_ = NULL;
	PluginsNotifier* _tmp1_ = NULL;
	guint _tmp2_ = 0U;
#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 1236 "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 1261 "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 1274 "TransitionEffects.c"
	}
}


TransitionClock* transition_clock_construct (GType object_type, SpitTransitionsDescriptor* desc) {
	TransitionClock* self = NULL;
	SpitTransitionsDescriptor* _tmp0_ = NULL;
	SpitTransitionsDescriptor* _tmp1_ = NULL;
	SpitTransitionsDescriptor* _tmp2_ = NULL;
	SpitTransitionsDescriptor* _tmp3_ = NULL;
	PluginsStandardHostInterface* _tmp4_ = NULL;
	PluginsStandardHostInterface* _tmp5_ = NULL;
	SpitTransitionsEffect* _tmp6_ = NULL;
	SpitTransitionsEffect* _tmp7_ = NULL;
	gint _tmp8_ = 0;
	gint _tmp9_ = 0;
	SpitTransitionsDescriptor* _tmp10_ = NULL;
	const gchar* _tmp11_ = NULL;
	OpTimer* _tmp12_ = NULL;
#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_ = desc;
#line 137 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp1_ = _g_object_ref0 (_tmp0_);
#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 = _tmp1_;
#line 139 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp2_ = desc;
#line 139 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp3_ = desc;
#line 139 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp4_ = plugins_standard_host_interface_new (G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, SPIT_TYPE_PLUGGABLE, SpitPluggable), "transitions");
#line 139 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp5_ = _tmp4_;
#line 139 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp6_ = spit_transitions_descriptor_create (_tmp2_, G_TYPE_CHECK_INSTANCE_CAST (_tmp5_, 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 = _tmp6_;
#line 139 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_g_object_unref0 (_tmp5_);
#line 140 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp7_ = self->priv->effect;
#line 140 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	spit_transitions_effect_get_fps (_tmp7_, &_tmp8_, &_tmp9_);
#line 140 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->priv->desired_fps = _tmp8_;
#line 140 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->priv->min_fps = _tmp9_;
#line 142 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp10_ = desc;
#line 142 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp11_ = spit_pluggable_get_pluggable_name (G_TYPE_CHECK_INSTANCE_CAST (_tmp10_, SPIT_TYPE_PLUGGABLE, SpitPluggable));
#line 142 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp12_ = op_timer_new (_tmp11_);
#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 = _tmp12_;
#line 136 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return self;
#line 1342 "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 1349 "TransitionEffects.c"
}


gboolean transition_clock_is_in_progress (TransitionClock* self) {
	gboolean result = FALSE;
	gboolean _tmp0_ = FALSE;
	gboolean _tmp1_ = FALSE;
	gboolean _tmp2_ = FALSE;
#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 1364 "TransitionEffects.c"
		SpitTransitionsMotion* _tmp3_ = NULL;
#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 1370 "TransitionEffects.c"
	} else {
#line 152 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp1_ = FALSE;
#line 1374 "TransitionEffects.c"
	}
#line 152 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (_tmp1_) {
#line 1378 "TransitionEffects.c"
		gint _tmp4_ = 0;
		SpitTransitionsMotion* _tmp5_ = NULL;
		gint _tmp6_ = 0;
		gint _tmp7_ = 0;
#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 1393 "TransitionEffects.c"
	} else {
#line 152 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp0_ = FALSE;
#line 1397 "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 1403 "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 1412 "TransitionEffects.c"
}


void transition_clock_start (TransitionClock* self, SpitTransitionsVisuals* visuals, SpitTransitionsDirection direction, gint duration_msec, TransitionClockRepaintCallback repaint, void* repaint_target) {
	gint _tmp0_ = 0;
	SpitTransitionsVisuals* _tmp1_ = NULL;
	SpitTransitionsVisuals* _tmp2_ = NULL;
	TransitionClockRepaintCallback _tmp3_ = NULL;
	void* _tmp3__target = NULL;
	SpitTransitionsDirection _tmp4_ = 0;
	gint _tmp5_ = 0;
	gint _tmp6_ = 0;
	SpitTransitionsMotion* _tmp7_ = NULL;
	SpitTransitionsEffect* _tmp8_ = NULL;
	SpitTransitionsVisuals* _tmp9_ = NULL;
	SpitTransitionsMotion* _tmp10_ = NULL;
	gulong _tmp11_ = 0UL;
	SpitTransitionsMotion* _tmp12_ = NULL;
	gint _tmp13_ = 0;
	gint _tmp14_ = 0;
	guint _tmp15_ = 0U;
#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 1446 "TransitionEffects.c"
	}
#line 163 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp1_ = visuals;
#line 163 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp2_ = _g_object_ref0 (_tmp1_);
#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 = _tmp2_;
#line 164 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp3_ = repaint;
#line 164 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp3__target = repaint_target;
#line 164 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->priv->repaint = _tmp3_;
#line 164 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->priv->repaint_target = _tmp3__target;
#line 165 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp4_ = direction;
#line 165 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp5_ = self->priv->desired_fps;
#line 165 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp6_ = duration_msec;
#line 165 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp7_ = spit_transitions_motion_new (_tmp4_, _tmp5_, _tmp6_);
#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 = _tmp7_;
#line 167 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp8_ = self->priv->effect;
#line 167 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp9_ = visuals;
#line 167 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp10_ = self->priv->motion;
#line 167 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	spit_transitions_effect_start (_tmp8_, _tmp9_, _tmp10_);
#line 172 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp11_ = now_ms ();
#line 172 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->priv->time_started = _tmp11_;
#line 173 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp12_ = self->priv->motion;
#line 173 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp13_ = spit_transitions_motion_get_tick_msec (_tmp12_);
#line 173 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp14_ = _tmp13_;
#line 173 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp15_ = g_timeout_add_full (G_PRIORITY_HIGH, (guint) _tmp14_, _transition_clock_tick_gsource_func, transition_clock_ref (self), transition_clock_unref);
#line 173 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->priv->timer_id = _tmp15_;
#line 1498 "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 1527 "TransitionEffects.c"
}


static void transition_clock_cancel_timer (TransitionClock* self) {
	guint _tmp0_ = 0U;
#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 1539 "TransitionEffects.c"
		guint _tmp1_ = 0U;
#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 1547 "TransitionEffects.c"
	}
}


static gboolean transition_clock_is_fps_ok (TransitionClock* self) {
	gboolean result = FALSE;
	gulong _tmp0_ = 0UL;
	gint _tmp1_ = 0;
	gdouble elapsed_msec = 0.0;
	gulong _tmp2_ = 0UL;
	gulong _tmp3_ = 0UL;
	gdouble _tmp4_ = 0.0;
	gint _tmp5_ = 0;
	gdouble _tmp6_ = 0.0;
	gint _tmp7_ = 0;
	gint _tmp8_ = 0;
	gint _tmp13_ = 0;
	gint _tmp14_ = 0;
#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 1580 "TransitionEffects.c"
	}
#line 202 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp2_ = now_ms ();
#line 202 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp3_ = self->priv->time_started;
#line 202 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	elapsed_msec = (gdouble) (_tmp2_ - _tmp3_);
#line 203 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp4_ = elapsed_msec;
#line 203 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (_tmp4_ <= 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 1596 "TransitionEffects.c"
	}
#line 206 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp5_ = self->priv->frame_number;
#line 206 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp6_ = elapsed_msec;
#line 206 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	self->priv->current_fps = (gint) ((_tmp5_ * 1000.0) / _tmp6_);
#line 207 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp7_ = self->priv->current_fps;
#line 207 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp8_ = self->priv->min_fps;
#line 207 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (_tmp7_ < _tmp8_) {
#line 1610 "TransitionEffects.c"
		gint _tmp9_ = 0;
		gint _tmp10_ = 0;
		gdouble _tmp11_ = 0.0;
		gint _tmp12_ = 0;
#line 208 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp9_ = self->priv->current_fps;
#line 208 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp10_ = self->priv->min_fps;
#line 208 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp11_ = elapsed_msec;
#line 208 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp12_ = 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)", _tmp9_, _tmp10_, _tmp11_, _tmp12_);
#line 1625 "TransitionEffects.c"
	}
#line 212 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp13_ = self->priv->current_fps;
#line 212 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp14_ = self->priv->min_fps;
#line 212 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	result = _tmp13_ >= _tmp14_;
#line 212 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return result;
#line 1635 "TransitionEffects.c"
}


void transition_clock_cancel (TransitionClock* self) {
	SpitTransitionsEffect* _tmp0_ = NULL;
	TransitionClockRepaintCallback _tmp1_ = NULL;
	void* _tmp1__target = NULL;
#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 1659 "TransitionEffects.c"
}


gboolean transition_clock_paint (TransitionClock* self, cairo_t* ctx, gint width, gint height) {
	gboolean result = FALSE;
	gboolean _tmp0_ = FALSE;
	OpTimer* _tmp1_ = NULL;
	cairo_t* _tmp2_ = NULL;
	SpitTransitionsEffect* _tmp3_ = NULL;
	gboolean _tmp4_ = FALSE;
	SpitTransitionsEffect* _tmp26_ = NULL;
	SpitTransitionsVisuals* _tmp27_ = NULL;
	SpitTransitionsMotion* _tmp28_ = NULL;
	cairo_t* _tmp29_ = NULL;
	gint _tmp30_ = 0;
	gint _tmp31_ = 0;
	gint _tmp32_ = 0;
	cairo_t* _tmp33_ = NULL;
	OpTimer* _tmp34_ = NULL;
#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"
	_tmp0_ = transition_clock_is_in_progress (self);
#line 228 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (!_tmp0_) {
#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 1691 "TransitionEffects.c"
	}
#line 231 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp1_ = self->priv->paint_timer;
#line 231 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	op_timer_start (_tmp1_);
#line 233 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp2_ = ctx;
#line 233 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	cairo_save (_tmp2_);
#line 235 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp3_ = self->priv->effect;
#line 235 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp4_ = spit_transitions_effect_needs_clear_background (_tmp3_);
#line 235 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (_tmp4_) {
#line 1707 "TransitionEffects.c"
		cairo_t* _tmp5_ = NULL;
		SpitTransitionsVisuals* _tmp6_ = NULL;
		GdkRGBA _tmp7_ = {0};
		GdkRGBA _tmp8_ = {0};
		gdouble _tmp9_ = 0.0;
		SpitTransitionsVisuals* _tmp10_ = NULL;
		GdkRGBA _tmp11_ = {0};
		GdkRGBA _tmp12_ = {0};
		gdouble _tmp13_ = 0.0;
		SpitTransitionsVisuals* _tmp14_ = NULL;
		GdkRGBA _tmp15_ = {0};
		GdkRGBA _tmp16_ = {0};
		gdouble _tmp17_ = 0.0;
		SpitTransitionsVisuals* _tmp18_ = NULL;
		GdkRGBA _tmp19_ = {0};
		GdkRGBA _tmp20_ = {0};
		gdouble _tmp21_ = 0.0;
		cairo_t* _tmp22_ = NULL;
		gint _tmp23_ = 0;
		gint _tmp24_ = 0;
		cairo_t* _tmp25_ = NULL;
#line 236 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp5_ = ctx;
#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_.red;
#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_.green;
#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_.blue;
#line 236 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp18_ = self->priv->visuals;
#line 236 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		spit_transitions_visuals_get_bg_color (_tmp18_, &_tmp19_);
#line 236 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp20_ = _tmp19_;
#line 236 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp21_ = _tmp20_.alpha;
#line 236 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		cairo_set_source_rgba (_tmp5_, _tmp9_, _tmp13_, _tmp17_, _tmp21_);
#line 238 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp22_ = ctx;
#line 238 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp23_ = width;
#line 238 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp24_ = height;
#line 238 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		cairo_rectangle (_tmp22_, (gdouble) 0, (gdouble) 0, (gdouble) _tmp23_, (gdouble) _tmp24_);
#line 239 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp25_ = ctx;
#line 239 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		cairo_fill (_tmp25_);
#line 1777 "TransitionEffects.c"
	}
#line 242 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp26_ = self->priv->effect;
#line 242 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp27_ = self->priv->visuals;
#line 242 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp28_ = self->priv->motion;
#line 242 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp29_ = ctx;
#line 242 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp30_ = width;
#line 242 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp31_ = height;
#line 242 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp32_ = self->priv->frame_number;
#line 242 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	spit_transitions_effect_paint (_tmp26_, _tmp27_, _tmp28_, _tmp29_, _tmp30_, _tmp31_, _tmp32_);
#line 244 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp33_ = ctx;
#line 244 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	cairo_restore (_tmp33_);
#line 246 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp34_ = self->priv->paint_timer;
#line 246 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	op_timer_stop (_tmp34_);
#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 1807 "TransitionEffects.c"
}


static gboolean transition_clock_tick (TransitionClock* self) {
	gboolean result = FALSE;
	gboolean _tmp0_ = FALSE;
	TransitionClockRepaintCallback _tmp1_ = NULL;
	void* _tmp1__target = NULL;
	gboolean _tmp2_ = FALSE;
	gint _tmp3_ = 0;
	SpitTransitionsMotion* _tmp4_ = NULL;
	gint _tmp5_ = 0;
	gint _tmp6_ = 0;
#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"
	_tmp0_ = transition_clock_is_fps_ok (self);
#line 252 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (!_tmp0_) {
#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 1831 "TransitionEffects.c"
	}
#line 259 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp1_ = self->priv->repaint;
#line 259 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp1__target = self->priv->repaint_target;
#line 259 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp1_ (_tmp1__target);
#line 261 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp2_ = transition_clock_is_in_progress (self);
#line 261 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (!_tmp2_) {
#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 1849 "TransitionEffects.c"
	}
#line 268 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp3_ = self->priv->frame_number;
#line 268 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp4_ = self->priv->motion;
#line 268 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp5_ = spit_transitions_motion_get_total_frames (_tmp4_);
#line 268 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	_tmp6_ = _tmp5_;
#line 268 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	if (_tmp3_ < _tmp6_) {
#line 1861 "TransitionEffects.c"
		SpitTransitionsEffect* _tmp7_ = NULL;
		SpitTransitionsVisuals* _tmp8_ = NULL;
		SpitTransitionsMotion* _tmp9_ = NULL;
		gint _tmp10_ = 0;
		gint _tmp11_ = 0;
#line 269 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp7_ = self->priv->effect;
#line 269 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp8_ = self->priv->visuals;
#line 269 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp9_ = self->priv->motion;
#line 269 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp10_ = self->priv->frame_number;
#line 269 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		self->priv->frame_number = _tmp10_ + 1;
#line 269 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp11_ = self->priv->frame_number;
#line 269 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		spit_transitions_effect_advance (_tmp7_, _tmp8_, _tmp9_, _tmp11_);
#line 1881 "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 1887 "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 1894 "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 1903 "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 1913 "TransitionEffects.c"
	} else {
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		dest_value->data[0].v_pointer = NULL;
#line 1917 "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 1925 "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 1932 "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 1939 "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 1943 "TransitionEffects.c"
		}
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		value->data[0].v_pointer = transition_clock_ref (object);
#line 1947 "TransitionEffects.c"
	} else {
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		value->data[0].v_pointer = NULL;
#line 1951 "TransitionEffects.c"
	}
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return NULL;
#line 1955 "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 1966 "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 1972 "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 1976 "TransitionEffects.c"
	} else {
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		*object_p = transition_clock_ref (value->data[0].v_pointer);
#line 1980 "TransitionEffects.c"
	}
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return NULL;
#line 1984 "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 1998 "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 2007 "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 2027 "TransitionEffects.c"
	} else {
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		value->data[0].v_pointer = NULL;
#line 2031 "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 2037 "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 2056 "TransitionEffects.c"
	} else {
#line 116 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		value->data[0].v_pointer = NULL;
#line 2060 "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 2066 "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 2078 "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 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 2103 "TransitionEffects.c"
}


static void transition_clock_finalize (TransitionClock* obj) {
	TransitionClock * self;
	gint _tmp0_ = 0;
	SpitTransitionsMotion* _tmp1_ = NULL;
	OpTimer* _tmp5_ = NULL;
	gchar* _tmp6_ = NULL;
	gchar* _tmp7_ = NULL;
	gint _tmp8_ = 0;
	gint _tmp9_ = 0;
	gint _tmp10_ = 0;
#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 2127 "TransitionEffects.c"
		SpitTransitionsMotion* _tmp2_ = NULL;
		gint _tmp3_ = 0;
		gint _tmp4_ = 0;
#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 2139 "TransitionEffects.c"
	} else {
#line 148 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
		_tmp0_ = 0;
#line 2143 "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 2171 "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 2196 "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 2209 "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 2223 "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 2236 "TransitionEffects.c"
}


static const gchar* null_transition_descriptor_real_get_pluggable_name (SpitPluggable* base) {
	NullTransitionDescriptor * self;
	const gchar* result = NULL;
	const gchar* _tmp0_ = 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"
	_tmp0_ = _ ("None");
#line 287 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	result = _tmp0_;
#line 287 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return result;
#line 2252 "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 2262 "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 2270 "TransitionEffects.c"
}


static SpitTransitionsEffect* null_transition_descriptor_real_create (SpitTransitionsDescriptor* base, SpitHostInterface* host) {
	NullTransitionDescriptor * self;
	SpitTransitionsEffect* result = NULL;
	NullEffect* _tmp0_ = NULL;
#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 2288 "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 2298 "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 2305 "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 2312 "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 2329 "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 2338 "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 2368 "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 2375 "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 2393 "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 2399 "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 2412 "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 2425 "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 2439 "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 2451 "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 2459 "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 2466 "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 2485 "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 2516 "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 2529 "TransitionEffects.c"
}


static const gchar* random_effect_descriptor_real_get_pluggable_name (SpitPluggable* base) {
	RandomEffectDescriptor * self;
	const gchar* result = NULL;
	const gchar* _tmp0_ = 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"
	_tmp0_ = _ ("Random");
#line 339 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	result = _tmp0_;
#line 339 "/home/jens/Source/shotwell/src/slideshow/TransitionEffects.vala"
	return result;
#line 2545 "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 2555 "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 2563 "TransitionEffects.c"
}


static SpitTransitionsEffect* random_effect_descriptor_real_create (SpitTransitionsDescriptor* base, SpitHostInterface* host) {
	RandomEffectDescriptor * self;
	SpitTransitionsEffect* result = NULL;
	NullEffect* _tmp0_ = NULL;
#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 2581 "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 2591 "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 2598 "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 2605 "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 2622 "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 2631 "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;
}



