diff --git a/src/lib/ecore_wl2/Ecore_Wl2.h b/src/lib/ecore_wl2/Ecore_Wl2.h index 7806f5d167..6be9c8c4a9 100644 --- a/src/lib/ecore_wl2/Ecore_Wl2.h +++ b/src/lib/ecore_wl2/Ecore_Wl2.h @@ -453,7 +453,6 @@ typedef struct _Ecore_Wl2_Surface_Interface * @li @ref Ecore_Wl2_Window_Group * @li @ref Ecore_Wl2_Output_Group * @li @ref Ecore_Wl2_Input_Group - * @li @ref Ecore_Wl2_Subsurface_Group */ /** @@ -1564,163 +1563,6 @@ EAPI void ecore_wl2_input_pointer_set(Ecore_Wl2_Input *input, struct wl_surface */ EAPI void ecore_wl2_input_cursor_from_name_set(Ecore_Wl2_Input *input, const char *cursor); -/** - * @defgroup Ecore_Wl2_Subsurface_Group Functions to manipulate subsurfaces. - * @ingroup Ecore_Wl2_Group - * - * Functions to manipulate wayland subsurfaces, using Ecore_Wl2_Subsurface. - * - * This API is intended to expose Wayland subsurface functionality, although it - * should not be necessary for most applications to use it, as soon as we have - * means to make Evas automatically switch Evas images to use subsurfaces. - * - * It can/should be used, for instance, when subsurfaces are needed to be not - * in sync with the main window surface. - */ - -/** - * Create and return a new subsurface. - * - * Create a new surface (and subsurface interface), with the parent surface - * being the one associated with the given @param win. - * - * The @param win must be visible, otherwise there will be no surface created - * for it yet. - * - * @return the allocated and initialized Ecore_Wl2_Subsurface object, or - * NULL on failure - * - * @ingroup Ecore_Wl2_Subsurface_Group - * @since 1.17 - */ -EAPI Ecore_Wl2_Subsurface *ecore_wl2_subsurface_new(Ecore_Wl2_Window *window); - -/** - * Destroy the given subsurface, as well as the surface associated with it. - * - * @param subsurface the subsurface - * - * @ingroup Ecore_Wl2_Subsurface_Group - * @since 1.17 - */ -EAPI void ecore_wl2_subsurface_del(Ecore_Wl2_Subsurface *subsurface); - -/** - * Get the wl_surface for this subsurface - * - * @param subsurface the subsurface - * - * @return the wl_surface associated with this subsurface, or NULL on failure - * - * @ingroup Ecore_Wl2_Subsurface_Group - * @since 1.17 - */ -EAPI struct wl_surface *ecore_wl2_subsurface_surface_get(Ecore_Wl2_Subsurface *subsurface); - -/** - * Set the position of this subsurface, relative to its parent surface. - * If subsurface is defined and the x, y coordinates differ from the currently - * tracked position, this also schedules a sub-surface position change. - * - * @param subsurface the subsurface - * @param x coordinate in the parent surface - * @param y coordinate in the parent surface - * - * @ingroup Ecore_Wl2_Subsurface_Group - * @since 1.17 - */ -EAPI void ecore_wl2_subsurface_position_set(Ecore_Wl2_Subsurface *subsurface, int x, int y); - -/** - * Get the position of this subsurface, relative to its parent surface. - * Coordinates will be returned in x and y if non-NULL. - * - * @param subsurface the subsurface - * @param x coordinate in the parent surface, or NULL to ignore - * @param y coordinate in the parent surface, or NULL to ignore - * - * @ingroup Ecore_Wl2_Subsurface_Group - * @since 1.17 - */ -EAPI void ecore_wl2_subsurface_position_get(Ecore_Wl2_Subsurface *subsurface, int *x, int *y); - -/** - * Place subsurface on layer above a reference surface - * - * Moves the @param subsurface to just above the reference @param - * surface, changing the z-order. The reference @param surface must - * be either a sibling or parent surface, else a protocol error will - * be generated. - * - * @param subsurface the subsurface - * @param surface the sibling reference surface - * - * @ingroup Ecore_Wl2_Subsurface_Group - * @since 1.17 - */ -EAPI void ecore_wl2_subsurface_place_above(Ecore_Wl2_Subsurface *subsurface, struct wl_surface *surface); - -/** - * Place subsurface on layer below a reference surface - * - * See ecore_wl2_subsurface_place_above. - * - * @param subsurface the subsurface - * @param surface the sibling reference surface - * - * @ingroup Ecore_Wl2_Subsurface_Group - * @since 1.17 - */ -EAPI void ecore_wl2_subsurface_place_below(Ecore_Wl2_Subsurface *subsurface, struct wl_surface *surface); - -/** - * Enables or disables sub-surface synchronization - * - * When synchronization is enabled, surface commits on the subsurface - * will be cached and only applied when the parent surface's state is - * applied. This ensures atomic updates of the parent and all of its - * synchronized sub-surfaces. - * - * When synchronization is disabled, commits will apply to the pending - * state directly without caching, just like a normal wl_surface. If - * there are already cached events when this is set, those events are - * applied simultaneously with the desync event. - * - * Attempting to enable synchronization when the subsurface already - * thinks it's sync'd, or desync when it believes its desync'd, will - * be trivially ignored and will not generate a Wayland event. - * - * See Wayland's set_desync documentation for further details and - * exceptional cases. - * - * @param subsurface the subsurface - * @param sync true to enable synchronization, false to desynchronize - * - * @ingroup Ecore_Wl2_Subsurface_Group - * @since 1.17 - */ -EAPI void ecore_wl2_subsurface_sync_set(Ecore_Wl2_Subsurface *subsurface, Eina_Bool sync); - -/** - * Set an opaque region for the given subsurface. - * - * This is an optimization hint to the compositor to allow it avoid - * redrawing content unnecessarily. Note that marking transparent - * content as opaque will cause repaint artifacts. - * - * Use a 0x0 region size to unset the opaque region. - * - * @param subsurface the subsurface - * @param x coordinate in the parent surface - * @param y coordinate in the parent surface - * @param w width to set as opaque - * @param h height to set as opaque - * - * @ingroup Ecore_Wl2_Subsurface_Group - * @since 1.17 - */ -EAPI void ecore_wl2_subsurface_opaque_region_set(Ecore_Wl2_Subsurface *subsurface, int x, int y, int w, int h); - /** * @defgroup Ecore_Wl2_Output_Group Wayland Library Output Functions * @ingroup Ecore_Wl2_Group diff --git a/src/lib/ecore_wl2/ecore_wl2_internal.h b/src/lib/ecore_wl2/ecore_wl2_internal.h index cbe1e13ef3..4edcec3cd4 100644 --- a/src/lib/ecore_wl2/ecore_wl2_internal.h +++ b/src/lib/ecore_wl2/ecore_wl2_internal.h @@ -348,6 +348,163 @@ EAPI Eina_Bool ecore_wl2_offer_supports_mime(Ecore_Wl2_Offer *offer, const char */ EAPI void ecore_wl2_offer_finish(Ecore_Wl2_Offer *offer); +/** + * @defgroup Ecore_Wl2_Subsurface_Group Functions to manipulate subsurfaces. + * @ingroup Ecore_Wl2_Group + * + * Functions to manipulate wayland subsurfaces, using Ecore_Wl2_Subsurface. + * + * This API is intended to expose Wayland subsurface functionality, although it + * should not be necessary for most applications to use it, as soon as we have + * means to make Evas automatically switch Evas images to use subsurfaces. + * + * It can/should be used, for instance, when subsurfaces are needed to be not + * in sync with the main window surface. + */ + +/** + * Create and return a new subsurface. + * + * Create a new surface (and subsurface interface), with the parent surface + * being the one associated with the given @param win. + * + * The @param win must be visible, otherwise there will be no surface created + * for it yet. + * + * @return the allocated and initialized Ecore_Wl2_Subsurface object, or + * NULL on failure + * + * @ingroup Ecore_Wl2_Subsurface_Group + * @since 1.17 + */ +EAPI Ecore_Wl2_Subsurface *ecore_wl2_subsurface_new(Ecore_Wl2_Window *window); + +/** + * Destroy the given subsurface, as well as the surface associated with it. + * + * @param subsurface the subsurface + * + * @ingroup Ecore_Wl2_Subsurface_Group + * @since 1.17 + */ +EAPI void ecore_wl2_subsurface_del(Ecore_Wl2_Subsurface *subsurface); + +/** + * Get the wl_surface for this subsurface + * + * @param subsurface the subsurface + * + * @return the wl_surface associated with this subsurface, or NULL on failure + * + * @ingroup Ecore_Wl2_Subsurface_Group + * @since 1.17 + */ +EAPI struct wl_surface *ecore_wl2_subsurface_surface_get(Ecore_Wl2_Subsurface *subsurface); + +/** + * Set the position of this subsurface, relative to its parent surface. + * If subsurface is defined and the x, y coordinates differ from the currently + * tracked position, this also schedules a sub-surface position change. + * + * @param subsurface the subsurface + * @param x coordinate in the parent surface + * @param y coordinate in the parent surface + * + * @ingroup Ecore_Wl2_Subsurface_Group + * @since 1.17 + */ +EAPI void ecore_wl2_subsurface_position_set(Ecore_Wl2_Subsurface *subsurface, int x, int y); + +/** + * Get the position of this subsurface, relative to its parent surface. + * Coordinates will be returned in x and y if non-NULL. + * + * @param subsurface the subsurface + * @param x coordinate in the parent surface, or NULL to ignore + * @param y coordinate in the parent surface, or NULL to ignore + * + * @ingroup Ecore_Wl2_Subsurface_Group + * @since 1.17 + */ +EAPI void ecore_wl2_subsurface_position_get(Ecore_Wl2_Subsurface *subsurface, int *x, int *y); + +/** + * Place subsurface on layer above a reference surface + * + * Moves the @param subsurface to just above the reference @param + * surface, changing the z-order. The reference @param surface must + * be either a sibling or parent surface, else a protocol error will + * be generated. + * + * @param subsurface the subsurface + * @param surface the sibling reference surface + * + * @ingroup Ecore_Wl2_Subsurface_Group + * @since 1.17 + */ +EAPI void ecore_wl2_subsurface_place_above(Ecore_Wl2_Subsurface *subsurface, struct wl_surface *surface); + +/** + * Place subsurface on layer below a reference surface + * + * See ecore_wl2_subsurface_place_above. + * + * @param subsurface the subsurface + * @param surface the sibling reference surface + * + * @ingroup Ecore_Wl2_Subsurface_Group + * @since 1.17 + */ +EAPI void ecore_wl2_subsurface_place_below(Ecore_Wl2_Subsurface *subsurface, struct wl_surface *surface); + +/** + * Enables or disables sub-surface synchronization + * + * When synchronization is enabled, surface commits on the subsurface + * will be cached and only applied when the parent surface's state is + * applied. This ensures atomic updates of the parent and all of its + * synchronized sub-surfaces. + * + * When synchronization is disabled, commits will apply to the pending + * state directly without caching, just like a normal wl_surface. If + * there are already cached events when this is set, those events are + * applied simultaneously with the desync event. + * + * Attempting to enable synchronization when the subsurface already + * thinks it's sync'd, or desync when it believes its desync'd, will + * be trivially ignored and will not generate a Wayland event. + * + * See Wayland's set_desync documentation for further details and + * exceptional cases. + * + * @param subsurface the subsurface + * @param sync true to enable synchronization, false to desynchronize + * + * @ingroup Ecore_Wl2_Subsurface_Group + * @since 1.17 + */ +EAPI void ecore_wl2_subsurface_sync_set(Ecore_Wl2_Subsurface *subsurface, Eina_Bool sync); + +/** + * Set an opaque region for the given subsurface. + * + * This is an optimization hint to the compositor to allow it avoid + * redrawing content unnecessarily. Note that marking transparent + * content as opaque will cause repaint artifacts. + * + * Use a 0x0 region size to unset the opaque region. + * + * @param subsurface the subsurface + * @param x coordinate in the parent surface + * @param y coordinate in the parent surface + * @param w width to set as opaque + * @param h height to set as opaque + * + * @ingroup Ecore_Wl2_Subsurface_Group + * @since 1.17 + */ +EAPI void ecore_wl2_subsurface_opaque_region_set(Ecore_Wl2_Subsurface *subsurface, int x, int y, int w, int h); + # undef EAPI # define EAPI