forked from enlightenment/efl
Merge branch 'master' into devs/hermet/lottie
This commit is contained in:
commit
fbda1a374b
|
@ -452,9 +452,7 @@ typedef struct _Ecore_Wl2_Surface_Interface
|
|||
* @li @ref Ecore_Wl2_Display_Group
|
||||
* @li @ref Ecore_Wl2_Window_Group
|
||||
* @li @ref Ecore_Wl2_Output_Group
|
||||
* @li @ref Ecore_Wl2_Dnd_Group
|
||||
* @li @ref Ecore_Wl2_Input_Group
|
||||
* @li @ref Ecore_Wl2_Subsurface_Group
|
||||
*/
|
||||
|
||||
/**
|
||||
|
@ -1136,18 +1134,6 @@ EAPI void ecore_wl2_window_type_set(Ecore_Wl2_Window *window, Ecore_Wl2_Window_T
|
|||
*/
|
||||
EAPI Ecore_Wl2_Window_Type ecore_wl2_window_type_get(Ecore_Wl2_Window *window);
|
||||
|
||||
/**
|
||||
* Find the output that a given window is on
|
||||
*
|
||||
* @param window The window to find the output for
|
||||
*
|
||||
* @return An Ecore_Wl2_Output if found, or NULL otherwise
|
||||
*
|
||||
* @ingroup Ecore_Wl2_Window_Group
|
||||
* @since 1.20
|
||||
*/
|
||||
EAPI Ecore_Wl2_Output *ecore_wl2_window_output_find(Ecore_Wl2_Window *window);
|
||||
|
||||
/**
|
||||
* Set if window rotation is supported by the window manager
|
||||
*
|
||||
|
@ -1565,256 +1551,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_Dnd_Group Wayland Library Drag-n-Drop Functions
|
||||
* @ingroup Ecore_Wl2_Group
|
||||
*
|
||||
* Functions that deal with creating, destroying, or interacting with
|
||||
* Wayland Drag-n-Drop
|
||||
*/
|
||||
|
||||
/**
|
||||
* Set the types which are supported by a possible drag and drop operation.
|
||||
* This call initializes a data source and offeres the given mimetypes
|
||||
*
|
||||
* @param input the input where to add on the data source
|
||||
* @param types a null-terminated array of mimetypes
|
||||
*
|
||||
* @ingroup Ecore_Wl2_Dnd_Group
|
||||
* @since 1.17
|
||||
*/
|
||||
EAPI void ecore_wl2_dnd_drag_types_set(Ecore_Wl2_Input *input, const char **types);
|
||||
|
||||
/**
|
||||
* Start a drag on the given input
|
||||
*
|
||||
* @param input the input to use
|
||||
* @param window the window which is the origin of the drag operation
|
||||
* @param drag_window the window which is used as window of the visible hint.
|
||||
*
|
||||
* @return The serial for the start_drag request
|
||||
*
|
||||
* @ingroup Ecore_Wl2_Dnd_Group
|
||||
* @since 1.17
|
||||
*/
|
||||
EAPI uint32_t ecore_wl2_dnd_drag_start(Ecore_Wl2_Input *input, Ecore_Wl2_Window *window, Ecore_Wl2_Window *drag_window);
|
||||
|
||||
/**
|
||||
* Call wl_data_source.set_actions on an existing source
|
||||
*
|
||||
* @param input the input to use
|
||||
*
|
||||
* @see ecore_wl2_dnd_drag_start for a more useful function.
|
||||
*
|
||||
* @ingroup Ecore_Wl2_Dnd_Group
|
||||
* @since 1.20
|
||||
*/
|
||||
EAPI void ecore_wl2_dnd_set_actions(Ecore_Wl2_Input *input);
|
||||
|
||||
/**
|
||||
* End a drag started by a call to ecore_wl2_dnd_drag_start
|
||||
*
|
||||
* @param input the input object on which the drag was started
|
||||
*
|
||||
* @ingroup Ecore_Wl2_Dnd_Group
|
||||
* @since 1.17
|
||||
*/
|
||||
EAPI void ecore_wl2_dnd_drag_end(Ecore_Wl2_Input *input);
|
||||
|
||||
/**
|
||||
* Get the offer which is currently resposible for the clipboard
|
||||
*
|
||||
* @param input the input object to use
|
||||
*
|
||||
* @ingroup Ecore_Wl2_Dnd_Group
|
||||
* @since 1.19
|
||||
*/
|
||||
EAPI Ecore_Wl2_Offer* ecore_wl2_dnd_selection_get(Ecore_Wl2_Input *input);
|
||||
|
||||
/**
|
||||
* Set the types which are available from this client
|
||||
* Later the event ECORE_WL2_EVENT_DATA_SOURCE_SEND is emitted,
|
||||
* where the caller of this api must write the data (encoded in the given mimetype) to the fd
|
||||
*
|
||||
* @param input the input to provice this types on
|
||||
* @param types a null-terminated array of mimetypes supported by the client
|
||||
*
|
||||
* @return serial of request on success, 0 on failure
|
||||
*
|
||||
* @ingroup Ecore_Wl2_Dnd_Group
|
||||
* @since 1.17
|
||||
*/
|
||||
EAPI uint32_t ecore_wl2_dnd_selection_set(Ecore_Wl2_Input *input, const char **types);
|
||||
|
||||
/**
|
||||
* Clear the selection currently setted on this input.
|
||||
*
|
||||
* @param input the input to clear
|
||||
*
|
||||
* @return serial of request on success, 0 on failure
|
||||
*
|
||||
* @ingroup Ecore_Wl2_Dnd_Group
|
||||
* @since 1.17
|
||||
*/
|
||||
EAPI uint32_t ecore_wl2_dnd_selection_clear(Ecore_Wl2_Input *input);
|
||||
|
||||
/**
|
||||
* @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
|
||||
|
@ -1863,136 +1599,6 @@ EAPI int ecore_wl2_output_transform_get(Ecore_Wl2_Output *output);
|
|||
*/
|
||||
EAPI int ecore_wl2_display_compositor_version_get(Ecore_Wl2_Display *disp);
|
||||
|
||||
/**
|
||||
* Get the actions available from the data source
|
||||
*
|
||||
* @param offer Offer object to use
|
||||
*
|
||||
* @return or´ed values from Ecore_Wl2_Drag_Action which are describing the available actions
|
||||
*
|
||||
* @ingroup Ecore_Wl2_Dnd_Group
|
||||
* @since 1.19
|
||||
*/
|
||||
EAPI Ecore_Wl2_Drag_Action ecore_wl2_offer_actions_get(Ecore_Wl2_Offer *offer);
|
||||
|
||||
/**
|
||||
* Set the actions which are supported by you
|
||||
*
|
||||
* @param offer Offer object to use
|
||||
* @param actions A or´ed value of mutliple Ecore_Wl2_Drag_Action values
|
||||
* @param action the preferred action out of the actions
|
||||
*
|
||||
* @ingroup Ecore_Wl2_Dnd_Group
|
||||
* @since 1.19
|
||||
*/
|
||||
EAPI void ecore_wl2_offer_actions_set(Ecore_Wl2_Offer *offer, Ecore_Wl2_Drag_Action actions, Ecore_Wl2_Drag_Action action);
|
||||
|
||||
/**
|
||||
* Get action which is set by either the data source or in the last call of actions_set
|
||||
*
|
||||
* @param offer Offer object to use
|
||||
*
|
||||
* @return the preferred action
|
||||
*
|
||||
* @ingroup Ecore_Wl2_Dnd_Group
|
||||
* @since 1.19
|
||||
*/
|
||||
EAPI Ecore_Wl2_Drag_Action ecore_wl2_offer_action_get(Ecore_Wl2_Offer *offer);
|
||||
|
||||
/**
|
||||
* Get the mime types which are given by the source
|
||||
*
|
||||
* @param offer the offer to query
|
||||
*
|
||||
* @return a eina array of strdup´ed strings, this array must NOT be changed or freed
|
||||
*
|
||||
* @ingroup Ecore_Wl2_Dnd_Group
|
||||
* @since 1.19
|
||||
*/
|
||||
EAPI Eina_Array* ecore_wl2_offer_mimes_get(Ecore_Wl2_Offer *offer);
|
||||
|
||||
/**
|
||||
* Set mimetypes you are accepting under this offer
|
||||
*
|
||||
* @param offer the offer to use
|
||||
*
|
||||
* @ingroup Ecore_Wl2_Dnd_Group
|
||||
* @since 1.19
|
||||
*/
|
||||
EAPI void ecore_wl2_offer_mimes_set(Ecore_Wl2_Offer *offer, Eina_Array *mimes);
|
||||
|
||||
/**
|
||||
* Accept a single mime type for an offer
|
||||
*
|
||||
* @param offer the offer to use
|
||||
* @param mime_type the mime type
|
||||
*
|
||||
* @ingroup Ecore_Wl2_Dnd_Group
|
||||
* @since 1.20
|
||||
*/
|
||||
EAPI void ecore_wl2_offer_accept(Ecore_Wl2_Offer *offer, const char *mime_type);
|
||||
|
||||
/**
|
||||
* Request the data from this offer.
|
||||
* The event ECORE_WL2_EVENT_OFFER_DATA_READY is called when the data is available.
|
||||
* There offer will be not destroyed as long as requested data is not emitted by the event.
|
||||
*
|
||||
* @param offer the offer to use
|
||||
* @param mime the mimetype to receive
|
||||
*
|
||||
* @ingroup Ecore_Wl2_Dnd_Group
|
||||
* @since 1.19
|
||||
*/
|
||||
EAPI void ecore_wl2_offer_receive(Ecore_Wl2_Offer *offer, char *mime);
|
||||
|
||||
/**
|
||||
* Request the data from this offer on an externally managed fd.
|
||||
* The event ECORE_WL2_EVENT_OFFER_DATA_READY is called when the data is available.
|
||||
* There offer will be not destroyed as long as requested data is not emitted by the event.
|
||||
*
|
||||
* @param offer the offer to use
|
||||
* @param mime the mimetype to receive
|
||||
* @param fd the fd to pass for receiving
|
||||
*
|
||||
* @ingroup Ecore_Wl2_Dnd_Group
|
||||
* @since 1.20
|
||||
*/
|
||||
EAPI void ecore_wl2_offer_proxy_receive(Ecore_Wl2_Offer *offer, const char *mime, int fd);
|
||||
|
||||
/**
|
||||
* End the use of a proxy received offer. This may invalidate the offer object
|
||||
*
|
||||
* @param offer the offer
|
||||
*
|
||||
* @ingroup Ecore_Wl2_Dnd_Group
|
||||
* @since 1.20
|
||||
*/
|
||||
EAPI void ecore_wl2_offer_proxy_receive_end(Ecore_Wl2_Offer *offer);
|
||||
|
||||
/**
|
||||
* Check if the given offer supports the given mimetype
|
||||
*
|
||||
* @param offer the offer to use
|
||||
* @param mime the mimetype to check
|
||||
*
|
||||
* @return Returns true if the mimetype is supported by this offer, false if not
|
||||
*
|
||||
* @ingroup Ecore_Wl2_Dnd_Group
|
||||
* @since 1.19
|
||||
*/
|
||||
EAPI Eina_Bool ecore_wl2_offer_supports_mime(Ecore_Wl2_Offer *offer, const char *mime);
|
||||
|
||||
/**
|
||||
* Mark this offer as finished
|
||||
* This will call the dnd_finished event on the source of the sender.
|
||||
*
|
||||
* @param offer the offer to use
|
||||
*
|
||||
* @ingroup Ecore_Wl2_Dnd_Group
|
||||
* @since 1.19
|
||||
*/
|
||||
EAPI void ecore_wl2_offer_finish(Ecore_Wl2_Offer *offer);
|
||||
|
||||
/**
|
||||
* Disable session recovery for any further connections. Must be called
|
||||
* before connecting. This is irreversible and not intended for general
|
||||
|
|
|
@ -125,6 +125,398 @@ EAPI void ecore_wl2_window_iconified_set(Ecore_Wl2_Window *window, Eina_Bool ico
|
|||
*/
|
||||
EAPI Eina_Bool ecore_wl2_window_pending_get(Ecore_Wl2_Window *window);
|
||||
|
||||
/**
|
||||
* Find the output that a given window is on
|
||||
*
|
||||
* @param window The window to find the output for
|
||||
*
|
||||
* @return An Ecore_Wl2_Output if found, or NULL otherwise
|
||||
*
|
||||
* @ingroup Ecore_Wl2_Window_Group
|
||||
* @since 1.20
|
||||
*/
|
||||
EAPI Ecore_Wl2_Output *ecore_wl2_window_output_find(Ecore_Wl2_Window *window);
|
||||
|
||||
/**
|
||||
* @defgroup Ecore_Wl2_Dnd_Group Wayland Library Drag-n-Drop Functions
|
||||
* @ingroup Ecore_Wl2_Group
|
||||
*
|
||||
* Functions that deal with creating, destroying, or interacting with
|
||||
* Wayland Drag-n-Drop
|
||||
*/
|
||||
|
||||
/**
|
||||
* Set the types which are supported by a possible drag and drop operation.
|
||||
* This call initializes a data source and offeres the given mimetypes
|
||||
*
|
||||
* @param input the input where to add on the data source
|
||||
* @param types a null-terminated array of mimetypes
|
||||
*
|
||||
* @ingroup Ecore_Wl2_Dnd_Group
|
||||
* @since 1.17
|
||||
*/
|
||||
EAPI void ecore_wl2_dnd_drag_types_set(Ecore_Wl2_Input *input, const char **types);
|
||||
|
||||
/**
|
||||
* Start a drag on the given input
|
||||
*
|
||||
* @param input the input to use
|
||||
* @param window the window which is the origin of the drag operation
|
||||
* @param drag_window the window which is used as window of the visible hint.
|
||||
*
|
||||
* @return The serial for the start_drag request
|
||||
*
|
||||
* @ingroup Ecore_Wl2_Dnd_Group
|
||||
* @since 1.17
|
||||
*/
|
||||
EAPI uint32_t ecore_wl2_dnd_drag_start(Ecore_Wl2_Input *input, Ecore_Wl2_Window *window, Ecore_Wl2_Window *drag_window);
|
||||
|
||||
/**
|
||||
* Call wl_data_source.set_actions on an existing source
|
||||
*
|
||||
* @param input the input to use
|
||||
*
|
||||
* @see ecore_wl2_dnd_drag_start for a more useful function.
|
||||
*
|
||||
* @ingroup Ecore_Wl2_Dnd_Group
|
||||
* @since 1.20
|
||||
*/
|
||||
EAPI void ecore_wl2_dnd_set_actions(Ecore_Wl2_Input *input);
|
||||
|
||||
/**
|
||||
* End a drag started by a call to ecore_wl2_dnd_drag_start
|
||||
*
|
||||
* @param input the input object on which the drag was started
|
||||
*
|
||||
* @ingroup Ecore_Wl2_Dnd_Group
|
||||
* @since 1.17
|
||||
*/
|
||||
EAPI void ecore_wl2_dnd_drag_end(Ecore_Wl2_Input *input);
|
||||
|
||||
/**
|
||||
* Get the offer which is currently resposible for the clipboard
|
||||
*
|
||||
* @param input the input object to use
|
||||
*
|
||||
* @ingroup Ecore_Wl2_Dnd_Group
|
||||
* @since 1.19
|
||||
*/
|
||||
EAPI Ecore_Wl2_Offer* ecore_wl2_dnd_selection_get(Ecore_Wl2_Input *input);
|
||||
|
||||
/**
|
||||
* Set the types which are available from this client
|
||||
* Later the event ECORE_WL2_EVENT_DATA_SOURCE_SEND is emitted,
|
||||
* where the caller of this api must write the data (encoded in the given mimetype) to the fd
|
||||
*
|
||||
* @param input the input to provice this types on
|
||||
* @param types a null-terminated array of mimetypes supported by the client
|
||||
*
|
||||
* @return serial of request on success, 0 on failure
|
||||
*
|
||||
* @ingroup Ecore_Wl2_Dnd_Group
|
||||
* @since 1.17
|
||||
*/
|
||||
EAPI uint32_t ecore_wl2_dnd_selection_set(Ecore_Wl2_Input *input, const char **types);
|
||||
|
||||
/**
|
||||
* Clear the selection currently setted on this input.
|
||||
*
|
||||
* @param input the input to clear
|
||||
*
|
||||
* @return serial of request on success, 0 on failure
|
||||
*
|
||||
* @ingroup Ecore_Wl2_Dnd_Group
|
||||
* @since 1.17
|
||||
*/
|
||||
EAPI uint32_t ecore_wl2_dnd_selection_clear(Ecore_Wl2_Input *input);
|
||||
|
||||
/**
|
||||
* Get the actions available from the data source
|
||||
*
|
||||
* @param offer Offer object to use
|
||||
*
|
||||
* @return or´ed values from Ecore_Wl2_Drag_Action which are describing the available actions
|
||||
*
|
||||
* @ingroup Ecore_Wl2_Dnd_Group
|
||||
* @since 1.19
|
||||
*/
|
||||
EAPI Ecore_Wl2_Drag_Action ecore_wl2_offer_actions_get(Ecore_Wl2_Offer *offer);
|
||||
|
||||
/**
|
||||
* Set the actions which are supported by you
|
||||
*
|
||||
* @param offer Offer object to use
|
||||
* @param actions A or´ed value of mutliple Ecore_Wl2_Drag_Action values
|
||||
* @param action the preferred action out of the actions
|
||||
*
|
||||
* @ingroup Ecore_Wl2_Dnd_Group
|
||||
* @since 1.19
|
||||
*/
|
||||
EAPI void ecore_wl2_offer_actions_set(Ecore_Wl2_Offer *offer, Ecore_Wl2_Drag_Action actions, Ecore_Wl2_Drag_Action action);
|
||||
|
||||
/**
|
||||
* Get action which is set by either the data source or in the last call of actions_set
|
||||
*
|
||||
* @param offer Offer object to use
|
||||
*
|
||||
* @return the preferred action
|
||||
*
|
||||
* @ingroup Ecore_Wl2_Dnd_Group
|
||||
* @since 1.19
|
||||
*/
|
||||
EAPI Ecore_Wl2_Drag_Action ecore_wl2_offer_action_get(Ecore_Wl2_Offer *offer);
|
||||
|
||||
/**
|
||||
* Get the mime types which are given by the source
|
||||
*
|
||||
* @param offer the offer to query
|
||||
*
|
||||
* @return a eina array of strdup´ed strings, this array must NOT be changed or freed
|
||||
*
|
||||
* @ingroup Ecore_Wl2_Dnd_Group
|
||||
* @since 1.19
|
||||
*/
|
||||
EAPI Eina_Array* ecore_wl2_offer_mimes_get(Ecore_Wl2_Offer *offer);
|
||||
|
||||
/**
|
||||
* Set mimetypes you are accepting under this offer
|
||||
*
|
||||
* @param offer the offer to use
|
||||
*
|
||||
* @ingroup Ecore_Wl2_Dnd_Group
|
||||
* @since 1.19
|
||||
*/
|
||||
EAPI void ecore_wl2_offer_mimes_set(Ecore_Wl2_Offer *offer, Eina_Array *mimes);
|
||||
|
||||
/**
|
||||
* Accept a single mime type for an offer
|
||||
*
|
||||
* @param offer the offer to use
|
||||
* @param mime_type the mime type
|
||||
*
|
||||
* @ingroup Ecore_Wl2_Dnd_Group
|
||||
* @since 1.20
|
||||
*/
|
||||
EAPI void ecore_wl2_offer_accept(Ecore_Wl2_Offer *offer, const char *mime_type);
|
||||
|
||||
/**
|
||||
* Request the data from this offer.
|
||||
* The event ECORE_WL2_EVENT_OFFER_DATA_READY is called when the data is available.
|
||||
* There offer will be not destroyed as long as requested data is not emitted by the event.
|
||||
*
|
||||
* @param offer the offer to use
|
||||
* @param mime the mimetype to receive
|
||||
*
|
||||
* @ingroup Ecore_Wl2_Dnd_Group
|
||||
* @since 1.19
|
||||
*/
|
||||
EAPI void ecore_wl2_offer_receive(Ecore_Wl2_Offer *offer, char *mime);
|
||||
|
||||
/**
|
||||
* Request the data from this offer on an externally managed fd.
|
||||
* The event ECORE_WL2_EVENT_OFFER_DATA_READY is called when the data is available.
|
||||
* There offer will be not destroyed as long as requested data is not emitted by the event.
|
||||
*
|
||||
* @param offer the offer to use
|
||||
* @param mime the mimetype to receive
|
||||
* @param fd the fd to pass for receiving
|
||||
*
|
||||
* @ingroup Ecore_Wl2_Dnd_Group
|
||||
* @since 1.20
|
||||
*/
|
||||
EAPI void ecore_wl2_offer_proxy_receive(Ecore_Wl2_Offer *offer, const char *mime, int fd);
|
||||
|
||||
/**
|
||||
* End the use of a proxy received offer. This may invalidate the offer object
|
||||
*
|
||||
* @param offer the offer
|
||||
*
|
||||
* @ingroup Ecore_Wl2_Dnd_Group
|
||||
* @since 1.20
|
||||
*/
|
||||
EAPI void ecore_wl2_offer_proxy_receive_end(Ecore_Wl2_Offer *offer);
|
||||
|
||||
/**
|
||||
* Check if the given offer supports the given mimetype
|
||||
*
|
||||
* @param offer the offer to use
|
||||
* @param mime the mimetype to check
|
||||
*
|
||||
* @return Returns true if the mimetype is supported by this offer, false if not
|
||||
*
|
||||
* @ingroup Ecore_Wl2_Dnd_Group
|
||||
* @since 1.19
|
||||
*/
|
||||
EAPI Eina_Bool ecore_wl2_offer_supports_mime(Ecore_Wl2_Offer *offer, const char *mime);
|
||||
|
||||
/**
|
||||
* Mark this offer as finished
|
||||
* This will call the dnd_finished event on the source of the sender.
|
||||
*
|
||||
* @param offer the offer to use
|
||||
*
|
||||
* @ingroup Ecore_Wl2_Dnd_Group
|
||||
* @since 1.19
|
||||
*/
|
||||
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
|
||||
|
||||
|
|
|
@ -1,50 +1,54 @@
|
|||
import efl_gfx_types;
|
||||
enum @beta Efl.Text_Font_Weight {
|
||||
[[Type of font weight.]]
|
||||
normal, [[Normal font weight.]]
|
||||
thin, [[Thin font weight.]]
|
||||
ultralight, [[Ultralight font weight.]]
|
||||
extralight, [[Extralight font weight.]]
|
||||
light, [[Light font weight.]]
|
||||
book, [[Book font weight.]]
|
||||
medium, [[Medium font weight.]]
|
||||
semibold, [[Semibold font weight.]]
|
||||
bold, [[Bold font weight.]]
|
||||
ultrabold, [[Ultrabold font weight.]]
|
||||
extrabold, [[Extrabold font weight.]]
|
||||
black, [[Black font weight.]]
|
||||
extrablack, [[Extrablack font weight.]]
|
||||
[[The weight of a particular font is the thickness of the character outlines relative to their height.
|
||||
The given numerical values follow the TrueType scale (from 100 to 900) and are approximate.
|
||||
It is up to each font to provide all of them.]]
|
||||
normal, [[Normal font weight (400).]]
|
||||
thin, [[Thin font weight (100).]]
|
||||
ultralight, [[Ultralight font weight (200).]]
|
||||
extralight, [[Extralight font weight (200).]]
|
||||
light, [[Light font weight (300).]]
|
||||
book, [[Book font weight (350).]]
|
||||
medium, [[Medium font weight (500).]]
|
||||
semibold, [[Semibold font weight (600).]]
|
||||
bold, [[Bold font weight (700).]]
|
||||
ultrabold, [[Ultrabold font weight (800).]]
|
||||
extrabold, [[Extrabold font weight (800).]]
|
||||
black, [[Black font weight (900).]]
|
||||
extrablack, [[Extrablack font weight (950).]]
|
||||
}
|
||||
|
||||
enum @beta Efl.Text_Font_Width {
|
||||
[[Type of font width.]]
|
||||
normal, [[Normal font width.]]
|
||||
[[Font width relative to its height.
|
||||
It is up to each font to provide all these widths.]]
|
||||
normal, [[Normal font width.]]
|
||||
ultracondensed, [[Ultracondensed font width.]]
|
||||
extracondensed, [[Extracondensed font width.]]
|
||||
condensed, [[Condensed font width.]]
|
||||
semicondensed, [[Semicondensed font width.]]
|
||||
semiexpanded, [[Semiexpanded font width.]]
|
||||
expanded, [[Expanded font width.]]
|
||||
extraexpanded, [[Extraexpanded font width.]]
|
||||
ultraexpanded, [[Ultraexpanded font width.]]
|
||||
condensed, [[Condensed font width.]]
|
||||
semicondensed, [[Semicondensed font width.]]
|
||||
semiexpanded, [[Semiexpanded font width.]]
|
||||
expanded, [[Expanded font width.]]
|
||||
extraexpanded, [[Extraexpanded font width.]]
|
||||
ultraexpanded, [[Ultraexpanded font width.]]
|
||||
}
|
||||
|
||||
enum @beta Efl.Text_Font_Slant {
|
||||
[[Type of font slant.]]
|
||||
normal, [[Normal font slant.]]
|
||||
oblique, [[Oblique font slant.]]
|
||||
italic, [[Italic font slant.]]
|
||||
normal, [[Normal font slant: Sets the text to the normal font (non-italicized).]]
|
||||
oblique, [[Oblique font slant: Sets the text to use a simulated version of an italic font,
|
||||
created by algorithmically slanting the normal version.]]
|
||||
italic, [[Italic font slant: Sets the text to use the italic version of the font if available.
|
||||
If not available, it will simulate italics with oblique instead.]]
|
||||
}
|
||||
|
||||
enum @beta Efl.Text_Font_Bitmap_Scalable {
|
||||
[[Scalable of bitmap fonts.
|
||||
]]
|
||||
none = 0, [[Disable scalable feature for bitmap fonts.]]
|
||||
color = (1 << 0), [[Enable scalable feature for color bitmap fonts.]]
|
||||
[[When are bitmap fonts allowed to be scaled.]]
|
||||
none = 0, [[Disable scaling for bitmap fonts.]]
|
||||
color = (1 << 0), [[Enable scaling for color bitmap fonts.]]
|
||||
}
|
||||
|
||||
interface @beta Efl.Text_Font_Properties {
|
||||
[[Font settings for text.
|
||||
[[Properties related to font handling.
|
||||
]]
|
||||
c_prefix: efl_text;
|
||||
methods {
|
||||
|
@ -72,9 +76,9 @@ interface @beta Efl.Text_Font_Properties {
|
|||
}
|
||||
|
||||
@property font_size {
|
||||
[[The font size for a given text object.
|
||||
[[The font size to use, in points.
|
||||
|
||||
This property controls the font size of a text object.
|
||||
If the specified @.font_family does not provide this particular size, it will be scaled.
|
||||
]]
|
||||
set {}
|
||||
get {}
|
||||
|
@ -112,7 +116,7 @@ interface @beta Efl.Text_Font_Properties {
|
|||
}
|
||||
|
||||
@property font_weight {
|
||||
[[Type of weight of the displayed font
|
||||
[[Type of weight (e.g. bold or normal) of the displayed font
|
||||
|
||||
Default is @Efl.Text_Font_Weight.normal.
|
||||
]]
|
||||
|
@ -122,7 +126,7 @@ interface @beta Efl.Text_Font_Properties {
|
|||
}
|
||||
|
||||
@property font_slant {
|
||||
[[Type of slant of the displayed font.
|
||||
[[Type of slant (e.g. italic or normal) of the displayed font.
|
||||
|
||||
Default is @Efl.Text_Font_Slant.normal.
|
||||
]]
|
||||
|
@ -132,7 +136,7 @@ interface @beta Efl.Text_Font_Properties {
|
|||
}
|
||||
|
||||
@property font_width {
|
||||
[[Type of width of the displayed font.
|
||||
[[Type of width (e.g. condensed, expanded or normal) of the displayed font.
|
||||
|
||||
Default is @Efl.Text_Font_Width.normal.
|
||||
]]
|
||||
|
@ -155,14 +159,14 @@ interface @beta Efl.Text_Font_Properties {
|
|||
}
|
||||
|
||||
@property font_bitmap_scalable {
|
||||
[[The bitmap fonts have fixed size glyphs for several available sizes.
|
||||
Basically, it is not scalable. But, it needs to be scalable for some use cases.
|
||||
(e.g. colorful emoji fonts)
|
||||
[[Bitmap fonts have fixed size glyphs for several available sizes.
|
||||
Other sizes need to be algorithmically scaled, resulting in blurry glyphs.
|
||||
This property controls whether scaling of non-provided sizes is allowed.
|
||||
|
||||
Default is @Efl.Text_Font_Bitmap_Scalable.none.
|
||||
]]
|
||||
values {
|
||||
scalable: Efl.Text_Font_Bitmap_Scalable; [[Scalable.]]
|
||||
scalable: Efl.Text_Font_Bitmap_Scalable; [[When should bitmap fonts be scaled.]]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
enum @beta Efl.Text_Format_Wrap {
|
||||
[[Wrapping policy of the text.]]
|
||||
[[Wrapping policy for the text.]]
|
||||
none, [[No wrapping.]]
|
||||
char, [[Wrap at character boundaries.]]
|
||||
word, [[Wrap at word boundaries.]]
|
||||
|
@ -9,11 +9,11 @@ enum @beta Efl.Text_Format_Wrap {
|
|||
}
|
||||
|
||||
enum @beta Efl.Text_Format_Horizontal_Alignment_Auto_Type {
|
||||
[[Auto-horizontal alignment setting for the text (Left-To-Right or Right-To-Left).]]
|
||||
[[Automatic horizontal alignment setting for the text (Left-To-Right or Right-To-Left).]]
|
||||
none, [[No auto-alignment rule: Horizontal Alignment is decided by @Efl.Text_Format.text_horizontal_align]]
|
||||
auto, [[Respects LTR/RTL (bidirectional) characters found inside the text content.]]
|
||||
locale, [[Respects the system's language settings.]]
|
||||
end [[Text is placed at opposite side of LTR/RTL (bidirectional) settings.]]
|
||||
opposite [[Text is placed at opposite side of LTR/RTL (bidirectional) settings.]]
|
||||
}
|
||||
|
||||
interface @beta Efl.Text_Format {
|
||||
|
@ -33,36 +33,42 @@ interface @beta Efl.Text_Format {
|
|||
]]
|
||||
values
|
||||
{
|
||||
value: double; [[Ellipsis value.]]
|
||||
value: double; [[Position of the ellipsis inside the text, from $[0.0] to $[1.0].]]
|
||||
}
|
||||
}
|
||||
|
||||
@property wrap {
|
||||
[[Wrapping policy of the text. Requires @.multiline to be $true.]]
|
||||
[[Wrapping policy for the text.
|
||||
|
||||
When text does not fit the widget in a single line, it can be automatically wrapped at
|
||||
character or word boundaries, for example.
|
||||
|
||||
Requires @.multiline to be $true.
|
||||
]]
|
||||
values {
|
||||
wrap: Efl.Text_Format_Wrap; [[Wrap mode.]]
|
||||
wrap: Efl.Text_Format_Wrap; [[Wrapping policy.]]
|
||||
}
|
||||
}
|
||||
|
||||
@property multiline {
|
||||
[[Enables text to span multiple lines.
|
||||
|
||||
|
||||
When $false, new-line characters are ignored and no text wrapping occurs.
|
||||
]]
|
||||
values {
|
||||
enabled: bool; [[$true if multiline is enabled.]]
|
||||
enabled: bool; [[$true if multiple lines should be rendered.]]
|
||||
}
|
||||
}
|
||||
|
||||
@property text_horizontal_align_auto_type {
|
||||
[[Specifies when the text's horizontal alignment should be set automatically.]]
|
||||
values {
|
||||
value: Efl.Text_Format_Horizontal_Alignment_Auto_Type; [[Alignment type.]]
|
||||
value: Efl.Text_Format_Horizontal_Alignment_Auto_Type; [[Automatic horizontal alignment type.]]
|
||||
}
|
||||
}
|
||||
|
||||
@property text_horizontal_align {
|
||||
[[Horizontal alignment of text. $[0.0] means "left"
|
||||
[[Manual horizontal alignment of text. $[0.0] means "left"
|
||||
and $[1.0] means "right".
|
||||
Setting this value also sets @.text_horizontal_align_auto_type to
|
||||
@Efl.Text_Format_Horizontal_Alignment_Auto_Type.none.
|
||||
|
@ -75,7 +81,7 @@ interface @beta Efl.Text_Format {
|
|||
}
|
||||
|
||||
@property text_vertical_align {
|
||||
[[Vertical alignment of text.$[0.0] means "top"
|
||||
[[Vertical alignment of text. $[0.0] means "top"
|
||||
and $[1.0] means "bottom"]]
|
||||
values {
|
||||
value: double; [[Alignment value between $[0.0] and $[1.0].]]
|
||||
|
@ -105,16 +111,16 @@ interface @beta Efl.Text_Format {
|
|||
}
|
||||
|
||||
@property tab_stops {
|
||||
[[Size of the tab character.]]
|
||||
[[Size (in pixels) of the tab character.]]
|
||||
values
|
||||
{
|
||||
value: int; [[Size in pixels.]]
|
||||
value: int; [[Size in pixels, greater than 1.]]
|
||||
}
|
||||
}
|
||||
|
||||
@property password {
|
||||
[[Enabling this causes all characters to be replaced by @.replacement_char.
|
||||
|
||||
|
||||
This is useful for password input boxes.
|
||||
]]
|
||||
values
|
||||
|
@ -124,13 +130,12 @@ interface @beta Efl.Text_Format {
|
|||
}
|
||||
|
||||
@property replacement_char {
|
||||
[[The character used to replace characters that can't be displayed
|
||||
[[The character used to replace characters that can't be displayed.
|
||||
|
||||
Currently only used to replace characters if @.password
|
||||
is enabled.
|
||||
Only used to replace characters if @.password is enabled.
|
||||
]]
|
||||
values {
|
||||
repch: string; [[Replacement character]]
|
||||
repch: string; [[Replacement character.]]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,70 +1,80 @@
|
|||
enum @beta Efl.Text_Style_Background_Type
|
||||
{
|
||||
[[Whether to add a background colored rectangle (background) to each line of text or not.]]
|
||||
none = 0, [[Do not use background.]]
|
||||
solid_color, [[Use solid color background.]]
|
||||
|
||||
[[Type of background to use behind each line of text.]]
|
||||
none = 0, [[Do not use background.]]
|
||||
solid_color, [[Use a solid-color rectangle as background.
|
||||
Requires @Efl.Text_Style.text_background_color.]]
|
||||
}
|
||||
|
||||
enum @beta Efl.Text_Style_Strikethrough_Type
|
||||
{
|
||||
[[Whether to add a strike-through decoration to the displayed text or not.]]
|
||||
none = 0, [[Do not use strike-through.]]
|
||||
single, [[Strikethrough with a single line.]]
|
||||
|
||||
single, [[Strike-through with a single line.
|
||||
Requires @Efl.Text_Style.text_strikethrough_color.]]
|
||||
}
|
||||
|
||||
enum @beta Efl.Text_Style_Effect_Type
|
||||
{
|
||||
[[Effect to apply to the displayed text.]]
|
||||
none = 0, [[No effect.]]
|
||||
|
||||
// colored with shadow_color
|
||||
shadow, [[Shadow effect.]]
|
||||
far_shadow, [[Far shadow effect.]]
|
||||
soft_shadow, [[Soft shadow effect.]]
|
||||
far_soft_shadow, [[Far and soft shadow effect.]]
|
||||
// colored with glow_color
|
||||
glow, [[Glow effect.]]
|
||||
// colored with outline_color
|
||||
outline, [[Outline effect.]]
|
||||
soft_outline, [[Soft outline effect.]]
|
||||
// colored with outline_color + shadow_color
|
||||
outline_shadow, [[Outline + shadow effect.]]
|
||||
outline_soft_shadow, [[Outline + soft shadow effect.]]
|
||||
none = 0, [[No effect.]]
|
||||
shadow, [[Shadow effect.
|
||||
Uses @Efl.Text_Style.text_shadow_color and @Efl.Text_Style.text_shadow_direction.]]
|
||||
far_shadow, [[Far shadow effect.
|
||||
Uses @Efl.Text_Style.text_shadow_color and @Efl.Text_Style.text_shadow_direction.]]
|
||||
soft_shadow, [[Soft shadow effect.
|
||||
Uses @Efl.Text_Style.text_shadow_color and @Efl.Text_Style.text_shadow_direction.]]
|
||||
far_soft_shadow, [[Far and soft shadow effect.
|
||||
Uses @Efl.Text_Style.text_shadow_color and @Efl.Text_Style.text_shadow_direction.]]
|
||||
glow, [[Glow effect.
|
||||
Uses @Efl.Text_Style.text_glow_color and @Efl.Text_Style.text_secondary_glow_color.]]
|
||||
outline, [[Outline effect.
|
||||
Uses @Efl.Text_Style.text_outline_color.]]
|
||||
soft_outline, [[Soft outline effect.
|
||||
Uses @Efl.Text_Style.text_outline_color.]]
|
||||
outline_shadow, [[Outline + shadow effect.
|
||||
Uses @Efl.Text_Style.text_shadow_color, @Efl.Text_Style.text_shadow_direction and
|
||||
@Efl.Text_Style.text_outline_color.]]
|
||||
outline_soft_shadow, [[Outline + soft shadow effect.
|
||||
Uses @Efl.Text_Style.text_shadow_color, @Efl.Text_Style.text_shadow_direction and
|
||||
@Efl.Text_Style.text_outline_color.]]
|
||||
}
|
||||
|
||||
enum @beta Efl.Text_Style_Shadow_Direction
|
||||
{
|
||||
[[Direction of the shadow.]]
|
||||
[[Direction of the shadow effect.]]
|
||||
bottom_right = 0, [[Shadow towards bottom right.]]
|
||||
bottom, [[Shadow towards bottom.]]
|
||||
bottom_left, [[Shadow towards bottom left.]]
|
||||
left, [[Shadow towards left.]]
|
||||
top_left, [[Shadow towards top left.]]
|
||||
top, [[Shadow towards top.]]
|
||||
top_right, [[Shadow towards top right.]]
|
||||
right, [[Shadow towards right.]]
|
||||
bottom, [[Shadow towards bottom.]]
|
||||
bottom_left, [[Shadow towards bottom left.]]
|
||||
left, [[Shadow towards left.]]
|
||||
top_left, [[Shadow towards top left.]]
|
||||
top, [[Shadow towards top.]]
|
||||
top_right, [[Shadow towards top right.]]
|
||||
right, [[Shadow towards right.]]
|
||||
}
|
||||
|
||||
enum @beta Efl.Text_Style_Underline_Type
|
||||
{
|
||||
[[Type of underline of the displayed text.]]
|
||||
[[Type of underline for the displayed text.]]
|
||||
none = 0, [[Text without underline.]]
|
||||
single, [[Underlined with a single line.]]
|
||||
double, [[Underlined with a double line.]]
|
||||
dashed, [[Underlined with a dashed line.]]
|
||||
single, [[Underlined with a single line.
|
||||
Requires @Efl.Text_Style.text_underline_color.]]
|
||||
double, [[Underlined with a double line.
|
||||
Requires @Efl.Text_Style.text_underline_color and @Efl.Text_Style.text_secondary_underline_color.]]
|
||||
dashed, [[Underlined with a dashed line.
|
||||
Requires @Efl.Text_Style.text_underline_dashed_color, @Efl.Text_Style.text_underline_dashed_width and
|
||||
@Efl.Text_Style.text_underline_dashed_gap.]]
|
||||
}
|
||||
|
||||
interface @beta Efl.Text_Style {
|
||||
[[Decorations to add to the text.
|
||||
|
||||
Decorations can be coloring, effects, underlines, strike-through etc.
|
||||
Decorations include text color, glow, outline, underline, strike-through and shadows.
|
||||
]]
|
||||
c_prefix: efl_text;
|
||||
methods {
|
||||
@property text_color {
|
||||
[[Color of text, excluding decorations like, shadow, outline or glow.]]
|
||||
[[Color of text, excluding all other decorations. By default it is invisible.]]
|
||||
values
|
||||
{
|
||||
r: ubyte; [[Red component.]]
|
||||
|
@ -75,7 +85,7 @@ interface @beta Efl.Text_Style {
|
|||
}
|
||||
|
||||
@property text_background_type {
|
||||
[[Enables rendering of a background rectangle behind each line of text.]]
|
||||
[[Type of background to use behind each line of text.]]
|
||||
values
|
||||
{
|
||||
type: Efl.Text_Style_Background_Type; [[Background type.]]
|
||||
|
@ -83,7 +93,7 @@ interface @beta Efl.Text_Style {
|
|||
}
|
||||
|
||||
@property text_background_color {
|
||||
[[Color of the background rectangle (backing) behind each line of text.]]
|
||||
[[Color of the background behind each line of text. By default it is invisible.]]
|
||||
values
|
||||
{
|
||||
r: ubyte; [[Red component.]]
|
||||
|
@ -94,7 +104,7 @@ interface @beta Efl.Text_Style {
|
|||
}
|
||||
|
||||
@property text_underline_type {
|
||||
[[Underline style for the text.]]
|
||||
[[Type of underline to use for the text.]]
|
||||
values
|
||||
{
|
||||
type: Efl.Text_Style_Underline_Type; [[Underline type.]]
|
||||
|
@ -103,7 +113,7 @@ interface @beta Efl.Text_Style {
|
|||
|
||||
@property text_underline_color
|
||||
{
|
||||
[[Color of normal underline style.]]
|
||||
[[Color of the primary underline. By default it is invisible.]]
|
||||
values
|
||||
{
|
||||
r: ubyte; [[Red component.]]
|
||||
|
@ -126,7 +136,7 @@ interface @beta Efl.Text_Style {
|
|||
@property text_underline_dashed_color
|
||||
{
|
||||
[[Color of the dashed underline. Only valid when @.text_underline_type is
|
||||
@Efl.Text_Style_Underline_Type.dashed.]]
|
||||
@Efl.Text_Style_Underline_Type.dashed. By default it is invisible.]]
|
||||
values
|
||||
{
|
||||
r: ubyte; [[Red component.]]
|
||||
|
@ -159,7 +169,7 @@ interface @beta Efl.Text_Style {
|
|||
@property text_secondary_underline_color
|
||||
{
|
||||
[[Color of the secondary underline. Only valid when @.text_underline_type is
|
||||
@Efl.Text_Style_Underline_Type.double.]]
|
||||
@Efl.Text_Style_Underline_Type.double. By default it is invisible.]]
|
||||
values
|
||||
{
|
||||
r: ubyte; [[Red component.]]
|
||||
|
@ -179,7 +189,7 @@ interface @beta Efl.Text_Style {
|
|||
|
||||
@property text_strikethrough_color
|
||||
{
|
||||
[[Color of the line striking through the text.]]
|
||||
[[Color of the line striking through the text. By default it is invisible.]]
|
||||
values
|
||||
{
|
||||
r: ubyte; [[Red component.]]
|
||||
|
@ -198,7 +208,7 @@ interface @beta Efl.Text_Style {
|
|||
}
|
||||
@property text_outline_color
|
||||
{
|
||||
[[Color of the text outline.]]
|
||||
[[Color of the text outline. By default it is invisible.]]
|
||||
values
|
||||
{
|
||||
r: ubyte; [[Red component.]]
|
||||
|
@ -210,7 +220,7 @@ interface @beta Efl.Text_Style {
|
|||
|
||||
@property text_shadow_direction
|
||||
{
|
||||
[[Direction of shadow effect.]]
|
||||
[[Direction of the shadow effect.]]
|
||||
values
|
||||
{
|
||||
type: Efl.Text_Style_Shadow_Direction; [[Shadow direction.]]
|
||||
|
@ -219,7 +229,7 @@ interface @beta Efl.Text_Style {
|
|||
|
||||
@property text_shadow_color
|
||||
{
|
||||
[[Color of the shadow.]]
|
||||
[[Color of the text shadow. By default it is invisible.]]
|
||||
values
|
||||
{
|
||||
r: ubyte; [[Red component.]]
|
||||
|
@ -231,7 +241,7 @@ interface @beta Efl.Text_Style {
|
|||
|
||||
@property text_glow_color
|
||||
{
|
||||
[[Color of the glow decoration.]]
|
||||
[[Color of the text glow. By default it is invisible.]]
|
||||
values
|
||||
{
|
||||
r: ubyte; [[Red component.]]
|
||||
|
@ -245,7 +255,8 @@ interface @beta Efl.Text_Style {
|
|||
{
|
||||
[[Color of the secondary glow decoration.
|
||||
This is the color of the inner glow (where it touches the text) which
|
||||
gradually fades into @.text_glow_color as it reaches the edge.
|
||||
gradually fades into @.text_glow_color as it reaches the outer edge.
|
||||
By default it is invisible.
|
||||
]]
|
||||
values
|
||||
{
|
||||
|
@ -264,7 +275,7 @@ interface @beta Efl.Text_Style {
|
|||
]]
|
||||
values
|
||||
{
|
||||
code: string; [[Filter code]]
|
||||
code: string; [[Filter code.]]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
|
||||
#include "Ecore_Evas.h"
|
||||
#include "Ecore_Wl2.h"
|
||||
#include "ecore_wl2_internal.h"
|
||||
#include "Ecore_Input.h"
|
||||
#include "Evas_GL.h"
|
||||
|
||||
|
|
|
@ -76,6 +76,12 @@ _text_filter_markup_prepend(Efl_Canvas_Textblock *obj, Efl_Ui_Internal_Text_Inte
|
|||
const char *fmtpre, const char *fmtpost,
|
||||
Eina_Bool clearsel, Eina_Bool changeinfo);
|
||||
|
||||
static void
|
||||
_cur_pos_copy(Efl_Text_Cursor *src, Efl_Text_Cursor *dest)
|
||||
{
|
||||
efl_text_cursor_position_set(dest, efl_text_cursor_position_get(src));
|
||||
}
|
||||
|
||||
#ifdef HAVE_ECORE_IMF
|
||||
static void
|
||||
_preedit_clear(Efl_Ui_Internal_Text_Interactive_Data *en)
|
||||
|
@ -523,12 +529,12 @@ _entry_imf_event_preedit_changed_cb(void *data, Ecore_IMF_Context *ctx EINA_UNUS
|
|||
/* set preedit start cursor */
|
||||
if (!en->preedit_start)
|
||||
en->preedit_start = efl_canvas_textblock_cursor_create(obj);
|
||||
efl_text_cursor_copy(cur, en->preedit_start);
|
||||
_cur_pos_copy(cur, en->preedit_start);
|
||||
|
||||
/* set preedit end cursor */
|
||||
if (!en->preedit_end)
|
||||
en->preedit_end = efl_canvas_textblock_cursor_create(obj);
|
||||
efl_text_cursor_copy(cur, en->preedit_end);
|
||||
_cur_pos_copy(cur, en->preedit_end);
|
||||
|
||||
preedit_end_pos = efl_text_cursor_position_get(cur);
|
||||
|
||||
|
@ -752,8 +758,8 @@ _sel_init(Efl_Text_Cursor *c, Evas_Object *o EINA_UNUSED, Efl_Ui_Internal_Text_I
|
|||
if (en->have_selection)
|
||||
return;
|
||||
|
||||
efl_text_cursor_copy(c, en->sel_start);
|
||||
efl_text_cursor_copy(c, en->sel_end);
|
||||
_cur_pos_copy(c, en->sel_start);
|
||||
_cur_pos_copy(c, en->sel_end);
|
||||
|
||||
en->have_selection = EINA_FALSE;
|
||||
if (en->selection)
|
||||
|
@ -804,7 +810,7 @@ _sel_extend(Efl_Text_Cursor *c, Evas_Object *o, Efl_Ui_Internal_Text_Interactive
|
|||
_sel_enable(c, o, en);
|
||||
if (efl_text_cursor_equal(c, en->sel_end)) return;
|
||||
|
||||
efl_text_cursor_copy(c, en->sel_end);
|
||||
_cur_pos_copy(c, en->sel_end);
|
||||
|
||||
_entry_imf_cursor_info_set(en);
|
||||
|
||||
|
@ -830,7 +836,7 @@ _sel_clear(Evas_Object *o EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en
|
|||
{
|
||||
en->have_selection = EINA_FALSE;
|
||||
Eina_Bool b_value = en->have_selection;
|
||||
efl_text_cursor_copy(en->sel_start, en->sel_end);
|
||||
_cur_pos_copy(en->sel_start, en->sel_end);
|
||||
efl_event_callback_call(o, EFL_TEXT_INTERACTIVE_EVENT_HAVE_SELECTION_CHANGED, &b_value);
|
||||
}
|
||||
}
|
||||
|
@ -1024,9 +1030,9 @@ _key_down_sel_pre(Efl_Ui_Internal_Text_Interactive *obj, Efl_Text_Cursor *cur, E
|
|||
{
|
||||
Eina_Bool sel_forward = efl_text_cursor_compare(en->sel_start, en->sel_end);
|
||||
if ((sel_forward && movement_forward) || (!sel_forward && !movement_forward))
|
||||
efl_text_cursor_copy(en->sel_end, cur);
|
||||
_cur_pos_copy(en->sel_end, cur);
|
||||
else
|
||||
efl_text_cursor_copy(en->sel_start, cur);
|
||||
_cur_pos_copy(en->sel_start, cur);
|
||||
_sel_clear(obj, en);
|
||||
}
|
||||
}
|
||||
|
@ -1207,7 +1213,7 @@ _key_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void
|
|||
// del to start of previous word
|
||||
Efl_Text_Cursor *tc = efl_canvas_textblock_cursor_create(obj);
|
||||
|
||||
efl_text_cursor_copy(tc, cur);
|
||||
_cur_pos_copy(tc, cur);
|
||||
efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_CHAR_PREV);
|
||||
efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_START);
|
||||
|
||||
|
@ -1242,7 +1248,7 @@ _key_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void
|
|||
// del to end of next word
|
||||
Efl_Text_Cursor *tc = efl_canvas_textblock_cursor_create(obj);
|
||||
|
||||
efl_text_cursor_copy(tc, cur);
|
||||
_cur_pos_copy(tc, cur);
|
||||
efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_END);
|
||||
efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_CHAR_NEXT);
|
||||
|
||||
|
@ -1484,7 +1490,7 @@ _cursor_char_coord_set(Efl_Canvas_Textblock *obj, Efl_Text_Cursor *cur, Evas_Coo
|
|||
Efl_Text_Cursor *tc;
|
||||
|
||||
tc = efl_canvas_textblock_cursor_create(obj);
|
||||
efl_text_cursor_copy(cur, tc);
|
||||
_cur_pos_copy(cur, tc);
|
||||
evas_object_geometry_get(obj, &x, &y, NULL, NULL);
|
||||
cx = canvasx - x;
|
||||
cy = canvasy - y;
|
||||
|
@ -1549,7 +1555,7 @@ _mouse_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EIN
|
|||
if (shift)
|
||||
{
|
||||
tc = efl_canvas_textblock_cursor_create(obj);
|
||||
efl_text_cursor_copy(cur, tc);
|
||||
_cur_pos_copy(cur, tc);
|
||||
if (efl_text_cursor_compare(cur, en->sel_start) < 0)
|
||||
efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_LINE_START);
|
||||
else
|
||||
|
@ -1562,7 +1568,7 @@ _mouse_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EIN
|
|||
en->selecting = EINA_FALSE;
|
||||
_sel_clear(obj, en);
|
||||
tc = efl_canvas_textblock_cursor_create(obj);
|
||||
efl_text_cursor_copy(cur, tc);
|
||||
_cur_pos_copy(cur, tc);
|
||||
efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_LINE_START);
|
||||
_sel_init(cur, obj, en);
|
||||
efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_LINE_END);
|
||||
|
@ -1575,7 +1581,7 @@ _mouse_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EIN
|
|||
if (shift)
|
||||
{
|
||||
tc = efl_canvas_textblock_cursor_create(obj);
|
||||
efl_text_cursor_copy(cur, tc);
|
||||
_cur_pos_copy(cur, tc);
|
||||
if (efl_text_cursor_compare(cur, en->sel_start) < 0)
|
||||
efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_START);
|
||||
else
|
||||
|
@ -1591,7 +1597,7 @@ _mouse_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EIN
|
|||
en->selecting = EINA_FALSE;
|
||||
_sel_clear(obj, en);
|
||||
tc = efl_canvas_textblock_cursor_create(obj);
|
||||
efl_text_cursor_copy(cur, tc);
|
||||
_cur_pos_copy(cur, tc);
|
||||
efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_START);
|
||||
_sel_init(cur, obj, en);
|
||||
efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_END);
|
||||
|
@ -1650,7 +1656,7 @@ _mouse_up_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void
|
|||
|
||||
if (en->select_allow)
|
||||
{
|
||||
efl_text_cursor_copy(en->sel_end, cur);
|
||||
_cur_pos_copy(en->sel_end, cur);
|
||||
}
|
||||
if (en->selecting)
|
||||
{
|
||||
|
@ -1690,7 +1696,7 @@ _mouse_move_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, vo
|
|||
if (en->selecting)
|
||||
{
|
||||
tc = efl_canvas_textblock_cursor_create(obj);
|
||||
efl_text_cursor_copy(cur, tc);
|
||||
_cur_pos_copy(cur, tc);
|
||||
evas_object_geometry_get(obj, &x, &y, &w, &h);
|
||||
cx = ev->cur.canvas.x - x;
|
||||
cy = ev->cur.canvas.y - y;
|
||||
|
|
|
@ -24,10 +24,15 @@ struct _Efl_Ui_Select_Model_Data
|
|||
Efl_Ui_Select_Model *last_model;
|
||||
|
||||
Efl_Ui_Select_Mode selection;
|
||||
|
||||
Eina_Bool none : 1;
|
||||
};
|
||||
|
||||
static void
|
||||
_efl_ui_select_model_apply_last_model(Eo *obj, Efl_Ui_Select_Model_Data *pd, Eo *last_model)
|
||||
{
|
||||
efl_replace(&pd->last_model, last_model);
|
||||
efl_model_properties_changed(obj, "child.selected");
|
||||
}
|
||||
|
||||
static void
|
||||
_efl_ui_select_model_child_removed(void *data, const Efl_Event *event)
|
||||
{
|
||||
|
@ -35,7 +40,7 @@ _efl_ui_select_model_child_removed(void *data, const Efl_Event *event)
|
|||
Efl_Model_Children_Event *ev = event->info;
|
||||
|
||||
if (ev->child == pd->last_model)
|
||||
efl_replace(&pd->last_model, NULL);
|
||||
_efl_ui_select_model_apply_last_model(event->object, pd, NULL);
|
||||
}
|
||||
|
||||
static Eo*
|
||||
|
@ -49,7 +54,6 @@ _efl_ui_select_model_efl_object_constructor(Eo *obj,
|
|||
efl_boolean_model_boolean_add(obj, "selected", EINA_FALSE);
|
||||
|
||||
efl_event_callback_add(obj, EFL_MODEL_EVENT_CHILD_REMOVED, _efl_ui_select_model_child_removed, pd);
|
||||
pd->none = EINA_TRUE;
|
||||
|
||||
parent = efl_parent_get(obj);
|
||||
if (efl_isa(parent, EFL_UI_SELECT_MODEL_CLASS))
|
||||
|
@ -64,7 +68,6 @@ _efl_ui_select_model_efl_object_invalidate(Eo *obj,
|
|||
{
|
||||
efl_replace(&pd->fallback_model, NULL);
|
||||
efl_replace(&pd->last_model, NULL);
|
||||
pd->none = EINA_TRUE;
|
||||
|
||||
efl_invalidate(efl_super(obj, EFL_UI_SELECT_MODEL_CLASS));
|
||||
}
|
||||
|
@ -75,7 +78,7 @@ _efl_ui_select_model_fallback(Efl_Ui_Select_Model_Data *pd)
|
|||
Eina_Value selected;
|
||||
|
||||
if (!pd->parent) return;
|
||||
if (!pd->parent->none) return;
|
||||
if (!pd->parent->last_model) return;
|
||||
if (!pd->parent->fallback_model) return;
|
||||
// I think it only make sense to trigger the fallback on single mode
|
||||
if (pd->parent->selection != EFL_UI_SELECT_MODE_SINGLE) return;
|
||||
|
@ -129,8 +132,7 @@ _commit_change(Eo *child, void *data EINA_UNUSED, const Eina_Value v)
|
|||
if (selflag)
|
||||
{
|
||||
// select case
|
||||
pd->none = EINA_FALSE;
|
||||
efl_replace(&pd->last_model, child);
|
||||
_efl_ui_select_model_apply_last_model(parent, pd, child);
|
||||
efl_event_callback_call(child, EFL_UI_SELECT_MODEL_EVENT_SELECTED, child);
|
||||
}
|
||||
else
|
||||
|
@ -139,8 +141,7 @@ _commit_change(Eo *child, void *data EINA_UNUSED, const Eina_Value v)
|
|||
// There should only be one model which represent the same data at all in memory
|
||||
if (pd->last_model == child) // direct comparison of pointer is ok
|
||||
{
|
||||
efl_replace(&pd->last_model, NULL);
|
||||
pd->none = EINA_TRUE;
|
||||
_efl_ui_select_model_apply_last_model(parent, pd, NULL);
|
||||
|
||||
// Just in case we need to refill the fallback
|
||||
_efl_ui_select_model_fallback(pd);
|
||||
|
@ -401,13 +402,12 @@ _efl_ui_select_model_efl_model_property_set(Eo *obj,
|
|||
{
|
||||
if (pd->parent->last_model == obj && !newflag)
|
||||
{
|
||||
efl_replace(&pd->last_model, NULL);
|
||||
pd->parent->none = EINA_TRUE;
|
||||
_efl_ui_select_model_apply_last_model(efl_parent_get(obj), pd->parent, NULL);
|
||||
|
||||
_efl_ui_select_model_fallback(pd);
|
||||
}
|
||||
}
|
||||
else
|
||||
else if (pd->parent->last_model)
|
||||
{
|
||||
Eo *parent;
|
||||
unsigned long selected = 0;
|
||||
|
@ -431,6 +431,10 @@ _efl_ui_select_model_efl_model_property_set(Eo *obj,
|
|||
.error = _untangle_error,
|
||||
.free = _untangle_free);
|
||||
}
|
||||
else
|
||||
{
|
||||
_efl_ui_select_model_apply_last_model(efl_parent_get(obj), pd->parent, obj);
|
||||
}
|
||||
}
|
||||
|
||||
return efl_future_then(efl_ref(obj), chain,
|
||||
|
@ -450,10 +454,10 @@ _efl_ui_select_model_efl_model_property_get(const Eo *obj, Efl_Ui_Select_Model_D
|
|||
// Last selected child
|
||||
if (eina_streq("child.selected", property))
|
||||
{
|
||||
if (pd->none)
|
||||
return eina_value_error_new(EFL_MODEL_ERROR_INCORRECT_VALUE);
|
||||
else if (pd->last_model)
|
||||
if (pd->last_model)
|
||||
return eina_value_ulong_new(efl_composite_model_index_get(pd->last_model));
|
||||
else if (pd->fallback_model)
|
||||
return eina_value_ulong_new(efl_composite_model_index_get(pd->fallback_model));
|
||||
else // Nothing selected yet, try again later
|
||||
return eina_value_error_new(EAGAIN);
|
||||
}
|
||||
|
@ -653,7 +657,7 @@ _efl_ui_select_model_efl_ui_single_selectable_fallback_selection_set(Eo *obj,
|
|||
|
||||
efl_replace(&pd->fallback_model, fallback);
|
||||
|
||||
if (!pd->none) return ;
|
||||
if (!pd->last_model) return ;
|
||||
|
||||
// When we provide a fallback, we should use it!
|
||||
index = efl_model_property_get(fallback, EFL_COMPOSITE_MODEL_CHILD_INDEX);
|
||||
|
|
|
@ -89,7 +89,7 @@ struct _Efl_Ui_Textbox_Data
|
|||
Eina_Future *primary;
|
||||
Eina_Future *clipboard;
|
||||
} sel_future;
|
||||
Eina_Bool sel_handler_enabled : 1;
|
||||
Eina_Bool sel_handles_enabled : 1;
|
||||
Eina_Bool start_handler_down : 1;
|
||||
Eina_Bool start_handler_shown : 1;
|
||||
Eina_Bool end_handler_down : 1;
|
||||
|
@ -259,7 +259,7 @@ _load_do(Evas_Object *obj)
|
|||
|
||||
if (!sd->file)
|
||||
{
|
||||
elm_object_text_set(obj, "");
|
||||
efl_text_set(obj, "");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -428,7 +428,7 @@ _update_selection_handler(Eo *obj)
|
|||
return;
|
||||
}
|
||||
|
||||
if (sd->sel_handler_enabled)
|
||||
if (sd->sel_handles_enabled)
|
||||
{
|
||||
Eina_Rect rect;
|
||||
Eina_Position2D off;
|
||||
|
@ -556,15 +556,13 @@ static void
|
|||
_dnd_enter_cb(void *data EINA_UNUSED,
|
||||
Evas_Object *obj)
|
||||
{
|
||||
elm_object_focus_set(obj, EINA_TRUE);
|
||||
efl_ui_focus_util_focus(obj);
|
||||
}
|
||||
|
||||
static void
|
||||
_dnd_leave_cb(void *data EINA_UNUSED,
|
||||
Evas_Object *obj)
|
||||
Evas_Object *obj EINA_UNUSED)
|
||||
{
|
||||
if (_elm_config->desktop_entry)
|
||||
elm_object_focus_set(obj, EINA_FALSE);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -820,7 +818,7 @@ _efl_ui_textbox_efl_ui_focus_object_on_focus_update(Eo *obj, Efl_Ui_Textbox_Data
|
|||
|
||||
if (efl_ui_focus_object_focus_get(obj))
|
||||
{
|
||||
evas_object_focus_set(sd->text_obj, EINA_TRUE);
|
||||
efl_canvas_object_key_focus_set(sd->text_obj, EINA_TRUE);
|
||||
|
||||
_edje_signal_emit(sd, "efl,action,focus", "efl");
|
||||
|
||||
|
@ -834,7 +832,7 @@ _efl_ui_textbox_efl_ui_focus_object_on_focus_update(Eo *obj, Efl_Ui_Textbox_Data
|
|||
Eo *sw = sd->text_obj;
|
||||
|
||||
_edje_signal_emit(sd, "efl,action,unfocus", "efl");
|
||||
evas_object_focus_set(sw, EINA_FALSE);
|
||||
efl_canvas_object_key_focus_set(sw, EINA_FALSE);
|
||||
|
||||
if (top && top_is_win && efl_input_text_input_panel_autoshow_get(obj))
|
||||
elm_win_keyboard_mode_set(top, ELM_WIN_KEYBOARD_OFF);
|
||||
|
@ -1886,7 +1884,7 @@ _efl_ui_textbox_efl_object_constructor(Eo *obj, Efl_Ui_Textbox_Data *sd)
|
|||
efl_text_interactive_selection_allowed_set(obj, EINA_TRUE);
|
||||
sd->drop_format = EFL_UI_SELECTION_FORMAT_MARKUP | EFL_UI_SELECTION_FORMAT_IMAGE;
|
||||
sd->last.scroll = EINA_SIZE2D(0, 0);
|
||||
sd->sel_handler_enabled = EINA_FALSE;
|
||||
sd->sel_handles_enabled = EINA_FALSE;
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
@ -2089,16 +2087,16 @@ _efl_ui_textbox_selection_get(const Eo *obj, Efl_Ui_Textbox_Data *sd EINA_UNUSED
|
|||
}
|
||||
|
||||
EOLIAN static void
|
||||
_efl_ui_textbox_selection_handler_enabled_set(Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd, Eina_Bool enabled)
|
||||
_efl_ui_textbox_selection_handles_enabled_set(Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd, Eina_Bool enabled)
|
||||
{
|
||||
if (sd->sel_handler_enabled == enabled) return;
|
||||
sd->sel_handler_enabled = enabled;
|
||||
if (sd->sel_handles_enabled == enabled) return;
|
||||
sd->sel_handles_enabled = enabled;
|
||||
}
|
||||
|
||||
EOLIAN static Eina_Bool
|
||||
_efl_ui_textbox_selection_handler_enabled_get(const Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd)
|
||||
_efl_ui_textbox_selection_handles_enabled_get(const Eo *obj EINA_UNUSED, Efl_Ui_Textbox_Data *sd)
|
||||
{
|
||||
return sd->sel_handler_enabled;
|
||||
return sd->sel_handles_enabled;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -2110,16 +2108,10 @@ _efl_ui_textbox_entry_insert(Eo *obj, Efl_Ui_Textbox_Data *sd, const char *entry
|
|||
efl_canvas_group_change(obj);
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_efl_ui_textbox_cursor_add(Eo *obj, Efl_Ui_Textbox_Data *pd, Efl_Text_Cursor *cursor)
|
||||
{
|
||||
efl_text_cursor_text_object_set(cursor, pd->text_obj, obj);
|
||||
}
|
||||
|
||||
EOLIAN static Efl_Text_Cursor *
|
||||
_efl_ui_textbox_cursor_create(Eo *obj, Efl_Ui_Textbox_Data *pd)
|
||||
{
|
||||
Eo* cursor = efl_add(EFL_TEXT_CURSOR_CLASS, pd->text_obj);
|
||||
Eo* cursor = efl_text_cursor_create(pd->text_obj);;
|
||||
efl_text_cursor_text_object_set(cursor, pd->text_obj, obj);
|
||||
return cursor;
|
||||
}
|
||||
|
@ -2173,6 +2165,17 @@ _efl_ui_textbox_select_region_set(Eo *obj, Efl_Ui_Textbox_Data *sd EINA_UNUSED,
|
|||
efl_text_cursor_position_set(sel_end, end);
|
||||
}
|
||||
|
||||
static void
|
||||
_efl_ui_textbox_select_region_get(Eo *obj, int *start, int *end)
|
||||
{
|
||||
Efl_Text_Cursor *sel_start, *sel_end;
|
||||
|
||||
efl_text_interactive_selection_cursors_get(obj, &sel_start, &sel_end);
|
||||
|
||||
if(start) *start = efl_text_cursor_position_get(sel_start);
|
||||
if(end) *end = efl_text_cursor_position_get(sel_end);
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_efl_ui_textbox_selection_cut(Eo *obj, Efl_Ui_Textbox_Data *sd)
|
||||
{
|
||||
|
@ -2264,7 +2267,7 @@ EOLIAN static void
|
|||
_efl_ui_textbox_efl_file_unload(Eo *obj, Efl_Ui_Textbox_Data *sd EINA_UNUSED)
|
||||
{
|
||||
efl_file_unload(efl_super(obj, MY_CLASS));
|
||||
elm_object_text_set(obj, "");
|
||||
efl_text_set(obj, "");
|
||||
}
|
||||
|
||||
EOLIAN static Eina_Error
|
||||
|
@ -2553,7 +2556,7 @@ _efl_ui_textbox_efl_access_text_access_selection_get(const Eo *obj, Efl_Ui_Textb
|
|||
{
|
||||
if (selection_number != 0) return;
|
||||
|
||||
elm_obj_entry_select_region_get(obj, start_offset, end_offset);
|
||||
_efl_ui_textbox_select_region_get((Eo *)obj, start_offset, end_offset);
|
||||
}
|
||||
|
||||
EOLIAN static Eina_Bool
|
||||
|
|
|
@ -6,7 +6,7 @@ class @beta Efl.Ui.Textbox extends Efl.Ui.Layout_Base implements Efl.Input.Click
|
|||
[[A flexible text widget which can be static (as a label) or editable by
|
||||
the user (as a text entry). It provides all sorts of editing facilities
|
||||
like automatic scrollbars, virtual keyboard, clipboard, configurable
|
||||
context menus or autocapitalization, for example.]]
|
||||
context menus or auto-capitalization, for example.]]
|
||||
methods {
|
||||
@property scrollable {
|
||||
[[Enable or disable scrolling in the widget.
|
||||
|
@ -16,17 +16,19 @@ class @beta Efl.Ui.Textbox extends Efl.Ui.Layout_Base implements Efl.Input.Click
|
|||
set {}
|
||||
get {}
|
||||
values {
|
||||
scroll: bool; [[$true to enable scrolling. Default is $false.]]
|
||||
scroll: bool(false); [[$true to enable scrolling.]]
|
||||
}
|
||||
}
|
||||
@property context_menu_enabled {
|
||||
[[This enables or disables the entry's contextual (longpress) menu.]]
|
||||
[[This enables or disables the widget's contextual menu, typically
|
||||
accessible through a long-press or a right-button click.
|
||||
]]
|
||||
set {
|
||||
}
|
||||
get {
|
||||
}
|
||||
values {
|
||||
enabled: bool; [[If $true, the menu is enabled.]]
|
||||
enabled: bool; [[$true to enable the contextual menu.]]
|
||||
}
|
||||
}
|
||||
@property cnp_mode {
|
||||
|
@ -45,14 +47,15 @@ class @beta Efl.Ui.Textbox extends Efl.Ui.Layout_Base implements Efl.Input.Click
|
|||
format: Efl.Ui.Selection_Format; [[Format for copy & paste.]]
|
||||
}
|
||||
}
|
||||
@property selection_handler_enabled {
|
||||
[[This enables or disables the entry's selection handlers.]]
|
||||
@property selection_handles_enabled {
|
||||
[[This enables or disables the visual handles around selected text,
|
||||
to allow simpler modification on touch screens.]]
|
||||
set {
|
||||
}
|
||||
get {
|
||||
}
|
||||
values {
|
||||
enabled: bool; [[If $true, the selection handlers are enabled.]]
|
||||
enabled: bool; [[$true to enable the selection handles.]]
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -64,25 +67,18 @@ class @beta Efl.Ui.Textbox extends Efl.Ui.Layout_Base implements Efl.Input.Click
|
|||
item_factory: Efl.Canvas.Textblock_Factory; [[Factory to create items]]
|
||||
}
|
||||
}
|
||||
cursor_add {
|
||||
[[Add cursor that will manipulate and iterate content of the text object.
|
||||
It is typically more convenient to obtain a cursor directly from the text object using @.cursor_create.]]
|
||||
params {
|
||||
cursor: Efl.Text.Cursor; [[Text cursor.]]
|
||||
}
|
||||
}
|
||||
cursor_create {
|
||||
[[Creates and returns a new cursor for the text.]]
|
||||
return: Efl.Text.Cursor @move; [[Text cursor.]]
|
||||
}
|
||||
selection_copy {
|
||||
[[This executes a "copy" action on the selected text in the entry.]]
|
||||
[[This executes a "copy" action on the selected text in the widget.]]
|
||||
}
|
||||
selection_paste {
|
||||
[[This executes a "paste" action in the entry.]]
|
||||
[[This executes a "paste" action in the widget.]]
|
||||
}
|
||||
selection_cut {
|
||||
[[This executes a "cut" action on the selected text in the entry.]]
|
||||
[[This executes a "cut" action on the selected text in the widget.]]
|
||||
}
|
||||
}
|
||||
implements {
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
# endif
|
||||
# ifdef HAVE_ELEMENTARY_WL2
|
||||
# include <Ecore_Wl2.h>
|
||||
# include "ecore_wl2_internal.h"
|
||||
# endif
|
||||
# ifdef HAVE_ELEMENTARY_DRM
|
||||
# include <Ecore_Drm2.h>
|
||||
|
|
|
@ -23,15 +23,6 @@ class @beta Efl.Canvas.Textblock extends Efl.Canvas.Object implements Efl.Text,
|
|||
is_empty: bool; [[$true if empty.]]
|
||||
}
|
||||
}
|
||||
cursor_add {
|
||||
[[Adds an existing cursor to the text object.
|
||||
If the cursor already belonged to another text object it will be reassigned to the new one.
|
||||
It is typically more convenient to obtain a cursor directly from the text object using @.cursor_create.
|
||||
]]
|
||||
params {
|
||||
cursor: Efl.Text.Cursor; [[The text cursor to use.]]
|
||||
}
|
||||
}
|
||||
cursor_create {
|
||||
[[Creates a new cursor and adds it to the text object.
|
||||
This cursor can be used to manipulate and iterate the content of the text object.
|
||||
|
@ -149,8 +140,8 @@ class @beta Efl.Canvas.Textblock extends Efl.Canvas.Object implements Efl.Text,
|
|||
Requires $underline.
|
||||
See @Efl.Text_Style.text_underline_color.
|
||||
|
||||
- $secondary_underline_color: Color code for the secondary text underline (See bottom for the complete list of
|
||||
supported codes). Only valid when $[underline=double].
|
||||
- $secondary_underline_color: Color code for the secondary text underline (See bottom for the complete list
|
||||
of supported codes). Only valid when $[underline=double].
|
||||
Default value is $[rgba(0,0,0,0)] meaning that secondary underline will not be rendered.
|
||||
See @Efl.Text_Style.text_secondary_underline_color.
|
||||
|
||||
|
@ -174,8 +165,8 @@ class @beta Efl.Canvas.Textblock extends Efl.Canvas.Object implements Efl.Text,
|
|||
Default value is $[rgba(0,0,0,0)] meaning that no glow will be rendered.
|
||||
See @Efl.Text_Style.text_glow_color.
|
||||
|
||||
- $secondary_glow_color: Color code for the secondary (inner) glow component of the text (See bottom for the complete
|
||||
list of supported codes). Only valid when the $style attribute includes a glow.
|
||||
- $secondary_glow_color: Color code for the secondary (inner) glow component of the text (See bottom for
|
||||
the complete list of supported codes). Only valid when the $style attribute includes a glow.
|
||||
Default value is $[rgba(0,0,0,0)] meaning that only the primary $glow_color will be used.
|
||||
See @Efl.Text_Style.text_secondary_glow_color.
|
||||
|
||||
|
@ -257,37 +248,37 @@ class @beta Efl.Canvas.Textblock extends Efl.Canvas.Object implements Efl.Text,
|
|||
Examples: $[style=outline], $[style=shadow,bottom_right], $[style=outline_shadow,bottom].
|
||||
See @Efl.Text_Style.text_effect_type and @Efl.Text_Style.text_shadow_direction.
|
||||
|
||||
- $tabstops: Size (in pixels) of the tab character. The value must be a number greater than one.
|
||||
- $tab_stops: Size (in pixels) of the tab character. The value must be a number greater than one.
|
||||
Default value is $[32].
|
||||
See @Efl.Text_Format.tab_stops.
|
||||
|
||||
- $linesize: Distance (in pixels) from the baseline of one line of text to the next. This is, a value of
|
||||
- $line_size: Distance (in pixels) from the baseline of one line of text to the next. This is, a value of
|
||||
$[0] would render all lines on top of each other (However, this value will be ignored if it results in
|
||||
overlapping lines of text).
|
||||
Setting this value sets $linerelsize to $[0%] (disables it).
|
||||
Setting this value sets $line_rel_size to $[0%] (disables it).
|
||||
Default value is $[0].
|
||||
|
||||
- $linerelsize: Distance (in percentage over the natural line height) from the baseline of one line of
|
||||
- $line_rel_size: Distance (in percentage over the natural line height) from the baseline of one line of
|
||||
text to the next. A value of $[100%] does not have any impact, smaller values render lines closer together
|
||||
and bigger values render them further apart.
|
||||
Setting this value sets $linesize to $[0] (disables it).
|
||||
Setting this value sets $line_size to $[0] (disables it).
|
||||
Default value is $[0%].
|
||||
|
||||
- $linegap: Additional empty space (in pixels) between the bottom of one line of text and the top of the
|
||||
next. Setting this value sets $linerelgap to $[0%] (disables it).
|
||||
- $line_gap: Additional empty space (in pixels) between the bottom of one line of text and the top of the
|
||||
next. Setting this value sets $line_rel_gap to $[0%] (disables it).
|
||||
Default value is $[0].
|
||||
See @Efl.Text_Format.line_gap.
|
||||
|
||||
- $linerelgap: Additional empty space (in percentage over the natural line height) between the bottom of
|
||||
- $line_rel_gap: Additional empty space (in percentage over the natural line height) between the bottom of
|
||||
one line of text and the top of the next.
|
||||
Setting this value sets $linegap to $[0] (disables it).
|
||||
Setting this value sets $line_gap to $[0] (disables it).
|
||||
Default value is $[0%].
|
||||
See @Efl.Text_Format.line_rel_gap.
|
||||
|
||||
- $linefill: An alternate way to specify the $linesize as a percentage of the canvas height.
|
||||
- $line_fill: An alternate way to specify the $line_size as a percentage of the canvas height.
|
||||
A value of $[100%] means that a single line fills the canvas, whereas $[25%] means that 4 lines
|
||||
fit in the same height.
|
||||
When both $linefill and $linesize are specified the one resulting in the smallest line size is used.
|
||||
When both $line_fill and $line_size are specified the one resulting in the smallest line size is used.
|
||||
Default value is $[0].
|
||||
|
||||
- $ellipsis: Controls automatic addition of ellipsis "..." to replace text which cannot be shown.
|
||||
|
|
|
@ -293,6 +293,14 @@ _evas_textblock_relayout_if_needed(Evas_Object *o);
|
|||
EAPI void efl_text_cursor_text_object_set(Eo *cursor, Eo *canvas_text_obj, Eo *text_obj);
|
||||
|
||||
|
||||
/**
|
||||
* Internally create instance of cursor object.
|
||||
*
|
||||
* @param parent the parent of the cursor object.
|
||||
*/
|
||||
EAPI Eo* efl_text_cursor_create(Eo *parent);
|
||||
|
||||
|
||||
/**
|
||||
* Internally sets cursor handle(legacy textblock cursor) into cursor object.
|
||||
*
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#include "evas_common_private.h"
|
||||
#include "evas_private.h"
|
||||
#include "efl_canvas_textblock_internal.h"
|
||||
#include "eo_internal.h"
|
||||
|
||||
#define MY_CLASS EFL_TEXT_CURSOR_CLASS
|
||||
#define MY_CLASS_NAME "Efl.Text.Cursor"
|
||||
|
@ -20,6 +21,8 @@ struct _Evas_Textblock_Selection_Iterator
|
|||
|
||||
typedef struct _Evas_Textblock_Selection_Iterator Evas_Textblock_Selection_Iterator;
|
||||
|
||||
EFL_CLASS_SIMPLE_CLASS(efl_text_cursor, "efl_text_cursor", EFL_TEXT_CURSOR_CLASS)
|
||||
|
||||
EOLIAN static void
|
||||
_efl_text_cursor_position_set(Eo *obj EINA_UNUSED, Efl_Text_Cursor_Data *pd, int position)
|
||||
{
|
||||
|
@ -102,11 +105,15 @@ _efl_text_cursor_compare(const Eo *obj EINA_UNUSED, Efl_Text_Cursor_Data *pd, co
|
|||
return evas_textblock_cursor_compare(pd->handle, efl_text_cursor_handle_get(dst));
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_efl_text_cursor_copy(const Eo *obj EINA_UNUSED, Efl_Text_Cursor_Data *pd, Efl_Text_Cursor *dst)
|
||||
static void
|
||||
_efl_text_cursor_copy(const Efl_Text_Cursor *obj, Efl_Text_Cursor *dst)
|
||||
{
|
||||
Efl_Text_Cursor_Data *pd = efl_data_scope_safe_get(obj, MY_CLASS);
|
||||
EINA_SAFETY_ON_NULL_RETURN(pd);
|
||||
|
||||
Efl_Text_Cursor_Data *pd_dest = efl_data_scope_safe_get(dst, MY_CLASS);
|
||||
EINA_SAFETY_ON_NULL_RETURN(pd_dest);
|
||||
|
||||
if (!pd->handle) return;
|
||||
|
||||
Efl_Text_Cursor_Handle *handle = evas_object_textblock_cursor_new(pd->handle->obj);
|
||||
|
@ -119,9 +126,9 @@ _efl_text_cursor_copy(const Eo *obj EINA_UNUSED, Efl_Text_Cursor_Data *pd, Efl_T
|
|||
EOLIAN static Efl_Text_Cursor *
|
||||
_efl_text_cursor_efl_duplicate_duplicate(const Eo *obj, Efl_Text_Cursor_Data *pd EINA_UNUSED)
|
||||
{
|
||||
Efl_Text_Cursor *dup = efl_new(MY_CLASS);
|
||||
Efl_Text_Cursor *dup = efl_text_cursor_create(efl_parent_get(obj));
|
||||
|
||||
efl_text_cursor_copy(obj, dup);
|
||||
_efl_text_cursor_copy(obj, dup);
|
||||
|
||||
return dup;
|
||||
}
|
||||
|
@ -436,6 +443,11 @@ efl_text_cursor_handle_get(const Eo *obj)
|
|||
return pd->handle;
|
||||
}
|
||||
|
||||
Eo* efl_text_cursor_create(Eo *parent)
|
||||
{
|
||||
return efl_add(efl_text_cursor_realized_class_get(), parent);
|
||||
}
|
||||
|
||||
void efl_text_cursor_text_object_set(Eo *cursor, Eo *canvas_text_obj, Eo *text_obj)
|
||||
{
|
||||
Efl_Text_Cursor_Data *pd = efl_data_scope_safe_get(cursor, MY_CLASS);
|
||||
|
|
|
@ -26,7 +26,7 @@ enum @beta Efl.Text.Cursor_Move_Type
|
|||
paragraph_prev [[Advances to the end of the previous paragraph.]]
|
||||
}
|
||||
|
||||
class @beta Efl.Text.Cursor extends Efl.Object implements Efl.Duplicate{
|
||||
abstract @beta Efl.Text.Cursor extends Efl.Object implements Efl.Duplicate{
|
||||
[[Cursor API.]]
|
||||
c_prefix: efl_text_cursor;
|
||||
methods {
|
||||
|
@ -112,13 +112,6 @@ class @beta Efl.Text.Cursor extends Efl.Object implements Efl.Duplicate{
|
|||
return: int; [[Difference between cursors.]]
|
||||
}
|
||||
|
||||
copy @const {
|
||||
[[Copy existing cursor to destination cursor, like position and cursor text object.]]
|
||||
params {
|
||||
dst: Efl.Text.Cursor; [[Destination Cursor.]]
|
||||
}
|
||||
}
|
||||
|
||||
move {
|
||||
[[Move the cursor.]]
|
||||
params {
|
||||
|
|
|
@ -1418,12 +1418,18 @@ static const char *strikethroughstr = NULL;
|
|||
static const char *backingstr = NULL;
|
||||
static const char *stylestr = NULL;
|
||||
static const char *tabstopsstr = NULL;
|
||||
static const char *tab_stopsstr = NULL;
|
||||
static const char *linesizestr = NULL;
|
||||
static const char *line_sizestr = NULL;
|
||||
static const char *linerelsizestr = NULL;
|
||||
static const char *line_rel_sizestr = NULL;
|
||||
static const char *linegapstr = NULL;
|
||||
static const char *line_gapstr = NULL;
|
||||
static const char *linerelgapstr = NULL;
|
||||
static const char *line_rel_gapstr = NULL;
|
||||
static const char *itemstr = NULL;
|
||||
static const char *linefillstr = NULL;
|
||||
static const char *line_fillstr = NULL;
|
||||
static const char *ellipsisstr = NULL;
|
||||
static const char *passwordstr = NULL;
|
||||
static const char *replacement_charstr = NULL;
|
||||
|
@ -1607,12 +1613,18 @@ _format_command_init(void)
|
|||
backingstr = eina_stringshare_add("backing");
|
||||
stylestr = eina_stringshare_add("style");
|
||||
tabstopsstr = eina_stringshare_add("tabstops");
|
||||
tab_stopsstr = eina_stringshare_add("tab_stops");
|
||||
linesizestr = eina_stringshare_add("linesize");
|
||||
line_sizestr = eina_stringshare_add("line_size");
|
||||
linerelsizestr = eina_stringshare_add("linerelsize");
|
||||
line_rel_sizestr = eina_stringshare_add("line_rel_size");
|
||||
linegapstr = eina_stringshare_add("linegap");
|
||||
line_gapstr = eina_stringshare_add("line_gap");
|
||||
linerelgapstr = eina_stringshare_add("linerelgap");
|
||||
line_rel_gapstr = eina_stringshare_add("line_rel_gap");
|
||||
itemstr = eina_stringshare_add("item");
|
||||
linefillstr = eina_stringshare_add("linefill");
|
||||
line_fillstr = eina_stringshare_add("line_fill");
|
||||
ellipsisstr = eina_stringshare_add("ellipsis");
|
||||
passwordstr = eina_stringshare_add("password");
|
||||
replacement_charstr = eina_stringshare_add("replacement_char");
|
||||
|
@ -1664,12 +1676,18 @@ _format_command_shutdown(void)
|
|||
eina_stringshare_del(backingstr);
|
||||
eina_stringshare_del(stylestr);
|
||||
eina_stringshare_del(tabstopsstr);
|
||||
eina_stringshare_del(tab_stopsstr);
|
||||
eina_stringshare_del(linesizestr);
|
||||
eina_stringshare_del(line_sizestr);
|
||||
eina_stringshare_del(linerelsizestr);
|
||||
eina_stringshare_del(line_rel_sizestr);
|
||||
eina_stringshare_del(linegapstr);
|
||||
eina_stringshare_del(line_gapstr);
|
||||
eina_stringshare_del(linerelgapstr);
|
||||
eina_stringshare_del(line_rel_gapstr);
|
||||
eina_stringshare_del(itemstr);
|
||||
eina_stringshare_del(linefillstr);
|
||||
eina_stringshare_del(line_fillstr);
|
||||
eina_stringshare_del(ellipsisstr);
|
||||
eina_stringshare_del(passwordstr);
|
||||
eina_stringshare_del(replacement_charstr);
|
||||
|
@ -2524,7 +2542,7 @@ _format_command(Evas_Object *eo_obj, Evas_Object_Textblock_Format *fmt, const ch
|
|||
if (*part2)
|
||||
_format_shadow_direction_set(fmt, part2, EINA_FALSE, NULL);
|
||||
}
|
||||
else if (cmd == tabstopsstr)
|
||||
else if (cmd == tabstopsstr || cmd == tab_stopsstr)
|
||||
{
|
||||
/**
|
||||
* @page evas_textblock_style_page Evas Textblock Style Options
|
||||
|
@ -2540,7 +2558,7 @@ _format_command(Evas_Object *eo_obj, Evas_Object_Textblock_Format *fmt, const ch
|
|||
fmt->tabstops = atoi(param);
|
||||
if (fmt->tabstops < 1) fmt->tabstops = 1;
|
||||
}
|
||||
else if (cmd == linesizestr)
|
||||
else if (cmd == linesizestr || cmd == line_sizestr)
|
||||
{
|
||||
/**
|
||||
* @page evas_textblock_style_page Evas Textblock Style Options
|
||||
|
@ -2556,7 +2574,7 @@ _format_command(Evas_Object *eo_obj, Evas_Object_Textblock_Format *fmt, const ch
|
|||
fmt->linesize = atoi(param);
|
||||
fmt->linerelsize = 0.0;
|
||||
}
|
||||
else if (cmd == linerelsizestr)
|
||||
else if (cmd == linerelsizestr || cmd == line_rel_sizestr)
|
||||
{
|
||||
/**
|
||||
* @page evas_textblock_style_page Evas Textblock Style Options
|
||||
|
@ -2584,7 +2602,7 @@ _format_command(Evas_Object *eo_obj, Evas_Object_Textblock_Format *fmt, const ch
|
|||
}
|
||||
}
|
||||
}
|
||||
else if (cmd == linegapstr)
|
||||
else if (cmd == linegapstr || cmd == line_gapstr)
|
||||
{
|
||||
/**
|
||||
* @page evas_textblock_style_page Evas Textblock Style Options
|
||||
|
@ -2601,7 +2619,7 @@ _format_command(Evas_Object *eo_obj, Evas_Object_Textblock_Format *fmt, const ch
|
|||
fmt->linegap = atoi(param);
|
||||
fmt->linerelgap = 0.0;
|
||||
}
|
||||
else if (cmd == linerelgapstr)
|
||||
else if (cmd == linerelgapstr || cmd == line_rel_gapstr)
|
||||
{
|
||||
/**
|
||||
* @page evas_textblock_style_page Evas Textblock Style Options
|
||||
|
@ -2644,7 +2662,7 @@ _format_command(Evas_Object *eo_obj, Evas_Object_Textblock_Format *fmt, const ch
|
|||
// itemstr == replacement object items in textblock - inline imges
|
||||
// for example
|
||||
}
|
||||
else if (cmd == linefillstr)
|
||||
else if (cmd == linefillstr || cmd == line_fillstr)
|
||||
{
|
||||
/**
|
||||
* @page evas_textblock_style_page Evas Textblock Style Options
|
||||
|
@ -3329,7 +3347,7 @@ _format_string_get(const Eo *eo_obj, Evas_Object_Textblock_Format *fmt)
|
|||
PRINTF_APPEND_COLOR(underline_colorstr, fmt->color.underline.r, fmt->color.underline.g,
|
||||
fmt->color.underline.b, fmt->color.underline.a);
|
||||
|
||||
PRINTF_APPEND_COLOR(underline2_colorstr, fmt->color.underline2.r, fmt->color.underline2.g,
|
||||
PRINTF_APPEND_COLOR(secondary_underline_colorstr, fmt->color.underline2.r, fmt->color.underline2.g,
|
||||
fmt->color.underline2.b, fmt->color.underline2.a);
|
||||
|
||||
PRINTF_APPEND_COLOR(underline_dash_colorstr, fmt->color.underline_dash.r, fmt->color.underline_dash.g,
|
||||
|
@ -3344,7 +3362,7 @@ _format_string_get(const Eo *eo_obj, Evas_Object_Textblock_Format *fmt)
|
|||
PRINTF_APPEND_COLOR(glow_colorstr, fmt->color.glow.r, fmt->color.glow.g,
|
||||
fmt->color.glow.b, fmt->color.glow.a);
|
||||
|
||||
PRINTF_APPEND_COLOR(glow2_colorstr, fmt->color.glow2.r, fmt->color.glow2.g,
|
||||
PRINTF_APPEND_COLOR(secondary_glow_colorstr, fmt->color.glow2.r, fmt->color.glow2.g,
|
||||
fmt->color.glow2.b, fmt->color.glow2.a);
|
||||
|
||||
PRINTF_APPEND_COLOR(backing_colorstr, fmt->color.backing.r, fmt->color.backing.g,
|
||||
|
@ -3496,12 +3514,12 @@ _format_string_get(const Eo *eo_obj, Evas_Object_Textblock_Format *fmt)
|
|||
else
|
||||
PRINTF_APPEND_STR(stylestr, style_value_str_1);
|
||||
|
||||
PRINTF_APPEND_INT(tabstopsstr, fmt->tabstops);
|
||||
PRINTF_APPEND_INT(linesizestr, fmt->linesize);
|
||||
PRINTF_APPEND_PERCENT_FLOAT(linerelsizestr, (fmt->linerelsize*100));
|
||||
PRINTF_APPEND_INT(linegapstr, fmt->linegap);
|
||||
PRINTF_APPEND_PERCENT_FLOAT(linerelgapstr, (fmt->linerelgap*100));
|
||||
PRINTF_APPEND_PERCENT_FLOAT(linefillstr, (fmt->linefill*100));
|
||||
PRINTF_APPEND_INT(tab_stopsstr, fmt->tabstops);
|
||||
PRINTF_APPEND_INT(line_sizestr, fmt->linesize);
|
||||
PRINTF_APPEND_PERCENT_FLOAT(line_rel_sizestr, (fmt->linerelsize*100));
|
||||
PRINTF_APPEND_INT(line_gapstr, fmt->linegap);
|
||||
PRINTF_APPEND_PERCENT_FLOAT(line_rel_gapstr, (fmt->linerelgap*100));
|
||||
PRINTF_APPEND_PERCENT_FLOAT(line_fillstr, (fmt->linefill*100));
|
||||
PRINTF_APPEND_FLOAT(ellipsisstr, fmt->ellipsis);
|
||||
PRINTF_APPEND_STR(passwordstr, (fmt->password == 0 ? "off" : "on"));
|
||||
|
||||
|
@ -8059,16 +8077,10 @@ _efl_canvas_textblock_all_styles_get(const Eo *eo_obj EINA_UNUSED, Efl_Canvas_Te
|
|||
return o->default_format.default_style_str;
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_efl_canvas_textblock_cursor_add(Eo *obj, Efl_Canvas_Textblock_Data *pd EINA_UNUSED, Efl_Text_Cursor *cursor)
|
||||
{
|
||||
efl_text_cursor_text_object_set(cursor, obj, obj);
|
||||
}
|
||||
|
||||
EOLIAN static Efl_Text_Cursor *
|
||||
_efl_canvas_textblock_cursor_create(Eo *obj, Efl_Canvas_Textblock_Data *pd EINA_UNUSED)
|
||||
{
|
||||
Eo* cursor = efl_add(EFL_TEXT_CURSOR_CLASS, obj);
|
||||
Eo* cursor = efl_text_cursor_create(obj);
|
||||
efl_text_cursor_text_object_set(cursor, obj, obj);
|
||||
return cursor;
|
||||
}
|
||||
|
@ -16781,7 +16793,7 @@ _efl_canvas_textblock_efl_text_format_text_horizontal_align_auto_type_set(Eo *ob
|
|||
{
|
||||
_FMT_SET(halign_auto, EVAS_TEXTBLOCK_ALIGN_AUTO_LOCALE);
|
||||
}
|
||||
else if (type == EFL_TEXT_FORMAT_HORIZONTAL_ALIGNMENT_AUTO_TYPE_END)
|
||||
else if (type == EFL_TEXT_FORMAT_HORIZONTAL_ALIGNMENT_AUTO_TYPE_OPPOSITE)
|
||||
{
|
||||
_FMT_SET(halign_auto, EVAS_TEXTBLOCK_ALIGN_AUTO_END);
|
||||
}
|
||||
|
@ -16799,7 +16811,7 @@ _efl_canvas_textblock_efl_text_format_text_horizontal_align_auto_type_get(const
|
|||
}
|
||||
else if (_FMT(halign_auto) == EVAS_TEXTBLOCK_ALIGN_AUTO_END)
|
||||
{
|
||||
ret = EFL_TEXT_FORMAT_HORIZONTAL_ALIGNMENT_AUTO_TYPE_END;
|
||||
ret = EFL_TEXT_FORMAT_HORIZONTAL_ALIGNMENT_AUTO_TYPE_OPPOSITE;
|
||||
}
|
||||
else if (_FMT(halign_auto) == EVAS_TEXTBLOCK_ALIGN_AUTO_LOCALE)
|
||||
{
|
||||
|
|
|
@ -29,13 +29,13 @@ interface @beta Efl.Gesture.Events
|
|||
]]
|
||||
|
||||
gesture,momentum: Efl.Canvas.Gesture_Momentum; [[Emitted when a Momentum gesture has been detected.
|
||||
A Momentum gesture consists of a quick displacement of the finger while touching the screen (or while
|
||||
holding down a mouse button).
|
||||
A Momentum gesture is any motion of the finger while touching the screen (or while
|
||||
holding down a mouse button). This gesture is also known as swipe.
|
||||
]]
|
||||
|
||||
gesture,flick: Efl.Canvas.Gesture_Flick; [[Emitted when a Flick gesture has been detected.
|
||||
A Flick gesture consists of a quick displacement of the finger while touching the screen (or while
|
||||
holding down a mouse button) followed by a release before slowing down.
|
||||
A Flick gesture consists of a quick motion of the finger while touching the screen (or while
|
||||
holding down a mouse button) with the release occurring before slowing down.
|
||||
]]
|
||||
|
||||
gesture,zoom: Efl.Canvas.Gesture_Zoom; [[Emitted when a Zoom gesture has been detected.
|
||||
|
|
|
@ -11,6 +11,12 @@
|
|||
#include "ecore_wl2_suite.h"
|
||||
#include "ecore_wl2_tests_helpers.h"
|
||||
|
||||
static Ecore_Wl2_Display *
|
||||
_display_setup(void)
|
||||
{
|
||||
return ecore_wl2_display_create(NULL);
|
||||
}
|
||||
|
||||
EFL_START_TEST(wl2_display_create)
|
||||
{
|
||||
Ecore_Wl2_Display *disp;
|
||||
|
@ -185,7 +191,12 @@ EFL_START_TEST(wl2_display_input_find_by_name)
|
|||
disp = _display_connect();
|
||||
ck_assert(disp != NULL);
|
||||
|
||||
input = ecore_wl2_display_input_find_by_name(disp, "default");
|
||||
/* NB: Enlightenment uses "seat0" here, but Weston uses "default" */
|
||||
if (getenv("E_START"))
|
||||
input = ecore_wl2_display_input_find_by_name(disp, "seat0");
|
||||
else
|
||||
input = ecore_wl2_display_input_find_by_name(disp, "default");
|
||||
|
||||
ck_assert(input != NULL);
|
||||
}
|
||||
EFL_END_TEST
|
||||
|
|
|
@ -9,15 +9,7 @@
|
|||
#include <Ecore_Wl2.h>
|
||||
|
||||
#include "ecore_wl2_suite.h"
|
||||
|
||||
static Ecore_Wl2_Display *
|
||||
_display_connect(void)
|
||||
{
|
||||
Ecore_Wl2_Display *disp;
|
||||
|
||||
disp = ecore_wl2_display_connect(NULL);
|
||||
return disp;
|
||||
}
|
||||
#include "ecore_wl2_tests_helpers.h"
|
||||
|
||||
EFL_START_TEST(wl2_input_seat_get)
|
||||
{
|
||||
|
|
|
@ -9,19 +9,11 @@
|
|||
#include <Ecore_Wl2.h>
|
||||
|
||||
#include "ecore_wl2_suite.h"
|
||||
#include "ecore_wl2_tests_helpers.h"
|
||||
|
||||
#define WIDTH 480
|
||||
#define HEIGHT 360
|
||||
|
||||
static Ecore_Wl2_Display *
|
||||
_display_connect(void)
|
||||
{
|
||||
Ecore_Wl2_Display *disp;
|
||||
|
||||
disp = ecore_wl2_display_connect(NULL);
|
||||
return disp;
|
||||
}
|
||||
|
||||
static Ecore_Wl2_Window *
|
||||
_window_create(Ecore_Wl2_Display *disp)
|
||||
{
|
||||
|
@ -92,23 +84,6 @@ EFL_START_TEST(wl2_window_rotation)
|
|||
}
|
||||
EFL_END_TEST
|
||||
|
||||
EFL_START_TEST(wl2_window_output_find)
|
||||
{
|
||||
Ecore_Wl2_Display *disp;
|
||||
Ecore_Wl2_Window *win;
|
||||
Ecore_Wl2_Output *out;
|
||||
|
||||
disp = _display_connect();
|
||||
ck_assert(disp != NULL);
|
||||
|
||||
win = _window_create(disp);
|
||||
ck_assert(win != NULL);
|
||||
|
||||
out = ecore_wl2_window_output_find(win);
|
||||
ck_assert(out != NULL);
|
||||
}
|
||||
EFL_END_TEST
|
||||
|
||||
EFL_START_TEST(wl2_window_aux_hints_supported_get)
|
||||
{
|
||||
Ecore_Wl2_Display *disp;
|
||||
|
@ -528,7 +503,6 @@ ecore_wl2_test_window(TCase *tc)
|
|||
tcase_add_test(tc, wl2_window_new);
|
||||
tcase_add_test(tc, wl2_window_surface_test);
|
||||
tcase_add_test(tc, wl2_window_rotation);
|
||||
tcase_add_test(tc, wl2_window_output_find);
|
||||
if (getenv("E_START"))
|
||||
tcase_add_test(tc, wl2_window_aux_hints_supported_get);
|
||||
tcase_add_test(tc, wl2_window_display_get);
|
||||
|
|
|
@ -3,22 +3,10 @@
|
|||
|
||||
# include <Ecore_Wl2.h>
|
||||
|
||||
static Ecore_Wl2_Display *
|
||||
_display_setup(void)
|
||||
{
|
||||
Ecore_Wl2_Display *disp;
|
||||
|
||||
disp = ecore_wl2_display_create(NULL);
|
||||
return disp;
|
||||
}
|
||||
|
||||
static Ecore_Wl2_Display *
|
||||
_display_connect(void)
|
||||
{
|
||||
Ecore_Wl2_Display *disp;
|
||||
|
||||
disp = ecore_wl2_display_connect(NULL);
|
||||
return disp;
|
||||
return ecore_wl2_display_connect(NULL);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -38,6 +38,7 @@ static const Efl_Test_Case etc[] = {
|
|||
{ "efl_ui_collection", efl_ui_test_item_container },
|
||||
{ "efl_ui_grid_container", efl_ui_test_grid_container },
|
||||
{ "efl_ui_list_container", efl_ui_test_list_container },
|
||||
{ "efl_ui_collection_view", efl_ui_test_collection_view },
|
||||
{ "efl_ui_select_model", efl_ui_test_select_model },
|
||||
{ "efl_ui_view_model", efl_ui_test_view_model },
|
||||
{ "efl_ui_group_item", efl_ui_test_group_item },
|
||||
|
|
|
@ -46,6 +46,7 @@ void efl_ui_test_spin_button(TCase *tc);
|
|||
void efl_ui_test_item_container(TCase *tc);
|
||||
void efl_ui_test_list_container(TCase *tc);
|
||||
void efl_ui_test_grid_container(TCase *tc);
|
||||
void efl_ui_test_collection_view(TCase *tc);
|
||||
void efl_ui_test_config(TCase *tc);
|
||||
void efl_ui_test_popup(TCase *tc);
|
||||
void efl_ui_test_scroller(TCase *tc);
|
||||
|
|
|
@ -0,0 +1,158 @@
|
|||
#ifdef HAVE_CONFIG_H
|
||||
# include "elementary_config.h"
|
||||
#endif
|
||||
|
||||
#include <Efl_Ui.h>
|
||||
#include "efl_ui_suite.h"
|
||||
|
||||
#define NUM_ITEMS 50
|
||||
|
||||
static Efl_Model*
|
||||
_make_model(Efl_Ui_Win *win)
|
||||
{
|
||||
Eina_Value vi;
|
||||
Efl_Generic_Model *model, *child;
|
||||
unsigned int i;
|
||||
|
||||
model = efl_add(EFL_GENERIC_MODEL_CLASS, win);
|
||||
model = efl_add(EFL_UI_VIEW_MODEL_CLASS, model,
|
||||
efl_ui_view_model_set(efl_added, model));
|
||||
eina_value_setup(&vi, EINA_VALUE_TYPE_INT);
|
||||
|
||||
efl_ui_view_model_property_string_add(model, "relative", "Relative index ${child.index}", "WRONG", "WRONG");
|
||||
efl_ui_view_model_property_string_add(model, "title", "Initial index ${initial}", "WRONG", "WRONG");
|
||||
|
||||
|
||||
for (i = 0; i < (NUM_ITEMS); i++)
|
||||
{
|
||||
child = efl_model_child_add(model);
|
||||
eina_value_set(&vi, i);
|
||||
efl_model_property_set(child, "initial", &vi);
|
||||
}
|
||||
|
||||
eina_value_flush(&vi);
|
||||
return model;
|
||||
}
|
||||
|
||||
static Eina_Value
|
||||
_quit(Eo *obj, void *data EINA_UNUSED, const Eina_Value v)
|
||||
{
|
||||
efl_loop_quit(efl_loop_get(obj), v);
|
||||
return v;
|
||||
}
|
||||
|
||||
static Eina_Value
|
||||
_children_get(Eo *obj EINA_UNUSED, void *data EINA_UNUSED, const Eina_Value v)
|
||||
{
|
||||
Efl_Model *child;
|
||||
Eina_Future **all;
|
||||
unsigned int i, len;
|
||||
|
||||
all = calloc(1 + 1, sizeof(Eina_Future*));
|
||||
if (!all) return eina_value_error_init(ENOMEM);
|
||||
|
||||
EINA_VALUE_ARRAY_FOREACH(&v, len, i, child)
|
||||
{
|
||||
Eina_Value *rel_val, *title_val;
|
||||
char *relative, *title;
|
||||
if (i != 5) continue;
|
||||
rel_val = efl_model_property_get(child, "relative");
|
||||
title_val = efl_model_property_get(child, "title");
|
||||
relative = eina_value_to_string(rel_val);
|
||||
title = eina_value_to_string(title_val);
|
||||
|
||||
ck_assert(eina_streq(relative, "Relative index 5"));
|
||||
ck_assert(eina_streq(title, "Initial index 5"));
|
||||
free(relative);
|
||||
free(title);
|
||||
break;
|
||||
}
|
||||
return EINA_VALUE_EMPTY;
|
||||
}
|
||||
|
||||
EFL_START_TEST(test_efl_ui_collection_view_basic)
|
||||
{
|
||||
Efl_Ui_Win *win;
|
||||
Efl_Model *model;
|
||||
Efl_Ui_List_View *lv;
|
||||
Efl_Ui_Factory *fl;
|
||||
Eina_Future *f;
|
||||
int count_realize = 0;
|
||||
int count_unrealize = 0;
|
||||
|
||||
win = win_add();
|
||||
efl_gfx_entity_size_set(win, EINA_SIZE2D(100, 100));
|
||||
|
||||
model = _make_model(win);
|
||||
fl = efl_add(EFL_UI_LAYOUT_FACTORY_CLASS, win,
|
||||
efl_ui_property_bind(efl_added, "text", "title"),
|
||||
efl_ui_widget_factory_item_class_set(efl_added, EFL_UI_LIST_DEFAULT_ITEM_CLASS));
|
||||
|
||||
lv = efl_add(EFL_UI_LIST_VIEW_CLASS, win,
|
||||
efl_ui_collection_view_factory_set(efl_added, fl),
|
||||
efl_ui_view_model_set(efl_added, model),
|
||||
efl_event_callback_add(efl_added, EFL_UI_COLLECTION_VIEW_EVENT_ITEM_REALIZED,
|
||||
(void*)event_callback_that_increments_an_int_when_called, &count_realize),
|
||||
efl_event_callback_add(efl_added, EFL_UI_COLLECTION_VIEW_EVENT_ITEM_UNREALIZED,
|
||||
(void*)event_callback_that_increments_an_int_when_called, &count_unrealize)
|
||||
);
|
||||
efl_content_set(win, lv);
|
||||
|
||||
get_me_to_those_events(lv);
|
||||
ck_assert_int_gt(count_realize, 0);
|
||||
/* FIXME: this should eventually be eq(0) */
|
||||
ck_assert_int_gt(count_unrealize, 0);
|
||||
|
||||
f = efl_model_children_slice_get(lv, 0, efl_model_children_count_get(lv));
|
||||
f = efl_future_then(lv, f, .success_type = EINA_VALUE_TYPE_ARRAY, .success = _children_get);
|
||||
ecore_main_loop_iterate();
|
||||
}
|
||||
EFL_END_TEST
|
||||
|
||||
EFL_START_TEST(test_efl_ui_collection_view_select)
|
||||
{
|
||||
Efl_Ui_Win *win;
|
||||
Efl_Model *model;
|
||||
Efl_Ui_List_View *lv;
|
||||
Efl_Ui_Factory *fl;
|
||||
Eina_Value *sel_val;
|
||||
unsigned long sel = 10000;
|
||||
|
||||
win = win_add();
|
||||
efl_gfx_entity_size_set(win, EINA_SIZE2D(100, 100));
|
||||
|
||||
model = _make_model(win);
|
||||
model = efl_add(EFL_UI_SELECT_MODEL_CLASS, efl_main_loop_get(), efl_ui_view_model_set(efl_added, model));
|
||||
fl = efl_add(EFL_UI_LAYOUT_FACTORY_CLASS, win,
|
||||
efl_ui_property_bind(efl_added, "text", "title"),
|
||||
efl_ui_widget_factory_item_class_set(efl_added, EFL_UI_LIST_DEFAULT_ITEM_CLASS));
|
||||
|
||||
lv = efl_add(EFL_UI_LIST_VIEW_CLASS, win,
|
||||
efl_ui_collection_view_factory_set(efl_added, fl),
|
||||
efl_ui_view_model_set(efl_added, model)
|
||||
);
|
||||
efl_content_set(win, lv);
|
||||
|
||||
get_me_to_those_events(lv);
|
||||
|
||||
/* nothing selected yet */
|
||||
sel_val = efl_model_property_get(model, "child.selected");
|
||||
ck_assert(eina_value_type_get(sel_val) == EINA_VALUE_TYPE_ERROR);
|
||||
|
||||
efl_future_then(model, efl_model_property_ready_get(model, "child.selected"), .success = _quit);
|
||||
|
||||
click_object_at(lv, 50, 5);
|
||||
ecore_main_loop_begin();
|
||||
|
||||
sel_val = efl_model_property_get(model, "child.selected");
|
||||
ck_assert(eina_value_type_get(sel_val) == EINA_VALUE_TYPE_ULONG);
|
||||
ck_assert(eina_value_ulong_get(sel_val, &sel));
|
||||
ck_assert_int_eq(sel, 0);
|
||||
}
|
||||
EFL_END_TEST
|
||||
|
||||
void efl_ui_test_collection_view(TCase *tc)
|
||||
{
|
||||
tcase_add_test(tc, test_efl_ui_collection_view_basic);
|
||||
tcase_add_test(tc, test_efl_ui_collection_view_select);
|
||||
}
|
|
@ -102,8 +102,11 @@ EFL_START_TEST(efl_test_select_model)
|
|||
model = efl_add_ref(EFL_UI_SELECT_MODEL_CLASS, efl_main_loop_get(),
|
||||
efl_ui_view_model_set(efl_added, base_model));
|
||||
ck_assert(!!model);
|
||||
future = efl_model_property_set(model, "child.selected", eina_value_int_new(2));
|
||||
|
||||
future = efl_model_property_ready_get(model, "child.selected");
|
||||
eina_future_then(future, _wait_propagate, NULL, NULL);
|
||||
|
||||
efl_model_property_set(model, "child.selected", eina_value_int_new(2));
|
||||
ecore_main_loop_begin();
|
||||
|
||||
future = efl_model_children_slice_get(model, 0, efl_model_children_count_get(model));
|
||||
|
@ -120,6 +123,8 @@ EFL_START_TEST(efl_test_select_model)
|
|||
EINA_ITERATOR_FOREACH(it, index)
|
||||
fail_if(*index == 2);
|
||||
eina_iterator_free(it);
|
||||
|
||||
efl_model_property_set(model, "child.selected", eina_value_int_new(1));
|
||||
}
|
||||
EFL_END_TEST
|
||||
|
||||
|
|
|
@ -150,6 +150,7 @@ efl_ui_suite_src = [
|
|||
'efl_ui_test_slider.c',
|
||||
'efl_ui_test_collection_common.c',
|
||||
'efl_ui_test_collection.c',
|
||||
'efl_ui_test_collection_view.c',
|
||||
'efl_ui_test_list_collection.c',
|
||||
'efl_ui_test_grid_collection.c',
|
||||
'efl_ui_test_position_manager_common.c',
|
||||
|
|
|
@ -4515,14 +4515,12 @@ EFL_START_TEST(efl_canvas_textblock_cursor)
|
|||
efl_text_cursor_line_number_set(cur_obj, 0);
|
||||
ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 0);
|
||||
|
||||
Eo * cursor1 = efl_add(EFL_TEXT_CURSOR_CLASS, txt);
|
||||
pos = efl_text_cursor_position_get(cursor1);
|
||||
ck_assert_int_eq(pos, -1);
|
||||
efl_text_cursor_position_set(cursor1, 10);
|
||||
pos = efl_text_cursor_position_get(cursor1);
|
||||
ck_assert_int_eq(pos, -1);
|
||||
Eo * cursor_temp = efl_duplicate(cur_obj);
|
||||
ck_assert_ptr_ne(cursor_temp, NULL);
|
||||
efl_del(cursor_temp);
|
||||
cursor_temp = NULL;
|
||||
|
||||
efl_canvas_textblock_cursor_add(txt, cursor1);
|
||||
Eo * cursor1 = efl_canvas_textblock_cursor_create(txt);
|
||||
efl_text_cursor_position_set(cursor1, 1);
|
||||
pos = efl_text_cursor_position_get(cursor1);
|
||||
ck_assert_int_eq(pos, 1);
|
||||
|
@ -4633,13 +4631,12 @@ EFL_START_TEST(efl_canvas_textblock_cursor)
|
|||
ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 0);
|
||||
#endif
|
||||
|
||||
Eo *nCur = efl_add(EFL_TEXT_CURSOR_CLASS, txt), *nCur2 = efl_add(EFL_TEXT_CURSOR_CLASS, txt), *nCur3 = efl_add(EFL_TEXT_CURSOR_CLASS, txt);
|
||||
Eo *nCur = efl_canvas_textblock_cursor_create(txt);
|
||||
Eo *nCur2 = efl_canvas_textblock_cursor_create(txt);
|
||||
Eo *nCur3 = efl_canvas_textblock_cursor_create(txt);
|
||||
efl_text_markup_set(txt, "Hello World<ps/>This is EFL<br/>Enlightenment");
|
||||
efl_text_cursor_position_set(cur_obj, 0);
|
||||
efl_text_cursor_copy(cur_obj, nCur);
|
||||
ck_assert_ptr_ne(nCur, NULL);
|
||||
efl_text_cursor_copy(cur_obj, nCur2);
|
||||
efl_text_cursor_copy(cur_obj, nCur3);
|
||||
ck_assert_ptr_ne(nCur2, NULL);
|
||||
ck_assert_ptr_ne(nCur3, NULL);
|
||||
|
||||
|
@ -4655,7 +4652,7 @@ EFL_START_TEST(efl_canvas_textblock_cursor)
|
|||
ck_assert(efl_text_cursor_move(nCur, EFL_TEXT_CURSOR_MOVE_TYPE_PARAGRAPH_NEXT));
|
||||
ck_assert_int_lt(efl_text_cursor_compare(cur_obj, nCur), 0);
|
||||
ck_assert_int_gt(efl_text_cursor_compare(nCur, cur_obj), 0);
|
||||
efl_text_cursor_copy(nCur, nCur2);
|
||||
efl_text_cursor_position_set(nCur2, efl_text_cursor_position_get(nCur));
|
||||
ck_assert_int_lt(efl_text_cursor_compare(cur_obj, nCur2), 0);
|
||||
ck_assert_int_gt(efl_text_cursor_compare(nCur2, cur_obj), 0);
|
||||
ck_assert(!efl_text_cursor_equal(nCur2, nCur3));
|
||||
|
@ -4896,7 +4893,7 @@ EFL_START_TEST(efl_canvas_textblock_style)
|
|||
|
||||
// from functions
|
||||
fail_if(!strstr(style, "font_weight=extrabold"));
|
||||
fail_if(!strstr(style, "tabstops=20"));
|
||||
fail_if(!strstr(style, "tab_stops=20"));
|
||||
fail_if(!strstr(style, "color=rgba(144,225,53,255)"));
|
||||
fail_if(!strstr(style, "password=off"));
|
||||
efl_text_password_set(txt, EINA_TRUE);
|
||||
|
|
Loading…
Reference in New Issue