It is needed to set the engine internal borderless property.
Also update the border (frame) object, showing/hiding it as needed, and
updating the framespace size when the frame object is handled by the
engine.
If this Ecore_Evas already has a mouse inside it, there's no need to
send an additional mouse in event.
Additionally, always send a mouse_move event before a mouse_down, so the
Evas pointer position can be updated properly before the mouse down.
Evas engine is created per window but evas_gl engine was not properly
updating the engine info for new windows that are created. So, addressed
the design issue by passing engine_data to evas_gl engine apis..
it seems glmapbuffer can be nasty overhead on some drivers, so go back
to gldrawarrays by default until such a time as we know a lot more...
i'm looking at YOU nvidia! YOU!
Now the opaque and input regions are updated on ecore_wl_window_resize,
there's no need to call ecore_wl_window_buffer_attach() for this
anymore.
The checks on alpha and transparent flags were also fixed.
ecore_wl_window_update_size() is now called by ecore_wl_window_resize(),
reducing duplicated code.
Goal is to be able to remove all internal Evas call from inside all
loader module. To do so we are going to open and hold a reference to the
file from outside of the module, read the header, create the image data,
load the data, close that reference.
Once that done, the next step is to let the file remain open as soon as
the filename/key is set and add an API to set an Eina_File directly. This
way edje can maintain the same file open as it use for an edje object,
keeping things in sync and avoid rendering glitch during update.
num size.. and alloc size is much bigger as it makes room for 1024
quads per alloc increase (6*1024 vertexes etc.). literally this drops
e17's cpu usage while compositing stuff by 40%...at least in my test
case.
If Ecore_Evas is requested to draw its own frame, then set the
framespace too. Otherwise, keep it at 0,0 + 0x0, which means not
framespace offset at all (and the window will have exactly the
requested size).
This reverts commit 809144780e.
Conflicts:
src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_shm.c
Signed-off-by: Chris Michael <cp.michael@samsung.com>
Since we don't have a changed state callback on Wayland, just call the
changed_state callback of Ecore_Evas from the configure callback.
There's no need to add the Ecore_Job that will send the event later.
This makes the code cleaner, simpler, and will call the callback when
the configure event is received, which is a good place to check for the
changes.
Reduce duplicated code in ecore_evas_wl_resize and just call the
_common_resize function
Fix segfault on elm app closing
Signed-off-by: Chris Michael <cp.michael@samsung.com>
In the window_configure callback, reduce duplicated/not needed code.
Account for rotation when getting new size during common_rotation_set.
Reduce duplicated code in ecore_evas_wl_resize function and just call
the _common_resize function (as that already has most of this code).
Fix issue of Segfault on elm app closing:
- During hide we need to call evas_sync to make sure the async
render has flushed out everything that is pending.
Signed-off-by: Chris Michael <cp.michael@samsung.com>
when async_render).
NB: If buffer is still valid, that means compositor is not finished
with it yet, so don't release it.
Signed-off-by: Chris Michael <cp.michael@samsung.com>
Start on code to setup the output buffer.
Add code to init evas_common functions
Add override for engine setup.
Signed-off-by: Chris Michael <cp.michael@samsung.com>
Instead of moving the objects by adding the framespace offset to them,
use this offset when rendering them. This way there's no change in the
object's geometry/position, it works correctly with map, and will be
automatically updated in case that the framespace values change (for
instance if one sets a window to borderless).
There are 2 main places where changes were needed:
- output redraws, when they come from an object being changed, must be
add the framespace offset to their damaged area;
- checks to see if the object is inside a given rendering area, must
also add this offset, since the object is actually being rendered on
a different position;
Buffer data (in this instance) is from the swapper (ie: the creation
of the swapper allocates & mmaps the data). As such, we should not
unmap it when we free buffer(s), just when we free the swapper.
Signed-off-by: Chris Michael <cp.michael@samsung.com>
calling evas cache image data.
When we push an updated region, be sure to account for the rectangle
position during the conversion function.
Signed-off-by: Chris Michael <cp.michael@samsung.com>
Finally have a way to compile the merged efl tree against the latest tizen
things. Only three typos after all this changes it quite good imho. Zero
would have been better though. :)
Add 4 rectangles to be used as border of the window, instead of a single
rectangle under the framespace. This allows to move the frame object to
the top layer, instead of staying on the lowest layer. With the frame
over the other objects, there's no need of framespace clipper object,
which causes several bugs.
This follows the simplified handling of sensor object we are already
doing for the sync paths. Its a bit more complicated here as we need
to pass all data through the module specific async handling. But the
result should be the same.
We rely on the app to provide a sensible object pointer and we now longer
need to have a copy of the object around to operate on it.
Simplifies code, maintenance and reduces mem copies. Win-Win :)
The frame should not stay in the same layer as the other objects. If the
application wants to allow it to be on top of the content, then it must
provide a custom frame object and set it to that layer.
NOTE: Should we make Elementary's be on a lower layer too?
(udev registered it as fake)... and in the process i found that we
probably double free as sensor is calloced in the module and AGAIN in
eeze sensor core... oh and symbols probably might lak from modules..
so static them up yo.
Switch from absolut microseconds since epoch to a monotonic clock with
realtive values. Switch from unsigned long long to double.
This aligns it with how we present time in efl. ecore_time_get is used
when possible. For the tizen modules we convert the the epoch timestamp
we get into a double. This is still a working monotone clock source.
As this will be released the first time with 1.8 we don't have any API
break here.
Eeze sensor and Tizen types can't be in sync as the order have been changed
several times in Tizen already. We need to keep the order stable for ABI
compliance though after 1.8.
While we did the translation in one direction we did not in the other. Fix
this bug that shows now.
The real canvas size contains enough space for rendering the frame, but
ecore_evas_geometry_get() should be consistent accross all the engines
and report only the client area.
Maybe we should switch to use -Wno-unused-parameter in our default cflags?
I mean unused parameters are really common and I do not see their harm.
Using -Wno-unused-parameter would let us remove all the cluttered EINA_UNUSED
and __UNUSED__ and also be safe when a paramter gets is use later as the
compiler could optimize it out when tagged with unused. Still we would avoid
the warnings to find the important ones.
The main eeze sensor log domain was EAPI as it was used in the modules as well.
(Gives some nice runtime error when loading the shared object). Switch to different
domains for the module and make the main domain private.
Spotted by zmike.
Jenkins as well as klocwork complained here as data is already used for
the parameter of the function and we shadow it here locally. Does not look
like it would really harm us here but better avoid it.
The event callback will take care of freeing the object.
This issue was found thanks to clangs -fsanitize=address option - coming
to a CI job near you.
Signed-off-by: Daniel Willmann <d.willmann@samsung.com>
When creating windows directly with Ecore_Evas, instead of using
Elementary, a default smart object is provided for the frame (client
side window decorations).
Now this smart object inherits from the clipped smart object, which
means that all its member objects will be clipped to its main clipper,
being skipped when the framespace clipper checks for objects without a
clipper.
Fix a ticket, which I don't remember the number because trac doesn't
work.
At least for wayland, eglGetProcAddress seems to fail to get the
eglQueryString symbol. Not sure if it's the right fix, but brings
wayland_egl back to working again.
Fixes#2301.
It is a very tricky things to get header order right on windows. Having that
order only in .c files simplify the work a lot. So let's try to do it with
Ecore_Evas after it rewrite and split into modules.
Using the wb->buffer pointer to compare if a buffer was already sent is
bad, since the buffer pointer can be changed in a way that that
comparison is true, even if different buffers are used.
When requesting a new buffer to the wl_shm_pool, it can return the
buffer address of a previously freed buffer. This reused buffer pointer
can be the same as the last buffer sent to the compositor, and the
comparison will be true, skipping a new wl_buffer_attach.
Resource contexts/surfaces are used for creating resources within Evas_GL.
In oder to handle Evas_GL runnig from different thread than the main one,
a resource context/surface pool was used. This turned out to be unnecssary
as they are not used very frequently. So, I got rid of the pool and
made the resources create as needed.
This will update the edges info inside the Evas_Engine_Info, and make it
correctly resize to the top/left if needed.
Also call ecore_wl_window_buffer_attach() on the egl engine, since it's
needed after the ecore_wl_window_update_size().
This will force the window to correctly update its size when the event
is received by the compositor, rather than just after an
ecore_evas_resize().
It fixes the window resizing of non-elementary applications, since
the elementary window already deals with such resize by calling
ecore_evas_resize.
This can be used to reconfigure a swapper to another size, without the
need to destroy the swapper itself.
Although the shm pool is not being reused even when reconfiguring to a
smaller size, it could easily be.
This change is done right now only to keep the dx and dy offsets of a
previously requested swapper, which were not still used.
When doing double/triple buffering, and we go to merge the rectangles,
if we are triple buffering then we should not use the double-buffer
rectangles as a valid check for triple-buffer rectangles.
Signed-off-by: Christopher Michael <cp.michael@samsung.com>
When using swapping (double/triple), and we go to merge rectangles,
then we should check for a valid triple buffer (not double) before
trying to merge the 3rd buffer rectangles.
Signed-off-by: Christopher Michael <cp.michael@samsung.com>
downscaling. This makes quality much better and "at best"
equates to a 16 point sample (2x2 linear interpolation samples,
where a linear interpolation sample equates to a 2x2 sample).
This will have perfomance impact, but the quality is worth it and
makes it closer to software downscaling in quality. It supports
2x2, 2x1 and 1x2 oversampling. YUV not done, nor image mask
(font shaders not needed).
Using the server_allocation/allocation to determine the resize offset
was not completely precise, and causing the window to not always resize
correctly.
Additionally, calling evas_engine_info_set() on every resize step caused
the window content to blink and resize very slow, because the swap
buffer, swapper, and everything were being destroyed and recreated. Now
only the swapbuf_reconfigure is being called during the resize, which is
way faster.
The _pixel_alpha_get() function used in evas_object_image_is_inside won't
work with engines other than software - since it relies on engine data
being *always* RGBA_Image * - which is wrong for OpenGL backend that uses
Evas_GL_Image * for "engine_data" pointer.
On system like 64bits windows it is not a guaranty that a
sizeof (long) == sizeof (void*), we are better using the right type.
This generate a warning that we could have seen with just cross compilation.
I add new example related with this. (ecore_evas_extn_socket & plug example)
ecore extn use this infrasturcture, server app and client app can communicate each other
later, this can be used to contorl access message
SVN revision: 83942