efl/src/lib/elementary/elm_box_common.h

106 lines
4.3 KiB
C

/**
* @addtogroup Elm_Box
*
* @{
*/
/**
* @typedef Elm_Box_Transition
*
* Opaque handler containing the parameters to perform an animated
* transition of the layout the box uses.
*
* @see elm_box_transition_new()
* @see elm_box_layout_set()
* @see elm_box_layout_transition()
*/
typedef struct _Elm_Box_Transition Elm_Box_Transition;
/**
* Special layout function that animates the transition from one layout to another
*
* @param obj The object.
* @param priv The smart object instance data.
* @param data Data will be passed to function.
*
* Normally, when switching the layout function for a box, this will be
* reflected immediately on screen on the next render, but it's also
* possible to do this through an animated transition.
*
* This is done by creating an ::Elm_Box_Transition and setting the box
* layout to this function.
*
* For example:
* @code
* Elm_Box_Transition *t = elm_box_transition_new(1.0,
* evas_object_box_layout_vertical, // start
* NULL, // data for initial layout
* NULL, // free function for initial data
* evas_object_box_layout_horizontal, // end
* NULL, // data for final layout
* NULL, // free function for final data
* anim_end, // will be called when animation ends
* NULL); // data for anim_end function
* elm_box_layout_set(box, elm_box_layout_transition, t,
* elm_box_transition_free);
* @endcode
*
* @note This function can only be used with elm_box_layout_set(). Calling
* it directly will not have the expected results.
*
* @see elm_box_transition_new
* @see elm_box_transition_free
* @see elm_box_layout_set
*/
EAPI void elm_box_layout_transition(Evas_Object *obj, Evas_Object_Box_Data *priv, void *data);
/**
* Create a new ::Elm_Box_Transition to animate the switch of layouts
*
* If you want to animate the change from one layout to another, you need
* to set the layout function of the box to elm_box_layout_transition(),
* passing as user data to it an instance of ::Elm_Box_Transition with the
* necessary information to perform this animation. The free function to
* set for the layout is elm_box_transition_free().
*
* The parameters to create an ::Elm_Box_Transition sum up to how long
* will it be, in seconds, a layout function to describe the initial point,
* another for the final position of the children and one function to be
* called when the whole animation ends. This last function is useful to
* set the definitive layout for the box, usually the same as the end
* layout for the animation, but could be used to start another transition.
*
* @param duration The duration of the transition in seconds
* @param start_layout The layout function that will be used to start the animation
* @param start_layout_data The data to be passed the @p start_layout function
* @param start_layout_free_data Function to free @p start_layout_data
* @param end_layout The layout function that will be used to end the animation
* @param end_layout_data Data param passed to @p end_layout
* @param end_layout_free_data The data to be passed the @p end_layout function
* @param end_layout_free_data Function to free @p end_layout_data
* @param transition_end_cb Callback function called when animation ends
* @param transition_end_data Data to be passed to @p transition_end_cb
* @return An instance of ::Elm_Box_Transition
*
* @see elm_box_transition_new
* @see elm_box_layout_transition
*/
EAPI Elm_Box_Transition *elm_box_transition_new(const double duration, Evas_Object_Box_Layout start_layout, void *start_layout_data, Ecore_Cb start_layout_free_data, Evas_Object_Box_Layout end_layout, void *end_layout_data, Ecore_Cb end_layout_free_data, Ecore_Cb transition_end_cb, void *transition_end_data);
/**
* Free a Elm_Box_Transition instance created with elm_box_transition_new().
*
* This function is mostly useful as the @c free_data parameter in
* elm_box_layout_set() when elm_box_layout_transition().
*
* @param data The Elm_Box_Transition instance to be freed.
*
* @see elm_box_transition_new
* @see elm_box_layout_transition
*/
EAPI void elm_box_transition_free(void *data);
/**
* @}
*/