split up all elm headers. not perfect, but a big start
[framework/uifw/elementary.git] / src / lib / elm_transit.h
1    /**
2     *
3     * @defgroup Transit Transit
4     * @ingroup Elementary
5     *
6     * Transit is designed to apply various animated transition effects to @c
7     * Evas_Object, such like translation, rotation, etc. For using these
8     * effects, create an @ref Elm_Transit and add the desired transition effects.
9     *
10     * Once the effects are added into transit, they will be automatically
11     * managed (their callback will be called until the duration is ended, and
12     * they will be deleted on completion).
13     *
14     * Example:
15     * @code
16     * Elm_Transit *trans = elm_transit_add();
17     * elm_transit_object_add(trans, obj);
18     * elm_transit_effect_translation_add(trans, 0, 0, 280, 280
19     * elm_transit_duration_set(transit, 1);
20     * elm_transit_auto_reverse_set(transit, EINA_TRUE);
21     * elm_transit_tween_mode_set(transit, ELM_TRANSIT_TWEEN_MODE_DECELERATE);
22     * elm_transit_repeat_times_set(transit, 3);
23     * @endcode
24     *
25     * Some transition effects are used to change the properties of objects. They
26     * are:
27     * @li @ref elm_transit_effect_translation_add
28     * @li @ref elm_transit_effect_color_add
29     * @li @ref elm_transit_effect_rotation_add
30     * @li @ref elm_transit_effect_wipe_add
31     * @li @ref elm_transit_effect_zoom_add
32     * @li @ref elm_transit_effect_resizing_add
33     *
34     * Other transition effects are used to make one object disappear and another
35     * object appear on its old place. These effects are:
36     *
37     * @li @ref elm_transit_effect_flip_add
38     * @li @ref elm_transit_effect_resizable_flip_add
39     * @li @ref elm_transit_effect_fade_add
40     * @li @ref elm_transit_effect_blend_add
41     *
42     * It's also possible to make a transition chain with @ref
43     * elm_transit_chain_transit_add.
44     *
45     * @warning We strongly recommend to use elm_transit just when edje can not do
46     * the trick. Edje has more advantage than Elm_Transit, it has more flexibility and
47     * animations can be manipulated inside the theme.
48     *
49     * List of examples:
50     * @li @ref transit_example_01_explained
51     * @li @ref transit_example_02_explained
52     * @li @ref transit_example_03_c
53     * @li @ref transit_example_04_c
54     *
55     * @{
56     */
57
58    /**
59     * @enum Elm_Transit_Tween_Mode
60     *
61     * The type of acceleration used in the transition.
62     */
63    typedef enum
64      {
65         ELM_TRANSIT_TWEEN_MODE_LINEAR, /**< Constant speed */
66         ELM_TRANSIT_TWEEN_MODE_SINUSOIDAL, /**< Starts slow, increase speed
67                                              over time, then decrease again
68                                              and stop slowly */
69         ELM_TRANSIT_TWEEN_MODE_DECELERATE, /**< Starts fast and decrease
70                                              speed over time */
71         ELM_TRANSIT_TWEEN_MODE_ACCELERATE /**< Starts slow and increase speed
72                                             over time */
73      } Elm_Transit_Tween_Mode;
74
75    /**
76     * @enum Elm_Transit_Effect_Flip_Axis
77     *
78     * The axis where flip effect should be applied.
79     */
80    typedef enum
81      {
82         ELM_TRANSIT_EFFECT_FLIP_AXIS_X, /**< Flip on X axis */
83         ELM_TRANSIT_EFFECT_FLIP_AXIS_Y /**< Flip on Y axis */
84      } Elm_Transit_Effect_Flip_Axis;
85
86    /**
87     * @enum Elm_Transit_Effect_Wipe_Dir
88     *
89     * The direction where the wipe effect should occur.
90     */
91    typedef enum
92      {
93         ELM_TRANSIT_EFFECT_WIPE_DIR_LEFT, /**< Wipe to the left */
94         ELM_TRANSIT_EFFECT_WIPE_DIR_RIGHT, /**< Wipe to the right */
95         ELM_TRANSIT_EFFECT_WIPE_DIR_UP, /**< Wipe up */
96         ELM_TRANSIT_EFFECT_WIPE_DIR_DOWN /**< Wipe down */
97      } Elm_Transit_Effect_Wipe_Dir;
98
99    /** @enum Elm_Transit_Effect_Wipe_Type
100     *
101     * Whether the wipe effect should show or hide the object.
102     */
103    typedef enum
104      {
105         ELM_TRANSIT_EFFECT_WIPE_TYPE_HIDE, /**< Hide the object during the
106                                              animation */
107         ELM_TRANSIT_EFFECT_WIPE_TYPE_SHOW /**< Show the object during the
108                                             animation */
109      } Elm_Transit_Effect_Wipe_Type;
110
111    /**
112     * @typedef Elm_Transit
113     *
114     * The Transit created with elm_transit_add(). This type has the information
115     * about the objects which the transition will be applied, and the
116     * transition effects that will be used. It also contains info about
117     * duration, number of repetitions, auto-reverse, etc.
118     */
119    typedef struct _Elm_Transit Elm_Transit;
120    typedef void Elm_Transit_Effect;
121
122    /**
123     * @typedef Elm_Transit_Effect_Transition_Cb
124     *
125     * Transition callback called for this effect on each transition iteration.
126     */
127    typedef void (*Elm_Transit_Effect_Transition_Cb) (Elm_Transit_Effect *effect, Elm_Transit *transit, double progress);
128
129    /**
130     * Elm_Transit_Effect_End_Cb
131     *
132     * Transition callback called for this effect when the transition is over.
133     */
134    typedef void (*Elm_Transit_Effect_End_Cb) (Elm_Transit_Effect *effect, Elm_Transit *transit);
135
136    /**
137     * Elm_Transit_Del_Cb
138     *
139     * A callback called when the transit is deleted.
140     */
141    typedef void (*Elm_Transit_Del_Cb) (void *data, Elm_Transit *transit);
142
143    /**
144     * Add new transit.
145     *
146     * @note Is not necessary to delete the transit object, it will be deleted at
147     * the end of its operation.
148     * @note The transit will start playing when the program enter in the main loop, is not
149     * necessary to give a start to the transit.
150     *
151     * @return The transit object.
152     *
153     * @ingroup Transit
154     */
155    EAPI Elm_Transit                *elm_transit_add(void);
156
157    /**
158     * Stops the animation and delete the @p transit object.
159     *
160     * Call this function if you wants to stop the animation before the duration
161     * time. Make sure the @p transit object is still alive with
162     * elm_transit_del_cb_set() function.
163     * All added effects will be deleted, calling its repective data_free_cb
164     * functions. The function setted by elm_transit_del_cb_set() will be called.
165     *
166     * @see elm_transit_del_cb_set()
167     *
168     * @param transit The transit object to be deleted.
169     *
170     * @ingroup Transit
171     * @warning Just call this function if you are sure the transit is alive.
172     */
173    EAPI void                        elm_transit_del(Elm_Transit *transit) EINA_ARG_NONNULL(1);
174
175    /**
176     * Add a new effect to the transit.
177     *
178     * @note The cb function and the data are the key to the effect. If you try to
179     * add an already added effect, nothing is done.
180     * @note After the first addition of an effect in @p transit, if its
181     * effect list become empty again, the @p transit will be killed by
182     * elm_transit_del(transit) function.
183     *
184     * Exemple:
185     * @code
186     * Elm_Transit *transit = elm_transit_add();
187     * elm_transit_effect_add(transit,
188     *                        elm_transit_effect_blend_op,
189     *                        elm_transit_effect_blend_context_new(),
190     *                        elm_transit_effect_blend_context_free);
191     * @endcode
192     *
193     * @param transit The transit object.
194     * @param transition_cb The operation function. It is called when the
195     * animation begins, it is the function that actually performs the animation.
196     * It is called with the @p data, @p transit and the time progression of the
197     * animation (a double value between 0.0 and 1.0).
198     * @param effect The context data of the effect.
199     * @param end_cb The function to free the context data, it will be called
200     * at the end of the effect, it must finalize the animation and free the
201     * @p data.
202     *
203     * @ingroup Transit
204     * @warning The transit free the context data at the and of the transition with
205     * the data_free_cb function, do not use the context data in another transit.
206     */
207    EAPI void                        elm_transit_effect_add(Elm_Transit *transit, Elm_Transit_Effect_Transition_Cb transition_cb, Elm_Transit_Effect *effect, Elm_Transit_Effect_End_Cb end_cb) EINA_ARG_NONNULL(1, 2);
208
209    /**
210     * Delete an added effect.
211     *
212     * This function will remove the effect from the @p transit, calling the
213     * data_free_cb to free the @p data.
214     *
215     * @see elm_transit_effect_add()
216     *
217     * @note If the effect is not found, nothing is done.
218     * @note If the effect list become empty, this function will call
219     * elm_transit_del(transit), that is, it will kill the @p transit.
220     *
221     * @param transit The transit object.
222     * @param transition_cb The operation function.
223     * @param effect The context data of the effect.
224     *
225     * @ingroup Transit
226     */
227    EAPI void                        elm_transit_effect_del(Elm_Transit *transit, Elm_Transit_Effect_Transition_Cb transition_cb, Elm_Transit_Effect *effect) EINA_ARG_NONNULL(1, 2);
228
229    /**
230     * Add new object to apply the effects.
231     *
232     * @note After the first addition of an object in @p transit, if its
233     * object list become empty again, the @p transit will be killed by
234     * elm_transit_del(transit) function.
235     * @note If the @p obj belongs to another transit, the @p obj will be
236     * removed from it and it will only belong to the @p transit. If the old
237     * transit stays without objects, it will die.
238     * @note When you add an object into the @p transit, its state from
239     * evas_object_pass_events_get(obj) is saved, and it is applied when the
240     * transit ends, if you change this state whith evas_object_pass_events_set()
241     * after add the object, this state will change again when @p transit stops to
242     * run.
243     *
244     * @param transit The transit object.
245     * @param obj Object to be animated.
246     *
247     * @ingroup Transit
248     * @warning It is not allowed to add a new object after transit begins to go.
249     */
250    EAPI void                        elm_transit_object_add(Elm_Transit *transit, Evas_Object *obj) EINA_ARG_NONNULL(1, 2);
251
252    /**
253     * Removes an added object from the transit.
254     *
255     * @note If the @p obj is not in the @p transit, nothing is done.
256     * @note If the list become empty, this function will call
257     * elm_transit_del(transit), that is, it will kill the @p transit.
258     *
259     * @param transit The transit object.
260     * @param obj Object to be removed from @p transit.
261     *
262     * @ingroup Transit
263     * @warning It is not allowed to remove objects after transit begins to go.
264     */
265    EAPI void                        elm_transit_object_remove(Elm_Transit *transit, Evas_Object *obj) EINA_ARG_NONNULL(1, 2);
266
267    /**
268     * Get the objects of the transit.
269     *
270     * @param transit The transit object.
271     * @return a Eina_List with the objects from the transit.
272     *
273     * @ingroup Transit
274     */
275    EAPI const Eina_List            *elm_transit_objects_get(const Elm_Transit *transit) EINA_ARG_NONNULL(1);
276
277    /**
278     * Enable/disable keeping up the objects states.
279     * If it is not kept, the objects states will be reset when transition ends.
280     *
281     * @note @p transit can not be NULL.
282     * @note One state includes geometry, color, map data.
283     *
284     * @param transit The transit object.
285     * @param state_keep Keeping or Non Keeping.
286     *
287     * @ingroup Transit
288     */
289    EAPI void                        elm_transit_objects_final_state_keep_set(Elm_Transit *transit, Eina_Bool state_keep) EINA_ARG_NONNULL(1);
290
291    /**
292     * Get a value whether the objects states will be reset or not.
293     *
294     * @note @p transit can not be NULL
295     *
296     * @see elm_transit_objects_final_state_keep_set()
297     *
298     * @param transit The transit object.
299     * @return EINA_TRUE means the states of the objects will be reset.
300     * If @p transit is NULL, EINA_FALSE is returned
301     *
302     * @ingroup Transit
303     */
304    EAPI Eina_Bool                   elm_transit_objects_final_state_keep_get(const Elm_Transit *transit) EINA_ARG_NONNULL(1);
305
306    /**
307     * Set the event enabled when transit is operating.
308     *
309     * If @p enabled is EINA_TRUE, the objects of the transit will receives
310     * events from mouse and keyboard during the animation.
311     * @note When you add an object with elm_transit_object_add(), its state from
312     * evas_object_pass_events_get(obj) is saved, and it is applied when the
313     * transit ends, if you change this state with evas_object_pass_events_set()
314     * after adding the object, this state will change again when @p transit stops
315     * to run.
316     *
317     * @param transit The transit object.
318     * @param enabled Events are received when enabled is @c EINA_TRUE, and
319     * ignored otherwise.
320     *
321     * @ingroup Transit
322     */
323    EAPI void                        elm_transit_event_enabled_set(Elm_Transit *transit, Eina_Bool enabled) EINA_ARG_NONNULL(1);
324
325    /**
326     * Get the value of event enabled status.
327     *
328     * @see elm_transit_event_enabled_set()
329     *
330     * @param transit The Transit object
331     * @return EINA_TRUE, when event is enabled. If @p transit is NULL
332     * EINA_FALSE is returned
333     *
334     * @ingroup Transit
335     */
336    EAPI Eina_Bool                   elm_transit_event_enabled_get(const Elm_Transit *transit) EINA_ARG_NONNULL(1);
337
338    /**
339     * Set the user-callback function when the transit is deleted.
340     *
341     * @note Using this function twice will overwrite the first function setted.
342     * @note the @p transit object will be deleted after call @p cb function.
343     *
344     * @param transit The transit object.
345     * @param cb Callback function pointer. This function will be called before
346     * the deletion of the transit.
347     * @param data Callback funtion user data. It is the @p op parameter.
348     *
349     * @ingroup Transit
350     */
351    EAPI void                        elm_transit_del_cb_set(Elm_Transit *transit, Elm_Transit_Del_Cb cb, void *data) EINA_ARG_NONNULL(1);
352
353    /**
354     * Set reverse effect automatically.
355     *
356     * If auto reverse is setted, after running the effects with the progress
357     * parameter from 0 to 1, it will call the effecs again with the progress
358     * from 1 to 0. The transit will last for a time iqual to (2 * duration * repeat),
359     * where the duration was setted with the function elm_transit_add and
360     * the repeat with the function elm_transit_repeat_times_set().
361     *
362     * @param transit The transit object.
363     * @param reverse EINA_TRUE means the auto_reverse is on.
364     *
365     * @ingroup Transit
366     */
367    EAPI void                        elm_transit_auto_reverse_set(Elm_Transit *transit, Eina_Bool reverse) EINA_ARG_NONNULL(1);
368
369    /**
370     * Get if the auto reverse is on.
371     *
372     * @see elm_transit_auto_reverse_set()
373     *
374     * @param transit The transit object.
375     * @return EINA_TRUE means auto reverse is on. If @p transit is NULL
376     * EINA_FALSE is returned
377     *
378     * @ingroup Transit
379     */
380    EAPI Eina_Bool                   elm_transit_auto_reverse_get(const Elm_Transit *transit) EINA_ARG_NONNULL(1);
381
382    /**
383     * Set the transit repeat count. Effect will be repeated by repeat count.
384     *
385     * This function sets the number of repetition the transit will run after
386     * the first one, that is, if @p repeat is 1, the transit will run 2 times.
387     * If the @p repeat is a negative number, it will repeat infinite times.
388     *
389     * @note If this function is called during the transit execution, the transit
390     * will run @p repeat times, ignoring the times it already performed.
391     *
392     * @param transit The transit object
393     * @param repeat Repeat count
394     *
395     * @ingroup Transit
396     */
397    EAPI void                        elm_transit_repeat_times_set(Elm_Transit *transit, int repeat) EINA_ARG_NONNULL(1);
398
399    /**
400     * Get the transit repeat count.
401     *
402     * @see elm_transit_repeat_times_set()
403     *
404     * @param transit The Transit object.
405     * @return The repeat count. If @p transit is NULL
406     * 0 is returned
407     *
408     * @ingroup Transit
409     */
410    EAPI int                         elm_transit_repeat_times_get(const Elm_Transit *transit) EINA_ARG_NONNULL(1);
411
412    /**
413     * Set the transit animation acceleration type.
414     *
415     * This function sets the tween mode of the transit that can be:
416     * ELM_TRANSIT_TWEEN_MODE_LINEAR - The default mode.
417     * ELM_TRANSIT_TWEEN_MODE_SINUSOIDAL - Starts in accelerate mode and ends decelerating.
418     * ELM_TRANSIT_TWEEN_MODE_DECELERATE - The animation will be slowed over time.
419     * ELM_TRANSIT_TWEEN_MODE_ACCELERATE - The animation will accelerate over time.
420     *
421     * @param transit The transit object.
422     * @param tween_mode The tween type.
423     *
424     * @ingroup Transit
425     */
426    EAPI void                        elm_transit_tween_mode_set(Elm_Transit *transit, Elm_Transit_Tween_Mode tween_mode) EINA_ARG_NONNULL(1);
427
428    /**
429     * Get the transit animation acceleration type.
430     *
431     * @note @p transit can not be NULL
432     *
433     * @param transit The transit object.
434     * @return The tween type. If @p transit is NULL
435     * ELM_TRANSIT_TWEEN_MODE_LINEAR is returned.
436     *
437     * @ingroup Transit
438     */
439    EAPI Elm_Transit_Tween_Mode      elm_transit_tween_mode_get(const Elm_Transit *transit) EINA_ARG_NONNULL(1);
440
441    /**
442     * Set the transit animation time
443     *
444     * @note @p transit can not be NULL
445     *
446     * @param transit The transit object.
447     * @param duration The animation time.
448     *
449     * @ingroup Transit
450     */
451    EAPI void                        elm_transit_duration_set(Elm_Transit *transit, double duration) EINA_ARG_NONNULL(1);
452
453    /**
454     * Get the transit animation time
455     *
456     * @note @p transit can not be NULL
457     *
458     * @param transit The transit object.
459     *
460     * @return The transit animation time.
461     *
462     * @ingroup Transit
463     */
464    EAPI double                      elm_transit_duration_get(const Elm_Transit *transit) EINA_ARG_NONNULL(1);
465
466    /**
467     * Starts the transition.
468     * Once this API is called, the transit begins to measure the time.
469     *
470     * @note @p transit can not be NULL
471     *
472     * @param transit The transit object.
473     *
474     * @ingroup Transit
475     */
476    EAPI void                        elm_transit_go(Elm_Transit *transit) EINA_ARG_NONNULL(1);
477
478    /**
479     * Pause/Resume the transition.
480     *
481     * If you call elm_transit_go again, the transit will be started from the
482     * beginning, and will be unpaused.
483     *
484     * @note @p transit can not be NULL
485     *
486     * @param transit The transit object.
487     * @param paused Whether the transition should be paused or not.
488     *
489     * @ingroup Transit
490     */
491    EAPI void                        elm_transit_paused_set(Elm_Transit *transit, Eina_Bool paused) EINA_ARG_NONNULL(1);
492
493    /**
494     * Get the value of paused status.
495     *
496     * @see elm_transit_paused_set()
497     *
498     * @note @p transit can not be NULL
499     *
500     * @param transit The transit object.
501     * @return EINA_TRUE means transition is paused. If @p transit is NULL
502     * EINA_FALSE is returned
503     *
504     * @ingroup Transit
505     */
506    EAPI Eina_Bool                   elm_transit_paused_get(const Elm_Transit *transit) EINA_ARG_NONNULL(1);
507
508    /**
509     * Get the time progression of the animation (a double value between 0.0 and 1.0).
510     *
511     * The value returned is a fraction (current time / total time). It
512     * represents the progression position relative to the total.
513     *
514     * @note @p transit can not be NULL
515     *
516     * @param transit The transit object.
517     *
518     * @return The time progression value. If @p transit is NULL
519     * 0 is returned
520     *
521     * @ingroup Transit
522     */
523    EAPI double                      elm_transit_progress_value_get(const Elm_Transit *transit) EINA_ARG_NONNULL(1);
524
525    /**
526     * Makes the chain relationship between two transits.
527     *
528     * @note @p transit can not be NULL. Transit would have multiple chain transits.
529     * @note @p chain_transit can not be NULL. Chain transits could be chained to the only one transit.
530     *
531     * @param transit The transit object.
532     * @param chain_transit The chain transit object. This transit will be operated
533     *        after transit is done.
534     *
535     * This function adds @p chain_transit transition to a chain after the @p
536     * transit, and will be started as soon as @p transit ends. See @ref
537     * transit_example_02_explained for a full example.
538     *
539     * @ingroup Transit
540     */
541    EAPI void                        elm_transit_chain_transit_add(Elm_Transit *transit, Elm_Transit *chain_transit) EINA_ARG_NONNULL(1, 2);
542
543    /**
544     * Cut off the chain relationship between two transits.
545     *
546     * @note @p transit can not be NULL. Transit would have the chain relationship with @p chain transit.
547     * @note @p chain_transit can not be NULL. Chain transits should be chained to the @p transit.
548     *
549     * @param transit The transit object.
550     * @param chain_transit The chain transit object.
551     *
552     * This function remove the @p chain_transit transition from the @p transit.
553     *
554     * @ingroup Transit
555     */
556    EAPI void                        elm_transit_chain_transit_del(Elm_Transit *transit, Elm_Transit *chain_transit) EINA_ARG_NONNULL(1,2);
557
558    /**
559     * Get the current chain transit list.
560     *
561     * @note @p transit can not be NULL.
562     *
563     * @param transit The transit object.
564     * @return chain transit list.
565     *
566     * @ingroup Transit
567     */
568    EAPI Eina_List                  *elm_transit_chain_transits_get(const Elm_Transit *transit);
569
570    /**
571     * Add the Resizing Effect to Elm_Transit.
572     *
573     * @note This API is one of the facades. It creates resizing effect context
574     * and add it's required APIs to elm_transit_effect_add.
575     *
576     * @see elm_transit_effect_add()
577     *
578     * @param transit Transit object.
579     * @param from_w Object width size when effect begins.
580     * @param from_h Object height size when effect begins.
581     * @param to_w Object width size when effect ends.
582     * @param to_h Object height size when effect ends.
583     * @return Resizing effect context data.
584     *
585     * @ingroup Transit
586     */
587    EAPI Elm_Transit_Effect *elm_transit_effect_resizing_add(Elm_Transit* transit, Evas_Coord from_w, Evas_Coord from_h, Evas_Coord to_w, Evas_Coord to_h);
588
589    /**
590     * Add the Translation Effect to Elm_Transit.
591     *
592     * @note This API is one of the facades. It creates translation effect context
593     * and add it's required APIs to elm_transit_effect_add.
594     *
595     * @see elm_transit_effect_add()
596     *
597     * @param transit Transit object.
598     * @param from_dx X Position variation when effect begins.
599     * @param from_dy Y Position variation when effect begins.
600     * @param to_dx X Position variation when effect ends.
601     * @param to_dy Y Position variation when effect ends.
602     * @return Translation effect context data.
603     *
604     * @ingroup Transit
605     * @warning It is highly recommended just create a transit with this effect when
606     * the window that the objects of the transit belongs has already been created.
607     * This is because this effect needs the geometry information about the objects,
608     * and if the window was not created yet, it can get a wrong information.
609     */
610    EAPI Elm_Transit_Effect *elm_transit_effect_translation_add(Elm_Transit* transit, Evas_Coord from_dx, Evas_Coord from_dy, Evas_Coord to_dx, Evas_Coord to_dy);
611
612    /**
613     * Add the Zoom Effect to Elm_Transit.
614     *
615     * @note This API is one of the facades. It creates zoom effect context
616     * and add it's required APIs to elm_transit_effect_add.
617     *
618     * @see elm_transit_effect_add()
619     *
620     * @param transit Transit object.
621     * @param from_rate Scale rate when effect begins (1 is current rate).
622     * @param to_rate Scale rate when effect ends.
623     * @return Zoom effect context data.
624     *
625     * @ingroup Transit
626     * @warning It is highly recommended just create a transit with this effect when
627     * the window that the objects of the transit belongs has already been created.
628     * This is because this effect needs the geometry information about the objects,
629     * and if the window was not created yet, it can get a wrong information.
630     */
631    EAPI Elm_Transit_Effect *elm_transit_effect_zoom_add(Elm_Transit *transit, float from_rate, float to_rate);
632
633    /**
634     * Add the Flip Effect to Elm_Transit.
635     *
636     * @note This API is one of the facades. It creates flip effect context
637     * and add it's required APIs to elm_transit_effect_add.
638     * @note This effect is applied to each pair of objects in the order they are listed
639     * in the transit list of objects. The first object in the pair will be the
640     * "front" object and the second will be the "back" object.
641     *
642     * @see elm_transit_effect_add()
643     *
644     * @param transit Transit object.
645     * @param axis Flipping Axis(X or Y).
646     * @param cw Flipping Direction. EINA_TRUE is clock-wise.
647     * @return Flip effect context data.
648     *
649     * @ingroup Transit
650     * @warning It is highly recommended just create a transit with this effect when
651     * the window that the objects of the transit belongs has already been created.
652     * This is because this effect needs the geometry information about the objects,
653     * and if the window was not created yet, it can get a wrong information.
654     */
655    EAPI Elm_Transit_Effect *elm_transit_effect_flip_add(Elm_Transit *transit, Elm_Transit_Effect_Flip_Axis axis, Eina_Bool cw);
656
657    /**
658     * Add the Resizable Flip Effect to Elm_Transit.
659     *
660     * @note This API is one of the facades. It creates resizable flip effect context
661     * and add it's required APIs to elm_transit_effect_add.
662     * @note This effect is applied to each pair of objects in the order they are listed
663     * in the transit list of objects. The first object in the pair will be the
664     * "front" object and the second will be the "back" object.
665     *
666     * @see elm_transit_effect_add()
667     *
668     * @param transit Transit object.
669     * @param axis Flipping Axis(X or Y).
670     * @param cw Flipping Direction. EINA_TRUE is clock-wise.
671     * @return Resizable flip effect context data.
672     *
673     * @ingroup Transit
674     * @warning It is highly recommended just create a transit with this effect when
675     * the window that the objects of the transit belongs has already been created.
676     * This is because this effect needs the geometry information about the objects,
677     * and if the window was not created yet, it can get a wrong information.
678     */
679    EAPI Elm_Transit_Effect *elm_transit_effect_resizable_flip_add(Elm_Transit *transit, Elm_Transit_Effect_Flip_Axis axis, Eina_Bool cw);
680
681    /**
682     * Add the Wipe Effect to Elm_Transit.
683     *
684     * @note This API is one of the facades. It creates wipe effect context
685     * and add it's required APIs to elm_transit_effect_add.
686     *
687     * @see elm_transit_effect_add()
688     *
689     * @param transit Transit object.
690     * @param type Wipe type. Hide or show.
691     * @param dir Wipe Direction.
692     * @return Wipe effect context data.
693     *
694     * @ingroup Transit
695     * @warning It is highly recommended just create a transit with this effect when
696     * the window that the objects of the transit belongs has already been created.
697     * This is because this effect needs the geometry information about the objects,
698     * and if the window was not created yet, it can get a wrong information.
699     */
700    EAPI Elm_Transit_Effect *elm_transit_effect_wipe_add(Elm_Transit *transit, Elm_Transit_Effect_Wipe_Type type, Elm_Transit_Effect_Wipe_Dir dir);
701
702    /**
703     * Add the Color Effect to Elm_Transit.
704     *
705     * @note This API is one of the facades. It creates color effect context
706     * and add it's required APIs to elm_transit_effect_add.
707     *
708     * @see elm_transit_effect_add()
709     *
710     * @param transit        Transit object.
711     * @param  from_r        RGB R when effect begins.
712     * @param  from_g        RGB G when effect begins.
713     * @param  from_b        RGB B when effect begins.
714     * @param  from_a        RGB A when effect begins.
715     * @param  to_r          RGB R when effect ends.
716     * @param  to_g          RGB G when effect ends.
717     * @param  to_b          RGB B when effect ends.
718     * @param  to_a          RGB A when effect ends.
719     * @return               Color effect context data.
720     *
721     * @ingroup Transit
722     */
723    EAPI Elm_Transit_Effect *elm_transit_effect_color_add(Elm_Transit *transit, unsigned int from_r, unsigned int from_g, unsigned int from_b, unsigned int from_a, unsigned int to_r, unsigned int to_g, unsigned int to_b, unsigned int to_a);
724
725    /**
726     * Add the Fade Effect to Elm_Transit.
727     *
728     * @note This API is one of the facades. It creates fade effect context
729     * and add it's required APIs to elm_transit_effect_add.
730     * @note This effect is applied to each pair of objects in the order they are listed
731     * in the transit list of objects. The first object in the pair will be the
732     * "before" object and the second will be the "after" object.
733     *
734     * @see elm_transit_effect_add()
735     *
736     * @param transit Transit object.
737     * @return Fade effect context data.
738     *
739     * @ingroup Transit
740     * @warning It is highly recommended just create a transit with this effect when
741     * the window that the objects of the transit belongs has already been created.
742     * This is because this effect needs the color information about the objects,
743     * and if the window was not created yet, it can get a wrong information.
744     */
745    EAPI Elm_Transit_Effect *elm_transit_effect_fade_add(Elm_Transit *transit);
746
747    /**
748     * Add the Blend Effect to Elm_Transit.
749     *
750     * @note This API is one of the facades. It creates blend effect context
751     * and add it's required APIs to elm_transit_effect_add.
752     * @note This effect is applied to each pair of objects in the order they are listed
753     * in the transit list of objects. The first object in the pair will be the
754     * "before" object and the second will be the "after" object.
755     *
756     * @see elm_transit_effect_add()
757     *
758     * @param transit Transit object.
759     * @return Blend effect context data.
760     *
761     * @ingroup Transit
762     * @warning It is highly recommended just create a transit with this effect when
763     * the window that the objects of the transit belongs has already been created.
764     * This is because this effect needs the color information about the objects,
765     * and if the window was not created yet, it can get a wrong information.
766     */
767    EAPI Elm_Transit_Effect *elm_transit_effect_blend_add(Elm_Transit *transit);
768
769    /**
770     * Add the Rotation Effect to Elm_Transit.
771     *
772     * @note This API is one of the facades. It creates rotation effect context
773     * and add it's required APIs to elm_transit_effect_add.
774     *
775     * @see elm_transit_effect_add()
776     *
777     * @param transit Transit object.
778     * @param from_degree Degree when effect begins.
779     * @param to_degree Degree when effect is ends.
780     * @return Rotation effect context data.
781     *
782     * @ingroup Transit
783     * @warning It is highly recommended just create a transit with this effect when
784     * the window that the objects of the transit belongs has already been created.
785     * This is because this effect needs the geometry information about the objects,
786     * and if the window was not created yet, it can get a wrong information.
787     */
788    EAPI Elm_Transit_Effect *elm_transit_effect_rotation_add(Elm_Transit *transit, float from_degree, float to_degree);
789
790    /**
791     * Add the ImageAnimation Effect to Elm_Transit.
792     *
793     * @note This API is one of the facades. It creates image animation effect context
794     * and add it's required APIs to elm_transit_effect_add.
795     * The @p images parameter is a list images paths. This list and
796     * its contents will be deleted at the end of the effect by
797     * elm_transit_effect_image_animation_context_free() function.
798     *
799     * Example:
800     * @code
801     * char buf[PATH_MAX];
802     * Eina_List *images = NULL;
803     * Elm_Transit *transi = elm_transit_add();
804     *
805     * snprintf(buf, sizeof(buf), "%s/images/icon_11.png", PACKAGE_DATA_DIR);
806     * images = eina_list_append(images, eina_stringshare_add(buf));
807     *
808     * snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
809     * images = eina_list_append(images, eina_stringshare_add(buf));
810     * elm_transit_effect_image_animation_add(transi, images);
811     *
812     * @endcode
813     *
814     * @see elm_transit_effect_add()
815     *
816     * @param transit Transit object.
817     * @param images Eina_List of images file paths. This list and
818     * its contents will be deleted at the end of the effect by
819     * elm_transit_effect_image_animation_context_free() function.
820     * @return Image Animation effect context data.
821     *
822     * @ingroup Transit
823     */
824    EAPI Elm_Transit_Effect *elm_transit_effect_image_animation_add(Elm_Transit *transit, Eina_List *images);
825    /**
826     * @}
827     */
828