summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLionel Landwerlin <llandwerlin@gmail.com>2014-12-06 21:54:15 +0000
committerLionel Landwerlin <llandwerlin@gmail.com>2014-12-06 23:43:08 +0000
commit98a86e242f55ec9eb649dddf19c1f904e2df7a36 (patch)
tree81890e3f9669ba3ed5be13d68893d07f6008106c
parent4949bee5bbb341250dde5c0d939f04bfaaa900d5 (diff)
downloadclutter-gst-98a86e242f55ec9eb649dddf19c1f904e2df7a36.tar.gz
content: add set_frame()
-rw-r--r--clutter-gst/clutter-gst-content.c58
-rw-r--r--clutter-gst/clutter-gst-content.h3
-rw-r--r--doc/reference/clutter-gst-sections.txt1
3 files changed, 62 insertions, 0 deletions
diff --git a/clutter-gst/clutter-gst-content.c b/clutter-gst/clutter-gst-content.c
index 3c625c7..82dee44 100644
--- a/clutter-gst/clutter-gst-content.c
+++ b/clutter-gst/clutter-gst-content.c
@@ -69,6 +69,7 @@ enum
{
PROP_0,
+ PROP_FRAME,
PROP_SINK,
PROP_PLAYER,
PROP_PAINT_FRAME,
@@ -281,6 +282,30 @@ content_set_sink (ClutterGstContent *self,
g_object_notify (G_OBJECT (self), "sink");
}
+static void
+content_set_frame (ClutterGstContent *self,
+ ClutterGstFrame *frame)
+{
+ ClutterGstContentPrivate *priv = self->priv;
+
+ if (!frame)
+ {
+ if (priv->current_frame)
+ {
+ g_boxed_free (CLUTTER_GST_TYPE_FRAME, priv->current_frame);
+ priv->current_frame = NULL;
+
+ clutter_content_invalidate (CLUTTER_CONTENT (self));
+ }
+ return;
+ }
+
+ update_frame (self, frame);
+
+ if (CLUTTER_GST_CONTENT_GET_CLASS (self)->has_painting_content (self))
+ clutter_content_invalidate (CLUTTER_CONTENT (self));
+}
+
static gboolean
clutter_gst_content_get_preferred_size (ClutterContent *content,
gfloat *width,
@@ -414,6 +439,10 @@ clutter_gst_content_set_property (GObject *object,
switch (prop_id)
{
+ case PROP_FRAME:
+ content_set_frame (self, g_value_get_boxed (value));
+ break;
+
case PROP_SINK:
content_set_sink (self, g_value_get_object (value), FALSE);
break;
@@ -447,6 +476,10 @@ clutter_gst_content_get_property (GObject *object,
switch (prop_id)
{
+ case PROP_FRAME:
+ g_value_set_boxed (value, priv->current_frame);
+ break;
+
case PROP_SINK:
g_value_set_object (value, priv->sink);
break;
@@ -512,6 +545,13 @@ clutter_gst_content_class_init (ClutterGstContentClass *klass)
G_TYPE_OBJECT,
G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE);
+ props[PROP_FRAME] =
+ g_param_spec_boxed ("frame",
+ "ClutterGst Frame",
+ "ClutterGst Frame",
+ CLUTTER_GST_TYPE_FRAME,
+ G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE);
+
props[PROP_SINK] =
g_param_spec_object ("sink",
"Cogl Video Sink",
@@ -615,6 +655,24 @@ clutter_gst_content_get_frame (ClutterGstContent *self)
}
/**
+ * clutter_gst_content_set_frame:
+ * @self: A #ClutterGstContent
+ * @frame: A #ClutterGstFrame
+ *
+ * Set the current frame.
+ *
+ * Since: 3.0
+ */
+void
+clutter_gst_content_set_frame (ClutterGstContent *self,
+ ClutterGstFrame *frame)
+{
+ g_return_if_fail (CLUTTER_GST_IS_CONTENT (self));
+
+ content_set_frame (self, frame);
+}
+
+/**
* clutter_gst_content_get_overlays:
* @self: A #ClutterGstContent
*
diff --git a/clutter-gst/clutter-gst-content.h b/clutter-gst/clutter-gst-content.h
index dfd0633..9175e3f 100644
--- a/clutter-gst/clutter-gst-content.h
+++ b/clutter-gst/clutter-gst-content.h
@@ -87,6 +87,9 @@ ClutterContent * clutter_gst_content_new_with_sink (ClutterGstVideoSink
ClutterGstFrame * clutter_gst_content_get_frame (ClutterGstContent *self);
+void clutter_gst_content_set_frame (ClutterGstContent *self,
+ ClutterGstFrame *frame);
+
ClutterGstOverlays * clutter_gst_content_get_overlays (ClutterGstContent *self);
void clutter_gst_content_set_sink (ClutterGstContent *self,
diff --git a/doc/reference/clutter-gst-sections.txt b/doc/reference/clutter-gst-sections.txt
index 3723c5f..9e9bd26 100644
--- a/doc/reference/clutter-gst-sections.txt
+++ b/doc/reference/clutter-gst-sections.txt
@@ -39,6 +39,7 @@ clutter_gst_content_new_with_sink
clutter_gst_content_get_frame
clutter_gst_content_get_player
clutter_gst_content_get_sink
+clutter_gst_content_set_frame
clutter_gst_content_set_player
clutter_gst_content_set_sink
clutter_gst_content_get_overlays