Use two optimizable functions for BOX blur: vertical and horizontal.
These functions will run as many times as requested (from 1 to 6 max).
The horizontal case is pretty straightforward as the source is already
contiguous (nice in terms of cache hits). The only catch is to swap
src and dst without ever writing to the input buffer.
In case of vertical blur, we apply the same method as above, after
rotating the column into a horizontal (contiguous) span, and rotating
it back afterwards.
Now, the same needs to be done for RGBA :)
BOX blur is a lot faster (and easier to optimize, too)
than GAUSSIAN blur. Repeating 2x or 3x BOX blur will also
give similar results to GAUSSIAN blur (very smooth), but
in much less time.
Add a count parameter to the BOX blur instruction.
Actually, there is a very nice trick with BOX blur.
Pass BOX blur 3 times and you can approximate a GAUSSIAN
blur with up to 3% accuracy. This is way more than enough
for just a simple graphical effect.
So, despite the crappy quality of BOX blur, we should
optimize it a lot so we can replace large GAUSSIAN blurs
with series of BOX blurs instead.
Source: Wikipedia's page on box blur :)
This commit also moves around some duplicated definitions.
When a blur operation requires a copy-back to the source
buffer, then the render_op must be set to COPY instead of
BLEND. Otherwise the non blurred content will be visible.
@fix
Prepare optimization paths for blur operations, as they are VERY
costly. This simple change, when using gcc -O3 flag, boosts
horizontal blur performance by > 50%, because STEP is 1 (and
so, memory accesses, increments, etc... are all very simple)
The objective is to have support for NEON, MMX, SSE, too, with
runtime detection.
Remove true Gaussian kernel code, as it is not usable over 12px and
was disabled because it gives different visual results than the
fake Gaussian curve using sin().
This patch sets the one before most significant bit on for classes. This
means that class ids are now very big, compared to the old ids which
were growing small integers (1, 2, 3...).
This makes accidental passing of integers (corrupted obj pointers) less
common.
@feature
- Remove space between type and variable if a star is present.
- Initialize return value to NULL before eo_do. It is needed in case the
eo_do invocation fails (NULL object...).
- Add const to the internal return value if needed.
For reasons that are beyond me we have a different order for the ChangeLog
in EFL compared to the other repos. But its gone now anyway no need to feel
bad about it.
+1 karma for TAsn to point it out -1 karma for TAsn to force his name into
commit messages.
Summary:
These APIs will be used for adding font paths for the application.
The existing APIs for font path, such as evas_font_path_append,
are used for adding font paths to the given evas.
But, these APIs will affect to every evas in the process.
Reviewers: tasn, woohyun, Hermet, seoz
CC: cedric, herdsman
Differential Revision: https://phab.enlightenment.org/D621
@feature
When a new line was added before the last } in a .eo file, the parsing
was resulting in an error. It was due to the fact that some pointer
indicating the eof was not set when the parsing was done from memory.
@feature: Add support in ecore-drm for handling mouse movement, wheel,
and buttons.
This adds code to pass mouse events from linux input to ecore by
raising ecore_events (ecore_event_add).
Signed-off-by: Chris Michael <cp.michael@samsung.com>
Clipees can be cleared before the loop is finished because
evas_object_clip_unset calls smart function of clip_unset.
So, if we use EINA_LIST_FOREACH_SAFE, invalid next list pointer
can be kept and read after obj->clip.clipees is freed.
Thanks to Davide Andreoli for reporting.
@fix
Summary: @fix compilation errors with defining variable and type on the same statement on clang without a default-constructor. Also removed warnings with inconsistent uses of struct/class for forward declaration and unused parameters.
Reviewers: cedric, stefan_schmidt
CC: savio, cedric
Differential Revision: https://phab.enlightenment.org/D622
Hmm, I forgot to add some .eo files to the EXTRA_DIST so they have not been
added inside the archive.
Eolian couldn't generate C files because of these missing files.
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.
Remove unused function and it's declaration. This function is not
being called from anywhere anymore, so it's no longer needed.
Signed-off-by: Chris Michael <cp.michael@samsung.com>
@feature: Add handling of modifiers in a drm key event
This adds code to deal with modifiers being pressed/released during a
key event and pass those along to the ecore_event structure
Signed-off-by: Chris Michael <cp.michael@samsung.com>
group
This adds fields to the xkb structure for storing when modifiers are
pressed, released, etc so we can handle those in key events.
Signed-off-by: Chris Michael <cp.michael@samsung.com>
In acutal case, some application encounted that a proxy object is larger than a source clipper size.
So the proxy is clipped by the edje clipper.
We don't have to limit the clipper size to 10000x10000
@fix
When an Eo operation returns a value, this one is stored in the last
parameter as an out parameter.
In case the caller doesn't set a pointer there, the storing will be done
in a NULL pointer and will bring to a segfault.
The generator has been modified to handle this case. Now, if the ret
pointer is NULL, the value will not be returned.
You can add in the .eo file the eo_prefix:... and data:... in case
you want to override respectively the Eo prefix and the data type.
If "data: null" is used, no data type will be added.
After we have setup ecore-drm, we need to tell it where to send any
input events, so call the ecore-drm API function to set the window.
Also feed mouse_in to the canvas after creation, so that it gets focus.
Signed-off-by: Chris Michael <cp.michael@samsung.com>