Commit graph

63 commits

Author SHA1 Message Date
Thibault Saunier c802a40a96 ges: Call the right ->set_child_property vmethod
We used to always call the `->set_child_property` virtual method
of the object that `ges_timeline_element_set_child_property` was called
from, but that means that, in the case of referencing GESContainer
children properties from its children, the children wouldn't know
what child property have been set, and the children override wouldn't
be takent into account, in turns, it means that the behaviour could be
different in the setter depending on parent the method was called,
which is totally unexpected.

We now make sure that the vmethod from the element that introduced the
child property is called whatever parent method is called, making the
behaviour more uniform.

Fix the python override to make sure that new behaviour is respected.
2020-02-26 13:36:30 -03:00
Henry Wilkes 7b5f655c9a ges-source-clip: fixed return of duration setter
In general, brought the behaviour of the `start`, `duration` and
`inpoint` setters in line with each other. In particular:
1. fixed return value the GESSourceClip `duration` setter
2. changed the GESClip `start` setter
3. fixed the inpoint callback for GESContainer
4. changed the type of `res` in GESTimelineElement to be gint to
   emphasise that the GES library is using the hack that a return of -1
   from klass->set_duration means no notify signal should be sent out.

Also added a new test for clips to ensure that the setters work for
clips within and outside of timelines, and that the `start`, `inpoint`
and `duration` of a clip will match its children.
2019-12-14 18:12:51 +00:00
Niels De Graef 35d140ad92 Don't pass default GLib marshallers for signals
By passing NULL to `g_signal_new` instead of a marshaller, GLib will
actually internally optimize the signal (if the marshaller is available
in GLib itself) by also setting the valist marshaller. This makes the
signal emission a bit more performant than the regular marshalling,
which still needs to box into `GValue` and call libffi in case of a
generic marshaller.

Note that for custom marshallers, one would use
`g_signal_set_va_marshaller()` with the valist marshaller instead.
2019-10-24 15:19:09 +02:00
Thibault Saunier b3e449fd4f container: Handle children pasting failures 2019-06-05 00:43:48 +00:00
Thibault Saunier 2ab26ab306 ges: Move ges_container_edit to GESTimelineElement
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.
2019-05-01 12:24:30 -04:00
Alexandru Băluț 07ee386d30 container: Call _remove_child when cannot set parent
ges_container_add removes the child being added if the call to
ges_timeline_element_set_parent fails. In this case, subclasses should
be given the chance to revert the effects of the add_child vmethod which
has just been called.
2019-04-17 21:56:21 +00:00
Alexandru Băluț 134e2ffae1 ges: Remove unused nb_effects field 2019-04-17 21:56:21 +00:00
Thibault Saunier a46390ff56 Reimplement the timeline editing API
This is implemented on top of a Tree that represents the whole timeline.

SourceClips can not fully overlap anymore and the tests have been
updated to take that into account. Some new tests were added to verify
that behaviour in greater details
2019-03-15 23:51:55 +00:00
Seungha Yang 1ba5911890 container: Fix GHashTable leak 2018-12-27 10:57:30 +09:00
Seungha Yang f77eb964dd container: Fix wrong finalize() usage
finalize must chain up to parent's finalize(), not dispose()
2018-12-27 00:18:04 +09:00
Tim-Philipp Müller a7347ca8f7 WIP: ges: fix API export/import and 'inconsistent linkage' on MSVC
Export GES library API in headers when we're building the
library itself, otherwise import the API from the headers.

This fixes linker warnings on Windows when building with MSVC.

Fix up some missing config.h includes when building the lib which
is needed to get the export api define from config.h

Fixes https://gitlab.freedesktop.org/gstreamer/gst-editing-services/issues/42
2018-12-15 00:14:51 +00:00
Alexandru Băluț f987db47a7 clip: Emit additional signals after child-removed
When removing an effect from a clip, first the notify::priority signals
were being emitted for the remaining effects which changed priority, and only
at the end the child-removed signal. Now the child-removed signal is emitted
first.
2018-11-07 09:09:22 -03:00
Thibault Saunier 13b8c8554d Update for g_type_class_add_private() deprecation in recent GLib 2018-09-05 22:57:27 -03:00
Thibault Saunier 2443b1a413 clip: Resync priorities when removing an effect
When removing a top effect in the list of top effects, other
effects priorities need to take that into account to avoid
holes in the indices.
2018-09-05 21:52:37 -03:00
Thibault Saunier bfb943be1b formatter: Serialize Transition border and invert properties
Marking them as children properties and properly allow serializing
clips children properties.

This doesn't handle several TrackElement of a same type with
different property values but this require more worked already
marked as fixme to allow specifying full path of elements in the
children properties API.

See https://gitlab.gnome.org/GNOME/pitivi/issues/1687
2018-07-28 14:25:07 -04:00
Thibault Saunier 35256b47ff docs: Port all docstring to gtk-doc markdown 2017-03-08 18:13:48 -03:00
Thibault Saunier 346f887553 ges: Don't remove track elements from clips when removing from layer
And reuse the same previously created element when adding the clip
back to a layer, avoiding losing all setting done on clip children
in that situation

This is a behaviour change but previous behaviour was actually totally
unexpected and people working around that weird behaviour will moste
probably not care about that change

Differential Revision: https://phabricator.freedesktop.org/D1094
2016-06-20 14:49:17 -04:00
Aurélien Zanelli 96a8c6db0c ges: fix various leaks with usage of ges_timeline_element_lookup_child
Some callers forgot to unref out child, pspec or both leading to leaks.

https://bugzilla.gnome.org/show_bug.cgi?id=766449
2016-06-20 13:16:29 +01:00
Thibault Saunier f6b04061c8 container: Handle setting children properties that need prefixing 2016-05-03 08:31:44 -03:00
Thibault Saunier a526e5634e container: Update start if adding a child that as a start < current start
Reviewed-by: Thibault Saunier <thibault.saunier@collabora.com>
Differential Revision: https://phabricator.freedesktop.org/D629
2016-01-17 09:23:39 +01:00
Thibault Saunier 2fae9ee50d group: Make deep copying actually copy deep
Allowing pasting groups paste exactly what had been copied

And not the new version of the contained objects

This technically breaks the C API but this is a new API and I believe
and hope nobody is using it right now.

Reviewed-by: Thibault Saunier <thibault.saunier@collabora.com>
Differential Revision: https://phabricator.freedesktop.org/D616
2016-01-17 09:23:35 +01:00
Thibault Saunier 822e0a7b09 ges: Avoid emitting 'child-added/removed' when signal emission stops addition
In the GESTimeline, TrackElement addition to a clip might get cancelled
(and thus the element gets removed), we need to make sure users do not
get wrong signals.

Also document the fact that user should connect to container::child-added
with g_signal_connect_after.
2015-09-24 13:27:16 +02:00
Thibault Saunier 5885f58c14 element: Implement a paste method
Allowing user to copy paste clips very easily
2015-07-03 14:06:54 +02:00
Thibault Saunier 54be29e9ed timeline-element: Add a method to get the TrackType it interacts with
API:
  + ges_timeline_element_get_track_types
2015-07-03 11:20:54 +02:00
Thibault Saunier dd47def4e3 container: implement children property handling 2015-03-18 20:36:39 +01:00
Thibault Saunier f470222f3d Revert "ges: Move the notion of children properties to GESTimelineElement"
I got some trouble with

  arc land

and I wanted to push the 3 commit coming after this revert as 3
different commits but they ended up being all squash into one single
commit, which is clearly not cool for later bisecting and blaming.
Reverting that commit and re pushing those 3 commits as they were
supposed to be.

This reverts commit 9fe15ef435.
2015-03-18 20:33:48 +01:00
Thibault Saunier 9fe15ef435 ges: Move the notion of children properties to GESTimelineElement
Summary:
Deprecate the old GESTrackElement children property handling API.

New APIs:
  * ges_timeline_element_list_children_properties
  * ges_timeline_element_lookup_child
  * ges_timeline_element_get_child_property_by_pspec
  * ges_timeline_element_get_child_property_valist
  * ges_timeline_element_get_child_properties
  * ges_timeline_element_set_child_property_valist
  * ges_timeline_element_set_child_property_by_pspec
  * ges_timeline_element_set_child_properties
  * ges_timeline_element_set_child_property
  * ges_timeline_element_get_child_property
  * ges_timeline_element_add_child_property
  * ges_timeline_element_remove_child_property

Deprecated APIs:
  * ges_track_element_list_children_properties
  * ges_track_element_lookup_child
  * ges_track_element_get_child_property_by_pspec
  * ges_track_element_get_child_property_valist
  * ges_track_element_get_child_properties
  * ges_track_element_set_child_property_valist
  * ges_track_element_set_child_property_by_pspec
  * ges_track_element_set_child_properties
  * ges_track_element_set_child_property
  * ges_track_element_get_child_property
  * ges_track_element_add_child_property

Reviewers: Mathieu_Du

Reviewed By: Mathieu_Du

Differential Revision: http://phabricator.freedesktop.org/D40
2015-03-18 20:23:55 +01:00
Christoph Reiter a66e674649 Include class related section documentation in the gir file.
g-ir-scanner includes section docs as class/interface docs if the section name is equal to the lowercase type name.
Since all the documentation is in section blocks, rename them to match the type names.

https://bugzilla.gnome.org/show_bug.cgi?id=727776
2014-04-07 22:13:25 +02:00
Thibault Saunier 9b050a54cd container: Properly handle the case where we could not set parent
In this case we had a FIXME about reverting everything that was done,
implement that FIXME!
2014-03-15 20:01:48 +01:00
Dan Williams 54367a2d36 ges: Ensure GObject finalize and dispose methods chain up to parents
https://bugzilla.gnome.org/show_bug.cgi?id=725918
2014-03-08 11:24:33 +00:00
Thibault Saunier c4c26f8748 ges: Handle trimming in groups
This was broken, clips where moving all around, make it behave properly.
2013-09-07 12:55:58 -04:00
Thibault Saunier 28770ce53b container: Do not forget to initialize the timeline before using it 2013-09-02 13:57:15 -04:00
Mathieu Duponchelle e9e7f0a82c container: resort children after prepending an element. 2013-08-21 08:06:59 -04:00
Mathieu Duponchelle 2723ef561e container/group/clip: Allow creating an empty group.
This is a legitimate use case.
2013-07-11 23:47:36 +02:00
Mathieu Duponchelle 96204ac1d2 container: Add a 'recursive' argument to the get_children method
API:
  - ges_container_get_children (GESContainer *container);
  + ges_container_get_children (GESContainer *container, gboolean recurse);
2013-07-10 23:25:12 -04:00
Thibault Saunier a933d9540d ges: Implement a GESGroup class, subclass of GESContainer
The GESGroup class is used to group various GESContainer
together, it can contain either GESClips or GESGroup or both.
2013-07-09 16:47:00 -04:00
Thibault Saunier 30eb9e4474 container: Remove the get_priority_range vmethod
We now let full control to subclasses so we do not need it anymore.
2013-07-09 22:13:42 +02:00
Thibault Saunier 9e15e13983 container: Let full control of children priorities to subclasses
For that we make the children_control_mode a protected filed, directly usable by
subclasses, removing the method to set it.

And we let the subclass set and get the priority offsets to the container class.
2013-07-09 22:13:42 +02:00
Thibault Saunier 9d13c5cbd3 container: Do not allow adding an element to a container if it already has a parent
This should never happen, an element can have 1 and only 1 parent.
2013-07-09 22:13:41 +02:00
Thibault Saunier bcfeada696 container: "Implement" the set_priority vmethod
This way we will just accept any value setted
2013-07-09 22:13:41 +02:00
Thibault Saunier 7412de6f6c ges: Avoid leaking the timeline when grouping containers 2013-07-09 22:13:41 +02:00
Thibault Saunier 8bc88a2ba8 container: Let subclasses decide when height change should be computed
API:
   - GESContainer.compute_height vmethod
   + _ges_container_set_height
2013-07-09 22:13:41 +02:00
Thibault Saunier 91ebdc7efb container: ges_container_ungroup return a transfer full list 2013-07-09 22:13:41 +02:00
Thibault Saunier 663f9884ef ges: Move ges_clip_edit to GESContainer
This exact same method will be needed in GESGroup, so we should have the method
in the common parent class.

API:
    - ges_clip_edit
    + ges_container_edit
    + GESContainer->edit vmethod
2013-07-09 22:13:41 +02:00
Thibault Saunier 87cfcca5e7 container: Update offsets in GESTimelineElement vmethod implementations
So subclasses just have to link up to resync offsets
2013-07-09 22:13:41 +02:00
Thibault Saunier 4020ca54ff container: Fix the way we check priority of subclasses when grouping objects
The resulting list was from lower to higher, we need the contrary
2013-07-09 22:13:40 +02:00
Thibault Saunier ab98f370c8 ges: Move GESTimelineElemt vmethod implementation from container to clip
This is where they belong to has they are specific to that
implementation of the baseclass
2013-07-09 22:13:40 +02:00
Thibault Saunier f5aee5df57 container: Make initiated_move a read only protected member
It is a interesting information for subclasses.
Conflicts:
	ges/ges-container.c
2013-07-09 22:13:40 +02:00
Thibault Saunier b2b96c743d Rename GESTimelineLayer to GESLayer 2013-04-23 20:22:31 -03:00
Thibault Saunier e1cac75df4 container: The TimelineElement.inpoint property is call "in-point" not inpoint 2013-04-15 00:18:05 -03:00