/* The duration of the timeline */
gint64 duration;
+ /* The auto-transition of the timeline */
+ gboolean auto_transition;
+
/* Timeline edition modes and snapping management */
guint64 snapping_distance;
{
PROP_0,
PROP_DURATION,
+ PROP_AUTO_TRANSITION,
PROP_SNAPPING_DISTANCE,
PROP_UPDATE,
PROP_LAST
case PROP_DURATION:
g_value_set_uint64 (value, timeline->priv->duration);
break;
+ case PROP_AUTO_TRANSITION:
+ g_value_set_boolean (value, timeline->priv->auto_transition);
+ break;
case PROP_SNAPPING_DISTANCE:
g_value_set_uint64 (value, timeline->priv->snapping_distance);
break;
GESTimeline *timeline = GES_TIMELINE (object);
switch (property_id) {
+ case PROP_AUTO_TRANSITION:
+ ges_timeline_set_auto_transition (timeline, g_value_get_boolean (value));
+ break;
case PROP_SNAPPING_DISTANCE:
timeline->priv->snapping_distance = g_value_get_uint64 (value);
break;
properties[PROP_DURATION]);
/**
+ * GESTimeline:auto-transition:
+ *
+ * Sets whether transitions are added automagically when clips overlap.
+ */
+ g_object_class_install_property (object_class, PROP_AUTO_TRANSITION,
+ g_param_spec_boolean ("auto-transition", "Auto-Transition",
+ "whether the transitions are added", FALSE, G_PARAM_READWRITE));
+
+ /**
* GESTimeline:snapping-distance:
*
* Distance (in nanoseconds) from which a moving object will snap
self->layers = NULL;
self->tracks = NULL;
self->priv->duration = 0;
+ self->priv->auto_transition = FALSE;
priv->snapping_distance = 0;
/* Move context initialization */
gboolean
ges_timeline_add_layer (GESTimeline * timeline, GESLayer * layer)
{
+ gboolean auto_transition;
GList *objects, *tmp;
GST_DEBUG ("timeline:%p, layer:%p", timeline, layer);
return FALSE;
}
+ auto_transition = ges_layer_get_auto_transition (layer);
+
+ /* If the user doesn't explicitely set layer auto_transition, then set our */
+ if (!auto_transition) {
+ auto_transition = ges_timeline_get_auto_transition (timeline);
+ ges_layer_set_auto_transition (layer, auto_transition);
+ }
+
gst_object_ref_sink (layer);
timeline->layers = g_list_insert_sorted (timeline->layers, layer,
(GCompareFunc) sort_layers);
return timeline->priv->duration;
}
+
+/**
+ * ges_timeline_get_auto_transition:
+ * @timeline: a #GESTimeline
+ *
+ * Gets whether transitions are automatically added when objects
+ * overlap or not.
+ *
+ * Returns: %TRUE if transitions are automatically added, else %FALSE.
+ */
+gboolean
+ges_timeline_get_auto_transition (GESTimeline * timeline)
+{
+ g_return_val_if_fail (GES_IS_TIMELINE (timeline), 0);
+
+ return timeline->priv->auto_transition;
+}
+
+/**
+ * ges_timeline_set_auto_transition:
+ * @timeline: a #GESLayer
+ * @auto_transition: whether the auto_transition is active
+ *
+ * Sets the layer to the given @auto_transition. See the documentation of the
+ * property auto_transition for more information.
+ */
+void
+ges_timeline_set_auto_transition (GESTimeline * timeline,
+ gboolean auto_transition)
+{
+ GList *layers;
+ GESLayer *layer;
+
+ g_return_if_fail (GES_IS_TIMELINE (timeline));
+
+ timeline->priv->auto_transition = auto_transition;
+ g_object_notify (G_OBJECT (timeline), "auto-transition");
+
+ layers = timeline->layers;
+ for (; layers; layers = layers->next) {
+ layer = layers->data;
+ ges_layer_set_auto_transition (layer, auto_transition);
+ }
+}