diff --git a/ges/ges-timeline-transition.c b/ges/ges-timeline-transition.c index ad4d49064d..f3752131d1 100644 --- a/ges/ges-timeline-transition.c +++ b/ges/ges-timeline-transition.c @@ -152,91 +152,329 @@ ges_tl_transition_create_track_object (GESTimelineObject * obj, return res; } -GESTimelineTransition * -ges_timeline_transition_new (gint vtype) -{ - GESTimelineTransition *ret = g_object_new - (GES_TYPE_TIMELINE_TRANSITION, NULL); - - g_object_set (ret, "vtype", (gint) vtype, NULL); - return ret; -} - -static GEnumClass *smpte_enum_class = NULL; - -static void -_ensure_smpte_enum_class () -{ - /* is there a better way to do this? */ - - if (!smpte_enum_class) { - GstElement *element = gst_element_factory_make ("smpte", NULL); - GstElementClass *element_class = GST_ELEMENT_GET_CLASS (element); - - GParamSpec *pspec = - g_object_class_find_property (G_OBJECT_CLASS (element_class), "type"); - - smpte_enum_class = G_ENUM_CLASS (g_type_class_ref (pspec->value_type)); - } - -} +static GEnumValue transition_types[] = { + { + 1, + "A bar moves from left to right", + "bar-wipe-lr"}, + { + 2, + "A bar moves from top to bottom", + "bar-wipe-tb"}, + { + 3, + "A box expands from the upper-left corner to the lower-right corner", + "box-wipe-tl"}, + { + 4, + "A box expands from the upper-right corner to the lower-left corner", + "box-wipe-tr"}, + { + 5, + "A box expands from the lower-right corner to the upper-left corner", + "box-wipe-br"}, + { + 6, + "A box expands from the lower-left corner to the upper-right corner", + "box-wipe-bl"}, + { + 7, + "A box shape expands from each of the four corners toward the center", + "four-box-wipe-ci"}, + { + 8, + "A box shape expands from the center of each quadrant toward the corners of each quadrant", + "four-box-wipe-co"}, + { + 21, + "A central, vertical line splits and expands toward the left and right edges", + "barndoor-v"}, + { + 22, + "A central, horizontal line splits and expands toward the top and bottom edges", + "barndoor-h"}, + { + 23, + "A box expands from the top edge's midpoint to the bottom corners", + "box-wipe-tc"}, + { + 24, + "A box expands from the right edge's midpoint to the left corners", + "box-wipe-rc"}, + { + 25, + "A box expands from the bottom edge's midpoint to the top corners", + "box-wipe-bc"}, + { + 26, + "A box expands from the left edge's midpoint to the right corners", + "box-wipe-lc"}, + { + 41, + "A diagonal line moves from the upper-left corner to the lower-right corner", + "diagonal-tl"}, + { + 42, + "A diagonal line moves from the upper right corner to the lower-left corner", + "diagonal-tr"}, + { + 43, + "Two wedge shapes slide in from the top and bottom edges toward the center", + "bowtie-v"}, + { + 44, + "Two wedge shapes slide in from the left and right edges toward the center", + "bowtie-h"}, + { + 45, + "A diagonal line from the lower-left to upper-right corners splits and expands toward the opposite corners", + "barndoor-dbl"}, + { + 46, + "A diagonal line from upper-left to lower-right corners splits and expands toward the opposite corners", + "barndoor-dtl"}, + { + 47, + "Four wedge shapes split from the center and retract toward the four edges", + "misc-diagonal-dbd"}, + { + 48, + "A diamond connecting the four edge midpoints simultaneously contracts toward the center and expands toward the edges", + "misc-diagonal-dd"}, + { + 61, + "A wedge shape moves from top to bottom", + "vee-d"}, + { + 62, + "A wedge shape moves from right to left", + "vee-l"}, + { + 63, + "A wedge shape moves from bottom to top", + "vee-u"}, + { + 64, + "A wedge shape moves from left to right", + "vee-r"}, + { + 65, + "A 'V' shape extending from the bottom edge's midpoint to the opposite corners contracts toward the center and expands toward the edges", + "barnvee-d"}, + { + 66, + "A 'V' shape extending from the left edge's midpoint to the opposite corners contracts toward the center and expands toward the edges", + "barnvee-l"}, + { + 67, + "A 'V' shape extending from the top edge's midpoint to the opposite corners contracts toward the center and expands toward the edges", + "barnvee-u"}, + { + 68, + "A 'V' shape extending from the right edge's midpoint to the opposite corners contracts toward the center and expands toward the edges", + "barnvee-r"}, + { + 101, + "A rectangle expands from the center.", + "iris-rect"}, + { + 201, + "A radial hand sweeps clockwise from the twelve o'clock position", + "clock-cw12"}, + { + 202, + "A radial hand sweeps clockwise from the three o'clock position", + "clock-cw3"}, + { + 203, + "A radial hand sweeps clockwise from the six o'clock position", + "clock-cw6"}, + { + 204, + "A radial hand sweeps clockwise from the nine o'clock position", + "clock-cw9"}, + { + 205, + "Two radial hands sweep clockwise from the twelve and six o'clock positions", + "pinwheel-tbv"}, + { + 206, + "Two radial hands sweep clockwise from the nine and three o'clock positions", + "pinwheel-tbh"}, + { + 207, + "Four radial hands sweep clockwise", + "pinwheel-fb"}, + { + 211, + "A fan unfolds from the top edge, the fan axis at the center", + "fan-ct"}, + { + 212, + "A fan unfolds from the right edge, the fan axis at the center", + "fan-cr"}, + { + 213, + "Two fans, their axes at the center, unfold from the top and bottom", + "doublefan-fov"}, + { + 214, + "Two fans, their axes at the center, unfold from the left and right", + "doublefan-foh"}, + { + 221, + "A radial hand sweeps clockwise from the top edge's midpoint", + "singlesweep-cwt"}, + { + 222, + "A radial hand sweeps clockwise from the right edge's midpoint", + "singlesweep-cwr"}, + { + 223, + "A radial hand sweeps clockwise from the bottom edge's midpoint", + "singlesweep-cwb"}, + { + 224, + "A radial hand sweeps clockwise from the left edge's midpoint", + "singlesweep-cwl"}, + { + 225, + "Two radial hands sweep clockwise and counter-clockwise from the top and bottom edges' midpoints", + "doublesweep-pv"}, + { + 226, + "Two radial hands sweep clockwise and counter-clockwise from the left and right edges' midpoints", + "doublesweep-pd"}, + { + 227, + "Two radial hands attached at the top and bottom edges' midpoints sweep from right to left", + "doublesweep-ov"}, + { + 228, + "Two radial hands attached at the left and right edges' midpoints sweep from top to bottom", + "doublesweep-oh"}, + { + 231, + "A fan unfolds from the bottom, the fan axis at the top edge's midpoint", + "fan-t"}, + { + 232, + "A fan unfolds from the left, the fan axis at the right edge's midpoint", + "fan-r"}, + { + 233, + "A fan unfolds from the top, the fan axis at the bottom edge's midpoint", + "fan-b"}, + { + 234, + "A fan unfolds from the right, the fan axis at the left edge's midpoint", + "fan-l"}, + { + 235, + "Two fans, their axes at the top and bottom, unfold from the center", + "doublefan-fiv"}, + { + 236, + "Two fans, their axes at the left and right, unfold from the center", + "doublefan-fih"}, + { + 241, + "A radial hand sweeps clockwise from the upper-left corner", + "singlesweep-cwtl"}, + { + 242, + "A radial hand sweeps counter-clockwise from the lower-left corner.", + "singlesweep-cwbl"}, + { + 243, + "A radial hand sweeps clockwise from the lower-right corner", + "singlesweep-cwbr"}, + { + 244, + "A radial hand sweeps counter-clockwise from the upper-right corner", + "singlesweep-cwtr"}, + { + 245, + "Two radial hands attached at the upper-left and lower-right corners sweep down and up", + "doublesweep-pdtl"}, + { + 246, + "Two radial hands attached at the lower-left and upper-right corners sweep down and up", + "doublesweep-pdbl"}, + { + 251, + "Two radial hands attached at the upper-left and upper-right corners sweep down", + "saloondoor-t"}, + { + 252, + "Two radial hands attached at the upper-left and lower-left corners sweep to the right", + "saloondoor-l"}, + { + 253, + "Two radial hands attached at the lower-left and lower-right corners sweep up", + "saloondoor-b"}, + { + 254, + "Two radial hands attached at the upper-right and lower-right corners sweep to the left", + "saloondoor-r"}, + { + 261, + "Two radial hands attached at the midpoints of the top and bottom halves sweep from right to left", + "windshield-r"}, + { + 262, + "Two radial hands attached at the midpoints of the left and right halves sweep from top to bottom", + "windshield-u"}, + { + 263, + "Two sets of radial hands attached at the midpoints of the top and bottom halves sweep from top to bottom and bottom to top", + "windshield-v"}, + { + 264, + "Two sets of radial hands attached at the midpoints of the left and right halves sweep from left to right and right to left", + "windshield-h"}, + { + VTYPE_CROSSFADE, + "Crossfade between two clips", + "crossfade"}, + {0, NULL, NULL} +}; /* how many types could GType type if GType could type types? */ static GType ges_type_timeline_transition_vtype_get_type (void) { - _ensure_smpte_enum_class (); - static GType the_type = 0; + static gsize once = 0; - if (!the_type) { - GEnumValue *values, *src, *dst; - gint i, n; + if (g_once_init_enter (&once)) { + g_assert (!once); - n = smpte_enum_class->n_values; - - /* plus one for sentinel, plus another for the crossfade GEnumValue */ - values = g_new0 (GEnumValue, 2 + n); - - for (i = 0, dst = values, src = smpte_enum_class->values; i < n; - i++, dst++, src++) { - dst->value = src->value; - dst->value_nick = src->value_nick; - dst->value_name = src->value_name; - } - - dst->value = VTYPE_CROSSFADE; - dst->value_name = "Cross-fade between two sources"; - dst->value_nick = "crossfade"; - - dst++; - - dst->value = 0; - dst->value_nick = NULL; - dst->value_name = NULL; - - the_type = g_enum_register_static ("GESTimelineTransitionVType", values); + the_type = g_enum_register_static ("GESTimelineTransitionVType", + transition_types); + g_once_init_leave (&once, 1); } return the_type; } GESTimelineTransition * -ges_timeline_transition_new_for_nick (char *nick) +ges_timeline_transition_new (gint vtype) { + GESTimelineTransition *ret; - _ensure_smpte_enum_class (); - - if (!strcmp ("crossfade", nick)) { - return ges_timeline_transition_new (VTYPE_CROSSFADE); - } - - GEnumValue *value = g_enum_get_value_by_nick (smpte_enum_class, nick); - - if (!value) { - return NULL; - } - - return ges_timeline_transition_new (value->value); + ret = g_object_new (GES_TYPE_TIMELINE_TRANSITION, "vtype", (gint) vtype, + NULL); + return ret; +} + +GESTimelineTransition * +ges_timeline_transition_new_for_nick (gchar * nick) +{ + GESTimelineTransition *ret; + ret = g_object_new (GES_TYPE_TIMELINE_TRANSITION, NULL); + g_object_set (ret, "vtype", (gchar *) nick, NULL); + + return ret; }