#ifndef _EFL_CANVAS_OUTPUT_EO_H_
#define _EFL_CANVAS_OUTPUT_EO_H_

#ifndef _EFL_CANVAS_OUTPUT_EO_CLASS_TYPE
#define _EFL_CANVAS_OUTPUT_EO_CLASS_TYPE

typedef Eo Efl_Canvas_Output;

#endif

#ifndef _EFL_CANVAS_OUTPUT_EO_TYPES
#define _EFL_CANVAS_OUTPUT_EO_TYPES


#endif
/** Efl canvas output class
 *
 * @ingroup Efl_Canvas_Output
 */
#define EFL_CANVAS_OUTPUT_CLASS efl_canvas_output_class_get()

EWAPI const Efl_Class *efl_canvas_output_class_get(void);

/**
 * @brief Sets the viewport region of the canvas that the output displays.
 *
 * This sets both the viewport region in the canvas that displays on the given
 * output, but also the viewport size will match the  output resolution 1:1.
 *
 * @param[in] x X coordinate viewport
 * @param[in] y Y coordinate viewport
 * @param[in] w Viewport width
 * @param[in] h Viewport height
 *
 * @ingroup Efl_Canvas_Output
 */
EOAPI void efl_canvas_output_view_set(Eo *obj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h);

/**
 * @brief Gets the viewport region of the canvas that the output displays.
 *
 * @param[out] x X coordinate viewport
 * @param[out] y Y coordinate viewport
 * @param[out] w Viewport width
 * @param[out] h Viewport height
 *
 * @ingroup Efl_Canvas_Output
 */
EOAPI void efl_canvas_output_view_get(const Eo *obj, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h);

/**
 * @brief Lock this output and prevent rendering any buffer associated to it.
 *
 * @return @c true on success, @c false otherwise
 *
 * @ingroup Efl_Canvas_Output
 */
EOAPI Eina_Bool efl_canvas_output_lock(Eo *obj);

/**
 * @brief Unlock this output and will rendering of this buffer during next call
 * to evas_render.
 *
 * @return @c true on success, @c false otherwise
 *
 * @ingroup Efl_Canvas_Output
 */
EOAPI Eina_Bool efl_canvas_output_unlock(Eo *obj);

/**
 * @brief Sets the engine specific output parameters for a given output.
 *
 * @param[in] info The engine parameters.
 *
 * @return @c true on success, @c false otherwise
 *
 * @ingroup Efl_Canvas_Output
 */
EOAPI Eina_Bool efl_canvas_output_engine_info_set(Eo *obj, Evas_Engine_Info *info);

/**
 * @brief Gets the engine specific output parameters for a given output.
 *
 * @return The engine parameters.
 *
 * @ingroup Efl_Canvas_Output
 */
EOAPI Evas_Engine_Info *efl_canvas_output_engine_info_get(const Eo *obj);

EWAPI extern const Efl_Event_Description _EFL_CANVAS_OUTPUT_EVENT_PIXELS_READY;

/** Called when pixels in output are ready to be used
 *
 * @ingroup Efl_Canvas_Output
 */
#define EFL_CANVAS_OUTPUT_EVENT_PIXELS_READY (&(_EFL_CANVAS_OUTPUT_EVENT_PIXELS_READY))

#endif
