Merge branch 'master' into devs/hermet/lottie

This commit is contained in:
Hermet Park 2019-09-04 10:31:40 +09:00
commit 1191388b78
129 changed files with 1321 additions and 868 deletions

190
NEWS
View File

@ -1,7 +1,195 @@
==========
EFL 1.22.0
EFL 1.23.0
==========
Changes since 1.22.0:
---------------------
Features:
* ecore-drm2: Add background_color to crtc atomic properties
* ecore-drm2: Fill in crtc background color (if supported) during atomic commits
* ecore-drm2: Add API function to set crtc background color
* eolian: remove @nullable keyword
* ecore-drm2: Add API to check if vblank is supported
* eolian: remove param @nonull
* eolian: rename @warn_unused and its associated API
* eolian: initial versioning implementation
* evas: enable setting any object as a clipper
* eina/hash: add direct variants of list append/prepend functions
* edje: improve user-defined data caching to handle data before file is set
* edje: Add support for map zoom to use other part center.
* efl_ui_textpath: introduce efl_ui_textpath_circular_set() interface.
* efl_ui/layout_base: add "finger_size_multiplier" property (T8059)
* evas: add 'has_fixed_size' property for canvas objects
* efl/hints: add restricted and combined max size hints (T8122)
* efl_ui_animation_view: introduce a new widget for controlling vector animation.
* efl_ui: add scrollable_content mixin
Fixes:
* remove vpath test for user dir the test was broken and fixing is insane (T7728)
* tests - fix check header to always include eina due to windows
* tests - remove one of the eina strtod tests as libc is failing
* ecore_imf: do not loop forever on shutdown when there is no more a display
* efl_ui_list: fix to delete sub objects in efl_object_invalidate
* efl_ui_widget: Fix disabled set calling without meaning. (T7799)
* evas - fix crash/junk pixel content but with tiled rotate at 270 + neon
* ecore-drm2: Make atomic property values support uint64_t
* evas image: check format more strong way for wbmp.
* elm_atspi_bridget: Fix resource leak (CID1399424)
* elput: Remove useless call to eldbus_message_unref
* efl_core_command_line: Fix resource leak (CID1399105)
* ecore-evas-x: Fix double free (CID1382851)
* static_libs/vg_common: Fix resource leak (CID1382215)
* elm_theme: Check the ref count to delete or unref.
* elc_hoversel: Fix crash when no sd->last_location
* ecore drm2 - fix timeout in case case called from thread
* eina_test_file: Fix memory leak (CID1401072)
* efl_check: Fix memory leak (CID1401070)
* elm_test_widget_focus: Fix memory leak (CID1401069)
* emile_test_base64: Fix resource leak (CID1401062)
* evas_test_mesh: Fix memory leak (CID1401009)
* eina_test_binbuf: Fix memory leak (CID1401004)
* efl_ui_test_widget: Fix memory leak (CID1401003)
* efl_ui_test_widget: Fix memory leak (CID1400844)
* eina_bench_stringshare: Fix resourcce leak (CID1400975)
* evas_test_image: Fix resource leak (CID1400945)
* eina_test_file: Fix resource leak (CID1400926)
* eldbus_test_eldbus_message: Fix resource leak (CID1400921)
* efl_ui_test_widget: Fix memory leak (CID1400889)
* emile_test_base64: Fix resource leak (CID1400868)
* efl_ui_test_widget: Fix resource leak (CID1400857)
* emile_test_base64: Fix resource leak (CID1400852)
* ecore_test_ecore_file: Fix resource leak (CID1400825)
* efl_ui_test_widget: Fix resource leak (CID1400824)
* emile_test_base64: Fix resource leak (CID1400820)
* emile_test_base64: Fix memory leak (CID1400815)
* eina_test_ustr: Fix resource leak (CID1400784)
* eina_test_tiler: Fix resource leak (CID1401068)
* eo_test_manager_xattr: Fix resource leak (CID1400953)
* eina_test_strbuf: Fix resource leak (CID1400952)
* evas_object_textblock: Fix binary search fail.
* eolian: refactor parsing API and path handling (T7820)
* evas/image: fix broken auto_fill mechanism when manually changing fill
* elm_test: fix some bugs in elm_image tests
* ecore-evas-drm: Check if vblank is supported
* benchmarks: Fix copy-paste error (CID1401052)
* evas/render: fix proxy clipping when source_clip is disabled
* elm_color_class: use legacy event for genlist selection
* efl_ui_focus_manager_sub: handle manager change when tree is set to unfocusable
* edje/calc: correctly handle swallow/group objects as clippers for state clips
* gl_generic: handle image orientation setting when texture has not been created
* ecore/timer: fix handling of timer freeze during construction
* edje/load: (more) correctly handle part updates after changing edje group
* efl_canvas_layout: permit part_type_get on invalid parts
* eina/prefix: ignore magic files when running in tree
* efl_ui_focus_manager/calc: handle redirect setting if no previous redirect set
* elm/layout: do not trigger sizing eval on subobj deletion if no resize_obj set
* elm/layout: do not trigger sizing eval at end of canvas_group_add
* elm/colorselector: return early from theme apply if object is not yet finalized
* elm/diskselector: fix handling in theme data setup
* elm/diskselector: trigger sizing eval during theme set only if finalized
* elm/entry: use edje functions directly for interacting with edje objects
* elm/gengrid: handle cache item deletion without errors
* elm/gengrid: more null checks for setting mirrored state during construction
* elm/gengrid: handle focus events when no previous focus item was set
* elm/hovers: don't trigger more errors when setting null hover parent
* elm: fix value of datadir when running in tree
* elm/map: ignore zoom events during construction which cannot be handled
* elm/slider: avoid emitting double events when range slider value changes
* elm/slider: check for interval/range state before using that functionality
* efl_ui/button: check icon swallow existence before getting its content
* ecore-evas: check for internal evas presence before using it during free
* ecore-x: protect ecore_x_shutdown from creating a negative init count
* efl/io_model: check for parent object existence before removing wref
* eldbus: don't print warnings for user-canceled calls
* efl_ui/check: check icon swallow existence before getting its content
* efl_ui/image: check image object existence before using it in sizing
* efl_ui/layout: do not trigger sizing eval on hint change if object is dead
* efl_ui/layout: do not trigger sizing eval on subobj delete if layout is dead
* efl_ui/layout: only freeze internal layout during delete if it exists
* efl_ui/progressbar: check for part existence before using parts
* efl_ui/video: do not set 0x0 aspect hint
* efl_ui/widget: skip updating access info during parent_set(NULL) if dead
* elm/fileselector: return early in theme_apply during construction
* elm/popup: remove del callback for internal table object during destruction
* elm/code: check for cursor layout existence before emitting signals to it
* elm/gengrid: trigger unrealize event after unsetting unrealized flag
* elm/gen*: only call focus_object_setup_order_non_recursive if realized
* elm/genlist: unify all creation of calc jobs, skip if genlist is dead
* elm/genlist: trigger unrealize event after unsetting unrealized flag
* elm/genlist: handle cache item deletion without errors
* elm/genlist: handle genlist finding of nearest visible item when not realized
* elm/index: create event_rect[0] earlier in construction
* elm/interface_scrollable: return immediately from setting region if no content
* elm/list: return early from min_limit_cb if list object is dead
* elm/map: move setting initial zoom to later in construction
* elm/scroller: return immediately from updating focused scroll region without content
* elm_widget_item_static_focus: check for adapter existence in unrealize cb
* emotion: don't update crop clipper geometry if crop clipper doesn't exist
* ecore-imf/xim: only call ecore_x_shutdown if init was previously called
* elm/gengrid: handle gengrid finding of nearest visible item when not realized
* elm/fileselector_button: null fileselector model pointer on delete
* gl_generic: directly copy existing image when changing orientation
* theme: fix fileselector search button layout
* efl sel manager - flush wl conenction in cnp to avoid hangs...
* ecore_x - restore move event skipper that was removed long ago
* efl_ui_textpath: fix a center align but that doesn't happen at text_set().
* evas vector: set proper parents of clone objects.
* evas svg: fix missing node opacity attribute.
* elm - cursor - clear cursor job late to avoid crash
* edje - double make sure edje messages are zero'd due to a segv i saw
* ecore: also error when trying to add an event handler for a type 0 event
* edje: fix reapplying markup text on file/group change
* elm_actionslider: fix internal state when programmatically changing value
* elm/scrollable: avoid unnecessary edje recalcs
* evas/box: avoid triggering smart_move callback
* ecore: avoid breaking next main loop start if quit occurs outside of loop
* evas: fix type checking of Evas pointers in legacy functions
* evas/map: permit evas_map_free(NULL)
* ecore wl2 - fall back to shm if dmabuf fails in buf init
* ecore_evas buffer: fix a deadlock issue.
* efl_ui_widget: add safety checks to verify parents aren't being added as children
* [elm] Add missing sizing eval hook at radio
* [elm] Add missing sizing eval hook at check
* elm/glview: fix glview to (again) return null if context creation fails
* elm_test/plug: fix error handling
* elm/ctxpopup: check list existence before trying to delete list items
* efl_ui/popup: implement efl.file.unload for popup backwall part
* efl_ui/popup: unset callbacks on win object when parent is removed
* elm/config: monitor MODIFIED events on config files
* elm/config: fix config usage with EFL_RUN_IN_TREE set
* edje/calc: clamp part calc size to 0
* efl_ui: always set restricted_min size hints internally (T8059)
* evas events - fix segv if pointer data is freed by cb
* efl_ui/flow.box: fix item calc with mixed weights
* elm toolbar - fix packing options at start to avoid visual layout bugs
* elm toolbar - fix toolbar item separators and refactor aling/fill of item
* evas - gl_drm - delete old surfaces before creating new ones
* efl_ui_textpath: clear up path data when it's destructed.
* evas - png loader - fix leake in error case of pixels (CID1403027)
* elm - dnd - fix drop target del to not nuke handler all the time
* elm hoversel - avoid crash when items modified while popping down
* evas svg: fix svg spec compatibility.
* elm/hoversel: avoid calling api functions on null hoversel objects
* edje signal matches/patterns - handle re/alloc errors and missing ptrs
* edje - handle errors and eina file handles and vpath properly
* elm theme - handle error cases and eina file handles properly
* evas - font rendering - dont crash if we have color fonts and gl and sw
* eina file refs in edje/evas - audit them and plug holes where refs stay
* edje - signal callback matches/patterns try fix number 2
* emotion - webcam fix deletion of webcam still left in webcam list
* efl/io: fix race condition with child model deletion
* eio/poll: avoid ever dereferencing the backend's parent in a thread
* edje signal - let's not crash if something odd happens
* edje signal matches - try number 3 to try plug all the holes
* scalecache - handle possible use after free with sci still in list
* evas events: fix corrupted mouse events behavior on mapped object.
* evas -gl engines - buffer age - bring back fix for changing buffer age
* eio - don't call cb's after a cancel
* elm sel mgr - remove event handlers when no drop targets are left
Changes since 1.21.0:
---------------------

View File

@ -1,5 +1,5 @@
project('efl', ['c','cpp'],
version: '1.22.99',
version: '1.23.0',
default_options : ['buildtype=plain', 'cpp_std=c++11'],
meson_version : '>=0.47'
)

View File

@ -83,6 +83,7 @@ ecore_string_instance(const char *string)
str =
(Ecore_String *)malloc(sizeof(Ecore_String) + length * sizeof(char));
if (!str) return NULL;
str->string = (char *)(str + 1);
str->references = 0;

View File

@ -40,6 +40,7 @@ _evas_mp_pool_new(Evas_Mempool *pool)
item_alloc =
((pool->item_size + sizeof(void *) - 1) / sizeof(void *)) * sizeof(void *);
p = malloc(sizeof(Pool) + (pool->pool_size * item_alloc));
if (!p) return NULL;
ptr = (void **)(((unsigned char *)p) + sizeof(Pool));
p->usage = 0;
p->base = ptr;

View File

@ -35,7 +35,7 @@ _gen_param(Eina_Strbuf *buf, Eolian_Function_Parameter *pr,
eina_strbuf_append(buf, _get_add_star(ftype, eolian_parameter_direction_get(pr)));
eina_strbuf_append(buf, prn);
eina_stringshare_del(prtn);
if (eolian_type_is_owned(eolian_parameter_type_get(pr)))
if (eolian_parameter_is_move(pr))
eina_strbuf_append(buf, " EFL_TRANSFER_OWNERSHIP");
*rpid = 0;
return 1;
@ -82,13 +82,16 @@ _gen_func(const Eolian_State *state, const Eolian_Function *fid,
Eina_Bool var_as_ret = EINA_FALSE;
const Eolian_Type *rtp = eolian_function_return_type_get(fid, ftype);
Eina_Bool return_move = eolian_function_return_is_move(fid, ftype);
if (ftype == EOLIAN_PROP_GET && !rtp)
{
void *d1, *d2;
Eina_Iterator *itr = eolian_property_values_get(fid, ftype);
if (eina_iterator_next(itr, &d1) && !eina_iterator_next(itr, &d2))
{
rtp = eolian_parameter_type_get((Eolian_Function_Parameter *)d1);
Eolian_Function_Parameter *pr = (Eolian_Function_Parameter *)d1;
rtp = eolian_parameter_type_get(pr);
return_move = eolian_parameter_is_move(pr);
var_as_ret = EINA_TRUE;
}
eina_iterator_free(itr);
@ -168,7 +171,7 @@ _gen_func(const Eolian_State *state, const Eolian_Function *fid,
flagbuf = eina_strbuf_new();
eina_strbuf_prepend(flagbuf, " EINA_WARN_UNUSED_RESULT");
}
if (rtp && eolian_type_is_owned(rtp))
if (return_move)
eina_strbuf_append(buf, " EFL_TRANSFER_OWNERSHIP");
if (flagbuf)
{

View File

@ -314,7 +314,7 @@ _gen_function_param_fallback(Eina_Iterator *itr, Eina_Strbuf *fallback_free_owne
inner_type = eolian_type_base_type_get(type);
//check if they should be freed or just ignored
if (!eolian_type_is_owned(type) || eolian_parameter_direction_get(pr) == EOLIAN_OUT_PARAM)
if (!eolian_parameter_is_move(pr) || eolian_parameter_direction_get(pr) == EOLIAN_OUT_PARAM)
{
eina_strbuf_append_printf(fallback_free_ownership, " (void)%s;\n", eolian_parameter_name_get(pr));
continue;
@ -329,11 +329,11 @@ _gen_function_param_fallback(Eina_Iterator *itr, Eina_Strbuf *fallback_free_owne
eina_strbuf_append(param_call, eolian_parameter_name_get(pr));
//check if we might want to free or handle the children
if (!inner_type || !eolian_type_is_owned(inner_type))
if (!inner_type || !eolian_type_is_move(inner_type))
{
_generate_normal_free(&fallback_free_ownership, type, param_call, "");
}
else if (inner_type && eolian_type_is_owned(inner_type))
else if (inner_type && eolian_type_is_move(inner_type))
{
_generate_iterative_free(&fallback_free_ownership, type, inner_type, pr, param_call);
}
@ -527,7 +527,8 @@ _gen_func(const Eolian_Class *cl, const Eolian_Function *fid,
Eolian_Function_Parameter *pr = d1;
rtp = eolian_parameter_type_get(pr);
/* reflect only when returning 1 val */
reflect_type = rtp;
if (!eolian_parameter_is_by_ref(pr))
reflect_type = rtp;
var_as_ret = EINA_TRUE;
def_ret = eolian_parameter_default_value_get(pr);
}
@ -543,7 +544,8 @@ _gen_func(const Eolian_Class *cl, const Eolian_Function *fid,
if (eina_iterator_next(itr, &d1) && !eina_iterator_next(itr, &d2))
{
Eolian_Function_Parameter *pr = d1;
reflect_type = eolian_parameter_type_get(pr);
if (!eolian_parameter_is_by_ref(pr))
reflect_type = eolian_parameter_type_get(pr);
}
eina_iterator_free(itr);
}

View File

@ -447,7 +447,6 @@ ffi.cdef [[
const Eolian_Class *eolian_type_class_get(const Eolian_Type *tp);
const Eolian_Error *eolian_type_error_get(const Eolian_Type *tp);
Eina_Bool eolian_type_is_owned(const Eolian_Type *tp);
Eina_Bool eolian_type_is_move(const Eolian_Type *tp);
Eina_Bool eolian_type_is_const(const Eolian_Type *tp);
Eina_Bool eolian_type_is_ptr(const Eolian_Type *tp);
@ -1165,10 +1164,6 @@ M.Type = ffi.metatype("Eolian_Type", {
return v
end,
is_owned = function(self)
return eolian.eolian_type_is_owned(self) ~= 0
end,
is_move = function(self)
return eolian.eolian_type_is_move(self) ~= 0
end,

View File

@ -3,6 +3,7 @@ using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Reflection;
using System.Collections;
namespace Efl
{
@ -26,6 +27,7 @@ public abstract class EoWrapper : IWrapper, IDisposable
private static Efl.EventCb ownershipUniqueDelegate = new Efl.EventCb(OwnershipUniqueCallback);
private static Efl.EventCb ownershipSharedDelegate = new Efl.EventCb(OwnershipSharedCallback);
private Hashtable keyValueHash = null;
/// <summary>Constructor to be used when objects are expected to be constructed from native code.
/// For a class that inherited from an EFL# class to be properly constructed from native code
@ -322,6 +324,28 @@ public abstract class EoWrapper : IWrapper, IDisposable
public IntPtr NativeHandle { get; private set; }
}
/// <summary>
/// Set a value object associated with a key object.
/// </summary>
public void SetKeyValue(object key, object val)
{
if (keyValueHash == null)
keyValueHash = new Hashtable();
keyValueHash.Add(key, val);
}
/// <summary>
/// Get a value object associated with a key object.
/// </summary>
public object GetKeyValue(object key)
{
if (keyValueHash == null)
return null;
return keyValueHash[key];
}
/// <summary>Wrapper for native methods and virtual method delegates.
/// For internal use by generated code only.</summary>
public abstract class NativeMethods : Efl.Eo.NativeClass

View File

@ -45,9 +45,12 @@ abstract Efl.App extends Efl.Loop implements Efl.Core.Command_Line
resume: void; [[Called before a window is rendered after a pause event]]
standby: void; [[Called when the application's windows are all destroyed]]
terminate: void; [[Called before starting the shutdown of the application]]
signal,usr1: void; [[System specific, but on unix maps to SIGUSR1 signal to the process - only called on main loop object]]
signal,usr2: void; [[System specific, but on unix maps to SIGUSR2 signal to the process - only called on main loop object]]
signal,hup: void; [[System specific, but on unix maps to SIGHUP signal to the process - only called on main loop object]]
signal,usr1: void; [[System specific, but on unix maps to SIGUSR1 signal to the process -
only called on main loop object]]
signal,usr2: void; [[System specific, but on unix maps to SIGUSR2 signal to the process -
only called on main loop object]]
signal,hup: void; [[System specific, but on unix maps to SIGHUP signal to the process -
only called on main loop object]]
}
implements {
Efl.Task.priority { get; set; }

View File

@ -1,4 +1,5 @@
class @beta Efl.Appthread extends Efl.Loop implements Efl.ThreadIO, Efl.Io.Reader, Efl.Io.Writer, Efl.Io.Closer, Efl.Core.Command_Line
class @beta Efl.Appthread extends Efl.Loop
implements Efl.ThreadIO, Efl.Io.Reader, Efl.Io.Writer, Efl.Io.Closer, Efl.Core.Command_Line
{
[[ ]]
methods {

View File

@ -1,7 +1,8 @@
mixin @beta Efl.Core.Command_Line {
[[A mixin that implements standard functions for command lines.
This object parses the command line that gets passed, later the object can be accessed via accessor or the string directly.
This object parses the command line that gets passed, later the object can be accessed via accessor or the string
directly.
]]
methods {
@property command {
@ -64,9 +65,10 @@ mixin @beta Efl.Core.Command_Line {
}
}
@property command_string {
[[ Use a string to fill this object
[[Use a string to fill this object
The string will be split at every unescaped ' ', every resulting substring will be a new argument to the command line.
The string will be split at every unescaped ' ', every resulting substring will be a new argument to the
command line.
]]
set {
return : bool; [[On success $true, $false otherwise]]

View File

@ -4,7 +4,8 @@ class @beta Efl.Core.Env extends Efl.Object implements Efl.Duplicate {
A object of this type alone does not apply the object to the system.
For getting the value into the system, see @Efl.Core.Proc_Env.
A object can be forked, which will only copy its values, changes to the returned object will not change the object where it is forked off.
A object can be forked, which will only copy its values, changes to the returned object will not change the object
where it is forked off.
]]
methods {
@property env {

View File

@ -2,7 +2,8 @@ function @beta EflFilterModel {
[[EflFilterModel function]]
params {
parent: Efl.Filter_Model; [[This object can be used to know when to cancel the future.]]
child: Efl.Model; [[You must reference this object for the duration of your use of it as the caller will not do that for you.]]
child: Efl.Model; [[You must reference this object for the duration of your use of it as the caller will not do
that for you.]]
}
return: future<bool>; [[$true if the model should be kept.]]
};
@ -28,4 +29,4 @@ class @beta Efl.Filter_Model extends Efl.Composite_Model
constructors {
.filter_set;
}
}
}

View File

@ -59,7 +59,8 @@ class @beta Efl.Io.Buffered_Stream extends Efl.Loop_Consumer implements Efl.Io.R
[[Constructor-only property to set buffer limit. 0 is unlimited]]
}
values {
max_queue_size_input: size; [[Defines a maximum buffer size for incoming data or 0 to allow an unlimited amount of bytes]]
max_queue_size_input: size; [[Defines a maximum buffer size for incoming data or 0 to allow an
unlimited amount of bytes]]
}
}
@ -74,12 +75,15 @@ class @beta Efl.Io.Buffered_Stream extends Efl.Loop_Consumer implements Efl.Io.R
[[Constructor-only property to set buffer limit. 0 is unlimited]]
}
values {
max_queue_size_output: size; [[Defines a maximum buffer size for output data, or 0 to allow unlimited amount of bytes. If limited, @Efl.Io.Writer.write will take less data than requested.]]
max_queue_size_output: size; [[Defines a maximum buffer size for output data, or 0 to allow unlimited
amount of bytes. If limited, @Efl.Io.Writer.write will take less data
than requested.]]
}
}
@property line_delimiter {
[[If set incoming data will be checked for the delimiter and "line" events. The line may include the delimiter, unless it's end-of-stream in @.max_queue_size_input has been reached.]]
[[If set incoming data will be checked for the delimiter and "line" events. The line may include the
delimiter, unless it's end-of-stream in @.max_queue_size_input has been reached.]]
get { }
set {
[[Changes line delimiter to use. If empty no delimiter is to be used]]
@ -100,7 +104,8 @@ class @beta Efl.Io.Buffered_Stream extends Efl.Loop_Consumer implements Efl.Io.R
greater-than zero. Defaults to inactive.
]]
values {
seconds: double; [[Number of inactive seconds to timeout this object. If zero or less it will be disabled.]]
seconds: double; [[Number of inactive seconds to timeout this object. If zero or less it will be
disabled.]]
}
}
@ -162,7 +167,9 @@ class @beta Efl.Io.Buffered_Stream extends Efl.Loop_Consumer implements Efl.Io.R
]]
get { }
values {
slice: Eina.Slice; [[Slice of the current buffer, may be invalidated if @Efl.Io.Writer.write, @Efl.Io.Closer.close or @Efl.Io.Reader.read are called. It is the full slice available for reading.]]
slice: Eina.Slice; [[Slice of the current buffer, may be invalidated if @Efl.Io.Writer.write,
@Efl.Io.Closer.close or @Efl.Io.Reader.read are called. It is the full
slice available for reading.]]
}
}
@ -216,7 +223,7 @@ class @beta Efl.Io.Buffered_Stream extends Efl.Loop_Consumer implements Efl.Io.R
otherwise and more calls to flush must be made.
If the @.inner_io implements @Efl.Io.Closer and it
is closed or the wrapper itself's closed, this
is closed or the wrapper itself is closed, this
function will do nothing and return $true.
Note: this function may block the main loop execution
@ -226,7 +233,8 @@ class @beta Efl.Io.Buffered_Stream extends Efl.Loop_Consumer implements Efl.Io.R
"write,finished" event.
]]
params {
may_block: bool; [[If $true, then @Efl.Io.Reader.can_read and @Efl.Io.Writer.can_write are not checked and the call may block.]]
may_block: bool; [[If $true, then @Efl.Io.Reader.can_read and @Efl.Io.Writer.can_write are not checked
and the call may block.]]
ignore_line_delimiter: bool; [[Forces flush ignoring line delimiters]]
}
return: bool(true); [[$true if all data was sent, $false otherwise]]
@ -240,7 +248,9 @@ class @beta Efl.Io.Buffered_Stream extends Efl.Loop_Consumer implements Efl.Io.R
error: Eina.Error; [[An error has occurred and I/O has stopped]]
progress: void; [[Property @.progress changed]]
slice,changed: void; [[The read-slice returned by @.slice may have changed.]]
line: ptr(const(Eina.Slice)); [[If @.line_delimiter is set, will be emitted with current line. The memory is only valid during event callback dispatched and should not be modified. Note that the line slice may not be inside @.slice.]]
line: ptr(const(Eina.Slice)); [[If @.line_delimiter is set, will be emitted with current line. The memory is
only valid during event callback dispatched and should not be modified.
Note that the line slice may not be inside @.slice.]]
}
implements {

View File

@ -85,7 +85,7 @@ class @beta Efl.Io.Copier extends Efl.Loop_Consumer implements Efl.Io.Closer {
that in order to attempt to write a full line at a time,
including the delimiter. Exceptions may be if the
@.source object emitted "eos" and there is no trailing
delimiter (ie: missing trailing newline in files) or if the
delimiter (i.e: missing trailing newline in files) or if the
@.buffer_limit is reached.
Once @Efl.Io.Reader.eos is $true or "eos" event happen,
@ -184,7 +184,9 @@ class @beta Efl.Io.Copier extends Efl.Loop_Consumer implements Efl.Io.Closer {
}
@property line_delimiter {
[[If there is a line delimiter, reads will buffer/queue up to the line delimiter before calling @Efl.Io.Writer.write on the @.destination and the event line is emitted with the current line. The line may include the delimiter unless it's end-of-stream on @.source or @.buffer_limit was reached.]]
[[If there is a line delimiter, reads will buffer/queue up to the line delimiter before calling
@Efl.Io.Writer.write on the @.destination and the event line is emitted with the current line.
The line may include the delimiter unless it's end-of-stream on @.source or @.buffer_limit was reached.]]
get { }
set {
[[Changes line delimiter to use. If empty, no delimiter is to be used]]
@ -264,7 +266,8 @@ class @beta Efl.Io.Copier extends Efl.Loop_Consumer implements Efl.Io.Closer {
values {
read: uint64 @optional; [[Amount of bytes read from source]]
written: uint64 @optional; [[Amount of bytes written to destination]]
total: uint64 @optional; [[If @.source is an Efl.Io.Sizer, its total size. Otherwise 0 to report unknown size]]
total: uint64 @optional; [[If @.source is an @Efl.Io.Sizer, its total size. Otherwise 0 to
report unknown size]]
}
}
@ -279,7 +282,8 @@ class @beta Efl.Io.Copier extends Efl.Loop_Consumer implements Efl.Io.Closer {
greater-than zero. Defaults to inactive.
]]
values {
seconds: double; [[Number inactive seconds to timeout this copier. If zero or less, it will be disabled.]]
seconds: double; [[Number inactive seconds to timeout this copier. If zero or less, it will be
disabled.]]
}
}
@ -294,7 +298,8 @@ class @beta Efl.Io.Copier extends Efl.Loop_Consumer implements Efl.Io.Closer {
get { }
set @protected { }
values {
done: bool; [[If $true, source is "eos" and all data was written to "destination". If $false, it's still pending some more copies]]
done: bool; [[If $true, source is "eos" and all data was written to "destination". If $false, it's
still pending some more copies]]
}
}
@ -351,7 +356,8 @@ class @beta Efl.Io.Copier extends Efl.Loop_Consumer implements Efl.Io.Closer {
"done" event.
]]
params {
may_block: bool; [[If $true, then @Efl.Io.Reader.can_read and @Efl.Io.Writer.can_write are not checked and the call may block.]]
may_block: bool; [[If $true, then @Efl.Io.Reader.can_read and @Efl.Io.Writer.can_write are not checked
and the call may block.]]
ignore_line_delimiter: bool; [[Forces flush ignoring line delimiters]]
}
return: bool(true); [[$true on success, $false otherwise]]
@ -362,8 +368,10 @@ class @beta Efl.Io.Copier extends Efl.Loop_Consumer implements Efl.Io.Closer {
done: void; [[All available data was copied from source to destination]]
error: Eina.Error; [[An error happened and the copy stopped]]
progress: void; [[Total size changed or Data was read/written]]
data: ptr(const(Eina.Slice)); [[When data is read to internal buffer, it's emitted in this event. The memory is only valid during event callback dispatched and should not be modified.]]
line: ptr(const(Eina.Slice)); [[If @.line_delimiter is set, will be emitted with current line. The memory is only valid during event callback dispatched and should not be modified.]]
data: ptr(const(Eina.Slice)); [[When data is read to internal buffer, it's emitted in this event. The memory
is only valid during event callback dispatched and should not be modified.]]
line: ptr(const(Eina.Slice)); [[If @.line_delimiter is set, will be emitted with current line. The memory is
only valid during event callback dispatched and should not be modified.]]
}
implements {

View File

@ -1,4 +1,6 @@
class @beta Efl.Io.File extends Efl.Loop_Fd implements Efl.File, Efl.Io.Reader_Fd, Efl.Io.Writer_Fd, Efl.Io.Closer_Fd, Efl.Io.Sizer_Fd, Efl.Io.Positioner_Fd {
class @beta Efl.Io.File extends Efl.Loop_Fd
implements Efl.File, Efl.Io.Reader_Fd, Efl.Io.Writer_Fd, Efl.Io.Closer_Fd, Efl.Io.Sizer_Fd,
Efl.Io.Positioner_Fd {
[[File access (open, close, read, write, lseek, ftruncate)
@Efl.Io.Closer.close_on_exec and

View File

@ -4,7 +4,8 @@ struct Efl.Loop_Arguments {
@since 1.22
]]
argv: const(array<const(stringshare)>); [[Array with loop arguments]]
initialization: bool; [[Set to $true when the program should initialize its internal state. This happen once per process instance.]]
initialization: bool; [[Set to $true when the program should initialize its internal state.
This happens once per process instance.]]
}
abstract Efl.Loop extends Efl.Task
@ -69,8 +70,10 @@ abstract Efl.Loop extends Efl.Task
[[You should never need/call this, unless you are implementing a custom
tick source for an animator.
Note: The time point must match whatever zero time you get from ecore_time_get() and @.time.get() (same 0 point).
What this point is is undefined, so unless your source uses the same 0 time, then you may have to adjust and do some guessing.
Note: The time point must match whatever zero time you get from ecore_time_get() and @.time.get()
(same 0 point).
What this point is is undefined, so unless your source uses the same 0 time, then you may have to adjust
and do some guessing.
]]
}
get {
@ -106,12 +109,17 @@ abstract Efl.Loop extends Efl.Task
events {
idle,enter @restart: void; [[Event occurs once the main loop enters the idle state.]]
idle,exit @restart: void; [[Event occurs once the main loop exits the idle state.]]
idle @restart: void; [[Event occurs once the main loop is idle. If you keep listening on this event it may increase the burden on your CPU.]]
idle @restart: void; [[Event occurs once the main loop is idle. If you keep listening on this event it may
increase the burden on your CPU.]]
arguments: Efl.Loop_Arguments; [[Event happens when args are provided to the loop by args_add().]]
poll,high: void; [[Event occurs multiple times per second. The exact tick is undefined and can be adjusted system wide.]]
poll,medium: void; [[Event occurs multiple times per minute. The exact tick is undefined and can be adjusted system wide.]]
poll,low: void; [[Event occurs multiple times every 15 minutes. The exact tick is undefined and can be adjusted system wide.]]
quit: void; [[Event occurs when the loop was requested to quit externally e.g. by a ctrl+c signal or a request from a parent loop/thread to have the child exit.]]
poll,high: void; [[Event occurs multiple times per second. The exact tick is undefined and can be adjusted
system-wide.]]
poll,medium: void; [[Event occurs multiple times per minute. The exact tick is undefined and can be adjusted
system-wide.]]
poll,low: void; [[Event occurs multiple times every 15 minutes. The exact tick is undefined and can be adjusted
system-wide.]]
quit: void; [[Event occurs when the loop was requested to quit externally e.g. by a ctrl+c signal or a request
from a parent loop/thread to have the child exit.]]
}
implements {
Efl.Object.constructor;

View File

@ -20,7 +20,8 @@ class @beta Efl.Loop_Handler extends Efl.Object
set { }
get { }
values {
flags: Efl.Loop_Handler_Flags; [[ The flags that indicate what kind of I/O should be listened for like read, write or error channels. ]]
flags: Efl.Loop_Handler_Flags; [[The flags that indicate what kind of I/O should be listened for like
read, write or error channels. ]]
}
}
@property fd {

View File

@ -3,12 +3,13 @@ abstract @beta Efl.Loop_Model extends Efl.Loop_Consumer implements Efl.Model
data: null;
methods {
volatile_make {
[[To be called when a Child model is created by @Efl.Model.children_slice_get by the one creating the child object.
[[To be called when a Child model is created by @Efl.Model.children_slice_get by the one creating the
child object.
This function is used to properly define the lifecycle of the new Child Model object
and make sure that once it has 0 ref except its parent Model, it will be destroyed.
This function should only be called once per child. It is useful for @Efl.Model who
have a lot of children and shouldn't keep more than what is used in memory.]]
This function is used to properly define the lifecycle of the new Child Model object
and make sure that once it has 0 ref except its parent Model, it will be destroyed.
This function should only be called once per child. It is useful for @Efl.Model who
have a lot of children and shouldn't keep more than what is used in memory.]]
}
}
implements {

View File

@ -5,12 +5,14 @@ class @beta Efl.Select_Model extends Efl.Boolean_Model
selected_get {
[[Get an iterator of all the selected child of this model.
]]
return: iterator<uint64>; [[The iterator give indexes of selected child. It is valid until any change is made on the model.]]
return: iterator<uint64>; [[The iterator gives indices of selected children.
It is valid until any change is made on the model.]]
}
unselected_get {
[[Get an iterator of all the child of this model that are not selected.
]]
return: iterator<uint64>; [[The iterator give indexes of unselected child. It is valid until any change is made on the model.]]
return: iterator<uint64>; [[The iterator gives indices of unselected children.
It is valid until any change is made on the model.]]
}
@property single_selection {
[[Define if we support only one exclusive selection at a time when set to $true.

View File

@ -1,4 +1,5 @@
class @beta Efl.Thread extends Efl.Task implements Efl.ThreadIO, Efl.Io.Reader, Efl.Io.Writer, Efl.Io.Closer, Efl.Core.Command_Line
class @beta Efl.Thread extends Efl.Task
implements Efl.ThreadIO, Efl.Io.Reader, Efl.Io.Writer, Efl.Io.Closer, Efl.Core.Command_Line
{
methods {
}

View File

@ -19,27 +19,34 @@ function @beta EflViewModelPropertySet {
class @beta Efl.View_Model extends Efl.Composite_Model
{
[[Efl model providing helpers for custom properties used when linking a model to a view and you need to generate/adapt values for display.
[[Efl model providing helpers for custom properties used when linking a model to a view and you need to
generate/adapt values for display.
There is two ways to use this class, you can either inherit from it and have a custom constructor for example. Or you can just instantiate
it and manually define your property on it via callbacks.
There is two ways to use this class, you can either inherit from it and have a custom constructor for example.
Or you can just instantiate it and manually define your property on it via callbacks.
]]
methods {
property_string_add {
[[Adds a synthetic string property, generated from a $definition string and other properties in the model.
The $definition string, similar to how $printf works, contains ${} placeholders that are replaced by the actual value of the property inside the placeholder tags when the synthetic property is retrieved.
For example, a numeric property $length might be strange to use as a label, since it will only display a number. However, a synthetic string can be generated with the definition "Length ${length}." which renders more nicely and does not require any more code by the user of the property.
The $definition string, similar to how $printf works, contains ${} placeholders that are replaced by the
actual value of the property inside the placeholder tags when the synthetic property is retrieved.
For example, a numeric property $length might be strange to use as a label, since it will only display a
number. However, a synthetic string can be generated with the definition "Length ${length}." which renders
more nicely and does not require any more code by the user of the property.
$not_ready and $on_error strings can be given to be used when the data is not ready or there is some error, respectively. These strings do accept placeholder tags.
$not_ready and $on_error strings can be given to be used when the data is not ready or there is some error,
respectively. These strings do accept placeholder tags.
See @.property_string_del
]]
params {
name: string; [[The name for the new synthetic property.]]
definition: string; [[The definition string for the new synthetic property.]]
not_ready: string; [[The text to be used if any of the properties used in $definition is not ready yet. If set to $null, no check against EAGAIN will be done.]]
on_error: string; [[The text to be used if any of the properties used in $definition is in error. It takes precedence over $not_ready. If set to $null, no error checks are performed.]]
not_ready: string; [[The text to be used if any of the properties used in $definition is not ready yet.
If set to $null, no check against EAGAIN will be done.]]
on_error: string; [[The text to be used if any of the properties used in $definition is in error. It takes
precedence over $not_ready. If set to $null, no error checks are performed.]]
}
return: Eina.Error;
}
@ -54,7 +61,8 @@ class @beta Efl.View_Model extends Efl.Composite_Model
return: Eina.Error;
}
property_logic_add {
[[Add callbacks that will be triggered when someone ask for the specified property name when getting or setting a property.
[[Add callbacks that will be triggered when someone ask for the specified property name when getting or
setting a property.
A get or set should at least be provided for this call to succeed.
@ -62,14 +70,18 @@ class @beta Efl.View_Model extends Efl.Composite_Model
]]
params {
property: string; [[The property to bind on to.]]
get: EflViewModelPropertyGet; [[Define the get callback called when the @Efl.Model.property.get is called with the above property name.]]
set: EflViewModelPropertySet; [[Define the set callback called when the @Efl.Model.property.set is called with the above property name.]]
binded: iterator<string>; [[Iterator of property name to bind with this defined property see @.property_bind.]]
get: EflViewModelPropertyGet; [[Define the get callback called when the @Efl.Model.property.get is called
with the above property name.]]
set: EflViewModelPropertySet; [[Define the set callback called when the @Efl.Model.property.set is called
with the above property name.]]
binded: iterator<string>; [[Iterator of property name to bind with this defined property see
@.property_bind.]]
}
return: Eina.Error;
}
property_logic_del {
[[Delete previously added callbacks that were triggered when someone asked for the specified property name when getting or setting a property.
[[Delete previously added callbacks that were triggered when someone asked for the specified property name
when getting or setting a property.
A get or set should at least be provided for this call to succeed.
@ -102,7 +114,7 @@ class @beta Efl.View_Model extends Efl.Composite_Model
}
}
@property children_bind {
[[Define if we will intercept all childrens object reference and
[[Define if we will intercept all children object reference and
bind them through the ViewModel with the same property logic as this
one. Be careful of recursivity.

View File

@ -48,8 +48,10 @@ class @beta Efl.Net.Control.Technology extends Efl.Loop_Consumer {
set { }
values {
enabled: bool; [[When to enable or disable tethering for this technology.]]
identifier: string @optional; [[The name to identify the tethering. For WiFi this will translate to an SSID.]]
passphrase: string @optional; [[The passphrase for tethering access. For WiFi this will translate to WPA passphrase.]]
identifier: string @optional; [[The name to identify the tethering. For WiFi this will translate to an
SSID.]]
passphrase: string @optional; [[The passphrase for tethering access. For WiFi this will translate to
WPA passphrase.]]
}
}

View File

@ -1,8 +1,9 @@
class @beta Efl.Net.Socket_Fd extends Efl.Loop_Fd implements Efl.Io.Reader_Fd, Efl.Io.Writer_Fd, Efl.Io.Closer_Fd, Efl.Net.Socket {
[[A base implementation for sockets over filedescriptors (fd)
class @beta Efl.Net.Socket_Fd extends Efl.Loop_Fd
implements Efl.Io.Reader_Fd, Efl.Io.Writer_Fd, Efl.Io.Closer_Fd, Efl.Net.Socket {
[[A base implementation for sockets over file descriptors (fd)
This is the common class and takes an existing FD, usually
created by an dialer or server.
created by an dialler or server.
@Efl.Io.Closer.close_on_exec and
@Efl.Io.Closer.close_on_invalidate are respected and default to

View File

@ -183,7 +183,7 @@ interface @beta Efl.Gfx.Image
making frames and decorations. You would most probably also be
using a filled image (as in @Efl.Gfx.Fill.fill_auto) to use as a frame.
The default value is @Efl.Gfx.Border_Fill_Mode.default, ie. render
The default value is @Efl.Gfx.Border_Fill_Mode.default, i.e. render
and scale the center area, respecting its transparency.
]]
set {}
@ -208,8 +208,10 @@ interface @beta Efl.Gfx.Image
}
get {}
values {
horizontal: iterator<ptr(Efl.Gfx.Image_Stretch_Region)>; [[Representation of area that are stretchable in the image horizontal space.]]
vertical: iterator<ptr(Efl.Gfx.Image_Stretch_Region)>; [[Representation of area that are stretchable in the image vertical space.]]
horizontal: iterator<ptr(Efl.Gfx.Image_Stretch_Region)>; [[Representation of areas that are stretchable in
the image horizontal space.]]
vertical: iterator<ptr(Efl.Gfx.Image_Stretch_Region)>; [[Representation of areas that are stretchable in
the image vertical space.]]
}
}
@property image_size {
@ -229,27 +231,20 @@ interface @beta Efl.Gfx.Image
/* Note: those are obscure features of evas image. Expose in Efl.Gfx.Image? */
@property content_hint {
set {
[[Set the content hint setting of a given image object of the
canvas.
[[Content hint setting for the image. These hints might be used by EFL
to enable optimizations.
This function sets the content hint value of the given image
of the canvas. For example, if you're on the GL engine and
your driver implementation supports it, setting this hint to
#EVAS_IMAGE_CONTENT_HINT_DYNAMIC will make it need zero copies
at texture upload time, which is an "expensive" operation.
]]
For example, if you're on the GL engine and your driver implementation
supports it, setting this hint to @Efl.Gfx.Image_Content_Hint.dynamic
will make it need zero copies at texture upload time, which is an
"expensive" operation.
]]
set {
}
get {
[[Get the content hint setting of a given image object of the
canvas.
This returns #EVAS_IMAGE_CONTENT_HINT_NONE on error.
]]
}
values {
hint: Efl.Gfx.Image_Content_Hint; [[Dynamic or static content hint,
see @Efl.Gfx.Image_Content_Hint]]
hint: Efl.Gfx.Image_Content_Hint; [[Dynamic or static content hint.]]
}
}
@property scale_hint {

View File

@ -8,7 +8,7 @@ enum Efl.Gfx.Image_Orientation
Directional values ($up, $down, $left, $right) indicate the final direction in
which the top of the image will be facing (e.g. a picture of a house will have
its roof pointing to the right if the $right orientation is used).
Flipping values ($flip_horizontal and $flip_vertical) can be additionaly added
Flipping values ($flip_horizontal and $flip_vertical) can be additionally added
to produce a mirroring in each axis.
Not to be confused with @Efl.Ui.Layout_Orientation which is meant for widgets, rather
than images and canvases. This enum is used to rotate images, videos and
@ -19,10 +19,12 @@ enum Efl.Gfx.Image_Orientation
right = 1, [[Orient right, rotate 90 degrees clock-wise.]]
down = 2, [[Orient down, rotate 180 degrees.]]
left = 3, [[Orient left, rotate 270 degrees clock-wise.]]
rotation_bitmask = 3, [[Bitmask that can be used to isolate rotation values, that is, $none, $up, $down, $left and $right.]]
rotation_bitmask = 3, [[Bitmask that can be used to isolate rotation values, that is, $none, $up, $down, $left and
$right.]]
flip_horizontal = 4, [[Mirror horizontally. Can be added to the other values.]]
flip_vertical = 8, [[Mirror vertically. Can be added to the other values.]]
flip_bitmask = 12 [[Bitmask that can be used to isolate flipping values, that is, $flip_vertical and $flip_horizontal.]]
flip_bitmask = 12 [[Bitmask that can be used to isolate flipping values, that is, $flip_vertical and
$flip_horizontal.]]
}
interface Efl.Gfx.Image_Orientable

View File

@ -1,4 +1,5 @@
class @beta Efl.Io.Buffer extends Efl.Object implements Efl.Io.Reader, Efl.Io.Writer, Efl.Io.Closer, Efl.Io.Sizer, Efl.Io.Positioner {
class @beta Efl.Io.Buffer extends Efl.Object
implements Efl.Io.Reader, Efl.Io.Writer, Efl.Io.Closer, Efl.Io.Sizer, Efl.Io.Positioner {
[[Generic In-memory buffer of data to be used as I/O.
This class offers both input and output, which can be used at
@ -118,7 +119,9 @@ class @beta Efl.Io.Buffer extends Efl.Object implements Efl.Io.Reader, Efl.Io.Wr
]]
get { }
values {
slice: Eina.Slice; [[Slice of the current buffer, may be invalidated if @Efl.Io.Writer.write, @Efl.Io.Closer.close or @Efl.Io.Sizer.resize are called. It is the full slice, not a partial one starting at current position.]]
slice: Eina.Slice; [[Slice of the current buffer, may be invalidated if @Efl.Io.Writer.write,
@Efl.Io.Closer.close or @Efl.Io.Sizer.resize are called.
It is the full slice, not a partial one starting at current position.]]
}
}
@ -137,7 +140,8 @@ class @beta Efl.Io.Buffer extends Efl.Object implements Efl.Io.Reader, Efl.Io.Wr
events {
position_read,changed: void; [[Notifies @.position_read changed]]
position_write,changed: void; [[Notifies @.position_write changed]]
reallocated: void; [[Notifies the internal buffer was reallocated, thus whatever was returned by @.slice becomes invalid]]
reallocated: void; [[Notifies the internal buffer was reallocated, thus whatever was returned by @.slice
becomes invalid.]]
}
implements {

View File

@ -52,7 +52,9 @@ class @beta Efl.Io.Queue extends Efl.Object implements Efl.Io.Reader, Efl.Io.Wri
]]
get { }
values {
slice: Eina.Slice; [[Slice of the current buffer, may be invalidated if @Efl.Io.Writer.write, @Efl.Io.Closer.close or @Efl.Io.Reader.read are called. It is the full slice available for reading.]]
slice: Eina.Slice; [[Slice of the current buffer, may be invalidated if @Efl.Io.Writer.write,
@Efl.Io.Closer.close or @Efl.Io.Reader.read are called.
It is the full slice available for reading.]]
}
}

View File

@ -29,7 +29,9 @@ interface Efl.Io.Reader {
You can understand this method as read(2) libc function.
]]
params {
@inout rw_slice: rw_slice<ubyte>; [[Provides a pre-allocated memory to be filled up to rw_slice.len. It will be populated and the length will be set to the actually used amount of bytes, which can be smaller than the request.]]
@inout rw_slice: rw_slice<ubyte>; [[Provides a pre-allocated memory to be filled up to rw_slice.len.
It will be populated and the length will be set to the actually
used amount of bytes, which can be smaller than the request.]]
}
return: Eina.Error; [[0 on succeed, a mapping of errno otherwise]]
}

View File

@ -29,8 +29,12 @@ interface Efl.Io.Writer {
You can understand this method as write(2) libc function.
]]
params {
@inout slice: slice<ubyte>; [[Provides a pre-populated memory to be used up to slice.len. The returned slice will be adapted as length will be set to the actually used amount of bytes, which can be smaller than the request.]]
@out remaining: slice<ubyte> @optional; [[Convenience to output the remaining parts of slice that was not written. If the full slice was written, this will be a slice of zero-length.]]
@inout slice: slice<ubyte>; [[Provides a pre-populated memory to be used up to slice.len.
The returned slice will be adapted as length will be set to the actually
used amount of bytes, which can be smaller than the request.]]
@out remaining: slice<ubyte> @optional; [[Convenience to output the remaining parts of slice that were
not written. If the full slice was written, this will be a
slice of zero-length.]]
}
return: Eina.Error; [[0 on succeed, a mapping of errno otherwise]]
}

View File

@ -22,7 +22,7 @@ interface @beta Efl.Model
get {
[[Get properties from model.
properties_get is due to provide callers a way the fetch the
Properties_get is due to provide callers a way the fetch the
current properties implemented/used by the model. The event
@[Efl.Model.properties,changed] will be raised to notify
listeners of any modifications in the properties.
@ -51,7 +51,8 @@ interface @beta Efl.Model
See @.property.get, @[Efl.Model.properties,changed]
]]
return: future<any_value_ptr>; [[Return an error in case the property could not be set, the value that was set otherwise.]]
return: future<any_value_ptr>; [[Return an error in case the property could not be set,
or the value that was set otherwise.]]
}
get {
[[Retrieve the value of a given property name.
@ -75,7 +76,7 @@ interface @beta Efl.Model
@.property.get can return an error with code EAGAIN when it doesn't have any
meaningful value. To make life easier, this future will resolve when
the error:EAGAIN disapears. Either into a failed future in case the error
the error:EAGAIN disappears. Either into a failed future in case the error
code changed to something else or a success with the value of the property
whenever the property finally changes.
@ -85,7 +86,8 @@ interface @beta Efl.Model
params {
@in property: string; [[Property name.]]
}
return: future<any_value_ptr>; [[Future to be resolved when the property changes to anything other than error:EAGAIN]]
return: future<any_value_ptr>; [[Future to be resolved when the property changes to anything other than
error:EAGAIN]]
}
children_slice_get {
[[Get children slice OR full range.

View File

@ -1,5 +1,5 @@
struct @beta Efl.Ui.Factory_Item_Created_Event {
[[EFL Ui Factory event structure provided when an item was just created.]]
[[EFL UI Factory event structure provided when an item was just created.]]
model: Efl.Model; [[The model already set on the new item.]]
item: Efl.Gfx.Entity; [[The item that was just created.]]
}
@ -11,10 +11,11 @@ interface @beta Efl.Ui.Factory extends Efl.Ui.Property_Bind, Efl.Ui.Factory_Bind
create @protected {
[[Create a UI object from the necessary properties in the specified model.
Note: This is the function you need to implement for a custom factory, but if you want to use a factory, you should rely on @Efl.Ui.View_Factory.create_with_event.]]
Note: This is the function you need to implement for a custom factory, but if you want to use a factory,
you should rely on @Efl.Ui.View_Factory.create_with_event.]]
params {
models: iterator<Efl.Model>; [[Efl iterator providing the model to be associated to the new item. It should remain valid until the end of the function call.]]
models: iterator<Efl.Model>; [[Efl iterator providing the model to be associated to the new item.
It should remain valid until the end of the function call.]]
parent: Efl.Gfx.Entity; [[Efl canvas]]
}
return: future<Efl.Gfx.Entity>; [[Created UI object]]
@ -26,9 +27,11 @@ interface @beta Efl.Ui.Factory extends Efl.Ui.Property_Bind, Efl.Ui.Factory_Bind
}
}
building @const {
[[This function is called during the creation of an UI object between the @Efl.Object.constructor and @Efl.Object.finalize call.
[[This function is called during the creation of an UI object between the @Efl.Object.constructor and
@Efl.Object.finalize call.
Note: if the @Efl.Ui.Factory does keep a cache of object, this won't be called when object are pulled out of the cache.]]
Note: If the @Efl.Ui.Factory does keep a cache of objects, this won't be called when objects are pulled out
of the cache.]]
params {
ui_view: Efl.Gfx.Entity; [[The UI object being created.]]
}

View File

@ -1,6 +1,7 @@
mixin @beta Efl.Ui.Layout_Orientable_Readonly extends Efl.Ui.Layout_Orientable
{
implements {
Efl.Ui.Layout_Orientable.orientation { set; [[This will always print an error saying that this is a readonly object.]] }
Efl.Ui.Layout_Orientable.orientation { set; [[This will always print an error saying that this is a read-only
object.]] }
}
}

View File

@ -25,7 +25,10 @@ interface @beta Efl.Ui.Property_Bind
}
}
events {
properties,changed: Efl.Ui.Property_Event; [[Event dispatched when a property on the object has changed due to an user interaction on the object that a model could be interested in.]]
property,bound: stringshare; [[Event dispatched when a property on the object is bound to a model. This is useful to not overgenerate event.]]
properties,changed: Efl.Ui.Property_Event; [[Event dispatched when a property on the object has changed due to
a user interaction on the object that a model could be interested
in.]]
property,bound: stringshare; [[Event dispatched when a property on the object is bound to a model.
This is useful to avoid generating too many events.]]
}
}

View File

@ -25,9 +25,9 @@ interface @beta Efl.Ui.Range_Interactive extends Efl.Ui.Range_Display
}
events {
steady: void; [[Called when the widget's value has changed and has remained unchanged for 0.2s.
This allows filtering out unwanted "noise" from the widget if you are only
interested in its final position.
Use this event instead of @[Efl.Ui.Range_Display.changed] if you are going to perform a costly operation
on its handler. ]]
This allows filtering out unwanted "noise" from the widget if you are only
interested in its final position.
Use this event instead of @[Efl.Ui.Range_Display.changed] if you are going to perform a costly
operation on its handler. ]]
}
}

View File

@ -1,15 +1,3 @@
enum @beta Efl.Ui.Scroll_Block
{
[[Direction in which a scroller should be blocked.
Note: These options may be effective only in case of thumbscroll (i.e.
when scrolling by dragging).
]]
none = 0, [[Don't block any movement.]]
vertical = 1, [[Block vertical movement.]]
horizontal = 2 [[Block horizontal movement.]]
}
interface @beta Efl.Ui.Scrollable
{
[[Efl UI scrollable interface]]

View File

@ -1,4 +1,5 @@
import eina_types;
import efl_ui_layout_orientable;
interface @beta Efl.Ui.Scrollable_Interactive extends Efl.Ui.Scrollable
{
@ -97,7 +98,7 @@ interface @beta Efl.Ui.Scrollable_Interactive extends Efl.Ui.Scrollable
get {
}
values {
block: Efl.Ui.Scroll_Block(Efl.Ui.Scroll_Block.none); [[Which axis (or axes) to block]]
block: Efl.Ui.Layout_Orientation(Efl.Ui.Layout_Orientation.default); [[Which axis (or axes) to block]]
}
}
@property gravity {

View File

@ -3,10 +3,10 @@ import efl_ui_layout_orientable;
enum @beta Efl.Ui.Scrollbar_Mode
{
[[When should the scrollbar be shown.]]
auto = 0, [[Visible if necessary]]
on, [[Always visible]]
off, [[Always invisible]]
last [[For internal use only]]
auto = 0, [[Visible if necessary.]]
on, [[Always visible.]]
off, [[Always invisible.]]
last [[For internal use only.]]
}
interface @beta Efl.Ui.Scrollbar

View File

@ -4,10 +4,14 @@ class @beta Efl.Ui.View_Factory
data: null;
methods {
create_with_event @static {
[[Create a UI object from the necessary properties in the specified model and generate the created event on the factory when the object is done building. This function must be use by all @Efl.Ui.View that need to create object. They should not use @Efl.Ui.Factory.create directly.]]
[[Create a UI object from the necessary properties in the specified model and generate the created event on
the factory when the object is done building. This function must be use by all @Efl.Ui.View that need to
create object. They should not use @Efl.Ui.Factory.create directly.]]
params {
factory: Efl.Ui.Factory; [[The factory to use for requesting the new object from and generating the created event onto.]]
models: iterator<Efl.Model>; [[Efl iterator providing the model to be associated to the new item. It should remain valid until the end of the function call.]]
factory: Efl.Ui.Factory; [[The factory to use for requesting the new object from and generating the created
event onto.]]
models: iterator<Efl.Model>; [[Efl iterator providing the model to be associated to the new item. It should
remain valid until the end of the function call.]]
parent: Efl.Gfx.Entity; [[Efl canvas]]
}
return: future<Efl.Gfx.Entity>; [[Created UI object]]

View File

@ -1,11 +1,11 @@
enum @beta Efl.Ui.Zoom_Mode
{
[[Types of zoom available.]]
manual = 0, [[Zoom controlled normally by efl_ui_zoom_set]]
auto_fit, [[Zoom until photo fits in zoomable object]]
auto_fill, [[Zoom until photo fills zoomable object]]
auto_fit_in, [[Zoom in until photo fits in zoomable object]]
last [[Sentinel value to indicate last enum field during iteration]]
manual = 0, [[Zoom controlled manually by @Efl.Ui.Zoom.zoom_level.]]
auto_fit, [[Zoom until whole image fits inside object. Parts of the object might be left blank.]]
auto_fill, [[Zoom until image fills the object. Parts of the image might not show.]]
auto_fit_in, [[Zoom in until image fits inside object.]]
last [[Internal. Sentinel value to indicate last enum field during iteration.]]
}
interface @beta Efl.Ui.Zoom
@ -27,55 +27,44 @@ interface @beta Efl.Ui.Zoom
}
}
@property zoom_level {
set {
[[Set the zoom level of the photo
[[Zoom level of the image.
This sets the zoom level. If $zoom is 1, it means no zoom. If
it's smaller than 1, it means zoom in. If it's bigger than 1,
it means zoom out. For example, $zoom 1 will be 1:1 pixel for
pixel. $zoom 2 will be 2:1 (that is 2x2 photo pixels will
display as 1 on-screen pixel) which is a zoom out. 4:1 will
be 4x4 photo pixels as 1 screen pixel, and so on. The $zoom
parameter must be greater than 0. It is suggested to stick
to powers of 2. (1, 2, 4, 8, 16, 32, etc.).
]]
This selects the zoom level. If $zoom is 1, it means no zoom. If
it's smaller than 1, it means zoom in. If it's bigger than 1,
it means zoom out. For example, $zoom 1 will be 1:1 pixel for
pixel. $zoom 2 will be 2:1 (that is 2x2 photo pixels will
display as 1 on-screen pixel) which is a zoom out. 4:1 will
be 4x4 photo pixels as 1 screen pixel, and so on. The $zoom
parameter must be greater than 0. It is suggested to stick
to powers of 2. (1, 2, 4, 8, 16, 32, etc.).
Note that if you set @.zoom_mode to anything other than
@Efl.Ui.Zoom_Mode.manual (which is the default value) the
@.zoom_level might be changed at any time by the zoomable
object itself to account for image and viewport size changes.
]]
set {
}
get {
[[Get the zoom level of the photo
This returns the current zoom level of the zoomable object.
Note that if you set the fill mode to other than
#EFL_UI_ZOOM_MODE_MANUAL (which is the default), the
zoom level may be changed at any time by the zoomable object
itself to account for photo size and zoomable viewport size.
]]
}
values {
zoom: double; [[The zoom level to set]]
zoom: double; [[The image's current zoom level.]]
}
}
@property zoom_mode {
[[Zoom mode.
This sets the zoom mode to manual or one of several automatic
levels. @Efl.Ui.Zoom_Mode.manual means that zoom is controlled
manually by @.zoom_level and will stay at that level until
changed by code or until @.zoom_mode is changed. This is the
default mode. The Automatic modes will allow the zoomable object
to automatically adjust zoom mode based on image and viewport
size changes.
]]
set {
[[Set the zoom mode
This sets the zoom mode to manual or one of several automatic
levels. Manual (EFL_UI_ZOOM_MODE_MANUAL) means that zoom
is set manually by @.zoom_level.set and will stay at that level until
changed by code or until zoom mode is changed. This is the
default mode. The Automatic modes will allow the zoomable object
to automatically adjust zoom mode based on properties.
#EFL_UI_ZOOM_MODE_AUTO_FIT) will adjust zoom so the photo
fits EXACTLY inside the scroll frame with no pixels outside this
region. #EFL_UI_ZOOM_MODE_AUTO_FILL will be similar but
ensure no pixels within the frame are left unfilled.
]]
}
get {
[[Get the zoom mode
This gets the current zoom mode of the zoomable object.
]]
}
values {
mode: Efl.Ui.Zoom_Mode; [[The zoom mode.]]

View File

@ -284,7 +284,7 @@ mixin @beta Efl.Access.Object requires Efl.Object
}
}
@property role_name @protected @beta {
[[Gets human-readable string indentifying object accessibility role.]]
[[Gets human-readable string identifying object accessibility role.]]
get {
}
values {
@ -292,11 +292,12 @@ mixin @beta Efl.Access.Object requires Efl.Object
}
}
@property attributes @protected @beta {
[[Gets key-value pairs indentifying object extra attributes. Must be free by a user.]]
[[Gets key-value pairs identifying object extra attributes. Must be free by a user.]]
get {
}
values {
attributes: list<ptr(Efl.Access.Attribute) @owned> @owned; [[List of object attributes, Must be freed by the user]]
attributes: list<ptr(Efl.Access.Attribute) @owned> @owned; [[List of object attributes.
Must be freed by the user]]
}
}
attribute_append {

View File

@ -55,7 +55,9 @@ interface @beta Efl.Access.Text
offset: int; [[Position in text.]]
}
values {
character: Eina.Unicode; [[Character at offset. 0 when out-of bounds offset has been given. Codepoints between DC80 and DCFF indicates that string includes invalid UTF8 chars.]]
character: Eina.Unicode; [[Character at offset. 0 when out-of bounds offset has been given.
Codepoints between DC80 and DCFF indicate that string includes invalid
UTF8 chars.]]
}
}
@property string @protected @beta {
@ -64,8 +66,10 @@ interface @beta Efl.Access.Text
}
keys {
granularity: Efl.Access.Text_Granularity; [[Text granularity]]
start_offset: ptr(int); [[Offset indicating start of string according to given granularity. -1 in case of error.]]
end_offset: ptr(int); [[Offset indicating end of string according to given granularity. -1 in case of error.]]
start_offset: ptr(int); [[Offset indicating start of string according to given granularity.
-1 in case of error.]]
end_offset: ptr(int); [[Offset indicating end of string according to given granularity.
-1 in case of error.]]
}
values {
string: mstring @owned; [[Newly allocated UTF-8 encoded string. Must be free by a user.]]
@ -136,7 +140,8 @@ interface @beta Efl.Access.Text
}
keys {
offset: int; [[Offset]]
screen_coords: bool; [[If $true, x and y values will be relative to screen origin, otherwise relative to canvas]]
screen_coords: bool; [[If $true, x and y values will be relative to screen origin,
otherwise relative to canvas]]
}
values {
rect: Eina.Rect; [[Extents rectangle]]
@ -155,7 +160,8 @@ interface @beta Efl.Access.Text
get {
}
keys {
screen_coords: bool; [[If $true, x and y values will be relative to screen origin, otherwise relative to canvas]]
screen_coords: bool; [[If $true, x and y values will be relative to screen origin,
otherwise relative to canvas]]
x: int; [[X coordinate]]
y: int; [[Y coordinate]]
}
@ -168,7 +174,8 @@ interface @beta Efl.Access.Text
get {
}
keys {
screen_coords: bool; [[If $true, x and y values will be relative to screen origin, otherwise relative to canvas]]
screen_coords: bool; [[If $true, x and y values will be relative to screen origin,
otherwise relative to canvas]]
rect: Eina.Rect; [[Bounding box]]
xclip: Efl.Access.Text_Clip_Type; [[xclip]]
yclip: Efl.Access.Text_Clip_Type; [[yclip]]
@ -183,7 +190,8 @@ interface @beta Efl.Access.Text
return: bool; [[$true if range extents, $false otherwise]]
}
keys {
screen_coords: bool; [[If $true, x and y values will be relative to screen origin, otherwise relative to canvas]]
screen_coords: bool; [[If $true, x and y values will be relative to screen origin,
otherwise relative to canvas]]
start_offset: int; [[Start offset]]
end_offset: int; [[End offset]]
}

View File

@ -3,24 +3,26 @@ enum Efl.Ui.Animation_View_State
{
[[State of animation view]]
not_ready, [[Animation is not ready to play. (Probably, it didn't file set yet or failed to read file.]]
play, [[Animation is on playing. see @Efl.Ui.Animation_View.play]]
play_back, [[Animation is on playing back (rewinding). see @Efl.Ui.Animation_View.play_back]]
pause, [[Animation has been paused. To continue animation, call @Efl.Ui.Animation_View.resume. see @Efl.Ui.Animation_View.pause]]
stop [[Animation view successfully loaded a file then readied for playing. Otherwise after finished animation or stopped forcely by request. see @Efl.Ui.Animation_View.stop]]
play, [[Animation is playing. See @Efl.Ui.Animation_View.play.]]
play_back, [[Animation is playing back (rewinding). See @Efl.Ui.Animation_View.play_back.]]
pause, [[Animation has been paused. To continue animation call @Efl.Ui.Animation_View.resume.
See @Efl.Ui.Animation_View.pause.]]
stop [[Animation view successfully loaded a file then readied for playing.
Otherwise after finished animation or stopped forcibly by request. See @Efl.Ui.Animation_View.stop.]]
}
class @beta Efl.Ui.Animation_View extends Efl.Ui.Widget implements Efl.Gfx.View, Efl.File, Efl.Part
{
[[Elementary Animation view class.
Animation view is designed to show and play animation of
vector graphics based content. It hides all efl_canvas_vg details
vector graphics based content. It hides all @Efl.Canvas.Vg.Object details
but just open an API to read vector data from file. Also, it implements
details of animation control methods of Vector.
Vector data could contain static or animatable vector elements including
animation infomation. Currently approved vector data file format is svg, json and eet.
Only json(known for Lottie file as well) and eet could contains animation infomation,
currently Animation_View is supporting.
animation information. Available vector data file formats are SVG, JSON and EET.
@Efl.Ui.Animation_View currently only supports the animation information contained in
JSON (known as Lottie file as well) and EET files.
]]
event_prefix: efl_ui_animation_view;
methods {
@ -59,7 +61,7 @@ class @beta Efl.Ui.Animation_View extends Efl.Ui.Widget implements Efl.Gfx.View,
get {
}
values {
auto_repeat: bool; [[Loop mode, Defalut is $false.]]
auto_repeat: bool; [[Loop mode, Default is $false.]]
}
}
@property speed {
@ -168,7 +170,7 @@ class @beta Efl.Ui.Animation_View extends Efl.Ui.Widget implements Efl.Gfx.View,
stop {
[[Stop playing animation.
Stop animation instatly regardless of it's status and reset to
Stop animation instantly regardless of its status and reset to
show first frame of animation. Even though current animation is paused,
the animation status will be stopped.
]]
@ -186,7 +188,7 @@ class @beta Efl.Ui.Animation_View extends Efl.Ui.Widget implements Efl.Gfx.View,
}
@property state {
[[Current animation view state.
see @Efl.Ui.Animation_View_State
See @Efl.Ui.Animation_View_State
]]
get{
}
@ -196,13 +198,13 @@ class @beta Efl.Ui.Animation_View extends Efl.Ui.Widget implements Efl.Gfx.View,
}
is_playing_back {
[[Returns the status whether current animation is on playing forward or backward.
warning: If animation view is not on playing, it will return $false.
Note: If animation view is not on playing, it will return $false.
]]
return: bool; [[$true, if animation on playing back, $false otherwise.]]
}
@property frame_count {
[[The index of end frame of the animation view, if it's animated.
note : frame number starts with 0.
Note : frame number starts with 0.
]]
get {
}

View File

@ -1,4 +1,5 @@
class @beta Efl.Ui.Bg extends Efl.Ui.Layout_Base implements Efl.File, Efl.Gfx.Color, Efl.Gfx.Image, Efl.Gfx.Image_Load_Controller
class @beta Efl.Ui.Bg extends Efl.Ui.Layout_Base
implements Efl.File, Efl.Gfx.Color, Efl.Gfx.Image, Efl.Gfx.Image_Load_Controller
{
[[The bg (background) widget is used for setting (solid) background decorations
for a window (unless it has transparency enabled) or for any container object. It

View File

@ -1,22 +1,24 @@
class @beta Efl.Ui.Caching_Factory extends Efl.Ui.Widget_Factory
{
[[Efl Ui Factory that provides object caching.
[[Efl UI Factory that provides object caching.
This factory handles caching of one type of object that must be an @Efl.Gfx.Entity with an @Efl.Ui.View interface defined.
This factory will rely on its parent class @Efl.Ui.Widget_Factory for creating the subset of class that match @Efl.Ui.Widget
interface.
This factory handles caching of one type of object that must be an @Efl.Gfx.Entity with an @Efl.Ui.View interface
defined.
This factory will rely on its parent class @Efl.Ui.Widget_Factory for creating the subset of class that match the
@Efl.Ui.Widget interface.
The factory will automatically empties the cache when the application goes into pause.
Creating objects is costly and time consuming, keeping a few on hand for when you next will need them helps a lot.
This is what this factory caching infrastructure provides. It will create the object from the class defined on it and
set the parent and the model as needed for all created items. The View has to release the Item using the
This is what this factory caching infrastructure provides. It will create the object from the class defined on it
and set the parent and the model as needed for all created items. The View has to release the Item using the
release function of the Factory interface for all of this to work properly.
The cache might decide to flush itself when the application event pause is triggered.
]]
methods {
@property memory_limit {
[[Define the maxium size in Bytes that all the object waiting on standby in the cache take. They must provide the @Efl.Cached.Item interface for an accurate accounting.]]
[[Define the maximum size in Bytes that all the objects waiting on standby in the cache can take.
They must provide the @Efl.Cached.Item interface for an accurate accounting.]]
get {}
set {}
values {

View File

@ -16,7 +16,8 @@ enum @beta Efl.Ui.Calendar_Weekday
last [[Sentinel value to indicate last enum field during iteration]]
}
class @beta Efl.Ui.Calendar extends Efl.Ui.Layout_Base implements Efl.Ui.Focus.Composition, Efl.Access.Widget.Action, Efl.Ui.Format
class @beta Efl.Ui.Calendar extends Efl.Ui.Layout_Base
implements Efl.Ui.Focus.Composition, Efl.Access.Widget.Action, Efl.Ui.Format
{
[[Calendar widget

View File

@ -1,4 +1,6 @@
class @beta Efl.Ui.Check extends Efl.Ui.Layout_Base implements Efl.Access.Widget.Action, Efl.Text, Efl.Content, Efl.Input.Clickable, Efl.Ui.Selectable
class @beta Efl.Ui.Check extends Efl.Ui.Layout_Base
implements Efl.Access.Widget.Action, Efl.Text, Efl.Content, Efl.Input.Clickable,
Efl.Ui.Selectable
{
[[Check widget

View File

@ -130,6 +130,9 @@ class @beta Efl.Ui.Clock extends Efl.Ui.Layout_Base
Hour: default value will be in terms of 24 hr format (0~23)
Minute: default value range is from 0 to 59.
Compare with @.field_limit which allows setting limits to each
individual time field.
]]
values {
mintime: Efl.Time; [[Time structure containing the minimum time value.]]
@ -150,6 +153,9 @@ class @beta Efl.Ui.Clock extends Efl.Ui.Layout_Base
Hour: default value will be in terms of 24 hr format (0~23)
Minute: default value range is from 0 to 59.
Compare with @.field_limit which allows setting limits to each
individual time field.
]]
values {
maxtime: Efl.Time; [[Time structure containing the maximum time value.]]
@ -176,48 +182,52 @@ class @beta Efl.Ui.Clock extends Efl.Ui.Layout_Base
}
}
@property field_visible {
[[ The field to be visible/not.]]
[[Visibility of each field.
Allows, for example, hiding the year field by setting
@Efl.Ui.Clock_Type.year's visibility to $false.
Setting this API to $true in itself doesn't ensure that the field is
visible. The field's format also must be present in the overall clock
format. If a field's visibility is set to $false then it won't appear
even though its format is present. In summary, if this API is set to
true and the corresponding field's format is present in clock format,
the field is visible.
By default the field visibility is set to $true.
]]
set{} get{}
keys {
fieldtype: Efl.Ui.Clock_Type; [[Type of the field. #EFL_UI_CLOCK_TYPE_YEAR etc.]]
fieldtype: Efl.Ui.Clock_Type; [[Type of the field.]]
}
values {
visible: bool; [[$true field can be visible, $false otherwise.]]
}
}
@property field_limit {
[[Numerical limits of each field.
Limits can be set to individual fields, independently, except
for the AM/PM field. Any field can display the values only in between
these minimum and maximum limits unless the corresponding time
value is restricted from MinTime to MaxTime. That is, min/max
field limits always work under the limitations of mintime/maxtime.
There is no provision to set the limits of AM/PM field.
Compare with @.time_min and @.time_max which set a global limit to
the acceptable dates instead of to each individual field.
]]
set {
[[Set a field to be visible or not.
Setting this API to $true in itself doen't ensure that the field is
visible. The field's format also must be present
in the overall clock format. If a field's visibility is set
to $false then it won't appear even though its format is
present. In summary, if this API is
set to true and the corresponding field's format is present
in clock format, the field is visible.
By default the field visibility is set to $true.
]]
}
get {
[[ Get the field limits of a field.
Limits can be set to individual fields, independently, except
for the AM/PM field. Any field can display the values only in between
these minimum and maximum limits unless the corresponding time
value is restricted from MinTime to MaxTime. That is, min/max
field limits always work under the limitations of mintime/maxtime.
There is no provision to set the limits of AM/PM field.
]]
}
keys {
fieldtype: Efl.Ui.Clock_Type; [[Type of the field. #EFL_UI_CLOCK_TYPE_YEAR etc.]]
fieldtype: Efl.Ui.Clock_Type; [[Type of the field.]]
}
values {
min: int; [[Reference to field's minimum value.]]
max: int; [[Reference to field's maximum value.]]
min: int; [[Acceptable minimum value for this field.]]
max: int; [[Acceptable maximum value for this field.]]
}
}
}

View File

@ -1,5 +1,5 @@
class @beta Efl.Ui.Collection_Focus_Manager extends Efl.Ui.Focus.Manager_Calc {
[[Internal class which implements collection specific behaviour, cannot be used outside of collection]]
[[Internal class which implements collection specific behaviour, cannot be used outside of @Efl.Ui.Collection.]]
implements {
Efl.Ui.Focus.Manager.manager_focus { set; }
Efl.Ui.Focus.Manager.request_move;

View File

@ -2,29 +2,46 @@ import efl_ui_layout_orientable;
enum @beta Efl.Ui.Flip_Mode
{
[[Efl UI flip mode ]]
rotate_y_center_axis, [[Rotate Y center axis flip mode]]
rotate_x_center_axis, [[Rotate X center axis flip mode]]
rotate_xz_center_axis, [[Rotate XZ center axis flip mode]]
rotate_yz_center_axis, [[Rotate YZ center axis flip mode]]
cube_left, [[Cube left flip mode]]
cube_right, [[Cube right flip mode]]
cube_up, [[Cube up flip mode]]
cube_down, [[Cube down flip mode]]
page_left, [[Page left flip mode]]
page_right, [[Page right flip mode]]
page_up, [[Page up flip mode]]
page_down, [[Page down flip mode]]
cross_fade, [[Cross fade flip mode]]
[[Efl UI flip mode used by @Efl.Ui.Flip.go and @Efl.Ui.Flip.go_to.]]
rotate_y_center_axis, [[Rotate Y center axis flip mode: Rotates the currently visible
content around a vertical axis in the middle of its width, the
other content is shown as the other side of the flip.]]
rotate_x_center_axis, [[Rotate X center axis flip mode: Rotates the currently visible
content around a horizontal axis in the middle of its height,
the other content is shown as the other side of the flip.]]
rotate_xz_center_axis, [[Rotate XZ center axis flip mode: Rotates the currently visible
content around a diagonal axis in the middle of its width, the
other content is shown as the other side of the flip.]]
rotate_yz_center_axis, [[Rotate YZ center axis flip mode: Rotates the currently visible
content around a diagonal axis in the middle of its height, the
other content is shown as the other side of the flip.]]
cube_left, [[Cube left flip mode: Rotates the currently visible content to the left as if
the flip was a cube, the other content is shown as the right face of the cube.]]
cube_right, [[Cube right flip mode: Rotates the currently visible content to the right as if
the flip was a cube, the other content is shown as the left face of the cube.]]
cube_up, [[Cube up flip mode: Rotates the currently visible content up as if the flip was a
cube, the other content is shown as the bottom face of the cube.]]
cube_down, [[Cube down flip mode: Rotates the currently visible content down as if the flip
was a cube, the other content is shown as the upper face of the cube.]]
page_left, [[Page left flip mode: Moves the currently visible content to the left as if the
flip was a book, the other content is shown as the page below that.]]
page_right, [[Page right flip mode: Moves the currently visible content to the right as if
the flip was a book, the other content is shown as the page below it.]]
page_up, [[Page up flip mode: Moves the currently visible content up as if the flip was a
book, the other content is shown as the page below it.]]
page_down, [[Page down flip mode: Moves the currently visible content down as if the flip
was a book, the other content is shown as the page below that.]]
cross_fade, [[Cross fade flip mode: Fades out the currently visible content, while fading in
the invisible content.]]
}
enum @beta Efl.Ui.Flip_Interaction
{
[[Efl UI flip interaction]]
none, [[No interaction]]
rotate, [[Rotate interaction]]
cube, [[Cube interaction]]
page [[Page interaction]]
[[Efl UI flip interaction mode used by @Efl.Ui.Flip.interaction.]]
none, [[No interaction.]]
rotate, [[Rotate interaction.]]
cube, [[Cube interaction.]]
page [[Page interaction.]]
}
class @beta Efl.Ui.Flip extends Efl.Ui.Widget implements Efl.Pack_Linear
@ -32,28 +49,28 @@ class @beta Efl.Ui.Flip extends Efl.Ui.Widget implements Efl.Pack_Linear
[[Efl UI flip class]]
methods {
@property interaction {
[[Interactive flip mode.
This selects if the flip should be interactive (allow user to
click and drag a side of the flip to reveal the back page
and cause it to flip). By default a flip is not interactive.
You may also need to set which sides of the flip are "active"
for flipping and how much space they use (a minimum of a
finger size) with @.interaction_direction_enabled_set
and @.interaction_direction_hitsize_set.
The four available modes of interaction are @Efl.Ui.Flip_Interaction.none,
@Efl.Ui.Flip_Interaction.rotate, @Efl.Ui.Flip_Interaction.cube and
@Efl.Ui.Flip_Interaction.page.
Note: @Efl.Ui.Flip_Interaction.rotate cannot trigger
@Efl.Ui.Flip_Mode.rotate_xz_center_axis or
@Efl.Ui.Flip_Mode.rotate_yz_center_axis animations. These are only
available through the @.go and @.go_to methods.
]]
set {
[[Set the interactive flip mode.
This sets if the flip should be interactive (allow user to
click and drag a side of the flip to reveal the back page
and cause it to flip). By default a flip is not interactive.
You may also need to set which sides of the flip are "active"
for flipping and how much space they use (a minimum of a
finger size) with @.interaction_direction_enabled_set
and @.interaction_direction_hitsize_set.
The four available mode of interaction are
#ELM_FLIP_INTERACTION_NONE, #ELM_FLIP_INTERACTION_ROTATE,
#ELM_FLIP_INTERACTION_CUBE and #ELM_FLIP_INTERACTION_PAGE.
Note: #ELM_FLIP_INTERACTION_ROTATE won't cause
#ELM_FLIP_ROTATE_XZ_CENTER_AXIS or #ELM_FLIP_ROTATE_YZ_CENTER_AXIS
to happen, those can only be achieved with @.go.
]]
}
get {
[[Get the interactive flip mode.]]
}
values {
mode: Efl.Ui.Flip_Interaction; [[The interactive flip mode to use.]]
@ -74,7 +91,7 @@ class @beta Efl.Ui.Flip extends Efl.Ui.Widget implements Efl.Pack_Linear
entire flip. There is however a consideration to be made in that
the area will never be smaller than the finger size set (as set
in your Elementary configuration), and dragging must always start
from the opposite half of the flip (eg. right half of the flip
from the opposite half of the flip (e.g. right half of the flip
when dragging to the left).
Note: The $dir parameter is not actually related to the direction
@ -128,40 +145,7 @@ class @beta Efl.Ui.Flip extends Efl.Ui.Widget implements Efl.Pack_Linear
This effectively hides the currently visible content and shows
the hidden one.
There a number of possible animations to use for flipping,
namely #ELM_FLIP_ROTATE_X_CENTER_AXIS (rotate the currently
visible content around a horizontal axis in the middle of its
height, the other content is shown as the other side of the flip),
#ELM_FLIP_ROTATE_Y_CENTER_AXIS (rotate the currently visible
content around a vertical axis in the middle of its width, the
other content is shown as the other side of the flip),
#ELM_FLIP_ROTATE_XZ_CENTER_AXIS (rotate the currently visible
content around a diagonal axis in the middle of its width, the
other content is shown as the other side of the flip),
#ELM_FLIP_ROTATE_YZ_CENTER_AXIS (rotate the currently visible
content around a diagonal axis in the middle of its height, the
other content is shown as the other side of the flip).
#ELM_FLIP_CUBE_LEFT (rotate the currently visible content to the
left as if the flip was a cube, the other content is shown as the
right face of the cube), #ELM_FLIP_CUBE_RIGHT (rotate the
currently visible content to the right as if the flip was a
cube, the other content is shown as the left face of the cube),
#ELM_FLIP_CUBE_UP (rotate the currently visible content up as if
the flip was a cube, the other content is shown as the bottom face
of the cube), #ELM_FLIP_CUBE_DOWN (rotate the currently visible
content down as if the flip was a cube, the other content is shown
as the upper face of the cube), #ELM_FLIP_PAGE_LEFT (move the
currently visible content to the left as if the flip was a book,
the other content is shown as the page below that),
#ELM_FLIP_PAGE_RIGHT (move the currently visible content to the
right as if the flip was a book, the other content is shown as the
page below it), #ELM_FLIP_PAGE_UP (move the currently visible
content up as if the flip was a book, the other content is shown
as the page below it), #ELM_FLIP_PAGE_DOWN (move the
currently visible content down as if the flip was a book, the
other content is shown as the page below that) and #ELM_FLIP_CROSS_FADE
(fade out the currently visible content, while fading in the
invisible content).
Compare with @.go_to which only switches sides if necessary.
]]
/* FIXME-doc
* @image html elm_flip.png
@ -172,44 +156,13 @@ class @beta Efl.Ui.Flip extends Efl.Ui.Widget implements Efl.Pack_Linear
}
}
go_to {
[[Runs the flip animation to front or back.
[[Runs the flip animation to front or back as selected with $front.
If the flip is already showing this side, nothing is done
(Compare with @.go which always switches sides).
Flips the front and back contents using the $mode animation.
This effectively hides the currently visible content and shows
he hidden one.
There a number of possible animations to use for flipping,
namely #ELM_FLIP_ROTATE_X_CENTER_AXIS (rotate the currently
visible content around a horizontal axis in the middle of its
height, the other content is shown as the other side of the flip),
#ELM_FLIP_ROTATE_Y_CENTER_AXIS (rotate the currently visible
content around a vertical axis in the middle of its width, the
other content is shown as the other side of the flip),
#ELM_FLIP_ROTATE_XZ_CENTER_AXIS (rotate the currently visible
content around a diagonal axis in the middle of its width, the
other content is shown as the other side of the flip),
#ELM_FLIP_ROTATE_YZ_CENTER_AXIS (rotate the currently visible
content around a diagonal axis in the middle of its height, the
other content is shown as the other side of the flip).
#ELM_FLIP_CUBE_LEFT (rotate the currently visible content to the
left as if the flip was a cube, the other content is show as the
right face of the cube), #ELM_FLIP_CUBE_RIGHT (rotate the
currently visible content to the right as if the flip was a
cube, the other content is show as the left face of the cube),
#ELM_FLIP_CUBE_UP (rotate the currently visible content up as if
the flip was a cube, the other content is shown as the bottom face
of the cube), #ELM_FLIP_CUBE_DOWN (rotate the currently visible
content down as if the flip was a cube, the other content is shown
as the upper face of the cube), #ELM_FLIP_PAGE_LEFT (move the
currently visible content to the left as if the flip was a book,
the other content is shown as the page below that),
#ELM_FLIP_PAGE_RIGHT (move the currently visible content to the
right as if the flip was a book, the other content is shown as the
page below it), #ELM_FLIP_PAGE_UP (move the currently visible
content up as if the flip was a book, the other content is shown
as the page below it) and #ELM_FLIP_PAGE_DOWN (move the
currently visible content down as if the flip was a book, the
other content is shown as the page below that).
]]
/* FIXME-doc
* @image html elm_flip.png

View File

@ -1,26 +1,28 @@
mixin @beta Efl.Ui.Focus.Composition requires Efl.Ui.Widget {
[[This defines the inheriting widget as Composition widget.
A composition widget is a widget that's the logical parent of another set of widgets which can be used for interaction.
A composition widget is a widget that's the logical parent of another set of widgets
which can be used for interaction.
]]
methods {
@property composition_elements @protected {
[[Set the order of elements that will be used for composition
Elements of the list can be either an Efl.Ui.Widget, an Efl.Ui.Focus.Object or an Efl.Gfx.
Elements of the list can be either an @Efl.Ui.Widget, an @Efl.Ui.Focus.Object or an @Efl.Gfx.Entity.
If the element is an Efl.Gfx.Entity, then the geometry is used as focus geometry, the focus property is redirected to the evas focus property. The mixin will take care of registration.
If the element is an @Efl.Ui.Widget nothing is done and the widget is simply part of the order.
If the element is an Efl.Ui.Focus.Object, then the mixin will take care of registering the element.
If the element is an @Efl.Ui.Focus.Object, then the mixin will take care of registering the element.
If the element is a Efl.Ui.Widget nothing is done and the widget is simply part of the order.
If the element is an @Efl.Gfx.Entity, then the geometry is used as focus geometry,
the focus property is redirected to the evas focus property. The mixin will take care of registration.
]]
values {
logical_order : list<Efl.Gfx.Entity> @owned; [[The order to use]]
}
}
dirty @protected {
[[ Mark this widget as dirty, the children can be considered to be changed after that call
[[Mark this widget as dirty, the children can be considered to be changed after that call
]]
}
prepare @protected {

View File

@ -1,23 +1,28 @@
class @beta Efl.Ui.Focus.Composition_Adapter extends Efl.Object implements Efl.Ui.Focus.Object
{
[[EFL UI Focus Composition Adapter class]]
[[This class allows an @Efl.Canvas.Object to receive focus as if they were @Efl.Ui.Widget.
Instantiate this class and manually set its properties to the appropriate objects.
]]
methods {
@property canvas_object {
[[Canvas Object Property]]
[[The canvas object that needs to receive focus.]]
values {
v : Efl.Canvas.Object; [[EFL canvas object]]
v : Efl.Canvas.Object; [[The canvas object.]]
}
}
@property focus_manager_object {
[[The focus manager handling the focus for the @.canvas_object.]]
set {}
values {
v : Efl.Ui.Focus.Manager;
v : Efl.Ui.Focus.Manager; [[The focus manager.]]
}
}
@property focus_manager_parent {
[[The focus parent for the @.canvas_object.]]
set {}
values {
parent : Efl.Ui.Focus.Object;
parent : Efl.Ui.Focus.Object; [[The focus parent.]]
}
}
}

View File

@ -1,22 +1,24 @@
mixin @beta Efl.Ui.Focus.Layer requires Efl.Ui.Widget extends Efl.Ui.Widget_Focus_Manager {
[[This defines the inheriting widget as focus layer
[[This defines the widget as a focus layer.
A focus layer is the uppermost one which received input and handles all focus related events for as long as it exists and is visible. It's NOT possible to escape this layer with focus movement.
A focus layer is the uppermost widget which receives input and handles all focus related events for as long as
it exists and is visible. It's not possible to escape this layer with focus movements.
Once the object is hidden or destroyed the focus will go back to the mainwindow, where it was before.
Once the object is hidden or destroyed the focus will go back to the main window, where it was before.
]]
methods {
@property enable @protected {
[[Enable property]]
[[Whether the focus layer is enabled.
This can be handled automatically through @Efl.Gfx.Entity.visible and @.behaviour.]]
values {
v : bool; [[$true to set enable the layer $false to disable it]]
v : bool; [[$true to set enable.]]
}
}
@property behaviour @protected {
[[Constructor for setting the behaviour of the layer]]
[[Sets the behaviour of the focus layer.]]
values {
enable_on_visible : bool; [[$true means layer will set itself once the inheriting widget becomes visible, $false means the layer isn't enabled automatically]]
cycle : bool; [[If $true the focus will cycle in the layer, if $false]]
enable_on_visible : bool; [[$true means layer will enable itself once the widget becomes visible]]
cycle : bool; [[If $true the focus will cycle (from last object to first, and vice versa) in the layer.]]
}
}
}

View File

@ -4,45 +4,45 @@ import eina_types;
struct @beta @free(efl_ui_focus_relation_free) Efl.Ui.Focus.Relations {
[[Structure holding the graph of relations between focusable objects.
]]
right : list<Efl.Ui.Focus.Object> @owned; [[List of objects on the right side]]
left : list<Efl.Ui.Focus.Object> @owned; [[List of objects on the left side]]
top : list<Efl.Ui.Focus.Object> @owned; [[List of objects above]]
down : list<Efl.Ui.Focus.Object> @owned; [[List of objects below]]
next : Efl.Ui.Focus.Object; [[Next object]]
prev : Efl.Ui.Focus.Object; [[Previous object]]
parent : Efl.Ui.Focus.Object; [[Parent object]]
redirect : Efl.Ui.Focus.Manager; [[Redirect manager]]
node : Efl.Ui.Focus.Object; [[The node where this is the information from]]
logical : bool; [[$true if this node is only logical]]
position_in_history : int; [[The position in the history stack]]
right : list<Efl.Ui.Focus.Object> @owned; [[List of objects to the right.]]
left : list<Efl.Ui.Focus.Object> @owned; [[List of objects to the left.]]
top : list<Efl.Ui.Focus.Object> @owned; [[List of objects above.]]
down : list<Efl.Ui.Focus.Object> @owned; [[List of objects below.]]
next : Efl.Ui.Focus.Object; [[Next object.]]
prev : Efl.Ui.Focus.Object; [[Previous object.]]
parent : Efl.Ui.Focus.Object; [[Parent object.]]
redirect : Efl.Ui.Focus.Manager; [[Redirect manager.]]
node : Efl.Ui.Focus.Object; [[The node where this information is from.]]
logical : bool; [[$true if this is a logical (non-regular) node.]]
position_in_history : int; [[The position in the history stack.]]
}
struct Efl.Ui.Focus.Manager_Logical_End_Detail {
[[Structure holding the focus object with extra information on logical end
[[Structure holding the focus object with extra information on logical end.
@since 1.22
]]
is_regular_end : bool; [[$true if element is registered as regular element in the @Efl.Ui.Focus.Manager obejct, $false otherwise]]
element : Efl.Ui.Focus.Object; [[The last element of the logical chain in the @Efl.Ui.Focus.Manager]]
is_regular_end : bool; [[$true if element is registered as regular element in the @Efl.Ui.Focus.Manager object.]]
element : Efl.Ui.Focus.Object; [[The last element of the logical chain in the @Efl.Ui.Focus.Manager.]]
}
interface Efl.Ui.Focus.Manager {
[[Interface for managing focus objects
[[Interface for managing focus objects.
This interface is built in order to support movement of the focus property in a set of widgets.
The movement of the focus property can happen in a tree manner, or a graph manner.
The movement is also keeping track of the history of focused elements.
The tree interpretation differentiates between logical and non-logical widgets,
a logical widget cannot receive focus whereas a non-logical one can.
The tree interpretation differentiates between logical and regular widgets:
Logical widgets (typically containers) cannot receive focus, whereas Regular ones (like buttons) can.
@since 1.22
]]
methods {
move {
[[Move the focus in the given direction.
[[Moves the focus in the given direction to the next regular widget.
This call flushes all changes.
This means all changes between the last flush and now are computed.
This means all changes since last flush are computed.
]]
params {
direction : Efl.Ui.Focus.Direction; [[The direction to move to.]]
@ -50,21 +50,22 @@ interface Efl.Ui.Focus.Manager {
return : Efl.Ui.Focus.Object; [[The element which is now focused.]]
}
request_move {
[[Return the object in the $direction from $child.]]
[[Returns the object in the $direction from $child.]]
params {
direction : Efl.Ui.Focus.Direction; [[Direction to move focus.]]
child : Efl.Ui.Focus.Object; [[The child to move from. Pass $null to indicate the currently focused child.]]
logical : bool; [[Wether you want to have a logical node as result or a non-logical.
Note, in a @.move call no logical node will get focus.]]
child : Efl.Ui.Focus.Object; [[The child to move from.
Pass $null to indicate the currently focused child.]]
logical : bool; [[Wether you want to have a logical node as result or a regular.
Note that in a @.move call logical nodes will not get focus.]]
}
return : Efl.Ui.Focus.Object; [[Object that would receive focus if moved in the given direction.]]
}
@property manager_focus {
[[The element which is currently focused by this manager
[[The element which is currently focused by this manager.
Use this property to retrieve the object currently being focused, or to set the focus
to a new one.
When $focus is a logical child (which cannot receive focus), the next non-logical
When $focus is a logical child (which cannot receive focus), the next regular
object is selected instead. If there is no such object, focus does not change.
]]
@ -80,14 +81,14 @@ interface Efl.Ui.Focus.Manager {
anymore.
]]
values {
redirect : Efl.Ui.Focus.Manager; [[The redirect manager.]]
redirect : Efl.Ui.Focus.Manager; [[The new focus manager.]]
}
}
@property border_elements {
[[The list of elements which are at the border of the graph.
[[Elements which are at the border of the graph.
This means one of the relations right,left or down,up are not set.
This call flushes all changes. See @Efl.Ui.Focus.Manager.move
This call flushes all changes. See @Efl.Ui.Focus.Manager.move.
]]
get {}
values {
@ -96,7 +97,7 @@ interface Efl.Ui.Focus.Manager {
}
}
@property viewport_elements {
[[Get all elements that are at the border of the viewport
[[Elements that are at the border of the viewport
Every element returned by this is located inside the viewport rectangle,
but has a right, left, down or up neighbor outside the viewport.
@ -106,30 +107,28 @@ interface Efl.Ui.Focus.Manager {
viewport : Eina.Rect; [[The rectangle defining the viewport.]]
}
values {
viewport_elements : iterator<Efl.Ui.Focus.Object>; [[The list of border objects.]]
viewport_elements : iterator<Efl.Ui.Focus.Object>; [[An iterator over the viewport border objects.]]
}
}
@property root {
[[Root node for all logical subtrees.
[[Root node for all logical sub-trees.
This property can only be set once.
]]
set {
return : bool; [[If $true, this is the root node]]
return : bool; [[$true on success, $false if it had already been set.]]
}
get {}
values {
root : Efl.Ui.Focus.Object; [[Will be registered into
this manager object.]]
root : Efl.Ui.Focus.Object; [[Object to register as the root of this manager object.]]
}
}
request_subchild {
[[Return the widget in the direction next.
[[Returns the widget in the direction next.
The returned widget is a child of $root.
It's guaranteed that child will not be prepared once again,
It's guaranteed that child will not be prepared again,
so you can call this function inside a @Efl.Ui.Focus.Object.setup_order call.
]]
params {
@ -138,9 +137,9 @@ interface Efl.Ui.Focus.Manager {
return : Efl.Ui.Focus.Object; [[Child of passed parameter.]]
}
fetch @beta {
[[This will fetch the data from a registered node.
[[Fetches the data from a registered node.
Be aware this function will trigger a computation of all dirty nodes.
Note: This function triggers a computation of all dirty nodes.
]]
params {
child : Efl.Ui.Focus.Object; [[The child object to inspect.]]
@ -149,14 +148,15 @@ interface Efl.Ui.Focus.Manager {
starting from $child.]]
}
logical_end {
[[Return the last logical object.
[[Returns the last logical object.
The returned object is the last object that would be returned if you start at the root and move the direction into next.
The returned object is the last object that would be returned if you start at the root
and move in the "next" direction.
]]
return : Efl.Ui.Focus.Manager_Logical_End_Detail; [[Last object.]]
}
reset_history {
[[Reset the history stack of this manager object.
[[Resets the history stack of this manager object.
This means the uppermost element will be unfocused, and all other elements
will be removed from the remembered list.
@ -165,7 +165,7 @@ interface Efl.Ui.Focus.Manager {
]]
}
pop_history_stack {
[[Remove the uppermost history element, and focus the previous one.
[[Removes the uppermost history element, and focuses the previous one.
If there is an element that was focused before, it will be used.
Otherwise, the best fitting element from the registered elements will be focused.
@ -174,7 +174,7 @@ interface Efl.Ui.Focus.Manager {
setup_on_first_touch {
[[Called when this manager is set as redirect.
In case that this is called as an result of a move call, $direction and $entry
In case that this is called as a result of a move call, $direction and $entry
will be set to the direction of the move call, and the $entry object will be
set to the object that had this manager as redirect property.
]]
@ -184,27 +184,32 @@ interface Efl.Ui.Focus.Manager {
}
}
dirty_logic_freeze {
[[This disables the cache invalidation when an object is moved.
[[Disables the cache invalidation when an object is moved.
Even if an object is moved, the focus manager will not recalculate its relations.
This can be used when you know that the set of widgets in the focus manager is
moved the same way, so the relations between the widets in the set do not change
and the complex calculations can be avoided.
moved the same way, so the relations between the widgets in the set do not change
and complex calculations can be avoided.
Use @.dirty_logic_unfreeze to re-enable relationship calculation.
]]
}
dirty_logic_unfreeze {
[[This enables the cache invalidation when an object is moved.
[[Enables the cache invalidation when an object is moved.
This is the counterpart to @.dirty_logic_freeze.
]]
}
}
events {
redirect,changed : Efl.Ui.Focus.Manager; [[Redirect object has changed, the old manager is passed as an event argument.]]
flush,pre: void; [[After this event, the manager object will calculate relations in the graph. Can be used to add / remove children in a lazy fashion.]]
redirect,changed : Efl.Ui.Focus.Manager; [[Redirect object has changed, the old manager is passed as
an event argument.]]
flush,pre: void; [[After this event, the manager object will calculate relations in the graph.
Can be used to add / remove children in a lazy fashion.]]
coords,dirty: void; [[Cached relationship calculation results have been invalidated.]]
manager_focus,changed : Efl.Ui.Focus.Object; [[The manager_focus property has changed. The previously focused object is passed as an event argument.]]
dirty_logic_freeze,changed : bool; [[Called when this focus manager is frozen or thawed, even_info being $true indicates that it is now frozen, $false indicates that it is thawed.]]
manager_focus,changed : Efl.Ui.Focus.Object; [[The manager_focus property has changed.
The previously focused object is passed as an event argument.]]
dirty_logic_freeze,changed : bool; [[Called when this focus manager is frozen or thawed,
even_info being $true indicates that it is now frozen,
$false indicates that it is thawed.]]
}
}

View File

@ -1,81 +1,77 @@
class @beta Efl.Ui.Focus.Manager_Calc extends Efl.Object implements Efl.Ui.Focus.Manager {
[[Calculates the directions of Efl.Ui.Focus.Direction
[[Calculates the elements present in each @Efl.Ui.Focus.Direction.
Each registered item will get an other registered object in each
direction. You can get items for the currently focused item if
you call request move.
Each registered item will get a target item in each direction.
You can get the target items for the currently focused item by
calling @Efl.Ui.Focus.Manager.request_move.
]]
methods {
register {
[[Register a new item in the graph.
[[Registers a new item in the graph.
$parent can not be $null, it will be used as the parent in the
logical tree.
$redirect will be set as redirect property on that manager, once
$child gets focused.
$parent can not be $null, it will be used as the parent in the logical tree.
$redirect will be set as redirect property on that manager, once $child gets focused.
]]
params {
child : Efl.Ui.Focus.Object; [[The object to register]]
parent : Efl.Ui.Focus.Object; [[The parent to use in
the logical tree]]
redirect : Efl.Ui.Focus.Manager; [[The redirect manager to set
once this child is focused can be NULL for no redirect]]
child : Efl.Ui.Focus.Object; [[The object to register.]]
parent : Efl.Ui.Focus.Object; [[The parent to use in the logical tree.]]
redirect : Efl.Ui.Focus.Manager; [[The redirect manager to set once this child is focused.
Can be $NULL for no redirect.]]
}
return : bool; [[$true if successful, $false otherwise]]
return : bool; [[$true if successful, $false otherwise.]]
}
register_logical {
[[Register a new item only for the logical parent.
[[Registers a new logical item in the graph.
The item can never get focus, it just helps to build a tree out
of the items that are.
The item can never get focus, it just helps to build the tree.
Compare to @.register.
]]
params {
child : Efl.Ui.Focus.Object; [[The object to register]]
parent : Efl.Ui.Focus.Object; [[The parent to use in
the logical tree]]
redirect : Efl.Ui.Focus.Manager; [[The redirect manager to set
once this child is focused can be $null for no redirect]]
child : Efl.Ui.Focus.Object; [[The object to register.]]
parent : Efl.Ui.Focus.Object; [[The parent to use in the logical tree.]]
redirect : Efl.Ui.Focus.Manager; [[The redirect manager to set once this child is focused.
Can be $NULL for no redirect.]]
}
return : bool; [[$true if successful, $false otherwise]]
return : bool; [[$true if successful, $false otherwise.]]
}
update_redirect {
[[Set a new redirect object for the given child.
[[Sets a new redirect object for the given child.
Once $child is focused the redirect manager will be set
in the redirect property. Set redirect to $null if nothing should happen.
in the redirect property. Set redirect to $NULL if nothing should happen.
]]
params {
child : Efl.Ui.Focus.Object; [[The child to update]]
child : Efl.Ui.Focus.Object; [[The child to update.]]
redirect : Efl.Ui.Focus.Manager; [[Once $child is focused this
element will be set as redirect]]
element will be set as redirect.]]
}
return : bool; [[$true if successful, $false otherwise]]
return : bool; [[$true if successful, $false otherwise.]]
}
update_parent {
[[Set a new logical parent for the given child.]]
[[Sets a new logical parent for the given child.]]
params {
child : Efl.Ui.Focus.Object; [[The child to update]]
parent : Efl.Ui.Focus.Object; [[The parent which now
will be the logical parent of child]]
child : Efl.Ui.Focus.Object; [[The child to update.]]
parent : Efl.Ui.Focus.Object; [[The parent which now will be the logical parent of child.]]
}
return : bool; [[$true if successful, $false otherwise]]
return : bool; [[$true if successful, $false otherwise.]]
}
update_children {
[[Give the list of children a different order.]]
[[Sets the list of children to a different order.]]
params {
parent : Efl.Ui.Focus.Object; [[the parent to update]]
children : list<Efl.Ui.Focus.Object> @owned; [[the list with the new order]]
parent : Efl.Ui.Focus.Object; [[The parent to update.]]
children : list<Efl.Ui.Focus.Object> @owned; [[The list of children with the new order.]]
}
return : bool; [[$true if successful, $false otherwise]]
return : bool; [[$true if successful, $false otherwise.]]
}
update_order {
[[Give the given order to the parent's child.
[[Sets the list of children to a different order.
Children from the list which are not true children are ignored.
Objects in the list which are not children of $parent are ignored.
Compare to @.update_children.
]]
params {
parent : Efl.Ui.Focus.Object; [[the parent to update]]
children : list<Efl.Ui.Focus.Object> @owned; [[the order of items]]
parent : Efl.Ui.Focus.Object; [[The parent to update.]]
children : list<Efl.Ui.Focus.Object> @owned; [[The list of objects with the new order.]]
}
}
unregister {

View File

@ -1,14 +1,13 @@
class @beta Efl.Ui.Focus.Manager_Root_Focus extends Efl.Ui.Focus.Manager_Calc {
[[ This class ensures that the root is at least focusable, if nothing else is focusable]]
[[This class ensures that the root is at least focusable, if nothing else is focusable.]]
methods {
@property canvas_object {
[[
The default replacement object for the case that there is no focusable object inside the manager is the root object.
However, you can change this by setting this value to something else.
$null is triggered as the same value as Efl.Ui.Focus.Manager.root.get
[[The default replacement object to use when there is no focusable object inside the manager.
You can change this object by setting this value to something else.
$null means that the same value as @Efl.Ui.Focus.Manager.root will be used.
]]
values {
canvas_object : Efl.Canvas.Object; [[Canvas object]]
canvas_object : Efl.Canvas.Object; [[Canvas object.]]
}
}
}

View File

@ -1,6 +1,6 @@
mixin @beta Efl.Ui.Focus.Manager_Sub requires Efl.Object extends Efl.Ui.Focus.Manager
{
[[A class that automatically registers its border elements in the parent manager
[[A class that automatically registers its border elements in the parent manager.
This sub manager will register its border elements on the parent manager.
The parent manager is found with the @Efl.Ui.Focus.Object interface of the

View File

@ -1,8 +1,8 @@
interface Efl.Ui.Focus.Manager_Window_Root {
[[ A interface to indicate the end of a focus chain.
[[An interface to indicate the end of a focus chain.
Focusmanagers are ensuring that if they give focus to something, that they are registered in the upper focus manager.
The most upper focus manager does not need to do that, and can implement this interface to indicate that.
Focus managers are ensuring that if they give focus to something, that is registered in the upper focus manager.
The uppermost focus manager does not need to do that, and can implement this interface to indicate so.
@since 1.22
]]

View File

@ -33,15 +33,17 @@ mixin Efl.Ui.Focus.Object
}
@property focus_manager {
[[This is the focus manager where this focus object is registered in.
The element which is the $root of a Efl.Ui.Focus.Manager will not have this focus manager as this object, but rather the second focus manager where it is registered in.
The element which is the $root of an @Efl.Ui.Focus.Manager will not
have this focus manager as this object, but rather the focus manager
where that is registered in.
]]
get {}
values {
manager : Efl.Ui.Focus.Manager; [[The manager object]]
manager : Efl.Ui.Focus.Manager; [[The manager object.]]
}
}
@property focus_parent {
[[Describes which logical parent is used by this object.]]
[[The logical parent used by this object.]]
get {}
values {
logical_parent : Efl.Ui.Focus.Object; [[The focus parent.]]
@ -55,16 +57,17 @@ mixin Efl.Ui.Focus.Object
}
setup_order {
[[Tells the object that its children will be queried soon by the focus manager.
Overwrite this to update the order of the children. Deleting items in this call will
result in undefined behaviour and may cause your system to crash.
Overwrite this to have a chance to update the order of the children.
Deleting items in this call will result in undefined behaviour and may cause your system to crash.
]]
}
setup_order_non_recursive @protected {
[[This is called when @.setup_order is called, but only on the first call, additional recursive calls to @.setup_order will not call this function again.]]
[[This is called when @.setup_order is called, but only on the first call,
additional recursive calls to @.setup_order will not call this function again.]]
}
on_focus_update @protected {
[[Virtual function handling focus in/out events on the widget]]
return: bool; [[$true if this widget can handle focus, $false otherwise]]
[[Virtual function handling focus in/out events on the widget.]]
return: bool; [[$true if this widget can handle focus, $false otherwise.]]
}
}
implements {
@ -76,10 +79,8 @@ mixin Efl.Ui.Focus.Object
}
events {
focus,changed : bool; [[Emitted if the focus state has changed.]]
focus_manager,changed: Efl.Ui.Focus.Manager; [[Emitted when a new manager is
the parent for this object.]]
focus_parent,changed: Efl.Ui.Focus.Object; [[Emitted when a new logical
parent should be used.]]
focus_manager,changed: Efl.Ui.Focus.Manager; [[Emitted when a new manager is the parent for this object.]]
focus_parent,changed: Efl.Ui.Focus.Object; [[Emitted when a new logical parent should be used.]]
child_focus,changed: bool; [[Emitted if child_focus has changed.]]
focus_geometry,changed: Eina.Rect; [[Emitted if focus geometry of this object has changed.]]
}

View File

@ -1,5 +1,9 @@
class @beta Efl.Ui.Focus.Parent_Provider_Standard extends Efl.Object implements Efl.Ui.Focus.Parent_Provider {
[[EFL UI Focus Parent Provider Standard Class]]
[[EFL UI Focus Parent Provider Standard Class.
This is the default implementation for the @Efl.Ui.Focus.Parent_Provider interface. It simply uses
the widget's parent as the focus parent.
]]
implements {
Efl.Ui.Focus.Parent_Provider.find_logical_parent;
}

View File

@ -1,24 +1,32 @@
class @beta Efl.Ui.Focus.Util extends Efl.Object {
[[EFL UI Focus Util class]]
[[EFL UI Focus Utility class.
This class contains a series of static methods that simplify common focus management operations.
There's no need to instantiate this class.
]]
methods {
focus @static {
[[Focus helper method]]
[[Sets the focus to the given object.]]
params {
focus_elem : Efl.Ui.Focus.Object; [[Focus element]]
focus_elem : Efl.Ui.Focus.Object; [[Object to receive focus.]]
}
}
active_manager @static {
[[Get the highest manager in the redirect property]]
[[Gets the highest manager in the redirect chain.]]
params {
manager : Efl.Ui.Focus.Manager;
manager : Efl.Ui.Focus.Manager; [[Manager to start looking from.]]
}
return: Efl.Ui.Focus.Manager;
}
direction_complement @static {
[[Returns the complementary (opposite) focus direction.
The defined opposites are Left-Right, Up-Down and Next-Previous.
]]
params {
dir : Efl.Ui.Focus.Direction;
dir : Efl.Ui.Focus.Direction; [[Direction to complement.]]
}
return: Efl.Ui.Focus.Direction;
return: Efl.Ui.Focus.Direction; [[The opposite direction.]]
}
}
}

View File

@ -44,7 +44,8 @@ mixin @beta Efl.Ui.Format requires Efl.Object
or an @Efl.Ui.Spin can hold numbers 1 to 7, but display the strings "Monday" thru "Sunday".
This conversion can be controlled through the @.format_func, @.format_values and @.format_string properties.
Only one of them needs to be set. When more than one is set @.format_values has the highest priority, followed by @.format_func and then @.format_string.
Only one of them needs to be set. When more than one is set @.format_values has the highest priority,
followed by @.format_func and then @.format_string.
If one mechanism fails to produce a valid string the others will be tried (if provided) in descending
order of priority.
If no user-provided mechanism works, a fallback is used that just displays the value.
@ -103,7 +104,7 @@ mixin @beta Efl.Ui.Format requires Efl.Object
string: string; [[Formatting string containing regular characters and format specifiers.]]
type: Efl.Ui.Format_String_Type(Efl.Ui.Format_String_Type.simple);
[[Type of formatting string, which controls how the
different format specifiers are to be traslated.]]
different format specifiers are to be translated.]]
}
}

View File

@ -13,7 +13,8 @@ class @beta Efl.Ui.List_View extends Efl.Ui.Layout_Base implements Efl.Ui.Scroll
{
methods {
@property homogeneous {
[[When in homogeneous mode, all items have the same height and width. Otherwise, each item's size is respected.
[[When in homogeneous mode, all items have the same height and width.
Otherwise, each item's size is respected.
]]
get {
}

View File

@ -1,18 +1,19 @@
enum @beta Efl.Ui.Select_Mode {
[[Type of multi selectable object.]]
single, [[Only single child is selected. if the child is selected,
single, [[Only single child is selected. If a child is selected,
previous selected child will be unselected.]]
single_always, [[Same as single select except, this will be selected
in every select calls though child is already been selected.]]
multi, [[allow multiple selection of children.]]
none [[Last value of select mode. child cannot be selected at all.]]
in every select call even if child is already been selected.]]
multi, [[Allow multiple selection of children.]]
none [[No child can be selected at all.]]
}
interface @beta Efl.Ui.Multi_Selectable extends Efl.Ui.Single_Selectable
{
[[Interface for getting access to a range of selected items.
The implementor of this interface provides the possibility to select multiple Selectables. (If not, only Efl.Ui.Single_Selectable should be implemented)]]
The implementor of this interface provides the possibility to select multiple Selectables.
If not, only @Efl.Ui.Single_Selectable should be implemented.]]
c_prefix: efl_ui;
methods
{

View File

@ -1,6 +1,7 @@
class @beta Efl.Ui.Navigation_Bar_Part_Back_Button extends Efl.Ui.Layout_Part implements Efl.Gfx.Entity, Efl.Text, Efl.Content
class @beta Efl.Ui.Navigation_Bar_Part_Back_Button extends Efl.Ui.Layout_Part
implements Efl.Gfx.Entity, Efl.Text, Efl.Content
{
[[Efl Ui Navigation_Bar internal part back button class]]
[[@Efl.Ui.Navigation_Bar internal part back button class.]]
data: null;
implements {
Efl.Gfx.Entity.visible { set; get; }

View File

@ -8,7 +8,7 @@ class @beta Efl.Ui.Pan extends Efl.Canvas.Group implements Efl.Content
The position of this "window" into the content can be changed using @Efl.Ui.Pan.pan_position.
This widget does not provide means for a user to change the content's position (like scroll bars).
This widget is meant to be used internally by other clases like @Efl.Ui.Scroll.Manager.
This widget is meant to be used internally by other classes like @Efl.Ui.Scroll.Manager.
]]
methods {
@property pan_position {
@ -64,7 +64,8 @@ class @beta Efl.Ui.Pan extends Efl.Canvas.Group implements Efl.Content
Efl.Canvas.Group.group_calculate;
}
events {
pan,content_position,changed: Eina.Position2D; [[The content's position has changed, its position in the event is the new position.]]
pan,content_size,changed: Eina.Size2D; [[The content's size has changed, its size in the event is the new size]]
pan,content_position,changed: Eina.Position2D; [[The content's position has changed, its position in the event
is the new position.]]
pan,content_size,changed: Eina.Size2D; [[The content's size has changed, its size in the event is the new size.]]
}
}

View File

@ -281,7 +281,7 @@ _drawer_open(Evas_Object *obj, Evas_Coord w, Evas_Coord h, Eina_Bool anim)
if (sd->freeze)
{
efl_ui_scrollable_movement_block_set(obj, EFL_UI_SCROLL_BLOCK_NONE);
efl_ui_scrollable_movement_block_set(obj, EFL_UI_LAYOUT_ORIENTATION_DEFAULT);
sd->freeze = EINA_FALSE;
elm_layout_signal_emit(sd->scr_ly, "efl,state,content,visible", "efl");
}
@ -346,10 +346,10 @@ _drawer_close(Evas_Object *obj, Evas_Coord w, Evas_Coord h, Eina_Bool anim)
{
if (horizontal)
efl_ui_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_HORIZONTAL);
(obj, EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL);
else
efl_ui_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_VERTICAL);
(obj, EFL_UI_LAYOUT_ORIENTATION_VERTICAL);
sd->freeze = EINA_TRUE;
elm_layout_signal_emit(sd->scr_ly, "efl,state,content,hidden", "efl");
}
@ -362,7 +362,7 @@ _drawer_close(Evas_Object *obj, Evas_Coord w, Evas_Coord h, Eina_Bool anim)
if (sd->freeze)
{
efl_ui_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_NONE);
(obj, EFL_UI_LAYOUT_ORIENTATION_DEFAULT);
sd->freeze = EINA_FALSE;
elm_layout_signal_emit(sd->scr_ly, "efl,state,content,visible", "efl");
}
@ -375,10 +375,10 @@ _drawer_close(Evas_Object *obj, Evas_Coord w, Evas_Coord h, Eina_Bool anim)
{
if (horizontal)
efl_ui_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_HORIZONTAL);
(obj, EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL);
else
efl_ui_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_VERTICAL);
(obj, EFL_UI_LAYOUT_ORIENTATION_VERTICAL);
sd->freeze = EINA_TRUE;
elm_layout_signal_emit(sd->scr_ly, "efl,state,content,hidden", "efl");
}
@ -506,7 +506,7 @@ _timer_cb(void *data)
if (sd->freeze)
{
efl_ui_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_NONE);
(obj, EFL_UI_LAYOUT_ORIENTATION_DEFAULT);
sd->freeze = EINA_FALSE;
elm_layout_signal_emit(sd->scr_ly, "efl,state,content,visible", "efl");
evas_object_geometry_get(obj, NULL, NULL, &w, &h);
@ -614,7 +614,7 @@ _on_mouse_move(void *data,
if (sd->timer && ((cur_y - sd->down_y) > finger_size))
{
efl_ui_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_NONE);
(obj, EFL_UI_LAYOUT_ORIENTATION_DEFAULT);
sd->freeze = EINA_FALSE;
elm_layout_signal_emit(sd->scr_ly, "efl,state,content,visible", "efl");
}
@ -623,7 +623,7 @@ _on_mouse_move(void *data,
if (sd->timer && ((sd->down_y - cur_y) > finger_size))
{
efl_ui_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_NONE);
(obj, EFL_UI_LAYOUT_ORIENTATION_DEFAULT);
sd->freeze = EINA_FALSE;
elm_layout_signal_emit(sd->scr_ly, "efl,state,content,visible", "efl");
}
@ -633,7 +633,7 @@ _on_mouse_move(void *data,
((is_mirrored) && (sd->timer) && ((sd->down_x - cur_x) > finger_size)))
{
efl_ui_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_NONE);
(obj, EFL_UI_LAYOUT_ORIENTATION_DEFAULT);
sd->freeze = EINA_FALSE;
elm_layout_signal_emit(sd->scr_ly, "efl,state,content,visible", "efl");
}
@ -643,7 +643,7 @@ _on_mouse_move(void *data,
(!is_mirrored && (sd->timer) && ((sd->down_x - cur_x) > finger_size)))
{
efl_ui_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_NONE);
(obj, EFL_UI_LAYOUT_ORIENTATION_DEFAULT);
sd->freeze = EINA_FALSE;
elm_layout_signal_emit(sd->scr_ly, "efl,state,content,visible", "efl");
}
@ -910,12 +910,12 @@ _efl_ui_panel_orient_set(Eo *obj, Efl_Ui_Panel_Data *sd, Efl_Ui_Panel_Orient ori
case EFL_UI_PANEL_ORIENT_TOP:
case EFL_UI_PANEL_ORIENT_BOTTOM:
efl_ui_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_VERTICAL);
(obj, EFL_UI_LAYOUT_ORIENTATION_VERTICAL);
break;
case EFL_UI_PANEL_ORIENT_LEFT:
case EFL_UI_PANEL_ORIENT_RIGHT:
efl_ui_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_HORIZONTAL);
(obj, EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL);
break;
}
@ -1059,10 +1059,10 @@ _anim_stop_cb(void *data EINA_UNUSED, const Efl_Event *event)
{
if (horizontal)
efl_ui_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_HORIZONTAL);
(obj, EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL);
else
efl_ui_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_VERTICAL);
(obj, EFL_UI_LAYOUT_ORIENTATION_VERTICAL);
sd->freeze = EINA_TRUE;
elm_layout_signal_emit(sd->scr_ly, "efl,state,content,hidden", "efl");
@ -1088,7 +1088,7 @@ _scroll_cb(void *data EINA_UNUSED, const Efl_Event *event_info EINA_UNUSED)
if (sd->freeze)
{
efl_ui_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_NONE);
(obj, EFL_UI_LAYOUT_ORIENTATION_DEFAULT);
sd->freeze = EINA_FALSE;
elm_layout_signal_emit(sd->scr_ly, "efl,state,content,visible", "efl");
}
@ -1108,13 +1108,13 @@ _efl_ui_panel_efl_ui_widget_disabled_set(Eo *obj, Efl_Ui_Panel_Data *sd, Eina_Bo
case ELM_PANEL_ORIENT_BOTTOM:
case ELM_PANEL_ORIENT_TOP:
efl_ui_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_VERTICAL);
(obj, EFL_UI_LAYOUT_ORIENTATION_VERTICAL);
break;
case ELM_PANEL_ORIENT_RIGHT:
case ELM_PANEL_ORIENT_LEFT:
efl_ui_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_HORIZONTAL);
(obj, EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL);
break;
}
@ -1136,13 +1136,13 @@ _efl_ui_panel_efl_ui_widget_disabled_set(Eo *obj, Efl_Ui_Panel_Data *sd, Eina_Bo
case ELM_PANEL_ORIENT_BOTTOM:
case ELM_PANEL_ORIENT_TOP:
efl_ui_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_HORIZONTAL);
(obj, EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL);
break;
case ELM_PANEL_ORIENT_RIGHT:
case ELM_PANEL_ORIENT_LEFT:
efl_ui_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_VERTICAL);
(obj, EFL_UI_LAYOUT_ORIENTATION_VERTICAL);
break;
}
@ -1275,12 +1275,12 @@ _efl_ui_panel_scrollable_set(Eo *obj, Efl_Ui_Panel_Data *sd, Eina_Bool scrollabl
case EFL_UI_PANEL_ORIENT_TOP:
case EFL_UI_PANEL_ORIENT_BOTTOM:
efl_ui_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_VERTICAL);
(obj, EFL_UI_LAYOUT_ORIENTATION_VERTICAL);
break;
case EFL_UI_PANEL_ORIENT_LEFT:
case EFL_UI_PANEL_ORIENT_RIGHT:
efl_ui_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_HORIZONTAL);
(obj, EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL);
break;
}

View File

@ -15,8 +15,9 @@ struct @beta Efl.Ui.Panel_Scroll_Info
rel_y: double; [[content scrolled position (0.0 ~ 1.0) in the panel]]
}
class @beta Efl.Ui.Panel extends Efl.Ui.Layout_Base implements Efl.Ui.Focus.Layer, Efl.Ui.Scrollable_Interactive, Efl.Content,
Efl.Access.Widget.Action
class @beta Efl.Ui.Panel extends Efl.Ui.Layout_Base
implements Efl.Ui.Focus.Layer, Efl.Ui.Scrollable_Interactive, Efl.Content,
Efl.Access.Widget.Action
{
[[Elementary panel class]]
methods {

View File

@ -1,5 +1,5 @@
class @beta Efl.Ui.Panes extends Efl.Ui.Layout_Base implements Efl.Ui.Layout_Orientable,
Efl.Input.Clickable
Efl.Input.Clickable
{
[[Elementary panes class]]
event_prefix: elm_panes;
@ -49,7 +49,8 @@ class @beta Efl.Ui.Panes extends Efl.Ui.Layout_Base implements Efl.Ui.Layout_Ori
Efl.Object.constructor;
Efl.Canvas.Group.group_calculate;
Efl.Ui.Widget.theme_apply;
Efl.Ui.Layout_Orientable.orientation { get; set; [[Only supports $vertical and $horizontal. Default is $vertical.]] }
Efl.Ui.Layout_Orientable.orientation { get; set; [[Only supports $vertical and $horizontal.
Default is $vertical.]] }
Efl.Part.part_get;
}
events {

View File

@ -1,69 +1,70 @@
enum @beta Efl.Ui.Popup_Align {
[[Popup alignment type]]
none = 0, [[Popup not aligned]]
center, [[Popup aligned to center]]
left, [[Popup aligned to left]]
right, [[Popup aligned to right]]
top, [[Popup aligned to top]]
bottom [[Popup aligned to bottom]]
[[Popup alignment type.]]
none = 0, [[Popup not aligned.]]
center, [[Popup aligned to center.]]
left, [[Popup aligned to left.]]
right, [[Popup aligned to right.]]
top, [[Popup aligned to top.]]
bottom [[Popup aligned to bottom.]]
}
class @beta Efl.Ui.Popup extends Efl.Ui.Layout_Base implements Efl.Content, Efl.Ui.Focus.Layer, Efl.Ui.Widget_Scrollable_Content
class @beta Efl.Ui.Popup extends Efl.Ui.Layout_Base implements Efl.Content, Efl.Ui.Focus.Layer,
Efl.Ui.Widget_Scrollable_Content
{
[[EFL UI popup class]]
methods {
@property align {
[[Popup alignment.]]
set {
[[ Set the popup alignment.]]
}
get {
[[ Get the current popup alignment.]]
}
values {
type: Efl.Ui.Popup_Align; [[Alignment type]]
type: Efl.Ui.Popup_Align; [[Alignment type.]]
}
}
@property closing_timeout {
[[Set the timeout seconds.
After timeout seconds, popup will be deleted automatically.
]]
set {
[[ Set the timeout seconds.
After timeout seconds, popup will be deleted automatically.
]]
}
get {
[[ Get the currently set timeout seconds.]]
}
values {
time: double; [[Timeout in seconds]]
time: double; [[Timeout in seconds.]]
}
}
@property anchor {
[[Anchor object which sets this popup's position.
If anchor object is moved or parent window is resized, the popup moves to the new position.
If anchor object is set to NULL, the popup stops following the anchor object.
When the popup is moved by using @Efl.Gfx.Entity.position.set, $anchor is set NULL.
]]
set {
[[Set anchor popup to follow an anchor object.
If anchor object is moved or parent window is resized, the anchor popup moves to the new position.
If anchor object is set to NULL, the anchor popup stops following the anchor object.
When the popup is moved by using gfx_position_set, anchor is set NULL.
]]
}
get {
[[Returns the anchor object which the popup is following.]]
}
values {
anchor: Efl.Canvas.Object; [[The object which popup is following.]]
}
}
@property align_priority {
[[Prioritized popup alignment.
In contrast to the @.align property, each alignment is tried in turn until one is found which allows
the popup to be placed in the exact requested position relative to the @.anchor.
]]
set {
[[Set the align priority of a popup.]]
}
get {
[[Get the align priority of a popup.]]
}
values {
first: Efl.Ui.Popup_Align; [[First align priority]]
second: Efl.Ui.Popup_Align; [[Second align priority]]
third: Efl.Ui.Popup_Align; [[Third align priority]]
fourth: Efl.Ui.Popup_Align; [[Fourth align priority]]
fifth: Efl.Ui.Popup_Align; [[Fifth align priority]]
first: Efl.Ui.Popup_Align; [[First alignment.]]
second: Efl.Ui.Popup_Align; [[Second alignment.]]
third: Efl.Ui.Popup_Align; [[Third alignment.]]
fourth: Efl.Ui.Popup_Align; [[Fourth alignment.]]
fifth: Efl.Ui.Popup_Align; [[Fifth alignment.]]
}
}
}

View File

@ -10,8 +10,9 @@ struct @beta Efl.Ui.Position_Manager.Object_Batch_Entity{
entity : Efl.Gfx.Entity; [[The canvas object.]]
element_depth : ubyte; [[The depth change in this returned entity.
Every Element has a depth, if the parent is $null the depth is 0.
Every step deeper into the hirachy is exactly one depth deeper.
If this depth has been different to the previous item, then this element can be seen as the group leader. The following elements with the same depth are in the same group.]]
Every step deeper into the hierarchy is exactly one depth deeper.
If this depth has been different to the previous item, then this element can be seen as the
group leader. The following elements with the same depth are in the same group.]]
depth_leader : bool; [[$true if this is the leader of a group]]
}
@ -20,8 +21,9 @@ struct @beta Efl.Ui.Position_Manager.Size_Batch_Entity{
size : Eina.Size2D; [[The size of the element.]]
element_depth : ubyte; [[The depth change in this returned entity.
Every Element has a depth, if the parent is $null the depth is 0.
Every step deeper into the hirachy is exactly one depth deeper.
If this depth has been different to the previous item, then this element can be seen as the group leader. The following elements with the same depth are in the same group.]]
Every step deeper into the hierarchy is exactly one depth deeper.
If this depth has been different to the previous item, then this element can be seen as the
group leader. The following elements with the same depth are in the same group.]]
depth_leader : bool; [[$true if this is the leader of a group]]
}
@ -34,8 +36,13 @@ struct @beta Efl.Ui.Position_Manager.Size_Batch_Result {
struct @beta Efl.Ui.Position_Manager.Size_Call_Config {
[[Struct that is returned by the function callbacks.]]
range : Efl.Ui.Position_Manager.Request_Range; [[The range of items to fill into @.memory. The length of memory must be bigger or equal to the requested items]] // This struct does not contain a @.memory field.
cache_request : bool; [[Indicate if this request is made for caching or displaying. If its for caching, the data-provider will fill in approximations, instead of doing heavy lifting from some backend. If this is not a caching call, the exact size should be requested and delivered at some later point.]]
range : Efl.Ui.Position_Manager.Request_Range; [[The range of items to fill into @.memory. The length of memory must
be bigger or equal to the requested items]]
// This struct does not contain a @.memory field.
cache_request : bool; [[Indicate if this request is made for caching or displaying.
If it's for caching, the data-provider will fill in approximations, instead of doing heavy
lifting from some back-end. If this is not a caching call, the exact size should be
requested and delivered at some later point.]]
}
struct @beta Efl.Ui.Position_Manager.Object_Batch_Result {
@ -48,8 +55,11 @@ struct @beta Efl.Ui.Position_Manager.Object_Batch_Result {
function @beta Efl.Ui.Position_Manager.Object_Batch_Callback {
[[ Function callback for getting a batch of items.]]
params {
range : Efl.Ui.Position_Manager.Request_Range; [[The range of items to fill into @.memory. The length of memory must be bigger or equal to the requested items]]
memory : rw_slice<Efl.Ui.Position_Manager.Object_Batch_Entity>; [[The slice to fill the information in, the full slice will be filled if there are enough items]]
range : Efl.Ui.Position_Manager.Request_Range; [[The range of items to fill into @.memory. The length of memory
must be bigger or equal to the requested items]]
memory : rw_slice<Efl.Ui.Position_Manager.Object_Batch_Entity>; [[The slice to fill the information in, the full
slice will be filled if there are enough items.
]]
}
return: Efl.Ui.Position_Manager.Object_Batch_Result; [[The returned stats of this function call.]]
};
@ -58,8 +68,9 @@ function @beta Efl.Ui.Position_Manager.Object_Batch_Callback {
function @beta Efl.Ui.Position_Manager.Size_Batch_Callback {
[[ Function callback for getting sizes of a batch of items.]]
params {
conf : Efl.Ui.Position_Manager.Size_Call_Config; [[The configution for this call]]
memory : rw_slice<Efl.Ui.Position_Manager.Size_Batch_Entity>; [[The slice to fill the information in, the full slice will be filled if there are enough items]]
conf : Efl.Ui.Position_Manager.Size_Call_Config; [[The configuration for this call.]]
memory : rw_slice<Efl.Ui.Position_Manager.Size_Batch_Entity>; [[The slice to fill the information in, the full
slice will be filled if there are enough items.]]
}
return: Efl.Ui.Position_Manager.Size_Batch_Result; [[The returned stats of this function call]]
};
@ -68,32 +79,49 @@ function @beta Efl.Ui.Position_Manager.Size_Batch_Callback {
interface @beta Efl.Ui.Position_Manager.Data_Access_V1 {
[[Interface for abstracting the data access of the position managers.
The idea here is that a data-provider, calls @.data_access on the positon manager object and passes the functions that are defined here. At any pointer later in time, the position manager can call these function callbacks to get sizes or objects.
A data-provider should always fill all requested items. If a item is not available $null is inserted. If a size is not available, a as-close-as-possible approximation should be inserted.
The Size callback is equipped with a parameter for if this is a caching request or not. This flag can be used to differentiate between two usecases. The size can be requested for building up a cache over all items. The size can also be requested for applying it to the object. The data-provider might needs to do heavy loading for getting the right size available, in case of a cache build up the as-close-as-possible aproximation is enough there. If it is real placement, the size should be correct.
If a size changes after it was returned due to batching, this change still should be annonced with the @Efl.Ui.Position_Manager.Entity.item_size_changed function.
The idea here is that a data-provider calls @.data_access on the position manager object and passes the functions
that are defined here. Later, the position manager can call these function callbacks to get sizes or objects.
A data-provider should always fill all requested items. If an item is not available $null should be inserted.
If a size is not available, an as-close-as-possible approximation should be inserted.
The Size callback is equipped with a parameter to specify caching requests. This flag can be used to differentiate
between two use cases: When the size is being requested to build up a cache over all items, and when the size is
being requested to apply it to the object. Since the data-provider might need to do expensive operations to find
the exact size, the as-close-as-possible approximation is usually enough when building caches.
If real object placement is happening, then real sizes must be requested.
If a size changes after it was returned due to batching, this change still should be announced with the
@Efl.Ui.Position_Manager.Entity.item_size_changed function.
The depth of the items is used to express a hierachical structure on the items themselves.
The depth of the items is used to express a hierarchical structure on the items themselves.
Any given depth might or might not have a $depth_leader.
A group is ended when there is either a lower depth, or another depth_leader.
A group is ended when there is either a lower depth, or another $depth_leader.
]]
methods {
@property data_access {
[[This gives access to items to be managed. The manager reads this information and modifies the retrieved items' positions and sizes.
[[This gives access to items to be managed. The manager reads this information and modifies the retrieved
items' positions and sizes.
$obj_access gives access to the graphical entitites to manage. Some of them might be NULL, meaning they are not yet ready to be displayed. Their size in the $size_access array will be correct, though, so other entities can still be positioned correctly.
Typically, only entities inside the viewport will be retrieved.
$obj_access gives access to the graphical entities to manage. Some of them might be $NULL, meaning they are
not yet ready to be displayed. Their size in the $size_access array will be correct, though, so other
entities can still be positioned correctly.
Typically, only entities inside the viewport will be retrieved.
$size_access gives access to the 2D sizes for the items to manage. All sizes will always be valid, and might change over time (indicated through the @Efl.Ui.Position_Manager.Entity.item_size_changed method).
The whole range might need to be traversed in order to calculate the position of all items in some arrangements.
$size_access gives access to the 2D sizes for the items to manage. All sizes will always be valid, and might
change over time (indicated through the @Efl.Ui.Position_Manager.Entity.item_size_changed method).
The whole range might need to be traversed in order to calculate the position of all items in some
arrangements.
You can access a batch of objects or sizes by calling the here passed function callbacks. Further details can be found at the function definitions.
You can access a batch of objects or sizes by calling the here passed function callbacks. Further details
can be found at the function definitions.
]]
set {
}
values {
obj_access : Efl.Ui.Position_Manager.Object_Batch_Callback; [[Function callback for canvas objects, even if the start_id is valid, the returned objects may be NULL.]]
size_access : Efl.Ui.Position_Manager.Size_Batch_Callback; [[Function callback for the size, returned values are always valid, but might be changed later on.]]
obj_access : Efl.Ui.Position_Manager.Object_Batch_Callback; [[Function callback for canvas objects, even if
the start_id is valid, the returned objects
may be NULL.]]
size_access : Efl.Ui.Position_Manager.Size_Batch_Callback; [[Function callback for the size, returned values
are always valid, but might be changed later on.
]]
size : int; [[valid size for start_id, 0 <= i < size]]
}
}

View File

@ -1,22 +1,24 @@
import efl_ui;
struct Efl.Ui.Position_Manager.Range_Update {
[[A struct containing the the updated range of visible items in this position manger.]]
[[A structure containing the updated range of visible items in this position manger.]]
start_id : uint; [[The first item that is visible]]
end_id : uint; [[The last item that is visible]]
}
interface @beta Efl.Ui.Position_Manager.Entity extends Efl.Ui.Layout_Orientable
{
[[
This abstracts the basic placement of items in a not defined form under a viewport.
[[This abstracts the basic placement of items in a not-defined form under a viewport.
The interface gets a defined set of elements that is meant to be displayed. The implementation provides a way to calculate the size that is required to display all items. Every time this absolut size of items is changed, content_size,changed is called.
The interface gets a defined set of elements that is meant to be displayed.
The implementation provides a way to calculate the size that is required to display all items.
Every time this absolute size of items is changed, @[Efl.Ui.Position_Manager.Entity.content_size,changed] is
emitted.
]]
methods {
version {
[[ Return the version of Data_Access that is used.
This object needs to implement the interface Efl.Ui.Position_Manager.Data_Access_V1 if 1 is returned. 2 if V2 (not available yet) is implemented.
[[Returns the version of Data_Access that is used.
This object needs to implement the interface @Efl.Ui.Position_Manager.Data_Access_V1 if 1 is returned.
]]
params {
max : int; [[The maximum version that is available from the data-provider.]]
@ -50,20 +52,22 @@ interface @beta Efl.Ui.Position_Manager.Entity extends Efl.Ui.Layout_Orientable
}
}
position_single_item {
[[Return the position and size of item idx
[[Return the position and size of item idx.
This method returns the size and position of the item at $idx.
Even if the item is outside the viewport, the returned rectangle must be valid. The result can be used for scrolling calculations.
Even if the item is outside the viewport, the returned rectangle must be valid.
The result can be used for scrolling calculations.
]]
params {
idx : int; [[The id for the item]]
}
return : Eina.Rect; [[Position and Size in canvas coordinations]]
return : Eina.Rect; [[Position and Size in canvas coordinates.]]
}
item_added {
[[The new item $subobj has been added at the $added_index field.
The accessor provided through @Efl.Ui.Position_Manager.Data_Access_V1.data_access will contain updated Entities.]]
The accessor provided through @Efl.Ui.Position_Manager.Data_Access_V1.data_access will contain updated
Entities.]]
params {
added_index : int;
subobj : Efl.Gfx.Entity;
@ -71,7 +75,8 @@ interface @beta Efl.Ui.Position_Manager.Entity extends Efl.Ui.Layout_Orientable
}
item_removed {
[[The item $subobj previously at position $removed_index has been removed.
The accessor provided through @Efl.Ui.Position_Manager.Data_Access_V1.data_access will contain updated Entities.
The accessor provided through @Efl.Ui.Position_Manager.Data_Access_V1.data_access will contain updated
Entities.
]]
params {
removed_index : int;
@ -87,7 +92,8 @@ interface @beta Efl.Ui.Position_Manager.Entity extends Efl.Ui.Layout_Orientable
}
}
relative_item {
[[translate the current_id, into a new id which is oriented in the $direction of $current_id. In case that there is no item, -1 is returned]]
[[Translates the $current_id, into a new id which is oriented in the $direction of $current_id.
In case that there is no item, -1 is returned]]
params {
current_id : uint; [[The id where the direction is oriented at]]
direction : Efl.Ui.Focus.Direction; [[The direction where the new id is]]
@ -96,8 +102,11 @@ interface @beta Efl.Ui.Position_Manager.Entity extends Efl.Ui.Layout_Orientable
}
}
events {
content_size,changed : Eina.Size2D; [[Emitted when the aggregate size of all items has changed. This can be used to resize an enclosing Pan object.]]
content_min_size,changed : Eina.Size2D; [[Emitted when the minimum size of all items has changed. The minimum size is the size, that this position_manager needs at *least* to display a single item.]]
content_size,changed : Eina.Size2D; [[Emitted when the aggregate size of all items has changed.
This can be used to resize an enclosing Pan object.]]
content_min_size,changed : Eina.Size2D; [[Emitted when the minimum size of all items has changed.
The minimum size is the size that this position_manager needs
to display a single item.]]
visible_range,changed : Efl.Ui.Position_Manager.Range_Update;
}
}

View File

@ -38,6 +38,13 @@ typedef struct {
int items;
} Group_Cache_Line;
static inline void
_update_min_size(Eo *obj EINA_UNUSED, Efl_Ui_Position_Manager_Grid_Data *pd, int added_index EINA_UNUSED, Eina_Size2D min_size)
{
pd->max_min_size.w = MAX(pd->max_min_size.w, min_size.w);
pd->max_min_size.h = MAX(pd->max_min_size.h, min_size.h);
}
static void
_group_cache_require(Eo *obj EINA_UNUSED, Efl_Ui_Position_Manager_Grid_Data *pd)
{
@ -50,6 +57,8 @@ _group_cache_require(Eo *obj EINA_UNUSED, Efl_Ui_Position_Manager_Grid_Data *pd)
if (!pd->group_cache_dirty)
return;
pd->max_min_size = EINA_SIZE2D(0, 0);
pd->group_cache_dirty = EINA_FALSE;
if (pd->group_cache)
eina_inarray_free(pd->group_cache);
@ -83,6 +92,7 @@ _group_cache_require(Eo *obj EINA_UNUSED, Efl_Ui_Position_Manager_Grid_Data *pd)
line.group_header_size = EINA_SIZE2D(0, 0);
line.items = 0;
}
_update_min_size(obj, pd, i, size_buffer[buffer_id].size);
}
eina_inarray_push(pd->group_cache, &line);
}
@ -292,8 +302,12 @@ _position_items_vertical(Eo *obj EINA_UNUSED, Efl_Ui_Position_Manager_Grid_Data
{
_place_grid_item(&geom, pd, x, y);
}
efl_gfx_entity_geometry_set(obj_buffer[buffer_id].entity, geom);
Efl_Gfx_Entity *item = obj_buffer[buffer_id].entity;
if (item)
{
efl_gfx_entity_geometry_set(item, geom);
efl_gfx_entity_visible_set(item, EINA_TRUE);
}
}
}
@ -359,7 +373,12 @@ _position_items_horizontal(Eo *obj EINA_UNUSED, Efl_Ui_Position_Manager_Grid_Dat
{
_place_grid_item(&geom, pd, x, y);
}
efl_gfx_entity_geometry_set(obj_buffer[buffer_id].entity, geom);
Efl_Gfx_Entity *item = obj_buffer[buffer_id].entity;
if (item)
{
efl_gfx_entity_geometry_set(item, geom);
efl_gfx_entity_visible_set(item, EINA_TRUE);
}
}
}
@ -508,13 +527,6 @@ _flush_abs_size(Eo *obj, Efl_Ui_Position_Manager_Grid_Data *pd)
}
}
static inline void
_update_min_size(Eo *obj EINA_UNUSED, Efl_Ui_Position_Manager_Grid_Data *pd, int added_index EINA_UNUSED, Eina_Size2D min_size)
{
pd->max_min_size.w = MAX(pd->max_min_size.w, min_size.w);
pd->max_min_size.h = MAX(pd->max_min_size.h, min_size.h);
}
static inline void
_flush_min_size(Eo *obj, Efl_Ui_Position_Manager_Grid_Data *pd)
{
@ -762,6 +774,22 @@ _efl_ui_position_manager_grid_efl_ui_position_manager_data_access_v1_data_access
pd->callbacks.size.access = size_access;
pd->callbacks.size.free_cb = size_access_free_cb;
pd->size = size;
_group_cache_require(obj, pd);
_schedule_recalc_abs_size(obj, pd);
}
EOLIAN static Efl_Object*
_efl_ui_position_manager_grid_efl_object_finalize(Eo *obj, Efl_Ui_Position_Manager_Grid_Data *pd)
{
obj = efl_finalize(efl_super(obj, MY_CLASS));
pd->group_cache_dirty = EINA_TRUE;
_group_cache_require(obj, pd);
_schedule_recalc_abs_size(obj, pd);
return obj;
}
#include "efl_ui_position_manager_grid.eo.c"

View File

@ -1,4 +1,6 @@
class @beta Efl.Ui.Position_Manager.Grid extends Efl.Object implements Efl.Ui.Position_Manager.Entity, Efl.Ui.Position_Manager.Data_Access_V1
class @beta Efl.Ui.Position_Manager.Grid extends Efl.Object
implements Efl.Ui.Position_Manager.Entity,
Efl.Ui.Position_Manager.Data_Access_V1
{
[[Implementation of @Efl.Ui.Position_Manager.Entity for two-dimensional grids.
@ -15,5 +17,6 @@ class @beta Efl.Ui.Position_Manager.Grid extends Efl.Object implements Efl.Ui.Po
Efl.Ui.Position_Manager.Entity.relative_item;
Efl.Ui.Layout_Orientable.orientation {set; get;}
Efl.Ui.Position_Manager.Data_Access_V1.data_access {set;}
Efl.Object.finalize;
}
}

View File

@ -210,6 +210,15 @@ _position_items(Eo *obj EINA_UNUSED, Efl_Ui_Position_Manager_List_Data *pd, Vis_
size = size_buffer[buffer_id].size;
ent = obj_buffer[buffer_id].entity;
int diff = cache_access(obj, pd, i + 1) - cache_access(obj, pd, i);
int real_diff = 0;
if (pd->dir == EFL_UI_LAYOUT_ORIENTATION_VERTICAL)
real_diff = size.h;
else
real_diff = size.w;
if (real_diff != diff)
ERR("Reported sizes changed during caching and placement %d %d %d", i, real_diff, diff);
if (ent == pd->last_group)
{
pd->last_group = NULL;
@ -228,7 +237,10 @@ _position_items(Eo *obj EINA_UNUSED, Efl_Ui_Position_Manager_List_Data *pd, Vis_
}
if (ent)
efl_gfx_entity_geometry_set(ent, geom);
{
efl_gfx_entity_visible_set(ent, EINA_TRUE);
efl_gfx_entity_geometry_set(ent, geom);
}
if (pd->dir == EFL_UI_LAYOUT_ORIENTATION_VERTICAL)
geom.y += size.h;
else
@ -278,6 +290,8 @@ position_content(Eo *obj EINA_UNUSED, Efl_Ui_Position_Manager_List_Data *pd)
if (!pd->size) return;
if (pd->average_item_size <= 0) return;
cache_require(obj, pd);
//space size contains the amount of space that is outside the viewport (either to the top or to the left)
space_size.w = (MAX(pd->abs_size.w - pd->viewport.w, 0))*pd->scroll_position.x;
space_size.h = (MAX(pd->abs_size.h - pd->viewport.h, 0))*pd->scroll_position.y;
@ -336,6 +350,8 @@ schedule_recalc_absolut_size(Eo *obj, Efl_Ui_Position_Manager_List_Data *pd)
EOLIAN static void
_efl_ui_position_manager_list_efl_ui_position_manager_entity_viewport_set(Eo *obj, Efl_Ui_Position_Manager_List_Data *pd, Eina_Rect size)
{
if (pd->viewport.w == size.w && pd->viewport.h == size.h) return;
pd->viewport = size;
recalc_absolut_size(obj, pd);
@ -442,6 +458,7 @@ _efl_ui_position_manager_list_efl_ui_layout_orientable_orientation_set(Eo *obj E
cache_invalidate(obj, pd);
cache_require(obj,pd);
if (!efl_finalized_get(obj)) return;
recalc_absolut_size(obj, pd);
position_content(obj, pd);
}

View File

@ -1,8 +1,11 @@
class @beta Efl.Ui.Position_Manager.List extends Efl.Object implements Efl.Ui.Position_Manager.Entity, Efl.Ui.Position_Manager.Data_Access_V1
class @beta Efl.Ui.Position_Manager.List extends Efl.Object
implements Efl.Ui.Position_Manager.Entity,
Efl.Ui.Position_Manager.Data_Access_V1
{
[[Implementation of @Efl.Ui.Position_Manager.Entity for a list
Every item in the list will get at least his minsize applied, changes to the misize are listend to and change the layouting of all items. This supports the vertical and horizontal orientation.
Every item in the list will get at least his minsize applied, changes to the misize are listened to and change
the layout of all items. This supports the vertical and horizontal orientation.
]]
implements {
Efl.Object.destructor;

View File

@ -9,7 +9,8 @@ class @beta Efl.Ui.Radio extends Efl.Ui.Check implements Efl.Access.Widget.Actio
They are a common way to allow a user to select one option among a list.
To handle button grouping, you can either use an @Efl.Ui.Radio_Group_Impl object or use more convenient widgets like @Efl.Ui.Radio_Box.
To handle button grouping, you can either use an @Efl.Ui.Radio_Group_Impl object or
use more convenient widgets like @Efl.Ui.Radio_Box.
]]
methods {
@property state_value {

View File

@ -137,8 +137,8 @@ static inline Eina_Bool
_scroll_manager_thumb_scrollable_get(Efl_Ui_Scroll_Manager_Data *sd)
{
if (!sd) return EINA_FALSE;
if ((sd->block & EFL_UI_SCROLL_BLOCK_VERTICAL) &&
(sd->block & EFL_UI_SCROLL_BLOCK_HORIZONTAL))
if ((sd->block & EFL_UI_LAYOUT_ORIENTATION_VERTICAL) &&
(sd->block & EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL))
return EINA_FALSE;
if (!_elm_config->thumbscroll_enable) return EINA_FALSE;
@ -791,8 +791,16 @@ _scroll_wheel_post_event_cb(void *data, Evas *e EINA_UNUSED)
cur = efl_ui_pan_position_get(sd->pan_obj);
x = cur.x;
y = cur.y;
if (sd->scrollto.x.animator) x = sd->scrollto.x.end;
if (sd->scrollto.y.animator) y = sd->scrollto.y.end;
if (sd->scrollto.x.animator)
{
if (((ev->z > 0) && (sd->scrollto.x.end > x)) || ((ev->z < 0) && (sd->scrollto.x.end < x)))
x = sd->scrollto.x.end;
}
if (sd->scrollto.y.animator)
{
if (((ev->z > 0) && (sd->scrollto.y.end > y)) || ((ev->z < 0) && (sd->scrollto.y.end < y)))
y = sd->scrollto.y.end;
}
max = efl_ui_pan_position_max_get(sd->pan_obj);
min = efl_ui_pan_position_min_get(sd->pan_obj);
if (x < min.x) x = min.x;
@ -898,11 +906,11 @@ _efl_ui_scroll_manager_wheel_event_cb(void *data,
return;
if (direction)
{
if (sd->block & EFL_UI_SCROLL_BLOCK_HORIZONTAL) return;
if (sd->block & EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL) return;
}
else
{
if (sd->block & EFL_UI_SCROLL_BLOCK_VERTICAL) return;
if (sd->block & EFL_UI_LAYOUT_ORIENTATION_VERTICAL) return;
}
evas_post_event_callback_push(e, _scroll_wheel_post_event_cb, sd);
@ -1641,10 +1649,10 @@ _efl_ui_scroll_manager_post_event_move_direction_restrict_eval(Efl_Ui_Scroll_Man
else if (dy < 0)
sd->down.vdir = DOWN;
if (!(sd->block & EFL_UI_SCROLL_BLOCK_HORIZONTAL))
if (!(sd->block & EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL))
sd->down.dir_x = EINA_TRUE;
if (!(sd->block & EFL_UI_SCROLL_BLOCK_VERTICAL))
if (!(sd->block & EFL_UI_LAYOUT_ORIENTATION_VERTICAL))
sd->down.dir_y = EINA_TRUE;
return EINA_TRUE;
@ -2390,12 +2398,12 @@ _efl_ui_scroll_manager_efl_ui_scrollable_interactive_gravity_get(const Eo *obj E
}
EOLIAN static void
_efl_ui_scroll_manager_efl_ui_scrollable_interactive_movement_block_set(Eo *obj EINA_UNUSED, Efl_Ui_Scroll_Manager_Data *sd, Efl_Ui_Scroll_Block block)
_efl_ui_scroll_manager_efl_ui_scrollable_interactive_movement_block_set(Eo *obj EINA_UNUSED, Efl_Ui_Scroll_Manager_Data *sd, Efl_Ui_Layout_Orientation block)
{
sd->block = block;
}
EOLIAN static Efl_Ui_Scroll_Block
EOLIAN static Efl_Ui_Layout_Orientation
_efl_ui_scroll_manager_efl_ui_scrollable_interactive_movement_block_get(const Eo *obj EINA_UNUSED, Efl_Ui_Scroll_Manager_Data *sd)
{
return sd->block;
@ -2443,7 +2451,7 @@ _efl_ui_scroll_manager_efl_object_constructor(Eo *obj, Efl_Ui_Scroll_Manager_Dat
sd->bounce_horiz = _elm_config->thumbscroll_bounce_enable;
sd->bounce_vert = _elm_config->thumbscroll_bounce_enable;
sd->block = EFL_UI_SCROLL_BLOCK_NONE;
sd->block = EFL_UI_LAYOUT_ORIENTATION_DEFAULT;
sd->scrolling = EINA_FALSE;
sd->event_rect = evas_object_rectangle_add(evas_object_evas_get(sd->parent));

View File

@ -1,7 +1,8 @@
interface @beta Efl.Ui.Selectable {
[[Selectable interface for ui objects
[[Selectable interface for UI objects
A object implementing this can be selected. When the selected property of this object changes, the selected,changed event is emitted.
An object implementing this interface can be selected.
When the selected property of this object changes, the @[Efl.Ui.Selectable.selected,changed] event is emitted.
]]
event_prefix: efl_ui;
methods {
@ -11,11 +12,11 @@ interface @beta Efl.Ui.Selectable {
A change to this property emits the changed event.
]]
values {
selected : bool; [[The selected state of this object]]
selected : bool; [[The selected state of this object.]]
}
}
}
events {
selected,changed : bool; [[Called when the selected state has changed]]
selected,changed : bool; [[Called when the selected state has changed.]]
}
}

View File

@ -1,7 +1,8 @@
interface @beta Efl.Ui.Single_Selectable {
[[Interface for getting access to a single selected item in the implementor.
The implementor is free to allow a specific number of selectables beeing selected or not. This interface just covers always the latest selected selectable.
The implementor is free to allow a specific number of selectables being selected or not.
This interface just covers always the latest selected selectable.
]]
methods {
@property last_selected {
@ -16,8 +17,9 @@ interface @beta Efl.Ui.Single_Selectable {
@property fallback_selection {
[[A object that will be selected in case nothing is selected
A object set to this property will be selected instead of no item beeing selected. Which means, there will be always at least one element selected.
If this property is NULL, the state of "no item is selected" can be reached.
A object set to this property will be selected instead of no item being selected.
Which means, there will be always at least one element selected.
If this property is $NULL, the state of "no item is selected" can be reached.
Setting this property as a result of selection events results in undefined behavior.
]]
@ -27,6 +29,10 @@ interface @beta Efl.Ui.Single_Selectable {
}
}
events {
selection_changed : void; [[Called when there is a change in the selection state, this event will collect all the item selection change events that are happening within one loop iteration. This means, you will only get this event once, even if a lot of items have changed. If you are interested in detailed changes, subscribe to the selection,changed event of Efl.Ui.Selectable.]]
selection_changed : void; [[Emitted when there is a change in the selection state. This event will collect all
the item selection change events that are happening within one loop iteration.
This means, you will only get this event once, even if a lot of items have changed.
If you are interested in detailed changes, subscribe to the individual
@[Efl.Ui.Selectable.selected,changed] events of each item.]]
}
}

View File

@ -1,4 +1,6 @@
class @beta Efl.Ui.Spin_Button extends Efl.Ui.Spin implements Efl.Ui.Focus.Composition, Efl.Ui.Layout_Orientable, Efl.Ui.Range_Interactive, Efl.Access.Widget.Action
class @beta Efl.Ui.Spin_Button extends Efl.Ui.Spin
implements Efl.Ui.Focus.Composition, Efl.Ui.Layout_Orientable, Efl.Ui.Range_Interactive,
Efl.Access.Widget.Action
{
[[A Button Spin.
@ -20,7 +22,7 @@ class @beta Efl.Ui.Spin_Button extends Efl.Ui.Spin implements Efl.Ui.Focus.Compo
If enabled, when the user tries to increment the value
but displayed value plus step value is bigger than maximum value,
the new value will become the minimum value. When the the user tries to
the new value will become the minimum value. When the user tries to
decrement it, if the value minus step is less than minimum value,
the new displayed value will be the maximum value.
@ -55,7 +57,7 @@ class @beta Efl.Ui.Spin_Button extends Efl.Ui.Spin implements Efl.Ui.Focus.Compo
get {
}
values {
direct_text_input: bool(false); [[$true to allow users to edit it or $false to don't allow users to edit it directly.]]
direct_text_input: bool(false); [[$true to allow users to directly edit the value.]]
}
}
}

View File

@ -8,18 +8,23 @@ class @beta Efl.Ui.Spotlight.Container extends Efl.Ui.Layout_Base implements Efl
{
[[The Spotlight widget is a container for other sub-widgets, where only one sub-widget is active at any given time.
Sub-widgets are added using the @Efl.Pack_Linear interface and the active one (the one in the "spotlight") is selected using @.active_index.
Sub-widgets are added using the @Efl.Pack_Linear interface and the active one (the one in the "spotlight") is
selected using @.active_index.
The way the different sub-widgets are rendered can be customized through the @.spotlight_manager object. For example, only the active sub-widget
might be shown, or it might be shown in a central position whereas the other sub-widgets are displayed on the sides, or grayed-out.
The way the different sub-widgets are rendered can be customized through the @.spotlight_manager object.
For example, only the active sub-widget might be shown, or it might be shown in a central position whereas the
other sub-widgets are displayed on the sides, or grayed-out.
All sub-widgets are displayed with the same size, selected with @.spotlight_size.
Additionally, the transition from one sub-widget to another can be animated. This animation is also controlled by the @.spotlight_manager object.
Additionally, the transition from one sub-widget to another can be animated.
This animation is also controlled by the @.spotlight_manager object.
Also, an indicator widget can be used to show a visual cue of how many sub-widgets are there and which one is the active one.
Also, an indicator widget can be used to show a visual cue of how many sub-widgets are there and which one is the
active one.
This class can be used to create other widgets like Pagers, Tabbed pagers or Stacks, where each sub-widget represents a "page" full
of other widgets. All these cases can be implemented with a different @.spotlight_manager and use the same @Efl.Ui.Spotlight.Container.
This class can be used to create other widgets like Pagers, Tabbed pagers or Stacks, where each sub-widget
represents a "page" full of other widgets. All these cases can be implemented with a different
@.spotlight_manager and use the same @Efl.Ui.Spotlight.Container.
]]
c_prefix: efl_ui_spotlight;
methods {
@ -32,7 +37,8 @@ class @beta Efl.Ui.Spotlight.Container extends Efl.Ui.Layout_Base implements Efl
}
}
@property indicator {
[[An indicator object to use, which will display the current state of the spotlight (number of sub-widgets and active one).
[[An indicator object to use, which will display the current state of the spotlight (number of sub-widgets
and active one).
When this object is set, it is immediately updated to reflect the current state of the widget.
Its location inside the container is controlled by the @.spotlight_manager.
]]
@ -46,14 +52,17 @@ class @beta Efl.Ui.Spotlight.Container extends Efl.Ui.Layout_Base implements Efl
Changing this value might trigger an animation.
]]
values {
index: int; [[Index of the sub-widget that has the spotlight, from 0 to the number of sub-widgets - 1 (@Efl.Container.content_count - 1).]]
index: int; [[Index of the sub-widget that has the spotlight, from 0 to the number of sub-widgets - 1
(@Efl.Container.content_count - 1).]]
}
}
@property spotlight_size {
[[The size to use when displaying the Sub-Widget which has the spotlight. This is used by the @.spotlight_manager to perform the rendering.
[[The size to use when displaying the Sub-Widget which has the spotlight.
This is used by the @.spotlight_manager to perform the rendering.
Sub-Widgets other than the Active one may or may not use this size.]]
values {
size: Eina.Size2D; [[Render size for the spotlight. (-1, -1) means that all available space inside the container is used.]]
size: Eina.Size2D; [[Render size for the spotlight.
(-1, -1) means that all available space inside the container can be used.]]
}
}
push @beta {
@ -70,19 +79,28 @@ class @beta Efl.Ui.Spotlight.Container extends Efl.Ui.Layout_Base implements Efl
pop @beta {
[[Removes the sub-widget that has the spotlight from the widget.
The sub-widgets behind it naturally flow down so the next one gets the spotlight. This is the same behavior as a pop operation on a stack.
When combined with @.push you don't have to worry about @.active_index since only the first sub-widget is manipulated.
The sub-widgets behind it naturally flow down so the next one gets the spotlight.
This is the same behavior as a pop operation on a stack.
When combined with @.push you don't have to worry about @.active_index since only the first sub-widget is
manipulated.
An animation might be triggered to give the new sub-widget the spotlight, come into position and the old one disappear.
An animation might be triggered to give the new sub-widget the spotlight, come into position and the old
one disappear.
The removed sub-widget can be returned to the caller or deleted (depending on $delete_on_transition_end).
]]
params {
deletion_on_transition_end : bool; [[ if $true, then the object will be deleted before resolving the future, and a NULL pointer is the value of the future. $false if no operation should be applied to it]]
deletion_on_transition_end : bool; [[If $true, then the object will be deleted before resolving the future,
and a NULL pointer is the value of the future.
$false if no operation should be applied to it.]]
}
return : future<Efl.Gfx.Entity>; [[ This Future gets resolved when any transition animation finishes and the popped sub-widget is ready for collection.
If there is no animation, the Future resolves immediately.
If $deletion_on_transition_end is $true then this widget will destroy the popped sub-widget and the Future will contain no Value. Otherwise, the caller becomes the owner of the sub-widget contained in the Future and must dispose of it appropriately. ]]
return : future<Efl.Gfx.Entity>; [[This Future gets resolved when any transition animation finishes and the
popped sub-widget is ready for collection.
If there is no animation, the Future resolves immediately.
If $deletion_on_transition_end is $true then this widget will destroy the
popped sub-widget and the Future will contain no Value.
Otherwise, the caller becomes the owner of the sub-widget contained in the
Future and must dispose of it appropriately. ]]
}
}
events {

View File

@ -1,16 +1,18 @@
abstract @beta Efl.Ui.Spotlight.Indicator extends Efl.Object {
[[Object used by @Efl.Ui.Spotlight.Container to render an indication of the active widgets's position among
[[Object used by @Efl.Ui.Spotlight.Container to render an indication of the active widgets' position among
the rest of the container's widgets.
An example would be Android's little dots in the home screen.
]]
methods {
bind @pure_virtual {
[[This method is called the first time an @Efl.Ui.Spotlight.Indicator is assigned to an @Efl.Ui.Spotlight.Container, binding them together.
[[This method is called the first time an @Efl.Ui.Spotlight.Indicator is assigned to an
@Efl.Ui.Spotlight.Container, binding them together.
This call can be used to setup the indicator part of the $spotlight.
The Active View of the container (if there is any) will be informed to the indicator by a later call to @.position_update.
The Active View of the container (if there is any) will be informed to the indicator by a later call to
@.position_update.
]]
params {
spotlight : Efl.Ui.Spotlight.Container; [[The container to bind this indicator to.]]
@ -39,16 +41,18 @@ abstract @beta Efl.Ui.Spotlight.Indicator extends Efl.Object {
}
}
position_update @pure_virtual {
[[This method tells the indicator that @Efl.Ui.Spotlight.Container.active_index has changed in the bound container.
[[This method tells the indicator that @Efl.Ui.Spotlight.Container.active_index has changed in the bound
container.
$position ranges from -1 to the number of views in the bound container (@Efl.Container.content_count).
Notice this allows moving to a position before the first view or past the last view, which might happen if the view
is thumb-scrolled out-of-bounds. Indicators can choose to render these out-of-bounds positions or not.
Notice this allows moving to a position before the first view or past the last view, which might happen if the
view is thumb-scrolled out-of-bounds. Indicators can choose to render these out-of-bounds positions or not.
Fractional values indicate positions in-between two views and should be respected to obtain a smooth transition.
Fractional values indicate positions in-between two views and should be respected to obtain smooth transitions.
]]
params {
position : double; [[The index of the active view, or a value in-between views if a transition is currently playing.]]
position : double; [[The index of the active view, or a value in-between views if a transition is currently
playing.]]
}
}
}

View File

@ -1,19 +1,26 @@
abstract @beta Efl.Ui.Spotlight.Manager extends Efl.Object {
[[Manager object used by @Efl.Ui.Spotlight.Container to handle rendering and animation of its sub-widgets, and user interaction.
[[Manager object used by @Efl.Ui.Spotlight.Container to handle rendering and animation of its sub-widgets,
and user interaction.
For instance, changes to the current sub-widget in the spotlight (@Efl.Ui.Spotlight.Container.active_index) can be animated with a transition.
This object can also handle user interaction. For example, dragging the sub-widget to one side to get to a different sub-widget (like an smartphone home screen).
For instance, changes to the current sub-widget in the spotlight (@Efl.Ui.Spotlight.Container.active_index) can be
animated with a transition.
This object can also handle user interaction. For example, dragging the sub-widget to one side to get to a
different sub-widget (like an smartphone home screen).
Such user interactions should end up setting a new @Efl.Ui.Spotlight.Container.active_index.
During a transition, the evolution of the current position should be exposed by emitting $pos_update events.
]]
methods {
bind @pure_virtual {
[[This method is called the first time an @Efl.Ui.Spotlight.Manager is assigned to an @Efl.Ui.Spotlight.Container, binding them together.
The manager can read the current content of the container, subscribe to events, or do any initialization it requires.
[[This method is called the first time an @Efl.Ui.Spotlight.Manager is assigned to an
@Efl.Ui.Spotlight.Container, binding them together.
The manager can read the current content of the container, subscribe to events, or do any initialization it
requires.
]]
params {
spotlight : Efl.Ui.Spotlight.Container; [[The container to bind the manager to.]]
group : Efl.Canvas.Group; [[The graphical group where the views should be added with @Efl.Canvas.Group.group_member_add and removed with @Efl.Canvas.Group.group_member_remove.]]
group : Efl.Canvas.Group; [[The graphical group where the views should be added with
@Efl.Canvas.Group.group_member_add and removed with
@Efl.Canvas.Group.group_member_remove.]]
}
}
content_add @pure_virtual {
@ -48,7 +55,8 @@ abstract @beta Efl.Ui.Spotlight.Manager extends Efl.Object {
}
}
@property size @pure_virtual {
[[Will be called whenever the @Efl.Ui.Spotlight.Container.spotlight_size changes so the @Efl.Ui.Spotlight.Manager can update itself.]]
[[Will be called whenever the @Efl.Ui.Spotlight.Container.spotlight_size changes so the
@Efl.Ui.Spotlight.Manager can update itself.]]
set {
}
values {
@ -63,9 +71,10 @@ abstract @beta Efl.Ui.Spotlight.Manager extends Efl.Object {
}
}
events {
pos_update : double; [[Index of the sub-widget currently being displayed. Fractional values indicate a position in-between sub-widgets.
For instance, when transitioning from sub-widget 2 to sub-widget 3, this event should be emitted with monotonically
increasing values ranging from 2.0 to 3.0.
Animations can perform any movement they want, but the reported $pos_update must move in the same direction.]]
pos_update : double; [[Index of the sub-widget currently being displayed. Fractional values indicate a position
in-between sub-widgets. For instance, when transitioning from sub-widget 2 to sub-widget 3,
this event should be emitted with monotonically increasing values ranging from 2.0 to 3.0.
Animations can perform any movement they want, but the reported $pos_update must move in
the same direction.]]
}
}

View File

@ -5,14 +5,15 @@ class @beta Efl.Ui.Tab_Page extends Efl.Ui.Layout_Base implements Efl.Content
@property tab_bar_item {
[[Get this page represented as a @Efl.Ui.Tab_Bar_Default_Item
The object returned here will reflect all the properties from the part here. Properties will be automatically updated.
This property is unique per @Efl.Ui.Tab_Page
The object returned here will reflect all the properties from the part here.
Properties will be automatically updated.
This property is unique per @Efl.Ui.Tab_Page.
]]
get {
}
values {
item : Efl.Ui.Tab_Bar_Default_Item; [[The @Efl.Ui.Tab_Bar_Default_Item for the tab bar]]
item : Efl.Ui.Tab_Bar_Default_Item; [[The @Efl.Ui.Tab_Bar_Default_Item for the tab bar.]]
}
}
}

View File

@ -56,8 +56,6 @@ class @beta Efl.Ui.Text extends Efl.Ui.Layout_Base implements Efl.Input.Clickabl
[[Control pasting of text and images for the widget.
Normally the entry allows both text and images to be pasted.
By setting cnp_mode to be #ELM_CNP_MODE_NO_IMAGE this prevents images from being copied or pasted.
By setting cnp_mode to be #ELM_CNP_MODE_PLAINTEXT this remove all tags in text .
Note: This only changes the behaviour of text.
]]
@ -217,7 +215,7 @@ class @beta Efl.Ui.Text extends Efl.Ui.Layout_Base implements Efl.Input.Clickabl
]]
}
values {
enabled: bool; [[If $enabled is $true, the return key is automatically disabled when the entry has no text.]]
enabled: bool; [[If $true, the return key is automatically disabled when the entry has no text.]]
}
}
@property item_factory {
@ -229,7 +227,8 @@ class @beta Efl.Ui.Text extends Efl.Ui.Layout_Base implements Efl.Input.Clickabl
}
}
input_panel_show {
[[Show the input panel (virtual keyboard) based on the input panel property of entry such as layout, autocapital types and so on.
[[Show the input panel (virtual keyboard) based on the input panel property of entry such as layout,
autocapital types and so on.
Note that input panel is shown or hidden automatically according to the focus state of entry widget.
This API can be used in the case of manually controlling by using @.input_panel_enabled.set(en, $false).

View File

@ -30,7 +30,8 @@ class @beta Efl.Ui.Timepicker extends Efl.Ui.Layout_Base
get {
}
values {
is_24hour: bool; [[$true to display the 24 hour time, $false to display 12 hour time including AM/PM button.]]
is_24hour: bool; [[$true to display the 24 hour time,
$false to display 12 hour time including AM/PM label.]]
}
}
}

View File

@ -2653,14 +2653,14 @@ elm_widget_cursor_del(Eo *obj, Elm_Cursor *cur)
}
EAPI void
elm_widget_scroll_lock_set(Eo *obj, Efl_Ui_Scroll_Block block)
elm_widget_scroll_lock_set(Eo *obj, Efl_Ui_Layout_Orientation block)
{
Elm_Widget_Smart_Data *sd = efl_data_scope_safe_get(obj, MY_CLASS);
Eina_Bool lx, ly;
if (!sd) return;
lx = !!(block & EFL_UI_SCROLL_BLOCK_HORIZONTAL);
ly = !!(block & EFL_UI_SCROLL_BLOCK_VERTICAL);
lx = !!(block & EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL);
ly = !!(block & EFL_UI_LAYOUT_ORIENTATION_VERTICAL);
if (sd->scroll_x_locked != lx)
{
sd->scroll_x_locked = lx;
@ -2673,15 +2673,15 @@ elm_widget_scroll_lock_set(Eo *obj, Efl_Ui_Scroll_Block block)
}
}
EAPI Efl_Ui_Scroll_Block
EAPI Efl_Ui_Layout_Orientation
elm_widget_scroll_lock_get(const Eo *obj)
{
Elm_Widget_Smart_Data *sd = efl_data_scope_safe_get(obj, MY_CLASS);
Efl_Ui_Scroll_Block block = EFL_UI_SCROLL_BLOCK_NONE;
Efl_Ui_Layout_Orientation block = EFL_UI_LAYOUT_ORIENTATION_DEFAULT;
if (!sd) return block;
if (sd->scroll_x_locked) block |= EFL_UI_SCROLL_BLOCK_HORIZONTAL;
if (sd->scroll_y_locked) block |= EFL_UI_SCROLL_BLOCK_VERTICAL;
if (sd->scroll_x_locked) block |= EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL;
if (sd->scroll_y_locked) block |= EFL_UI_LAYOUT_ORIENTATION_VERTICAL;
return block;
}

View File

@ -72,7 +72,7 @@ abstract Efl.Ui.Widget extends Efl.Canvas.Group implements Efl.Access.Object,
[[Returns the current cursor style name.]]
}
values {
style: string; [[A specific style to use, eg. default,
style: string; [[A specific style to use, e.g. default,
transparent, ....]]
}
}
@ -111,7 +111,8 @@ abstract Efl.Ui.Widget extends Efl.Canvas.Group implements Efl.Access.Object,
@property disabled {
[[Whether the widget is enabled (accepts and reacts to user inputs).
The property works counted, this means, whenever n-caller set the value to $true, n-caller have to set it to $false in order to get it out of the disabled state again.
The property is counted, this is, if it is set n times to $true,
it has to be set n times to $false in order to get it out of the disabled state again.
Each widget may handle the disabled state differently, but overall
disabled widgets shall not respond to any input events. This is
@ -193,7 +194,7 @@ abstract Efl.Ui.Widget extends Efl.Canvas.Group implements Efl.Access.Object,
Note: Objects which are meant to be interacted with by input events
are created able to be focused, by default. All the others are not.
This property's default value depends on the widget (eg. a box is
This property's default value depends on the widget (e.g. a box is
not focusable, but a button is).
]]
set {
@ -383,10 +384,13 @@ abstract Efl.Ui.Widget extends Efl.Canvas.Group implements Efl.Access.Object,
focus_state_apply @protected {
[[Apply a new focus state on the widget.
This method is called internally by @Efl.Ui.Widget. Override it to change how a widget interacts with its focus manager.
If a widget desires to change the applied configuration, it has to modify $configured_state in addition to any internal changes.
This method is called internally by @Efl.Ui.Widget.
Override it to change how a widget interacts with its focus manager.
If a widget desires to change the applied configuration,
it has to modify $configured_state in addition to any internal changes.
The default implementation (when this method is not overridden) applies $configured_state using the $manager contained inside.
The default implementation (when this method is not overridden) applies $configured_state using
the $manager contained inside.
]]
params {
@in current_state : Efl.Ui.Widget_Focus_State;

View File

@ -1,13 +1,14 @@
mixin Efl.Ui.Widget_Focus_Manager requires Efl.Ui.Widget extends Efl.Ui.Focus.Manager
{
[[
[[Helper mixin for widgets which also can act as focus managers.
@since 1.22
]]
methods {
focus_manager_create @protected @pure_virtual {
[[If the widget needs a focus manager, this function will be called.
It can be used and overriden to inject your own manager or set
It can be used and overridden to inject your own manager or set
custom options on the focus manager.
]]
params {

View File

@ -25,7 +25,7 @@ typedef struct _Efl_Ui_Scroll_Manager_Data
Efl_Ui_Scrollbar_Mode hbar_mode, vbar_mode;
Ecore_Timer *hbar_timer, *vbar_timer;
Efl_Ui_Scroll_Block block;
Efl_Ui_Layout_Orientation block;
struct
{

View File

@ -752,7 +752,8 @@ class Efl.Ui.Win extends Efl.Ui.Widget implements Efl.Canvas.Scene, Efl.Access.W
@property win_rotation @beta {
[[The rotation of this window
The value will automatically change when the WM of this window changes its rotation. This rotation is automatically applied to all @Efl.Ui.Layout objects.
The value will automatically change when the Window Manager of this window changes its rotation.
This rotation is automatically applied to all @Efl.Ui.Layout objects.
]]
set {
}

View File

@ -1039,8 +1039,11 @@ _content_text_set(Evas_Object *obj,
evas_object_event_callback_add
(sd->text_content_obj, EVAS_CALLBACK_DEL, _on_text_content_del, obj);
elm_label_line_wrap_set(sd->text_content_obj, sd->content_text_wrap_type);
elm_label_line_wrap_set(sd->text_content_obj, ELM_WRAP_NONE);
elm_object_text_set(sd->text_content_obj, text);
efl_canvas_group_calculate(sd->text_content_obj);
elm_label_line_wrap_set(sd->text_content_obj, sd->content_text_wrap_type);
evas_object_size_hint_weight_set
(sd->text_content_obj, EVAS_HINT_EXPAND, 0.0);
evas_object_size_hint_align_set

View File

@ -2239,11 +2239,11 @@ _elm_scroll_wheel_event_cb(void *data,
return;
if (direction)
{
if (sid->block & EFL_UI_SCROLL_BLOCK_HORIZONTAL) return;
if (sid->block & EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL) return;
}
else
{
if (sid->block & EFL_UI_SCROLL_BLOCK_VERTICAL) return;
if (sid->block & EFL_UI_LAYOUT_ORIENTATION_VERTICAL) return;
}
evas_post_event_callback_push(e, _scroll_wheel_post_event_cb, sid);
@ -2257,7 +2257,7 @@ _elm_scroll_post_event_up(void *data,
if (sid->obj)
{
elm_widget_scroll_lock_set(sid->obj, EFL_UI_SCROLL_BLOCK_NONE);
elm_widget_scroll_lock_set(sid->obj, EFL_UI_LAYOUT_ORIENTATION_DEFAULT);
}
return EINA_TRUE;
}
@ -2721,8 +2721,8 @@ _elm_scroll_mouse_up_event_cb(void *data,
if (!sid->pan_obj) return;
if ((sid->block & EFL_UI_SCROLL_BLOCK_VERTICAL) &&
(sid->block & EFL_UI_SCROLL_BLOCK_HORIZONTAL))
if ((sid->block & EFL_UI_LAYOUT_ORIENTATION_VERTICAL) &&
(sid->block & EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL))
return;
#ifdef SMOOTHDBG
@ -2871,7 +2871,7 @@ _elm_scroll_mouse_up_event_cb(void *data,
pgx = _elm_scroll_page_x_get(sid, ox, EINA_TRUE);
if (pgx != x &&
!(sid->block &
EFL_UI_SCROLL_BLOCK_HORIZONTAL))
EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL))
{
ev->event_flags |= EVAS_EVENT_FLAG_ON_SCROLL;
_elm_scroll_scroll_to_x
@ -2885,7 +2885,7 @@ _elm_scroll_mouse_up_event_cb(void *data,
pgy = _elm_scroll_page_y_get(sid, oy, EINA_TRUE);
if (pgy != y &&
!(sid->block &
EFL_UI_SCROLL_BLOCK_VERTICAL))
EFL_UI_LAYOUT_ORIENTATION_VERTICAL))
{
ev->event_flags |= EVAS_EVENT_FLAG_ON_SCROLL;
_elm_scroll_scroll_to_y
@ -2972,8 +2972,8 @@ _elm_scroll_mouse_down_event_cb(void *data,
sid = data;
ev = event_info;
if ((sid->block & EFL_UI_SCROLL_BLOCK_VERTICAL) &&
(sid->block & EFL_UI_SCROLL_BLOCK_HORIZONTAL))
if ((sid->block & EFL_UI_LAYOUT_ORIENTATION_VERTICAL) &&
(sid->block & EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL))
return;
#ifdef SMOOTHDBG
@ -3122,7 +3122,7 @@ _elm_scroll_post_event_move(void *data,
Evas *e EINA_UNUSED)
{
Elm_Scrollable_Smart_Interface_Data *sid = data;
Efl_Ui_Scroll_Block block;
Efl_Ui_Layout_Orientation block;
Eina_Bool horiz, vert;
int start = 0;
@ -3155,7 +3155,7 @@ _elm_scroll_post_event_move(void *data,
sid->down.dragged = EINA_TRUE;
if (sid->obj)
{
block |= EFL_UI_SCROLL_BLOCK_HORIZONTAL;
block |= EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL;
elm_widget_scroll_lock_set(sid->obj, block);
}
start = 1;
@ -3178,7 +3178,7 @@ _elm_scroll_post_event_move(void *data,
sid->down.dragged = EINA_TRUE;
if (sid->obj)
{
block |= EFL_UI_SCROLL_BLOCK_VERTICAL;
block |= EFL_UI_LAYOUT_ORIENTATION_VERTICAL;
elm_widget_scroll_lock_set(sid->obj, block);
}
start = 1;
@ -3433,8 +3433,8 @@ _elm_scroll_mouse_move_event_cb(void *data,
if (!sid->pan_obj) return;
if ((sid->block & EFL_UI_SCROLL_BLOCK_VERTICAL) &&
(sid->block & EFL_UI_SCROLL_BLOCK_HORIZONTAL))
if ((sid->block & EFL_UI_LAYOUT_ORIENTATION_VERTICAL) &&
(sid->block & EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL))
return;
ev = event_info;
@ -3449,7 +3449,7 @@ _elm_scroll_mouse_move_event_cb(void *data,
if (!sid->down.now) return;
if ((sid->scrollto.x.animator) && (!sid->hold) && (!sid->freeze) &&
!(sid->block & EFL_UI_SCROLL_BLOCK_HORIZONTAL))
!(sid->block & EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL))
{
Evas_Coord px = 0;
ELM_ANIMATOR_DISCONNECT(sid->obj, sid->scrollto.x.animator, _elm_scroll_scroll_to_x_animator, sid);
@ -3459,7 +3459,7 @@ _elm_scroll_mouse_move_event_cb(void *data,
}
if ((sid->scrollto.y.animator) && (!sid->hold) && (!sid->freeze) &&
!(sid->block & EFL_UI_SCROLL_BLOCK_VERTICAL))
!(sid->block & EFL_UI_LAYOUT_ORIENTATION_VERTICAL))
{
Evas_Coord py = 0;
ELM_ANIMATOR_DISCONNECT(sid->obj, sid->scrollto.y.animator, _elm_scroll_scroll_to_y_animator, sid);
@ -3508,7 +3508,7 @@ _elm_scroll_mouse_move_event_cb(void *data,
if (x > (y * 2))
{
if (!(sid->block &
EFL_UI_SCROLL_BLOCK_HORIZONTAL))
EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL))
{
sid->down.dir_x = EINA_TRUE;
}
@ -3519,7 +3519,7 @@ _elm_scroll_mouse_move_event_cb(void *data,
{
sid->down.dir_x = EINA_FALSE;
if (!(sid->block &
EFL_UI_SCROLL_BLOCK_VERTICAL))
EFL_UI_LAYOUT_ORIENTATION_VERTICAL))
{
sid->down.dir_y = EINA_TRUE;
}
@ -3528,12 +3528,12 @@ _elm_scroll_mouse_move_event_cb(void *data,
if (!dodir)
{
if (!(sid->block &
EFL_UI_SCROLL_BLOCK_HORIZONTAL))
EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL))
{
sid->down.dir_x = EINA_TRUE;
}
if (!(sid->block &
EFL_UI_SCROLL_BLOCK_VERTICAL))
EFL_UI_LAYOUT_ORIENTATION_VERTICAL))
{
sid->down.dir_y = EINA_TRUE;
}
@ -3545,7 +3545,7 @@ _elm_scroll_mouse_move_event_cb(void *data,
if (x > y)
{
if (!(sid->block &
EFL_UI_SCROLL_BLOCK_HORIZONTAL))
EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL))
{
sid->down.dir_x = EINA_TRUE;
}
@ -3555,7 +3555,7 @@ _elm_scroll_mouse_move_event_cb(void *data,
{
sid->down.dir_x = EINA_FALSE;
if (!(sid->block &
EFL_UI_SCROLL_BLOCK_VERTICAL))
EFL_UI_LAYOUT_ORIENTATION_VERTICAL))
{
sid->down.dir_y = EINA_TRUE;
}
@ -3566,12 +3566,12 @@ _elm_scroll_mouse_move_event_cb(void *data,
else
{
if (!(sid->block &
EFL_UI_SCROLL_BLOCK_HORIZONTAL))
EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL))
{
sid->down.dir_x = EINA_TRUE;
}
if (!(sid->block &
EFL_UI_SCROLL_BLOCK_VERTICAL))
EFL_UI_LAYOUT_ORIENTATION_VERTICAL))
{
sid->down.dir_y = EINA_TRUE;
}
@ -4792,12 +4792,12 @@ _elm_interface_scrollable_gravity_get(const Eo *obj EINA_UNUSED, Elm_Scrollable_
}
EOLIAN static void
_elm_interface_scrollable_movement_block_set(Eo *obj EINA_UNUSED, Elm_Scrollable_Smart_Interface_Data *sid, Efl_Ui_Scroll_Block block)
_elm_interface_scrollable_movement_block_set(Eo *obj EINA_UNUSED, Elm_Scrollable_Smart_Interface_Data *sid, Efl_Ui_Layout_Orientation block)
{
sid->block = block;
}
EOLIAN static Efl_Ui_Scroll_Block
EOLIAN static Efl_Ui_Layout_Orientation
_elm_interface_scrollable_movement_block_get(const Eo *obj EINA_UNUSED, Elm_Scrollable_Smart_Interface_Data *sid)
{
return sid->block;
@ -4859,7 +4859,7 @@ _elm_interface_scrollable_efl_canvas_group_group_add(Eo *obj, Elm_Scrollable_Sma
sid->one_direction_at_a_time = ELM_SCROLLER_SINGLE_DIRECTION_SOFT;
sid->momentum_animator_disabled = EINA_FALSE;
sid->bounce_animator_disabled = EINA_FALSE;
sid->block = EFL_UI_SCROLL_BLOCK_NONE;
sid->block = EFL_UI_LAYOUT_ORIENTATION_DEFAULT;
_elm_scroll_scroll_bar_reset(sid);

View File

@ -1,3 +1,4 @@
import efl_ui_layout_orientable;
type @beta Elm_Interface_Scrollable_Cb: __undefined_type; [[Elementary interface scrollable callback type]]
type @beta Elm_Interface_Scrollable_Resize_Cb: __undefined_type; [[Elementary interface scrollable resize callback type]]
type @beta Elm_Interface_Scrollable_Min_Limit_Cb: __undefined_type; [[Elementary interface scrollable minimal limit callback type]]
@ -9,10 +10,10 @@ enum Elm.Scroller.Policy
See also @Elm.Interface_Scrollable.policy.set.
]]
auto = 0, [[Show scrollbars as needed]]
on, [[Always show scrollbars]]
off, [[Never show scrollbars]]
last [[Sentinel value to indicate last enum field during iteration]]
auto = 0, [[Show scrollbars as needed.]]
on, [[Always show scrollbars.]]
off, [[Never show scrollbars.]]
last [[Internal. Sentinel value to indicate last enum field during iteration.]]
}
enum Elm.Scroller.Single_Direction
@ -21,10 +22,10 @@ enum Elm.Scroller.Single_Direction
See also @Elm.Interface_Scrollable.single_direction.set.
]]
none = 0, [[Scroll every direction]]
soft, [[Scroll single direction if the direction is certain]]
hard, [[Scroll only single direction]]
last [[Sentinel value to indicate last enum field during iteration]]
none = 0, [[Scroll every direction.]]
soft, [[Scroll single direction if the direction is certain.]]
hard, [[Scroll only single direction.]]
last [[Internal. Sentinel value to indicate last enum field during iteration.]]
}
mixin @beta Elm.Interface_Scrollable requires Efl.Ui.Widget extends Efl.Ui.Scrollable, Efl.Ui.Focus.Manager_Sub, Efl.Ui.Widget_Focus_Manager
@ -99,7 +100,7 @@ mixin @beta Elm.Interface_Scrollable requires Efl.Ui.Widget extends Efl.Ui.Scrol
with regard to scrolling.
]]
values {
block: Efl.Ui.Scroll_Block(Efl.Ui.Scroll_Block.none); [[Which axis (or axes) to block]]
block: Efl.Ui.Layout_Orientation(Efl.Ui.Layout_Orientation.default); [[Which axis (or axes) to block]]
}
}
@property momentum_animator_disabled {
@ -113,12 +114,7 @@ mixin @beta Elm.Interface_Scrollable requires Efl.Ui.Widget extends Efl.Ui.Scrol
}
}
@property policy {
[[Scrollbar visibility policy
#ELM_SCROLLER_POLICY_AUTO means the scrollbar is made visible if it is
needed, and otherwise kept hidden. #ELM_SCROLLER_POLICY_ON turns it on all
the time, and #ELM_SCROLLER_POLICY_OFF always keeps it off. This applies
respectively for the horizontal and vertical scrollbars.]]
[[Scrollbar visibility policy]]
set {
}
get {

View File

@ -75,7 +75,7 @@ struct _Elm_Scrollable_Smart_Interface_Data
Elm_Scroller_Policy hbar_flags, vbar_flags;
Elm_Scroller_Single_Direction one_direction_at_a_time;
Efl_Ui_Scroll_Block block;
Efl_Ui_Layout_Orientation block;
struct
{

View File

@ -1790,12 +1790,12 @@ EAPI void
elm_object_scroll_lock_x_set(Evas_Object *obj,
Eina_Bool lock)
{
Efl_Ui_Scroll_Block block;
Efl_Ui_Layout_Orientation block;
EINA_SAFETY_ON_NULL_RETURN(obj);
block = elm_widget_scroll_lock_get(obj);
if (lock) block |= EFL_UI_SCROLL_BLOCK_HORIZONTAL;
else block &= ~EFL_UI_SCROLL_BLOCK_HORIZONTAL;
if (lock) block |= EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL;
else block &= ~EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL;
elm_widget_scroll_lock_set(obj, block);
}
@ -1803,33 +1803,33 @@ EAPI void
elm_object_scroll_lock_y_set(Evas_Object *obj,
Eina_Bool lock)
{
Efl_Ui_Scroll_Block block;
Efl_Ui_Layout_Orientation block;
EINA_SAFETY_ON_NULL_RETURN(obj);
block = elm_widget_scroll_lock_get(obj);
if (lock) block |= EFL_UI_SCROLL_BLOCK_VERTICAL;
else block &= ~EFL_UI_SCROLL_BLOCK_VERTICAL;
if (lock) block |= EFL_UI_LAYOUT_ORIENTATION_VERTICAL;
else block &= ~EFL_UI_LAYOUT_ORIENTATION_VERTICAL;
elm_widget_scroll_lock_set(obj, block);
}
EAPI Eina_Bool
elm_object_scroll_lock_x_get(const Evas_Object *obj)
{
Efl_Ui_Scroll_Block block;
Efl_Ui_Layout_Orientation block;
EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
block = elm_widget_scroll_lock_get(obj);
return !!(block & EFL_UI_SCROLL_BLOCK_HORIZONTAL);
return !!(block & EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL);
}
EAPI Eina_Bool
elm_object_scroll_lock_y_get(const Evas_Object *obj)
{
Efl_Ui_Scroll_Block block;
Efl_Ui_Layout_Orientation block;
EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
block = elm_widget_scroll_lock_get(obj);
return !!(block & EFL_UI_SCROLL_BLOCK_VERTICAL);
return !!(block & EFL_UI_LAYOUT_ORIENTATION_VERTICAL);
}
EAPI void

View File

@ -305,7 +305,7 @@ _drawer_open(Evas_Object *obj, Evas_Coord w, Evas_Coord h, Eina_Bool anim)
if (sd->freeze)
{
elm_interface_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_NONE);
(obj, EFL_UI_LAYOUT_ORIENTATION_DEFAULT);
sd->freeze = EINA_FALSE;
elm_layout_signal_emit(sd->scr_ly, "elm,state,content,visible", "elm");
}
@ -374,10 +374,10 @@ _drawer_close(Evas_Object *obj, Evas_Coord w, Evas_Coord h, Eina_Bool anim)
{
if (horizontal)
elm_interface_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_HORIZONTAL);
(obj, EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL);
else
elm_interface_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_VERTICAL);
(obj, EFL_UI_LAYOUT_ORIENTATION_VERTICAL);
sd->freeze = EINA_TRUE;
elm_layout_signal_emit(sd->scr_ly, "elm,state,content,hidden", "elm");
}
@ -390,7 +390,7 @@ _drawer_close(Evas_Object *obj, Evas_Coord w, Evas_Coord h, Eina_Bool anim)
if (sd->freeze)
{
elm_interface_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_NONE);
(obj, EFL_UI_LAYOUT_ORIENTATION_DEFAULT);
sd->freeze = EINA_FALSE;
elm_layout_signal_emit(sd->scr_ly, "elm,state,content,visible", "elm");
}
@ -403,10 +403,10 @@ _drawer_close(Evas_Object *obj, Evas_Coord w, Evas_Coord h, Eina_Bool anim)
{
if (horizontal)
elm_interface_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_HORIZONTAL);
(obj, EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL);
else
elm_interface_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_VERTICAL);
(obj, EFL_UI_LAYOUT_ORIENTATION_VERTICAL);
sd->freeze = EINA_TRUE;
elm_layout_signal_emit(sd->scr_ly, "elm,state,content,hidden", "elm");
}
@ -531,7 +531,7 @@ _timer_cb(void *data)
if (sd->freeze)
{
elm_interface_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_NONE);
(obj, EFL_UI_LAYOUT_ORIENTATION_DEFAULT);
sd->freeze = EINA_FALSE;
elm_layout_signal_emit(sd->scr_ly, "elm,state,content,visible", "elm");
evas_object_geometry_get(obj, NULL, NULL, &w, &h);
@ -639,7 +639,7 @@ _on_mouse_move(void *data,
if (sd->timer && ((cur_y - sd->down_y) > finger_size))
{
elm_interface_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_NONE);
(obj, EFL_UI_LAYOUT_ORIENTATION_DEFAULT);
sd->freeze = EINA_FALSE;
elm_layout_signal_emit(sd->scr_ly, "elm,state,content,visible", "elm");
}
@ -648,7 +648,7 @@ _on_mouse_move(void *data,
if (sd->timer && ((sd->down_y - cur_y) > finger_size))
{
elm_interface_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_NONE);
(obj, EFL_UI_LAYOUT_ORIENTATION_DEFAULT);
sd->freeze = EINA_FALSE;
elm_layout_signal_emit(sd->scr_ly, "elm,state,content,visible", "elm");
}
@ -658,7 +658,7 @@ _on_mouse_move(void *data,
((is_mirrored) && (sd->timer) && ((sd->down_x - cur_x) > finger_size)))
{
elm_interface_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_NONE);
(obj, EFL_UI_LAYOUT_ORIENTATION_DEFAULT);
sd->freeze = EINA_FALSE;
elm_layout_signal_emit(sd->scr_ly, "elm,state,content,visible", "elm");
}
@ -668,7 +668,7 @@ _on_mouse_move(void *data,
(!is_mirrored && (sd->timer) && ((sd->down_x - cur_x) > finger_size)))
{
elm_interface_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_NONE);
(obj, EFL_UI_LAYOUT_ORIENTATION_DEFAULT);
sd->freeze = EINA_FALSE;
elm_layout_signal_emit(sd->scr_ly, "elm,state,content,visible", "elm");
}
@ -1009,12 +1009,12 @@ _elm_panel_orient_set(Eo *obj, Elm_Panel_Data *sd, Elm_Panel_Orient orient)
case ELM_PANEL_ORIENT_TOP:
case ELM_PANEL_ORIENT_BOTTOM:
elm_interface_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_VERTICAL);
(obj, EFL_UI_LAYOUT_ORIENTATION_VERTICAL);
break;
case ELM_PANEL_ORIENT_LEFT:
case ELM_PANEL_ORIENT_RIGHT:
elm_interface_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_HORIZONTAL);
(obj, EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL);
break;
}
@ -1156,10 +1156,10 @@ _anim_stop_cb(Evas_Object *obj, void *data EINA_UNUSED)
{
if (horizontal)
elm_interface_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_HORIZONTAL);
(obj, EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL);
else
elm_interface_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_VERTICAL);
(obj, EFL_UI_LAYOUT_ORIENTATION_VERTICAL);
sd->freeze = EINA_TRUE;
elm_layout_signal_emit(sd->scr_ly, "elm,state,content,hidden", "elm");
@ -1189,7 +1189,7 @@ _scroll_cb(Evas_Object *obj, void *data EINA_UNUSED)
if (sd->freeze)
{
elm_interface_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_NONE);
(obj, EFL_UI_LAYOUT_ORIENTATION_DEFAULT);
sd->freeze = EINA_FALSE;
elm_layout_signal_emit(sd->scr_ly, "elm,state,content,visible", "elm");
}
@ -1250,13 +1250,13 @@ _elm_panel_efl_ui_widget_disabled_set(Eo *obj, Elm_Panel_Data *sd, Eina_Bool dis
case ELM_PANEL_ORIENT_BOTTOM:
case ELM_PANEL_ORIENT_TOP:
elm_interface_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_VERTICAL);
(obj, EFL_UI_LAYOUT_ORIENTATION_VERTICAL);
break;
case ELM_PANEL_ORIENT_RIGHT:
case ELM_PANEL_ORIENT_LEFT:
elm_interface_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_HORIZONTAL);
(obj, EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL);
break;
}
@ -1278,13 +1278,13 @@ _elm_panel_efl_ui_widget_disabled_set(Eo *obj, Elm_Panel_Data *sd, Eina_Bool dis
case ELM_PANEL_ORIENT_BOTTOM:
case ELM_PANEL_ORIENT_TOP:
elm_interface_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_HORIZONTAL);
(obj, EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL);
break;
case ELM_PANEL_ORIENT_RIGHT:
case ELM_PANEL_ORIENT_LEFT:
elm_interface_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_VERTICAL);
(obj, EFL_UI_LAYOUT_ORIENTATION_VERTICAL);
break;
}
@ -1413,12 +1413,12 @@ _elm_panel_scrollable_set(Eo *obj, Elm_Panel_Data *sd, Eina_Bool scrollable)
case ELM_PANEL_ORIENT_TOP:
case ELM_PANEL_ORIENT_BOTTOM:
elm_interface_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_VERTICAL);
(obj, EFL_UI_LAYOUT_ORIENTATION_VERTICAL);
break;
case ELM_PANEL_ORIENT_LEFT:
case ELM_PANEL_ORIENT_RIGHT:
elm_interface_scrollable_movement_block_set
(obj, EFL_UI_SCROLL_BLOCK_HORIZONTAL);
(obj, EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL);
break;
}
}

View File

@ -1208,13 +1208,13 @@ elm_scroller_movement_block_set(Evas_Object *obj,
Elm_Scroller_Movement_Block block)
{
ELM_SCROLLABLE_CHECK(obj);
Efl_Ui_Scroll_Block mode = EFL_UI_SCROLL_BLOCK_NONE;
Efl_Ui_Layout_Orientation mode = EFL_UI_LAYOUT_ORIENTATION_DEFAULT;
// legacy -> eo
if (block == ELM_SCROLLER_MOVEMENT_BLOCK_HORIZONTAL)
mode = EFL_UI_SCROLL_BLOCK_HORIZONTAL;
mode = EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL;
else if (block == ELM_SCROLLER_MOVEMENT_BLOCK_VERTICAL)
mode = EFL_UI_SCROLL_BLOCK_VERTICAL;
mode = EFL_UI_LAYOUT_ORIENTATION_VERTICAL;
elm_interface_scrollable_movement_block_set(obj, mode);
}
@ -1222,16 +1222,16 @@ elm_scroller_movement_block_set(Evas_Object *obj,
EAPI Elm_Scroller_Movement_Block
elm_scroller_movement_block_get(const Evas_Object *obj)
{
Efl_Ui_Scroll_Block mode;
Efl_Ui_Layout_Orientation mode;
ELM_SCROLLABLE_CHECK(obj, ELM_SCROLLER_MOVEMENT_NO_BLOCK);
mode = elm_interface_scrollable_movement_block_get(obj);
// eo -> legacy
if (mode == EFL_UI_SCROLL_BLOCK_HORIZONTAL)
if (mode == EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL)
return ELM_SCROLLER_MOVEMENT_BLOCK_HORIZONTAL;
else if (mode == EFL_UI_SCROLL_BLOCK_VERTICAL)
else if (mode == EFL_UI_LAYOUT_ORIENTATION_VERTICAL)
return ELM_SCROLLER_MOVEMENT_BLOCK_VERTICAL;
return ELM_SCROLLER_MOVEMENT_NO_BLOCK;

View File

@ -660,8 +660,8 @@ EAPI void elm_widget_tooltip_add(Evas_Object *obj, Elm_Tooltip *tt);
EAPI void elm_widget_tooltip_del(Evas_Object *obj, Elm_Tooltip *tt);
EAPI void elm_widget_cursor_add(Evas_Object *obj, Elm_Cursor *cur);
EAPI void elm_widget_cursor_del(Evas_Object *obj, Elm_Cursor *cur);
EAPI void elm_widget_scroll_lock_set(Evas_Object *obj, Efl_Ui_Scroll_Block block);
EAPI Efl_Ui_Scroll_Block elm_widget_scroll_lock_get(const Evas_Object *obj);
EAPI void elm_widget_scroll_lock_set(Evas_Object *obj, Efl_Ui_Layout_Orientation block);
EAPI Efl_Ui_Layout_Orientation elm_widget_scroll_lock_get(const Evas_Object *obj);
EAPI int elm_widget_scroll_child_locked_x_get(const Evas_Object *obj);
EAPI int elm_widget_scroll_child_locked_y_get(const Evas_Object *obj);
EAPI Eina_Error elm_widget_theme_object_set(Evas_Object *obj, Evas_Object *edj, const char *wname, const char *welement, const char *wstyle);

Some files were not shown because too many files have changed in this diff Show More