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


#include <glib.h>
#include <glib-object.h>


#define PDFPC_VIEW_BEHAVIOUR_TYPE_DECORATABLE (pdfpc_view_behaviour_decoratable_get_type ())
#define PDFPC_VIEW_BEHAVIOUR_DECORATABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PDFPC_VIEW_BEHAVIOUR_TYPE_DECORATABLE, pdfpcViewBehaviourDecoratable))
#define PDFPC_VIEW_BEHAVIOUR_IS_DECORATABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PDFPC_VIEW_BEHAVIOUR_TYPE_DECORATABLE))
#define PDFPC_VIEW_BEHAVIOUR_DECORATABLE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), PDFPC_VIEW_BEHAVIOUR_TYPE_DECORATABLE, pdfpcViewBehaviourDecoratableIface))

typedef struct _pdfpcViewBehaviourDecoratable pdfpcViewBehaviourDecoratable;
typedef struct _pdfpcViewBehaviourDecoratableIface pdfpcViewBehaviourDecoratableIface;

#define PDFPC_VIEW_BEHAVIOUR_TYPE_BASE (pdfpc_view_behaviour_base_get_type ())
#define PDFPC_VIEW_BEHAVIOUR_BASE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PDFPC_VIEW_BEHAVIOUR_TYPE_BASE, pdfpcViewBehaviourBase))
#define PDFPC_VIEW_BEHAVIOUR_BASE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PDFPC_VIEW_BEHAVIOUR_TYPE_BASE, pdfpcViewBehaviourBaseClass))
#define PDFPC_VIEW_BEHAVIOUR_IS_BASE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PDFPC_VIEW_BEHAVIOUR_TYPE_BASE))
#define PDFPC_VIEW_BEHAVIOUR_IS_BASE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PDFPC_VIEW_BEHAVIOUR_TYPE_BASE))
#define PDFPC_VIEW_BEHAVIOUR_BASE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PDFPC_VIEW_BEHAVIOUR_TYPE_BASE, pdfpcViewBehaviourBaseClass))

typedef struct _pdfpcViewBehaviourBase pdfpcViewBehaviourBase;
typedef struct _pdfpcViewBehaviourBaseClass pdfpcViewBehaviourBaseClass;

struct _pdfpcViewBehaviourDecoratableIface {
	GTypeInterface parent_iface;
	void (*associate_behaviour) (pdfpcViewBehaviourDecoratable* self, pdfpcViewBehaviourBase* behaviour);
};



GType pdfpc_view_behaviour_base_get_type (void) G_GNUC_CONST;
GType pdfpc_view_behaviour_decoratable_get_type (void) G_GNUC_CONST;
void pdfpc_view_behaviour_decoratable_associate_behaviour (pdfpcViewBehaviourDecoratable* self, pdfpcViewBehaviourBase* behaviour);


/**
         * Associate a new Behaviour with this Decoratable
         *
         * The implementation needs to support an arbitrary amount of different
         * behaviours.
         */
void pdfpc_view_behaviour_decoratable_associate_behaviour (pdfpcViewBehaviourDecoratable* self, pdfpcViewBehaviourBase* behaviour) {
	g_return_if_fail (self != NULL);
	PDFPC_VIEW_BEHAVIOUR_DECORATABLE_GET_INTERFACE (self)->associate_behaviour (self, behaviour);
}


static void pdfpc_view_behaviour_decoratable_base_init (pdfpcViewBehaviourDecoratableIface * iface) {
	static gboolean initialized = FALSE;
	if (!initialized) {
		initialized = TRUE;
	}
}


/**
     * Every View which supports Behaviours needs to implement this interface.
     *
     * A Behaviour is a certain characteristic which is added to an existing
     * View on demand.
     */
GType pdfpc_view_behaviour_decoratable_get_type (void) {
	static volatile gsize pdfpc_view_behaviour_decoratable_type_id__volatile = 0;
	if (g_once_init_enter (&pdfpc_view_behaviour_decoratable_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (pdfpcViewBehaviourDecoratableIface), (GBaseInitFunc) pdfpc_view_behaviour_decoratable_base_init, (GBaseFinalizeFunc) NULL, (GClassInitFunc) NULL, (GClassFinalizeFunc) NULL, NULL, 0, 0, (GInstanceInitFunc) NULL, NULL };
		GType pdfpc_view_behaviour_decoratable_type_id;
		pdfpc_view_behaviour_decoratable_type_id = g_type_register_static (G_TYPE_INTERFACE, "pdfpcViewBehaviourDecoratable", &g_define_type_info, 0);
		g_once_init_leave (&pdfpc_view_behaviour_decoratable_type_id__volatile, pdfpc_view_behaviour_decoratable_type_id);
	}
	return pdfpc_view_behaviour_decoratable_type_id__volatile;
}



