ges: Move `ges_container_edit` to GESTimelineElement
authorThibault Saunier <tsaunier@igalia.com>
Wed, 1 May 2019 16:09:45 +0000 (12:09 -0400)
committerThibault Saunier <tsaunier@igalia.com>
Wed, 1 May 2019 16:24:30 +0000 (12:24 -0400)
Now that the notion of layer has been moved down to #GESTimelineElement
(through the new #ges_timeline_element_get_layer_priority method), this
method make much more sense directly in the base class.

bindings/python/gi/overrides/GES.py
ges/ges-clip.c
ges/ges-container.c
ges/ges-container.h
ges/ges-timeline-element.c
ges/ges-timeline-element.h
ges/ges-track-element.c

index be2d9bf9818183e4403366a117bbaa26c9218033..631e931f9ffd39a2c32231fb8ecdaade6bd92920 100644 (file)
@@ -81,6 +81,12 @@ class TimelineElement(GES.TimelineElement):
 TimelineElement = override(TimelineElement)
 __all__.append('TimelineElement')
 
+class Container(GES.Container):
+    def edit(self, layers, new_layer_priority, mode, edge, position):
+        return GES.TimelineElement.edit(self, layers, new_layer_priority, mode, edge, position)
+
+Container = override(Container)
+__all__.append('Container')
 
 try:
     from gi.repository import Gst
index 222fdf6a23bd2030edd83294a31f2994a0f9435e..58ee0b8f83344df61b78ec3b6cc01393b8ae14e6 100644 (file)
@@ -615,50 +615,6 @@ done:
 
 }
 
-static gboolean
-_edit (GESContainer * container, GList * layers,
-    gint new_layer_priority, GESEditMode mode, GESEdge edge, guint64 position)
-{
-  GESTimeline *timeline = GES_TIMELINE_ELEMENT_TIMELINE (container);
-  GESTimelineElement *element = GES_TIMELINE_ELEMENT (container);
-
-  if (!G_UNLIKELY (GES_CONTAINER_CHILDREN (container))) {
-    GST_WARNING_OBJECT (container, "Trying to edit, but not containing"
-        "any TrackElement yet.");
-    return FALSE;
-  }
-
-  if (!timeline) {
-    GST_WARNING_OBJECT (container, "Trying to edit, but not in any"
-        "timeline.");
-    return FALSE;
-  }
-
-  switch (mode) {
-    case GES_EDIT_MODE_RIPPLE:
-      return timeline_ripple_object (timeline, element,
-          new_layer_priority <
-          0 ? GES_TIMELINE_ELEMENT_LAYER_PRIORITY (container) :
-          new_layer_priority, layers, edge, position);
-    case GES_EDIT_MODE_TRIM:
-      return timeline_trim_object (timeline, element,
-          new_layer_priority <
-          0 ? GES_TIMELINE_ELEMENT_LAYER_PRIORITY (container) :
-          new_layer_priority, layers, edge, position);
-    case GES_EDIT_MODE_NORMAL:
-      return timeline_move_object (timeline, element,
-          new_layer_priority <
-          0 ? GES_TIMELINE_ELEMENT_LAYER_PRIORITY (container) :
-          new_layer_priority, layers, edge, position);
-    case GES_EDIT_MODE_ROLL:
-      return timeline_roll_object (timeline, element, layers, edge, position);
-    case GES_EDIT_MODE_SLIDE:
-      GST_ERROR ("Sliding not implemented.");
-      return FALSE;
-  }
-  return FALSE;
-}
-
 static void
 _deep_copy (GESTimelineElement * element, GESTimelineElement * copy)
 {
@@ -855,7 +811,6 @@ ges_clip_class_init (GESClipClass * klass)
   container_class->ungroup = _ungroup;
   container_class->group = _group;
   container_class->grouping_priority = G_MAXUINT;
-  container_class->edit = _edit;
 }
 
 static void
index 07a5afa77abb8e658c0697e8c088d4cc84d0bff5..a6b28cec760f71228c8c39b209f4364ec928fb0b 100644 (file)
@@ -1007,6 +1007,8 @@ ges_container_group (GList * containers)
  *
  * Returns: %TRUE if the container as been edited properly, %FALSE if an error
  * occured
+ *
+ * Deprecated: 1.18: use #ges_timeline_element_edit instead.
  */
 gboolean
 ges_container_edit (GESContainer * container, GList * layers,
@@ -1014,11 +1016,6 @@ ges_container_edit (GESContainer * container, GList * layers,
 {
   g_return_val_if_fail (GES_IS_CONTAINER (container), FALSE);
 
-  if (G_UNLIKELY (GES_CONTAINER_GET_CLASS (container)->edit == NULL)) {
-    GST_WARNING_OBJECT (container, "No edit vmethod implementation");
-    return FALSE;
-  }
-
-  return GES_CONTAINER_GET_CLASS (container)->edit (container, layers,
-      new_layer_priority, mode, edge, position);
+  return ges_timeline_element_edit (GES_TIMELINE_ELEMENT (container),
+      layers, new_layer_priority, mode, edge, position);
 }
index 8b033668c21ff50be2d045a88bddd89fb6b77b5b..5f40e20ec8f2b63347cef7cbe9e82aa88fe63c7c 100644 (file)
@@ -119,6 +119,8 @@ struct _GESContainerClass
   gboolean (*remove_child)        (GESContainer *container, GESTimelineElement *element);
   GList* (*ungroup)               (GESContainer *container, gboolean recursive);
   GESContainer * (*group)         (GList *containers);
+
+  /* Deprecated and not used anymore */
   gboolean (*edit)                (GESContainer * container,
                                    GList * layers, gint new_layer_priority,
                                    GESEditMode mode,
index 39c65b726e317368c21b22a0fb6f87360bedd8d5..c3b4c1c52f900a7c20be59e0bf6f4f9235a5b304 100644 (file)
@@ -1942,3 +1942,56 @@ ges_timeline_element_set_flags (GESTimelineElement * self,
   self->priv->flags = flags;
 
 }
+
+/**
+ * ges_timeline_element_edit:
+ * @self: the #GESClip to edit
+ * @layers: (element-type GESLayer): The layers you want the edit to
+ * happen in, %NULL means that the edition is done in all the
+ * #GESLayers contained in the current timeline.
+ * @new_layer_priority: The priority of the layer @self should land in.
+ * If the layer you're trying to move the element to doesn't exist, it will
+ * be created automatically. -1 means no move.
+ * @mode: The #GESEditMode in which the editition will happen.
+ * @edge: The #GESEdge the edit should happen on.
+ * @position: The position at which to edit @self (in nanosecond)
+ *
+ * Edit @self in the different exisiting #GESEditMode modes. In the case of
+ * slide, and roll, you need to specify a #GESEdge
+ *
+ * Returns: %TRUE if @self as been edited properly, %FALSE if an error
+ * occured
+ */
+gboolean
+ges_timeline_element_edit (GESTimelineElement * self, GList * layers,
+    gint64 new_layer_priority, GESEditMode mode, GESEdge edge, guint64 position)
+{
+  GESTimeline *timeline;
+
+  g_return_val_if_fail (GES_IS_TIMELINE_ELEMENT (self), FALSE);
+
+  timeline = GES_TIMELINE_ELEMENT_TIMELINE (self);
+  switch (mode) {
+    case GES_EDIT_MODE_RIPPLE:
+      return timeline_ripple_object (timeline, self,
+          new_layer_priority <
+          0 ? GES_TIMELINE_ELEMENT_LAYER_PRIORITY (self) :
+          new_layer_priority, layers, edge, position);
+    case GES_EDIT_MODE_TRIM:
+      return timeline_trim_object (timeline, self,
+          new_layer_priority <
+          0 ? GES_TIMELINE_ELEMENT_LAYER_PRIORITY (self) :
+          new_layer_priority, layers, edge, position);
+    case GES_EDIT_MODE_NORMAL:
+      return timeline_move_object (timeline, self,
+          new_layer_priority <
+          0 ? GES_TIMELINE_ELEMENT_LAYER_PRIORITY (self) :
+          new_layer_priority, layers, edge, position);
+    case GES_EDIT_MODE_ROLL:
+      return timeline_roll_object (timeline, self, layers, edge, position);
+    case GES_EDIT_MODE_SLIDE:
+      GST_ERROR_OBJECT (self, "Sliding not implemented.");
+      return FALSE;
+  }
+  return FALSE;
+}
index 860b72b765f8a9848b8361b2fd7bb2be0ccaf6a4..22cdc228d85e9f2554f27fec0e8d306ff220f8de 100644 (file)
@@ -337,7 +337,15 @@ GES_API
 GESTrackType ges_timeline_element_get_track_types  (GESTimelineElement * self);
 
 GES_API
-guint32 ges_timeline_element_get_layer_priority    (GESTimelineElement * self);
+guint32 ges_timeline_element_get_layer_priority                       (GESTimelineElement * self);
+
+GES_API
+gboolean ges_timeline_element_edit                                    (GESTimelineElement * self,
+                                                                       GList * layers,
+                                                                       gint64 new_layer_priority,
+                                                                       GESEditMode mode,
+                                                                       GESEdge edge,
+                                                                       guint64 position);
 
 G_END_DECLS
 
index d7006b38065e0e2f7a893fa0d9b268d1f88d8bd3..345639da5557202ee8e7524a4f06550ed26a29f7 100644 (file)
@@ -1343,57 +1343,17 @@ ges_track_element_copy_bindings (GESTrackElement * element,
  *
  * Returns: %TRUE if the object as been edited properly, %FALSE if an error
  * occured
+ *
+ * Deprecated: 1.18: use #ges_timeline_element_edit instead.
  */
 gboolean
 ges_track_element_edit (GESTrackElement * object,
     GList * layers, GESEditMode mode, GESEdge edge, guint64 position)
 {
-  GESTrack *track = ges_track_element_get_track (object);
-  GESTimeline *timeline;
-
   g_return_val_if_fail (GES_IS_TRACK_ELEMENT (object), FALSE);
 
-  if (G_UNLIKELY (!track)) {
-    GST_WARNING_OBJECT (object, "Trying to edit in %d mode but not in "
-        "any Track yet.", mode);
-    return FALSE;
-  }
-
-  timeline = GES_TIMELINE (ges_track_get_timeline (track));
-
-  if (G_UNLIKELY (!timeline)) {
-    GST_WARNING_OBJECT (object, "Trying to edit in %d mode but "
-        "track %p is not in any timeline yet.", mode, track);
-    return FALSE;
-  }
-
-  switch (mode) {
-    case GES_EDIT_MODE_NORMAL:
-      return timeline_move_object (timeline, GES_TIMELINE_ELEMENT (object), -1,
-          layers, edge, position);
-      break;
-    case GES_EDIT_MODE_TRIM:
-      return timeline_trim_object (timeline, GES_TIMELINE_ELEMENT (object), -1,
-          layers, edge, position);
-      break;
-    case GES_EDIT_MODE_RIPPLE:
-      return timeline_ripple_object (timeline, GES_TIMELINE_ELEMENT (object),
-          GES_TIMELINE_ELEMENT_PRIORITY (object) / LAYER_HEIGHT,
-          layers, edge, position);
-      break;
-    case GES_EDIT_MODE_ROLL:
-      return timeline_roll_object (timeline, GES_TIMELINE_ELEMENT (object),
-          layers, edge, position);
-      break;
-    case GES_EDIT_MODE_SLIDE:
-      return timeline_slide_object (timeline, object, layers, edge, position);
-      break;
-    default:
-      GST_ERROR ("Unkown edit mode: %d", mode);
-      return FALSE;
-  }
-
-  return TRUE;
+  return ges_timeline_element_edit (GES_TIMELINE_ELEMENT (object),
+      layers, -1, mode, edge, position);
 }
 
 /**