Commit Graph

75 Commits

Author SHA1 Message Date
Hermet Park 476e2b0521 canvas 3d: remove all canvas3d features across efl.
Reviewers: jsuya, kimcinoo, bu5hm4n, raster

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D11552
2020-03-25 19:14:02 +09:00
Christopher Michael 343698f7ec evas_inline: Clean up evas_object_plane_changed function
Summary:
This file is full of functions called as:
foo(eo_obj, obj);

Most of them can be reduced to foo(obj); and internally get the eo_obj
with obj->object

This would make it impossible to screw up calling them passing an
unrelated pair, and make calling code a little more readable.

ref T7230
Depends on D9050

Reviewers: raster, cedric, zmike

Reviewed By: zmike

Subscribers: #reviewers, #committers

Tags: #efl

Maniphest Tasks: T7230

Differential Revision: https://phab.enlightenment.org/D9051
2019-05-29 15:37:36 -04:00
Christopher Michael 8c5d5ada65 evas_inline: Clean up evas_object_is_on_plane function
Summary:
This file is full of functions called as:
foo(eo_obj, obj);

Most of them can be reduced to foo(obj); and internally get the eo_obj
with obj->object

This would make it impossible to screw up calling them passing an
unrelated pair, and make calling code a little more readable.

ref T7230

Depends on D9049

Reviewers: raster, cedric, zmike

Reviewed By: zmike

Subscribers: #reviewers, #committers

Tags: #efl

Maniphest Tasks: T7230

Differential Revision: https://phab.enlightenment.org/D9050
2019-05-29 15:37:36 -04:00
Christopher Michael 70ea7ba9da evas_inline: Clean up evas_object_is_opaque function
Summary:
This file is full of functions called as:
foo(eo_obj, obj);

Most of them can be reduced to foo(obj); and internally get the eo_obj
with obj->object

This would make it impossible to screw up calling them passing an
unrelated pair, and make calling code a little more readable.

ref T7230

Depends on D9048

Reviewers: raster, cedric, zmike

Reviewed By: zmike

Subscribers: #reviewers, #committers

Tags: #efl

Maniphest Tasks: T7230

Differential Revision: https://phab.enlightenment.org/D9049
2019-05-29 15:37:36 -04:00
Christopher Michael c10a4dcd18 evas_inline: Clean up evas_object_is_proxy_visible function
Summary:
This file is full of functions called as:
foo(eo_obj, obj);

Most of them can be reduced to foo(obj); and internally get the eo_obj
with obj->object

This would make it impossible to screw up calling them passing an
unrelated pair, and make calling code a little more readable.

ref T7230

Depends on D9046

Reviewers: raster, cedric, zmike

Reviewed By: zmike

Subscribers: #reviewers, #committers

Tags: #efl

Maniphest Tasks: T7230

Differential Revision: https://phab.enlightenment.org/D9048
2019-05-29 15:37:36 -04:00
Christopher Michael 94d1b0f3bf evas_inline: Clean up evas_object_is_visible function
Summary:
This file is full of functions called as:
foo(eo_obj, obj);

Most of them can be reduced to foo(obj); and internally get the eo_obj
with obj->object

This would make it impossible to screw up calling them passing an
unrelated pair, and make calling code a little more readable.

ref T7230

Depends on D9045

Reviewers: raster, cedric, zmike

Reviewed By: zmike

Subscribers: #reviewers, #committers

Tags: #efl

Maniphest Tasks: T7230

Differential Revision: https://phab.enlightenment.org/D9046
2019-05-29 15:37:36 -04:00
Christopher Michael ef23de1ea4 evas_inline: Clean up evas_object_was_visible function
Summary:
This file is full of functions called as:
foo(eo_obj, obj);

Most of them can be reduced to foo(obj); and internally get the eo_obj
with obj->object

This would make it impossible to screw up calling them passing an
unrelated pair, and make calling code a little more readable.

ref T7230

Reviewers: raster, cedric, zmike

Reviewed By: zmike

Subscribers: #reviewers, #committers

Tags: #efl

Maniphest Tasks: T7230

Differential Revision: https://phab.enlightenment.org/D9045
2019-05-29 15:37:36 -04:00
Xavi Artigas 220f17ee8d Rename Efl.Gfx.Map -> Efl.Gfx.Mapping
Summary:
For clarity, since there are all kinds of maps, including a navigation map
widget.
Also, corrected some misspellings.

Test Plan: make && make check && make examples all work

Reviewers: cedric, zmike, bu5hm4n

Reviewed By: cedric

Subscribers: Jaehyun_Cho, #reviewers, #committers

Tags: #efl

Maniphest Tasks: T7564

Differential Revision: https://phab.enlightenment.org/D7974
2019-02-21 19:20:09 +01:00
Derek Foreman ac065749a6 evas_object: Add function to test if hardware plane status changed
This is used to check if an object has been put on or removed from a
hardware plane between calls.

Signed-off-by: Derek Foreman <derek.foreman.samsung@gmail.com>
Reviewed-by: Cedric BAIL <cedric.bail@free.fr>
Differential Revision: https://phab.enlightenment.org/D7192
2018-12-14 09:52:03 -06:00
Derek Foreman 73e5bb84a1 evas_object: Add function to test if an object is on a hardware plane
Signed-off-by: Derek Foreman <derek.foreman.samsung@gmail.com>
Reviewed-by: Cedric BAIL <cedric.bail@free.fr>
Differential Revision: https://phab.enlightenment.org/D7190
2018-12-14 09:52:01 -06:00
Mike Blumenkrantz 69fae8c7bf evas: remove render2
Summary:
this is more or less a dead project, having not been actively developed
in over 2 years and instead forcing people to expend more time and energy
to keep it compiling across refactors

fix T7227

Reviewers: stefan_schmidt, Hermet, ManMower, devilhorns

Reviewed By: Hermet, devilhorns

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Maniphest Tasks: T7227

Differential Revision: https://phab.enlightenment.org/D6878
2018-08-21 10:36:55 -04:00
Marcel Hollerbach 81519b195f evas: make objects again delete correctly
Summary:
what here was done was fundamentally wrong, deleting the pd->object
field of a evas object after a efl_del / evas_object_del is completly
wrong. evas object lifetimes are controller with eo_manual_free, this
means, they are still alive, even after you called evas_object_del on
them. removing pd->object results in eo_menual_free calls to NULL
objects and leaking the object carrying the private data. Overall,
breaking this pd->object field and unsetting it is a very bad idea, as
its the only way that evas cleansup the object correctly.
This brings down the number of ui related leaked objects on shutdowns to
0. (YEY :))
This also fixes weird error messages on app shutdown.

fixes T6964

Reviewers: devilhorns, zmike

Reviewed By: zmike

Subscribers: cedric, #committers, zmike

Tags: #efl

Maniphest Tasks: T6964

Differential Revision: https://phab.enlightenment.org/D6290
2018-06-14 14:23:28 -05:00
Alastair Poole 8e64746a44 ecore_evas: fix crash on free of smart data.
pd is NULL here, adds a check before attempt
to read from pd.

@fix T6974
2018-06-12 15:19:12 +01:00
Cedric Bail 5c9815676b evas: move the del event to match invalidate and free event to the end of the destructor. 2018-05-24 16:02:19 -07:00
Yeongjong Lee c1e9d9f2f0 evas: Remove duplicated code
Reviewers: raster, cedric

Reviewed By: raster

Subscribers: jpeg

Differential Revision: https://phab.enlightenment.org/D5552
2017-11-29 11:59:54 +09:00
Cedric BAIL 5017f06a72 evas: disable unecessary lock when not using evas_render2
Calling this lock for no good reason result in a 2% slow down. Easy
enough to disable as we do not use evas_render2 at all. Might be
something to consider if we ever develop evas_render2 further.
2017-11-13 14:39:08 -08:00
Cedric BAIL 28397e7206 evas: differentiate engine from output. 2017-08-25 10:49:53 -07:00
Jean-Philippe Andre 29bacf5988 gfx: Remove size hint request (EO)
This hint is simply not supported by any container.
Add the EO API back if the containers support it.

Ref T5487
2017-08-23 15:24:37 +09:00
Carsten Haitzler fec726e7e5 evas legacy event mask - cast to unit64_t before bitshift
this fixes a bit wraparound in the shift as the 1 is an int (32bit)
type that then gets shifted .. then after that cast to 64bit.

found by PVS studio

@fix
2017-07-29 09:08:31 +09:00
Mike Blumenkrantz 539c2169b5 evas: don't crash in _evas_default_output_get() if no outputs exist
@fix
2017-06-02 18:23:42 -04:00
Jean-Philippe Andre 0a224da86f evas map: Introduce new API for maps (Efl.Gfx.Map)
This implements an entirely new API model for Evas Map by relying
on high-level transformations on the object rather than an external
Evas_Map structure that needs to be constantly updated manually.

The implementation relies on Evas_Map.

To rotate an object all you need to do now is
  efl_gfx_map_rotate(obj, 45.0, NULL, 0.5, 0.5);

Or with a C++ syntax:
  obj.rotate(45.0, NULL, 0.5, 0.5);

Or even simply (with default arguments):
  obj.rotate(45.0);

The map transformation functions are:
 - rotate
 - rotate_3d
 - rotate_quat
 - zoom
 - translate (new!)
 - perspective_3d
 - lightning_3d

@feature
2017-05-11 17:54:00 +09:00
Cedric BAIL 55e1b3f205 evas: remove engine.data.output.
This is the first step toward handling multi output. This patch
remove engine.data.output from Evas structure and use an Eina_List
for it instead. It also start moving code around to fetch an output
or an engine context (which are the same at the moment, but will be
split in a later patch).
2017-04-24 15:10:48 -07:00
Jean-Philippe Andre 530399acde evas filters: Force redraw of snapshot if cutout shrank
The situation is clearly visible in the Snapshot test case:
increase the radius and a red glow would appear. This is because
the snapshot object was not marked as needing redraw and so had
no pixels under the opaque rectangle.
2017-04-14 11:26:44 +09:00
Jean-Philippe Andre 3f6f51560a evas: Consider objects in copy mode as opaque
This skips extra tests with image objects that have the
is_opaque() function. That way, if an object is marked as COPY,
rendering of all objects below it will be skipped.

This can dramatically help with performance when flagging a
snapshot object as COPY. This should not be done if a filter is
applied and is meant to blend with the underlying UI.
2017-04-14 11:26:43 +09:00
Jean-Philippe Andre a55e0ced26 evas: Inline part of clip_dirty
clip_dirty is called A LOT. Unfortunately this patch does not
result in very measurable improvements.

**********************
Note about this merge:

After this series of patches, the CPU usage for a certain test
case has significantly gone down:

Based on c0e6a8d698c17fc16f9b67fc9 (upstream before git push):
NS since frame 2 = 28910806786 , 2937 frames = 9843652 / frame

After this patch:
NS since frame 2 = 19218592951 , 2928 frames = 6563727 / frame

1.18:
NS since 2 = 13105584220 , 2961 frames = 4426066 / frame

As we can see, 1.18 remains *much* better than 1.19. I'm still
struggling trying to figure out why (clip_recalc is called more,
but the call tree is hard to decypher).

The test case is:
EINA_FREEQ_BYPASS=1 ELM_TEST_AUTOBOUNCE=100 \
  elementary_test -to "Scroller 2"

EFL was compiled with GCC 6.3.1 with -O3 -g

@optimization
2017-02-21 11:23:07 +09:00
Jean-Philippe Andre cbb804f814 evas: Inline part of clip_recalc
This function was moved out of inline (see d7c6fca6c0) but
unfortunately the early checks at its beginning are likely
to result in an early return. Inline this part so we get back a
better performance. Inlining the whole function does not improve
the performance, as GCC simply gives up with inlining.

Note: Between 1.18 and master the number of calls to clip_recalc
has simply blown out. It is thus crucial to find out where those
calls come from but also micro-optimize the function itself. This
patch does the latter only.

@optimize
2017-02-21 10:52:40 +09:00
Jiyoun Park 68f63b01e2 evas_inline: Change the return value for readabilty 2017-01-24 15:36:05 +09:00
HyunSeok Cha 3fbf234b32 evas: Fix very unlikely crash in evas render
During a stress test of EFL a seemingly impossible crash happened, where
one of object's cow fields was NULL inside evas_object_was_visible.
Nothing in the code flow can possibly lead to this situation but
it still happened. For information, the object's delete_me flag was 2 in
evas_object_is_active() called from _evas_render_phase1_object_process().
So let's add a small safety check for crash prevention.

Differential Revision: https://phab.enlightenment.org/D4608
2017-01-20 14:11:00 +09:00
Jean-Philippe Andre b0c67adb10 evas: Fix masks of masks
Don't ask. This is a world of magic.
2016-12-16 14:09:00 +09:00
Carsten Haitzler d7c6fca6c0 evas render and clip calc - move evas_object_clip_recalc out of inline
evas_object_clip_recalc is big. it's fat. it shouldnt be inline. so
make it a real function. being inline just hurts performance by making
our code bigger, hurting l1 instruction prefetch and cache
performance. this function isn't small. it's huge and should not be
inline basically because of that reason.

also throw in some likely/unlikely hints etc.

@optimize
2016-11-27 12:10:12 +09:00
Jean-Philippe Andre aac8f6f114 evas: Add function on object to check is pointer is in
This fixes invalid mouse cursor used when windows are
created.

Due to the changes in the border theme and the fact that
a border is now always created, the event region
"elm.resize.bl" contains the point (0,0) when the window
size itself is 1x1. As a consequence every EFL application
would permanently have a cursor like the resize bottom/left
handle.

This fixes that by properly checking whether the pointer is
inside an object based on the ins list, and not just the
object geometry.

@feature

See also: b735386a45
2016-11-23 13:04:12 +09:00
Cedric BAIL 53dd596f43 evas: reduce usage of __thread directive.
Moved rects caching into draw context to avoid the use of __thread
slot. Draw context are defined per thread anyway and should be just
fine. This doesn't really change the picture regarding glibc problem
when to many __thread are needed, but slightly improve the global
picture. Also this patch doesn't affect our performance in expedite
benchmark as far as I can tell.
2016-11-16 16:05:56 -08:00
Jean-Philippe Andre bff8dcfe21 evas: Fix clipping of masks and masks of masks
When an object inside a genlist is masked, scrolling would
cause render issues as the mask is not redrawn on move (only
the clip geometry is marked as dirty and recalculated, the
mask pixels are assumed to be well prepared already). As a
result, masked objects in a genlist would not show up
properly once you start scrolling.

This fixes that by hacking into evas a safety test to avoid
unnecessary clipping, and by using parent masks even if they
are not the direct clipper.

Note that no_render is still quite broken (eg. a no_render
mask may cause major issues, even crashes).

This reverts 5917b49f59
2016-11-09 10:52:26 +09:00
Jean-Philippe Andre d0333561be evas: Add some safety code to evas_clip
I'm trying to fix a crash that seems to happens in some very odd
circumstances under stress testing. I have absolutely no idea
what is going wrong... So let's just add some extra safety.
2016-11-03 17:22:15 +09:00
Jean-Philippe Andre fe14ab64f3 evas: Small simplification of object color_set 2016-10-12 11:25:55 +09:00
Jean-Philippe Andre ef4859d5bd evas: Optimize out most callback call events
This sets a bit whenever a callback listener is added.
I couldn't get any profiling data easily (too small for
valgrind).

Note: This removes the proper refcounting on the "move"
event listeners. I believe this is not a problem as most times
the move_ref goes to 0, it is because the object is deleted.
Worst case, we just trigger a callback_call with no listeners.

This adds 32 bits to each evas object private data.
2016-08-26 10:18:01 +09:00
Jean-Philippe Andre 608da26634 evas events: Simplify event counter
Simplify code:
 _evas_object_event_new()
 event_id = _evas_event_counter

Into:
  event_id = _evas_object_event_new()
2016-08-26 10:18:01 +09:00
Tom Hacohen e65aae994e Eo: Finish the renaming of Eo to the EFL.
This renames all the rest of the API to the EFL namespace except for
Eo_Event that will follow soon.

Obviously breaks both API and ABI.
2016-08-15 15:07:42 +01:00
Jean-Philippe Andre b2b980a737 evas: Fix inefficient updates with no_render
is_visible returns 0 if no_render is true, so should
was_visible as well. Yeah, there will be problems if
no_render changes on the fly. Don't do that.

Fixes T4193
2016-07-26 10:25:14 +09:00
Jean-Philippe Andre e1ff000704 evas: Some more opacity check fixes
This should fix T3309

Snapshot objects are image objects, so the function is_opaque
exists. No need to bypass it. Also, alpha rectangles are not
opaque. Assume that anything with a filter is not opaque.

All of this fixes T3309 but the main point was on snapshot
objects (probably because the only point of a snapshot is
to apply a filter on it).
2016-07-18 13:38:05 +09:00
Carsten Haitzler f6b3c31561 evas event handling3 - fix yet more corner cases for clipped objects
this is a continuation fix from
25d77bc1d2 and
9f0fd66ab8

this fixes yet more corner cases after the above 2 fixes. our clip
cache tracking code seems to be broken somewhere and not updating - at
least when events are processed so i did ti the slightly slower way
and recursed through clippers to figure it out in this path. it all
works now it seems but it's got a small speed hit. better be right
than a little faster.

@fix
2016-07-07 14:12:22 +09:00
Carsten Haitzler 25d77bc1d2 evas event handling2 - fix incorrect object reporting
this fixes a new bug brought up by
9f0fd66ab8 which fixes event reporting
etc. etc. .. this fixes T4017

@fix
2016-07-05 22:40:51 +09:00
Jean-Philippe Andre 7bf8da2baa evas: Rename Evas.Object to Efl.Canvas.Object
One step closer to make the EO inheritance tree look like
it's all Efl.
2016-06-21 14:35:19 +09:00
Jean-Philippe Andre 5917b49f59 Evas: Another fix for no-render
Despite the previous patches, no-render objects could be
partially visible. Eg a fileselector marked as no-render
would have its file list visible. All other children were not
shown.

I think this is not the last fix for this feature, but
eventually source_visible will have to die internally
and be replaced by no-render.

Thanks @yakov-g for the report.
2016-03-29 19:01:17 +09:00
Jean-Philippe Andre 8407971a1a Evas: Disable events on no-render objects
Source events still work for proxies (if the flag is set).
2016-03-29 10:43:00 +09:00
Jean-Philippe Andre 8fb8e6d257 Evas render: Fix no-render with smart objects
Setting the no-render flag on an elm widget had no effect,
as it was not properly propagated to its children. This should
fix that, but I'm not a fan of the solution.

Fixes T3371
2016-03-29 10:43:00 +09:00
Jean-Philippe Andre f00f466250 Evas render: Distinguish has_map and can_map
This patch is a minor code cleanup before fixing T2979
(render artifacts inside Enventor).
2016-01-07 11:12:51 +09:00
Carsten Haitzler 217faeebe8 evas cutouts - optimize to use less cpu
this optimizes draw ctxt cutouts by skipping small ones and
remembering the last cutout added so it isn't double-added as well as
extending the minimum cutout array to 512 and going up in blocks of
512 instead of 128. also optimize the clipping code a bit more.
2015-09-24 14:09:20 +09:00
Carsten Haitzler 9d9e8ffab5 evas - handle case where layer->evas is null - don't crash
there seems to be a corner case where obj->layer->evas is null for an
object. i think during shutdown of a canvas.

@fix
2015-08-12 20:08:14 +09:00
Cedric BAIL 033658d1ca evas: implementation of snapshot feature.
This should theorically work, need some test. Design is easy to understand. Render
every part of a snapshot object by rendering the content below it, before rendering
the stack above it using that object content.
2015-08-05 15:12:33 +02:00