title-clip: Return default GESTitleSource value if no child set yet

In get_property we should return the default values if
we have not created any GESTitleSource yet
(instead of segfaulting).

And fix GESTitleSource default values!

Reviewed-by: Thibault Saunier <thibault.saunier@collabora.com>
Differential Revision: https://phabricator.freedesktop.org/D737
This commit is contained in:
Thibault Saunier 2016-01-25 15:51:26 +01:00
parent 7211e6982f
commit 3ffdad6db8
3 changed files with 36 additions and 25 deletions

View file

@ -70,44 +70,32 @@ static void
ges_title_clip_get_property (GObject * object, guint property_id, ges_title_clip_get_property (GObject * object, guint property_id,
GValue * value, GParamSpec * pspec) GValue * value, GParamSpec * pspec)
{ {
GESTimelineElement *child, *tmpsrc = NULL;
GESTitleClipPrivate *priv = GES_TITLE_CLIP (object)->priv; GESTitleClipPrivate *priv = GES_TITLE_CLIP (object)->priv;
if (!priv->track_titles)
child = tmpsrc = GES_TIMELINE_ELEMENT (ges_title_source_new ());
else
child = priv->track_titles->data;
switch (property_id) { switch (property_id) {
/* Falltrough all over */
case PROP_TEXT: case PROP_TEXT:
ges_track_element_get_child_property (priv->track_titles->data, "text",
value);
break;
case PROP_FONT_DESC: case PROP_FONT_DESC:
ges_track_element_get_child_property (priv->track_titles->data,
"font-desc", value);
break;
case PROP_HALIGNMENT: case PROP_HALIGNMENT:
ges_track_element_get_child_property (priv->track_titles->data,
"halignment", value);
break;
case PROP_VALIGNMENT: case PROP_VALIGNMENT:
ges_track_element_get_child_property (priv->track_titles->data,
"valignment", value);
break;
case PROP_COLOR: case PROP_COLOR:
ges_track_element_get_child_property (priv->track_titles->data, "color",
value);
break;
case PROP_BACKGROUND: case PROP_BACKGROUND:
ges_track_element_get_child_property (priv->track_titles->data,
"foreground-color", value);
break;
case PROP_XPOS: case PROP_XPOS:
ges_track_element_get_child_property (priv->track_titles->data, "xpos",
value);
break;
case PROP_YPOS: case PROP_YPOS:
ges_track_element_get_child_property (priv->track_titles->data, "ypos", ges_timeline_element_get_child_property (child, pspec->name, value);
value);
break; break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
} }
if (tmpsrc)
g_object_unref (tmpsrc);
} }
static void static void

View file

@ -93,6 +93,9 @@
#include "ges-title-source.h" #include "ges-title-source.h"
#include "ges-video-test-source.h" #include "ges-video-test-source.h"
#define DEFAULT_TEXT ""
#define DEFAULT_FONT_DESC "Serif 36"
G_DEFINE_TYPE (GESTitleSource, ges_title_source, GES_TYPE_VIDEO_SOURCE); G_DEFINE_TYPE (GESTitleSource, ges_title_source, GES_TYPE_VIDEO_SOURCE);
struct _GESTitleSourcePrivate struct _GESTitleSourcePrivate
@ -171,8 +174,8 @@ ges_title_source_init (GESTitleSource * self)
self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
GES_TYPE_TITLE_SOURCE, GESTitleSourcePrivate); GES_TYPE_TITLE_SOURCE, GESTitleSourcePrivate);
self->priv->text = NULL; self->priv->text = g_strdup (DEFAULT_TEXT);
self->priv->font_desc = NULL; self->priv->font_desc = g_strdup (DEFAULT_FONT_DESC);
self->priv->text_el = NULL; self->priv->text_el = NULL;
self->priv->halign = DEFAULT_HALIGNMENT; self->priv->halign = DEFAULT_HALIGNMENT;
self->priv->valign = DEFAULT_VALIGNMENT; self->priv->valign = DEFAULT_VALIGNMENT;

View file

@ -52,3 +52,23 @@ class TestCopyPaste(unittest.TestCase):
copy.paste(10) copy.paste(10)
self.assertEqual(len(self.layer.get_clips()), 1) self.assertEqual(len(self.layer.get_clips()), 1)
def testCopyPasteTitleClip(self):
clip1 = GES.TitleClip.new()
clip1.props.duration = 10
self.layer.add_clip(clip1)
self.assertEqual(len(clip1.get_children(False)), 1)
copy = clip1.copy(True)
self.assertEqual(len(self.layer.get_clips()), 1)
copy.paste(10)
self.assertEqual(len(self.layer.get_clips()), 2)
class TestTitleClip(unittest.TestCase):
def testGetPropertyNotInTrack(self):
title_clip = GES.TitleClip.new()
self.assertEqual(title_clip.props.text, "")
self.assertEqual(title_clip.props.font_desc, "Serif 36")