@feature
This is a new feature for eina (and EFL) - a zero-copy thread message
queue for sending messages from one thread to another or from the
ecore mainloop to or back to the mainloop from threads. It has a
complete test suite too.
Summary:
Removes Wshadow warnings by prepending/appending radices to
the target variables and parameters.
Reviewers: felipealmeida
CC: cedric
Differential Revision: https://phab.enlightenment.org/D1118
mmhhmm, missing @ Constructor tag, bad for the bindings,
maybe we must split animator and timeline into 2 classes,
maybe support callback hot swaping ...
This reverts commit ec4ffb86d6.
Summary:
- use defauld constructor instead of custom one.
- we don't allow construction of an animator with a NULL callback function,
this is checked in overriden eo_finalize.
- we don't support changing this callback once the object is created,
such calls will call ERR() and return.
see 46a78e8c and f92e5d50 for eo_add_custom() -> eo_add() details
Reviewers: tasn
Reviewed By: tasn
CC: cedric
Differential Revision: https://phab.enlightenment.org/D1113
as stated in f92e5d50, instead of using eo_add_custom() thus a custom
constructor and maybe overriding the default constructor to block it,
- use the default constructor to build the object
- add calls to eo_add(), to initialize the object
eo_add(class, parent, val_a_set(1), val_b_set(2), ... );
- override eo_finalize to validate the object and if needed,
use eo_error_set(obj) to abort object construction
Summary:
Applications can:
void method_callback(void* data, const Eldbus_Service_Interface* iface,
const Eldbus_Message* message);
struct { ... } data_struct;
Eldbus_Method methods[] =
{
"method1", ELDBUS_ARGS("b", "bool"), ELDBUS_ARGS("b", "bool"), ELDBUS_METHOD_FLAG_HAS_DATA
, (Eldbus_Method_Cb)&method_callback, &data_struct
};
And method_callback will be called with data parameter pointing to data_struct global object.
Also, Eldbus-cxx supports registering an interface passing a lambda or
function object as method. For example:
edb::service_interface iface = edb::service_interface_register
(c, path, interface
, es::method("SendStringAndBool"
, [expected_string, expected_bool] (std::string const& n, bool b
, bool* out)
{
std::cout << "Running SendStringAndBool" << std::endl;
ck_assert(n == expected_string);
ck_assert(b == expected_bool);
*out = b;
return n;
}
, es::ins<std::string, bool>("string", "bool")
, es::outs<std::string, bool>("string", "bool")
)
);
When a request for "SendStringAndBool" with the proper signature is
called, executes the lambda and replies with the return value and
its bool* out parameter value.
Reviewers: cedric, woohyun, raster
CC: savio, cedric
Differential Revision: https://phab.enlightenment.org/D1052
Summary:
currently, normal orientation tests are only added.
I'm going to add flipped orientation tests as well after I put related code in jpeg loader (currently it's not supported)
Reviewers: raster, cedric, jpeg
CC: seoz, cedric
Differential Revision: https://phab.enlightenment.org/D1098
Summary:
This patch allows us to construct efl::eina:: types from
their respective C types.
Reviewers: cedric, felipealmeida, q66
Reviewed By: q66
CC: smohanty, woohyun, raster, cedric
Differential Revision: https://phab.enlightenment.org/D1068
Summary:
This test should make the test suite fail. It sets "a<ps>b" and
"a<ps/>b" markups, and deletes the PS format. Essentially, these two
different markups should have the same result by this deletion. Instead,
only the <ps/> format gets deleted properly.
A follow-up commit is added with this as a fix.
Evas/Textblock: fix deletion of PS bug
Fixes an issue with deletion of "<ps>". Format deletion was only
performed for formats that are own-closers. This sets the paragraph
separator to be an own-closer format.
@fix
Reviewers: tasn
Reviewed By: tasn
CC: JackDanielZ, id213sin
Differential Revision: https://phab.enlightenment.org/D1046
Summary:
When item format is cutoff by ellipsis, *_cursor_format_item_geometry_get API
should be failed at the item position.
But, it can be success and returns abnormal geometry.
Reviewers: woohyun, tasn
CC: cedric, herdsman
Differential Revision: https://phab.enlightenment.org/D974
"f<color=#f00>i</color>f" could cause textblock to crash. It doesn't
crash anymore. It doesn't render the colours correctly either, but at
least this is the first step.
This is the start of fixing T1308
@bugfix
This function lets you hook at the end of eo_add and override it for a
class. This is essentially the first step towards killing custom
constructors. Instead of having a custom constructor, you should just
do:
eo_add(CLASS, parent, a_set(3), b_set("eou"));
eo_constructor is called at the beginning for pre-init things.
eo_finalize is called at the end, for actually finalizing and doing
things. This cleans up the API and possibly saves a lot of things that
would have been stupid and slow in the past, like loading an elm widget
with an existing theme, and then changing the theme.
** This breaks Eo ABI, please recompile elementary and everything else that
creates eo objects.
@feature
Summary:
This enables textblock to support more values other than 1.0.
For 0 <= ellipsis < 1.0, it splits the text such that it fits the
textblock's width. The ellipsis is relatively position according to the
ellipsis value, and characters are removed also relatively.
For example, a value of 0.5 will position the ellipsis right in the
center of the textblock's width, while removing characters equally right
and left from the center.
Basic approach to this feature was to do some work before the layout
process. We calculate the expected total width of the items, and by how
much we exceed from the textblock's width. Afterwards is it just some
careful work to set the boundaries of the width we want to cut, and
deciding which characters we need to removed to fulfill this requirement.
The rest is splitting the text and visually-removing the part we
need to cut.
This is all handled before any logical lines are created, so the
_layout_par function remains almost intact. A designated _ellip_prev_it
field in the Paragraph struct instructs after which item we place the
ellipsis item, if at all.
Note that we keep the fast path for ellipsis 1.0, as heavier work needs
to be done for the other values.
Added tests to evas_suite for a range of ellipsis values.
Also, multiline is unsupported at the moment.
@feature
Test Plan: Anything that uses Evas Textblock (single-line, please)
Reviewers: tasn, id213sin, raster
CC: cedric, JackDanielZ, raster
Differential Revision: https://phab.enlightenment.org/D905
The function eolian_implement_information_get was returning strings for
the class and the function. It was written in this way at the beginning
because it was not needed to verify the correctness of the class and
the function.
Now that we have the namespace feature, this function must check it,
meaning that the class and the function are now known.
So we can return them instead of returning the strings.
The generators had to find the class from the classname. It is no more
needed.
The C++ generator has been adapted to this new API.
Summary:
Fixed the rbegin/rend functions returning switched reverse iterators.
Added code to some unit tests for comparing elements in reverse order, in interest of
checking the correctness of the rbegin/rend functions.
Reviewers: felipealmeida, cedric, woohyun, smohanty, raster
Reviewed By: felipealmeida
CC: savio, cedric
Differential Revision: https://phab.enlightenment.org/D901
Summary:
Support union, subtract, intersection, equal(comparison) between tilers.
@feature
Test Plan: Test with added test case(src/tests/eina/eina_test_tiler.c) and the example(src/examples/eina/eina_tiler_02.c)
Reviewers: gwanglim, devilhorns, raster, zmike, cedric
CC: cedric
Differential Revision: https://phab.enlightenment.org/D880
Until now, the functions giving access to class information were taking
the class name as parameter.
Except the fact that we needed to search into a hash table for the internal
class structure, no flexibility is possible.
This change consists in modifying most of the APIs using the class name
with a new Eolian_Class type and adapt the code of the C and C++
generators accordingly.
By using -gi option, the generator appends the functions that are
present into the given eo file and missing into the developer file
(given via -o option as an in/out file).
@feature
It includes parser updates, database fill and tests on basic and complex
types.
One can define types in this way:
type Evas_Coord: int; /* Simple type definition */
type List_Objects: Eina_List * <Eo *>;
@feature
Summary:
Mainly from the examples but also from libunibreak and tests/eet.
I'm not sure if it's really worth to remove warnings from the examples
-- because it adds pedantic-ness to something supposed to be didatic,
but I leave for you guys to judge.
Reviewers: tasn, cedric
CC: felipealmeida, raster, smohanty, cedric
Differential Revision: https://phab.enlightenment.org/D896
Signed-off-by: Cedric Bail <cedric.bail@free.fr>
Summary:
Some fonts has combination information for "ff".
When harfbuzz is enabled with the font, evas text ellipsis logic can be broken.
Reviewers: tasn, woohyun, cedric
Reviewed By: tasn
CC: cedric, herdsman
Differential Revision: https://phab.enlightenment.org/D870
Some comment/commit message improvements by TAsn.
Summary:
This patch adds 'eolian_cxx' -- a C++ bindings generator --
to the EFL tree. Eolian Cxx uses Eolian API to read .eo files and generate
.eo.hh. It relies/depends on Eo Cxx and Eina Cxx (both non-generated
bindings).
src/bin/eolian_cxx: The eolian_cxx program.
src/lib/eolian_cxx: A header-only library that implements the C++ code
generation that binds the .eo classes.
=Examples=
src/examples/eolian_cxx/eolian_cxx_simple_01.cc: The simplest example,
it just uses some "dummy" generated C++ classes.
src/examples/eolian_cxx/eolian_cxx_inherit_01.cc: Illustrates how
pure C++ classes inherit from .eo generated classes.
src/examples/evas/evas_cxx_rectangle.cc: More realistic example using
the generated bindings Evas Cxx. Still a bit shallow because we don't
have full fledged .eo descriptions yet, but will be improved.
=Important=
The generated code is not supported and not a stable API/ABI. It is
here to gather people interest and get review before we set things in
stone for release 1.11.
@feature
Reviewers: cedric, smohanty, raster, stefan_schmidt
CC: felipealmeida, JackDanielZ, cedric, stefan
Differential Revision: https://phab.enlightenment.org/D805
Signed-off-by: Cedric Bail <cedric.bail@free.fr>
Yes, it's a bad move. But I'd rather avoid breaking make check
for now until I have a proper test suite.
The script language has been changed to Lua, and so its
limitations and syntax are not the same. Remember this is a beta
API so it shouldn't even be exposed to normal apps.
This adds filter support to Image objects as well.
The exact same filters can run on Text and on Images
(provided some colorspace limitations are respected).
This basically adds:
- Support for RGBA input buffer
- Eo entry points for Image filter support
- Implement basic filter support in Evas_Image
Before this change, all the .eo files of the directories given with -I
option were parsed. Most of this information was not necessary at all,
since only the classes belonging to the inheritance of the class given
as parameter were needed.
Now, during the parsing of the given class, the inherits classes are
searched and parsed.
A condition is needed to make it work well. To find a filename for a
class, we consider the lowercase of the class name as the filename we
have to parse.
e.g, Elm_Button -> elm_button -> elm_button.eo
It considerably reduces the generation time.
A fix in the tests was needed.
It includes too fixes for the complex type. If I had listened to Tasn,
I would have detected them a long time ago.
But he didn't insist enough. He just said:
"Write your tests, ?#@*&%! french!"
Summary:
2 threads run 'eo2_do(o, a(), b());'
- A goes first, creates an object, enters 'eo2_do(o, a(), b());'
in a() call, it blocks, releases B and waits for it.
- B when released, creates an object, enters 'eo2_do(o, a(), b());'
in a() call, it joins and releases A, then blocks.
- A returns from a(); and enters b() using current call stack frame,
which is the one pushed by B! then pop the frame and releases B.
- B does as above using the stack pushed by A!
Summary:
Modified syntax for eina C++ log to imitate the macro call as returning a stream. So, instead of:
EINA_CXX_DOM_LOG_CRIT(efl::eina::global_domain, "foo " << 5);
It is now used as:
EINA_CXX_DOM_LOG_CRIT(efl::eina::global_domain) << "foo " << 5;
Which more closely resambles using IOStreams in C++.
@feature
Reviewers: cedric, barbieri, smohanty
Reviewed By: barbieri
CC: cedric
Differential Revision: https://phab.enlightenment.org/D623
Summary: Evas textblock can't cut off text properly when it has separated items.
Reviewers: tasn, woohyun, raster
Reviewed By: raster
CC: cedric, herdsman
Differential Revision: https://phab.enlightenment.org/D667
It seems that a different version of freetype is causing some different
values to be calculated for some glyphs. Also, we consider the whole
font list when calculating max ascent/descent, so there will always be
differences there.
This commit just laxes the tests, requiring the values to be at least
the values we expect from our font.
Fixes T1079
Tokenizer's approach of looking back is horrible and breaks the
following simple case (bug I had that lead to this patch):
"string\\"
As the parser would get the end quote and check the previous character
if it was a backslash and it was, but it was not escaping the quote,
but being escaped by the previous backslash.
The best approach is to first check for escape and then go to
quote. Escape is simple and only the following byte, so we enter
escape, process the byte and then are back to regular mode (be it
quote or unquote).
Added testcase so we avoid breaking it again.
@bugfix cherry-pick
This happens with many texts. The issue occurs when the width of the
last char is larger than it's advance. Before this patch, we didn't the
width into account when calculating width, thus causing clipping issues
in some cases.
Summary:
Added efl::eina::malloc_clone_allocator to be used with ptr_* data
structures for wrapping structures allocated by EFL in C.
This allows for example:
void foo(Eina_List* l)
{
efl::eina::ptr_list<int, efl::eina::malloc_clone_allocator> list(l);
}
If the standard efl::eina::heap_no_clone_allocator is used, the
deallocation code uses C++ delete operator, which causes undefined
behavior because the allocation was originally done with malloc.
Reviewers: cedric
CC: savio, cedric
Differential Revision: https://phab.enlightenment.org/D614
Summary:
Added eina_log support for C++ using the following macros:
For logging into a domain:
EINA_CXX_DOM_LOG
EINA_CXX_DOM_LOG_CRIT
EINA_CXX_DOM_LOG_ERR
EINA_CXX_DOM_LOG_INFO
EINA_CXX_DOM_LOG_DBG
EINA_CXX_DOM_LOG_WARN
And for logging into the default domain:
EINA_CXX_LOG
EINA_CXX_LOG_CRIT
EINA_CXX_LOG_ERR
EINA_CXX_LOG_INFO
EINA_CXX_LOG_DBG
EINA_CXX_LOG_WARN
The usage is simple as can be seen in the tests:
efl::eina::log_domain domain("error_domain_name");
domain.set_level(efl::eina::log_level::critical);
EINA_CXX_DOM_LOG_CRIT(domain, "something went wrong with the following error: " << error);
@feature
Reviewers: cedric
CC: raster, savio, cedric, sanjeev
Differential Revision: https://phab.enlightenment.org/D605
Summary:
Added inarray, inlist, ptr_array and ptr_list's range types named: range_inarray, range_inlist, range_ptr_array and range_ptr_list.
Each has two "flavours": mutable and not mutable. The const versions are parameterized by a const parameter. For example: range_ptr_list<int const> and the mutable doesn't have the const, so: range_ptr_list<int>.
The difference between the two is that the const versions can't modify the elements from the sequence, while the mutable allows so. Also, the const receives a Eina_Array const* while the mutable must have a Eina_Array*.
Reviewers: cedric
CC: savio, cedric
Differential Revision: https://phab.enlightenment.org/D613
Summary:
Added support for exceptions on ecore_main_loop_thread_safe_call_async and
ecore_main_loop_thread_safe_call_sync. Also optimized the transport of the
return value through a parameter on ecore_main_loop_thread_safe_call_sync.
ecore-cxx: Changed uses of alignas for aligned_storage in C++11
Reviewers: cedric, raster
CC: savio, cedric
Differential Revision: https://phab.enlightenment.org/D593
Signed-off-by: Cedric BAIL <cedric.bail@samsung.com>
The current implementation of eina_convert_itoa cannot convert INT_MIN.
When the input number is negative, the function negates it and this is
an undefined behavior for INT_MIN since -INT_MIN cannot be represented
in a signed int.
@fix T1062
Signed-off-by: Cedric BAIL <cedric.bail@samsung.com>
as we don't support multiple composites of the same class,
and know at class elaboration how many composites we should have,
we can create the composites array and pack it at the end of the object.
In a previous commit I mentionned that make check would fail
if PulseAudio is not running. Well, this is a bit excessive,
especially for buildbots where it doesn't have to be running.
So let's check that PulseAudio is running before failing.
Other errors should still be caught.
A simple "pulseaudio --check" should do the trick.
EFL can be built with PulseAudio support even if PA is
not present on the system. In that case, ecore_suite will
hang forever. Let's just catch the error instead.
Note: make check will fail if PA is not available (but not hang)
This is not related to Tom's recent mail (but yeah it reminded me
of this bug^^)
Fixes T732.
The point of this binding is to enable the support for easy lambda for ecore function
that wont be using Eo. See the tests on how to use those.
Reviewers: cedric, raster
CC: savio, cedric
Differential Revision: https://phab.enlightenment.org/D582
Signed-off-by: Cedric Bail <cedric.bail@free.fr>
eo_composite_attach fail if the class of the composite is not
listed in the parent class extensions, or if there is already a
composite of the same class. The later because calls are
forwarded to the first responding composite, see _eo_op_internal().
The goal of this library is to make the life of C++ developers easier
when having to manipulate Eina datatype by providing a layer to abstract
those data type in C++. Check examples for now. Documentation will come
soon, but we are pushing that rather sooner to get feedback on those bindings.
As you will notice, this library is just composed of headers. There is no .so
and we do think it is better this way. Reducing ABI and API stability issue for
applications developers who are the primary target of this binding.
Also please note that you will need to have C++11 to use this binding.
Signed-off-by: Cedric Bail <cedric.bail@free.fr>
* New --loop: restart the playback when end reached
* New --position: start the playback from the last know position
* Fixed double -R option. now -r is --reflex and -R is --copyright
Loop and last-position was implemented yet, this commit just made
them optionally, so the default behaviour of the test reflect the
default behaviour of emotion.
Force render into an Ecore_Evas, and check that the pixels
are valid:
- Not all transparent (can't really happen)
- Not all black (since there's a black rect behind the text)
- All valid premultiplied values (A >= R,G,B)
Yes, it's a bit slow. But at least it really checks something :)
Set filter on a text object and check the object's geometry.
Get the padding and the geometry so we're sure they match.
Also, pad_get would return 0 if the filter did not compile,
so this checks that these filters are valid.
This test uses some Devanagari text that should have more complex
clusters than what latin text can provide. This is a more complex
wrapping case that should be tested and haven't been tested until now.
NOTE: do we really need to maintain 2 different groups for the reflex effect?
The 2 groups differ only for the added reflection part.
Isn't enough to show/hide the reflection part when requested?
Summary:
delete_cb is called at thread exit for each Eina_TLS keys used by the thread
Details:
posix:
pthread_key_create(key, delete_cb); does it
win32/wince:
eina_tls_free/new un/registers key&&cb into a static eina_list.
eina_tls_set add the key to an eina_list in Eina_Thread_Win3.
this list is cleared and callbacks are called in _eina_thread_join()
Test Plan: win32/wince has to be tested, I have no setup to do it.
Reviewers: cedric
CC: cedric
Differential Revision: https://phab.enlightenment.org/D489
It is sometime useful to start from a defined buffer, but to not touch it
until needed. This make life of caller more easier as they don't need to
duplicate the buffer themself as Eina will now take care of that.
In the previous commit, style padding has been changed, so
that lines don't get extra space just because there's a special
style (glow, ...)
This adds some test cases that check the actual geometry of the
lines relatively to each other.
NOTE: This test does not fail before the padding commits, as
_relayout_if_needed() adjusts the padding properly.
This patch will detect how many more times ecore_init was called
during initialization and use that as a threshold to do a clean shutdown.
It is a necessary evil as we do have ecore module that will initialize
eldbus that will then reinit ecore_init from within ecore_init and without
a chance for the application to act on it.
I also reenable a test to make sure we will catch earlier this kind of issue.
This patch is necessary to work around the fact that if you have some
ecore system module installed, they will be initialized and may use another
library like eldbus that will call ecore_init again. So ecore_init will be
different from 1, but still be a success.
My patch does introduce a work around a problem in that situation. Calling
ecore_shutdown wont work at this stage, as we do have module that did initialize
ecore also. And the only way to make ecore_shutdown happen is to unload those
module and that wont happen as they where initialized from inside ecore... lala !
Yes, we never shutdown ecore properly when we have ecore module that use
something like eldbus.
Ecore system module may use dbus, so when you init ecore, it may init eldbus a few
more time (depending on the module that are present on your system). This result in
eldbus_init returning a valid init, but different from 1. This patch update the test
to take that into account.
Summary: Added a test for range_text_get case on the text that include multi text node.
Reviewers: tasn, woohyun, seoz
CC: cedric
Differential Revision: https://phab.enlightenment.org/D398
This should fix the test hangs on Jenkins. Fixed them for me.
The problem was, that the timeout was not handled correctly.
The server object was deleted, but the mainloop was not stopped.