From 0179647a98515cb635f36da2ce4c766f16edf19b Mon Sep 17 00:00:00 2001 From: Koos Vriezen Date: Mon, 14 Apr 2008 22:04:24 +0200 Subject: [PATCH] Remove node from LaughInitializer, not sure if it's needed Add TimingSegment struct, representing the timings of a timing smil element. It will become a tree, wherein timing smil elemnts must hang in their part. The parts are traversed via the next(->) pointer, groups should use the sub_segment ([]) list to add child timings. Eg. body[par[img,img]->text] --- src/laugh-dom.c | 15 +++++++-------- src/laugh-dom.h | 10 ++++++++-- src/laugh-timing.h | 25 +++++++++++++++++++++---- 3 files changed, 36 insertions(+), 14 deletions(-) diff --git a/src/laugh-dom.c b/src/laugh-dom.c index d320ba0..43a1d05 100644 --- a/src/laugh-dom.c +++ b/src/laugh-dom.c @@ -222,45 +222,44 @@ void _lauch_document_mime_type (LaughIO *io, const gchar *mime, gpointer d) { g_printf ("lauch_document_mime_type: %s\n", mime); if (strcmp (mime, "application/smil")) { - LaughInitializer *init = (LaughInitializer *) d; + LaughNode *node = LAUGH_NODE (d); g_printerr ("not a smil document\n"); laugh_io_cancel (io); g_object_unref (G_OBJECT (io)); - g_signal_emit (init->node, laugh_node_signals[INITIALIZED], 0); + g_signal_emit (node, laugh_node_signals[INITIALIZED], 0); } } static void _lauch_document_completed (LaughIO *io, gsize sz, gpointer data, gpointer d) { - LaughInitializer *init = (LaughInitializer *) d; + LaughNode *node = LAUGH_NODE (d); g_printf ("_lauch_document_completed: %u\n", sz); if (data) { - laugh_node_set_inner_xml (LAUGH_NODE(init->node), (const gchar *) data); + laugh_node_set_inner_xml (node, (const gchar *) data); g_free (data); } g_object_unref (G_OBJECT (io)); /*TODO init children and wait for initialized signals*/ - g_signal_emit (init->node, laugh_node_signals[INITIALIZED], 0); + g_signal_emit (node, laugh_node_signals[INITIALIZED], 0); } static void _laugh_document_init (LaughNode *doc, LaughInitializer *initializer) { LaughDocumentPrivate *priv = LAUGH_DOCUMENT (doc)->priv; - initializer->node = doc; priv->io = laugh_io_new (priv->uri); g_signal_connect (G_OBJECT (priv->io), "mime-type", - (GCallback) _lauch_document_mime_type, (gpointer) initializer); + (GCallback) _lauch_document_mime_type, (gpointer) doc); g_signal_connect (G_OBJECT (priv->io), "completed", - (GCallback) _lauch_document_completed, (gpointer) initializer); + (GCallback) _lauch_document_completed, (gpointer) doc); laugh_io_open (priv->io); } diff --git a/src/laugh-dom.h b/src/laugh-dom.h index 8892bd4..91791a9 100644 --- a/src/laugh-dom.h +++ b/src/laugh-dom.h @@ -83,10 +83,13 @@ typedef enum _LaughNodeState { StateInit, StateBegun, StatePaused, StateStopped, StateFreezed } LaughNodeState; +#include "laugh-timing.h" + struct _LaughInitializer { - LaughNode *node; - /*TODO: add current ClutterGroup and current TimerThread */ + /*ClutterGroup *parent_region*/ + LaughTimingSegment *parent_segment; + LaughTimingSegment *previous_segment; }; struct _LaughNode @@ -131,6 +134,9 @@ struct _LaughDocument { LaughNode parent; + /*< public >*/ + LaughTimingSegment *timing_thread; + /*< private >*/ LaughDocumentPrivate *priv; }; diff --git a/src/laugh-timing.h b/src/laugh-timing.h index 2c34379..bfb885c 100644 --- a/src/laugh-timing.h +++ b/src/laugh-timing.h @@ -26,20 +26,37 @@ #include +typedef enum _LaughTimingType LaughTimingType; +typedef struct _LaughTiming LaughTiming; +typedef struct _LaughTimingSegment LaughTimingSegment; -typedef enum _LaughTimingType { +enum _LaughTimingType +{ TimingUnknown = -1, TimingTime = 0, TimingIndefinite, TimingMedia, TimingActivated, TimingInbounds, TimingOutbounds, TimingEndSync, TimingStartSync -} LaughTimingType; +}; -typedef struct _LaughTiming { +struct _LaughTiming +{ LaughTimingType type; int offset; gchar *element_id; -} LaughTiming; +}; +struct _LaughTimingSegment +{ + LaughNode *node; + + LaughTiming *begin; + LaughTiming *dur; + LaughTiming *end; + + GList *sub_segments; + LaughTimingSegment *parent; + LaughTimingSegment *next; +}; LaughTiming *laugh_timing_new (); -- 2.11.4.GIT