Commit Graph

1043 Commits

Author SHA1 Message Date
Jean-Philippe Andre 74d8403217 Evas filters: Grow filter should gracefully blend
If grow() was used on top of another effect, it was simply
erasing all pixels. We need to use a temporary buffer and
blend it to the output.
2014-02-20 13:27:42 +09:00
Jean-Philippe Andre 0d9ffc2624 Evas filters: Fix padding in blur with offset
Test case was: blur(ox=40, rx=40);
This would crop the blurred text instead of having proper padding.
2014-02-20 13:27:42 +09:00
Jean-Philippe Andre 538d078cf0 Evas filters: Fix curve filter with RGBA
The curve filter did not respect premultiplied values in
RGBA images. Unfortunately, the fastest solution is to unpremul
and re-premul everytime...
2014-02-20 13:27:42 +09:00
Jean-Philippe Andre 8a694314a4 Evas filters: Fix options parsing
Test case "blend() blend();" did not fail when it should have.
Also, return an error if the program was empty (all whitespaces).
2014-02-20 13:27:42 +09:00
Jean-Philippe Andre ddf267e506 Evas filters: Fix padding in blur filter
The wrong value was used for the command's padding.
Also, remove mention of "motion" blur which is not
implemented.
2014-02-20 13:27:42 +09:00
Jean-Philippe Andre 126cbbc7a9 Evas filters: Mark parser functions as EAPI for tests
The filter unit test case will directly call the parser functions.
2014-02-20 13:27:42 +09:00
Tom Hacohen 0e5d3f9b98 Evas textblock: Fixed a few word start/end issues.
Fixed issues with valgrind complaints at the end of the textblock, and
Fixed wrong jumping with some special cases like "a a a a "."

This fixes T995.
2014-02-19 14:38:06 +00:00
Tom Hacohen 27b1bebea5 Evas text utils: Fixed walking compound clusters.
In some scripts, like Devanagari, clusters can be split across more
than just one glyph. This is now fixed.

Thanks to YoungBok Shin for reporting.
2014-02-19 12:08:56 +00:00
Youngbok Shin 2bff3d1c2e evas - Added eina_stringshare_ref call for fallbacks, lang in font description.
Summary:
When the fdesc(Font Description) is duplicated,
ref of all of stringshare pointers should be increased.
But, in the evas_font_desc_dup API, we only increased ref for name string.
It can cause some of memory issues.

Reviewers: tasn, woohyun, seoz, Hermet

CC: cedric

Differential Revision: https://phab.enlightenment.org/D570
2014-02-19 10:44:34 +00:00
Jean-Philippe Andre 6067c88b56 Evas filters: Use strtok instead of strtok_r for mingw
The Windows build (mingw) does not know about strtok_r.
So, let's use the non-safe variant strtok instead.
Currently, this function is called from the main thread only,
so this should be fine :)

In the future it would be nice to not use strtok anymore,
but strtok_r everywhere, and add it to evil. Considering the
release coming soon, I'm not going to change something like that
now.
2014-02-19 11:30:11 +09:00
Jean-Philippe Andre 54129dfcaa Evas filters: Fix documentation for displace
fillmode "none" is not supported, as it does not make much sense
(how do we displace pixels without an underlying displacement map?)
2014-02-18 10:22:50 +09:00
Jean-Philippe Andre ded097461d Evas filters: Fix padding with "blend"
Test case was:
buffer : a (alpha);
blur (20, dst = a);
blend (src = a, ox = 30);

In that case, padding was 20, 30, 20, 20.
So the blurred buffer was clipped on screen.
2014-02-18 10:22:50 +09:00
Jean-Philippe Andre 3819bc7abb Evas filters: Implement "fillmode" for displace
The fillmode (stretch or repeat map) was present and documented
for displace, but not implemented. Easy copy & paste from the
mask filter.
2014-02-18 10:22:50 +09:00
Jean-Philippe Andre 7cf02ca75b Evas filters doc: Add link to "fillmode" 2014-02-18 10:22:50 +09:00
Jean-Philippe Andre d70b805e6d Evas filters: Fix crash in displace filter
Simplify and fix map traversal code
2014-02-18 10:22:49 +09:00
ChunEon Park a739716cee evas/image - update dirty region in the render time.
this fixes the proxy rendering that sub object of the source couldn't be dirty region set.

since the object could be invisible nor won't be pre-rendered neither.

Im supposing the mapped(proxy) object rendering sequence should be totally refactored

that should be separated with the normal rendering sequence.

Until that, this change will be alternative solution.
2014-02-17 23:05:36 +09:00
Jean-Philippe Andre 7cc7af14b8 Evas filters: Fix alpha in displacement filter
If the displacement map has some alpha values (not 0xFF),
then the blending should take this alpha into account. This
part is fine.

BUT, since Evas relies on premultiplied colors... we have a
problem: R (dx) and G (dy) have already been scaled down.

Actually we would need to load the map in non premultiplied RGBA,
otherwise we'll lose precision on dx,dy as soon as A != 0xFF.
Well... I guess this will be a limitation of this filter, for now
at least. Most displacement maps shouldn't even have any alpha
anyways.
2014-02-17 10:14:11 +09:00
Jean-Philippe Andre 9472e03546 Evas filters: Fix RGBA displacement filter
Well... it was just broken: typo, lack of normalization on alpha,
invalid formula for blending. Duh!
2014-02-17 10:02:19 +09:00
Daniel Kolesa 136cf346e9 evas/common: fix segfaults in evas_map_image_loop.c 2014-02-14 16:30:51 +00:00
Jean-Philippe Andre df65e71e79 Evas filters: Another clang warning fix
Prevent error case from crashing.
2014-02-14 13:06:05 +09:00
Jean-Philippe Andre a4ecf34316 Evas filters: More clang fixes
NULL ptr dereference.
2014-02-14 13:06:05 +09:00
Jean-Philippe Andre 6642d16a7d Evas filters: Fix more clang stuff and add safety checks
The prepare function should not fail, unless something is very
wrong. Also, return NULL instead of EINA_FALSE.
2014-02-14 13:06:00 +09:00
Jean-Philippe Andre f603d5da86 Evas filters: Silence some clang warnings
Remove @hidden tag. It does not exist.
Initialize value of pow2_div. In theory not needed but better be safe :)
2014-02-14 12:07:54 +09:00
Jean-Philippe Andre eb1c452156 Evas filters: Prevent division by zero
These can not happen, as all weights > 0.
Add a CRI message in case of div0.
Fixes CID 1174081, CID 1174080.
2014-02-14 11:25:25 +09:00
Carsten Haitzler adbb8e6675 evas - table - fix theoretical leak that likely will never happen
this addresses CID 1039663
2014-02-13 19:44:40 +09:00
Carsten Haitzler c7aa6039c8 evas filter - fix uninitialized pointer in evas
fixes CID 1174077
2014-02-13 19:05:43 +09:00
Carsten Haitzler b837cdb055 evas - filter - don't use longs when DATA32 is the right type
fixes CID 1174078
2014-02-13 18:59:16 +09:00
Carsten Haitzler a725924b53 evas - filter - fix memory leak if cmd not found by curve cmd 2014-02-13 18:57:27 +09:00
Carsten Haitzler bbefeae071 evas - filters - remove logically dead code
this addresses CID 1174084 - fix to remove useless code.
2014-02-13 18:57:27 +09:00
Jean-Philippe Andre 511049e20d Evas filters: Improve doc automatization
Include example filter codes from src/examples in Doxygen.
Use these examples for the generation as well.
2014-02-13 17:37:33 +09:00
Jean-Philippe Andre 9f1ae254db Evas filters: Add image for the Syntax example
And change it a bit so the glow is nicer :)
2014-02-13 17:37:33 +09:00
Jean-Philippe Andre 872ab8aa4d Evas filters: Add images to the html doc 2014-02-13 17:37:33 +09:00
Carsten Haitzler 56f4035898 evas - proxy source visible check not done on update del
this fixes T842
2014-02-13 15:40:29 +09:00
Jean-Philippe Andre 6301c6dc1e Evas filters: Remove undocumented files from Doxygen
Some files had Doxygen tags @file, which included them in the
Files list. But they are not documented, so remove them from
the index.
2014-02-13 11:24:47 +09:00
Jean-Philippe Andre 93a608dc66 Evas filters: Buffer names are case-sensitive
Or so claims the documentation, so let's use strcmp
instead of strcasecmp.
2014-02-13 11:24:47 +09:00
Jean-Philippe Andre 36b0bca4aa Evas filters: Add the reference documentation (script language)
In Doxygen format, write the reference documentation for the filters.
It will contain a few examples only, should serve more as a reference
just like edcref.

This is for the script language itself, not for the Eo APIs or the
internal APIs (those are already documented).
2014-02-13 11:24:43 +09:00
Jean-Philippe Andre c6943bb32d Evas filters: in transform, dst must be specified
Since the transform operation is (for now) a very simple tool,
it only works when src and dst have the same colorspace.

This commit forces users to specify dst, since "input" and "output"
have different colorspaces.
2014-02-13 11:21:32 +09:00
Jean-Philippe Andre 62f0ea1d34 Evas filters: Improve displace flags in scripts
These flags were a dumb integer instead of being a human
readable string.

They define how to handle cases were a pixel is read from
out of boundaries.
2014-02-13 11:19:49 +09:00
Jean-Philippe Andre 56d73cb897 Evas filters: Fix warnings on shadowed variables
Also, remove globals A, R, G, B from parser.c... these are
temp variables used in a macro.

My CFLAGS didn't include -Wshadow so I missed those.
Thanks Tom for spotting :)
2014-02-12 10:36:11 +09:00
Jean-Philippe Andre 62fdf414e2 Evas filters: Improve code consistency in blur
source left was called sl or ls depending on the function,
use sl everywhere.
2014-02-12 10:36:11 +09:00
Jean-Philippe Andre 96d5944235 Evas filters: Fix comments and fail more often in blend
Some features are not supported (mainly because alpha scaling
has not been implemented yet) in the blend API. So, instead of
rendering the wrong effect, fail with an error message.

Also rename col into color for code clarity (we have cols for columns).
2014-02-12 10:36:10 +09:00
Tom Hacohen 650b0b6c64 Evas textblock: Fixed colour setting for textblock formats.
Of course Cedric introduced a bug. The bug was that the current colour context
is set to the previously selected colour, instead of the current one, which
made all colours wrong.

Fixes T926.
2014-02-10 16:49:53 +00:00
Tom Hacohen 80033e022d Evas textblock: Fix rendering of spaces in some cases.
The issue was with a textblock that's being resized and a space between formats.
The problem is, that the text would get trimmed when wrapping, and then not
restored, because it had nothing to merge to.

This fixes T924.
2014-02-10 14:17:03 +00:00
Jean-Philippe Andre 40c18743f4 Evas filters: Disable time debug logs (blur)
Enabling those will break windows build.
2014-02-10 11:27:33 +09:00
Jean-Philippe Andre b9b8300f98 Evas filters: Check for EVAS_CSERVE2 when using cs2 APIs
This broke the windows build, because cserve2 isn't available on windows.
2014-02-10 11:15:54 +09:00
Albin Tonnerre 64e153ea7f cleanup - Remove the extra copy of the code and use a define instead
_op_blend_pan_mas_dp is just a duplication of the code in
_op_blend_pas_mas_dp. Remove the extra copy of the code and use a define
instead; this is what the SSE3 code already does.
2014-02-09 19:44:49 +09:00
Carsten Haitzler acbcc7da6a in case font_instance is null in text_props... avoid using it 2014-02-09 19:39:30 +09:00
ChunEon Park f2d554ee4c evas/common - add comments for maintainance 2014-02-09 10:14:05 +09:00
ChunEon Park 180a0aaeaf evas/common - code cleanup
removed white trailing
modified for better readibility.
2014-02-09 10:13:02 +09:00
Albin Tonnerre 259f33679c evas/op_blend: rename LOOP_ALIGNED_U1_A48_SSE3 to LOOP_ALIGNED_U1_A48
Summary:
There's nothing SSE3-specific about that macro, let's use a more generic name
for it. Since that's just a generic macro, we can also allow non-SSE (eg.
NEON) code to use it if they want to

Reviewers: cedric

CC: cedric

Differential Revision: https://phab.enlightenment.org/D528
2014-02-09 09:42:52 +09:00
Chris Michael 6e1b9de112 Evas Textgrid: Don't leak an eina_stringshare when scale_update is
called.

Signed-off-by: Chris Michael <devilhorns@comcast.net>
2014-02-08 17:17:25 +00:00
Carsten Haitzler 229ee74f6c evas - textblock ... fix valign handling to actually work as documented
valign handling was really broken. this fixes it to pretty much work
again. ie 0.0 == top, 0.5 == centered, 1.0 == bottom align and -1.0
== baseline. only baseline worked before.
2014-02-08 22:54:56 +09:00
ChunEon Park 28ee00c8c3 evas/common - removed unnecessary handling.
Actually the range checking will be accomplished when u, v is decided.
just duplicated.
2014-02-08 19:15:09 +09:00
ChunEon Park ef83a81750 evas/common - removed unused vars.
my fault. they were not intended to push in.
2014-02-08 18:40:32 +09:00
ChunEon Park 8775e0e58d evas/common - fix indentation 2014-02-08 18:36:18 +09:00
ChunEon Park f0b1854d10 evas/common - code clean up
add better descriptive comments.
modify the code for better readibility.
2014-02-08 18:16:09 +09:00
ChunEon Park 738bcb07ff evas/common - more useful comment. 2014-02-08 16:32:52 +09:00
ChunEon Park 72d90c0768 evas/common - code clean up
removed unncessary backet depth in.
2014-02-08 16:26:01 +09:00
Carsten Haitzler 131fc99e79 evas text filter - fix va_arg usage to not cause compiler internal errs 2014-02-08 14:26:50 +09:00
Carsten Haitzler 078099d63d fix warnings in evas filter plus a memleak in _vflip_cpu() 2014-02-08 12:15:35 +09:00
ChunEon Park 0541d1ebe6 evas/common - code clean up
one if-else if compare is enough. don't try compare twice.
2014-02-07 22:37:53 +09:00
ChunEon Park fff4661095 evas/common - don't compare if twice. one is enough. 2014-02-07 22:32:35 +09:00
Tom Hacohen 354691e03e Evas textblock: Fixed *_cursor_char_coord_set with some y values.
Specifically y values that are between par->y and the first ln->y.

This should fix some selection issues with elm.
2014-02-07 13:14:21 +00:00
ChunEon Park de8362defe evas/common - code clean up for more readability. 2014-02-07 20:35:35 +09:00
ChunEon Park 4f905edca3 evas/common - code cleanup
useless to consider this optimization on these days
this just make people read code much awkward.

And actually the code have been unused.
2014-02-07 19:19:19 +09:00
Jean-Philippe Andre 6d1356adea Evas filters: Disable proxies with the GL engine
Well, proxy sources are rendered to a... GL texture! But we
actually want the image pixels. So we'll need to call glReadPixels
to get them.

Yes, it will be horribly slow. But there isn't really a way around.
This will require a new internal API. For now, just disable the
feature. Hopefully I can make it work soon enough for the release?
2014-02-07 17:59:23 +09:00
Jean-Philippe Andre 9917962ffb Evas filters: Fix crash when using the GL backend
Buffer management was broken, and we tried to free the GL texture
as if it were a simple RGBA_Image.
2014-02-07 17:59:23 +09:00
Jean-Philippe Andre 637416d62e Evas filters: Allow calling program_set and source_set in any order
If source_set was called after program_set, then parsing would fail.
It used to work because the program was re-parsed at source_set.
Now, save the code, mark the filter as changed, and reparse again
if the source changed (keep track of invalid programs to avoid
excessive parsing).
2014-02-07 17:59:18 +09:00
Jean-Philippe Andre 71080b220e Evas filters: Prevent buffer creation when running filter
In async mode, the filter runs in the render thread, so can't
allocate buffers on the fly.
This case should not happen, unless maybe a source has a null
size (eg. it's invisible and not properly rendered).
2014-02-07 17:33:18 +09:00
Jean-Philippe Andre 9d821a402a Evas filters: Fix proxy usage (source unset)
Proxy sources & objects were not properly unset.
This results either in crashes (especially in the Edje tests)
or dangling objects with tons of references.

Remove the refcount increase/decrease, as it is redundant.
Store pairs proxy+source instead of just the source in all hashes,
so we can unset the is_proxy flag on the proxy when there are no
sources anymore.
2014-02-07 17:33:18 +09:00
Jean-Philippe Andre e112d49e0b Evas filters: Check that program code changes before updating
Save the code and compare with the new one. This way we can
safely call program_set from the edje_calc functions.
2014-02-07 17:33:18 +09:00
Jean-Philippe Andre 748501a5af Evas filters: Add argument src for buffer declaration
Basically, in an edje file, we'll declare buffers manually,
using the "buffer:buf(src=part)" syntax.
2014-02-07 17:33:18 +09:00
Jean-Philippe Andre 28d469237b Evas filters: Avoid adding multiple sources under the same name 2014-02-07 17:33:18 +09:00
Jean-Philippe Andre 8570b38dd1 Evas filters: Rename bind to source_set
Because that's what we call it for proxy images :)
2014-02-07 17:33:18 +09:00
Jean-Philippe Andre 7043c8bb89 Evas filters: Disable gauss blur
And fix doc in parser
2014-02-07 17:33:18 +09:00
Jean-Philippe Andre 43962135be Evas filters: Remove FIXME and unimplemented code
Remove compilation warnings: we don't really need cubic
interpolation at this point, we can still add it back
later if wanted.

Also, make it clear that buffer #2 is the output buffer.
Remove meaningless FIXME.
2014-02-07 17:33:17 +09:00
Jean-Philippe Andre 712566939d Evas filters: Add proxy source only once
If the proxy has already been added to the list of
proxy sources, don't add it again. This is for the filters
case where unset isn't even called :)
2014-02-07 17:33:17 +09:00
Jean-Philippe Andre 95550feb30 Evas filters: Fix memory leaks with buffers
In async rendering case, basically all buffers were leaked or
freed from the wrong thread. Fix that :)
2014-02-07 17:33:17 +09:00
Jean-Philippe Andre 2e401c2e91 Evas filters: Allocate buffer in the main loop (part 2)
Now the allocation is really done in the main loop.
Rendering fails, only happens in case of redraw.
2014-02-07 17:33:17 +09:00
Jean-Philippe Andre eea049f988 Evas filters: Alloc/Dealloc buffers from the main loop only
This is a problem I didn't spot immediately... but with
tons of nasty consequences.
2014-02-07 17:33:17 +09:00
Jean-Philippe Andre bf46a1d26c Evas filters: Simplify clip_to_target 2014-02-07 17:33:17 +09:00
Jean-Philippe Andre c471ee03d6 Evas filters: Fix uninitialized memory access and unsupported call 2014-02-07 17:33:17 +09:00
Jean-Philippe Andre 9c1b323bd3 Evas filters: Fix mapped rendering for mask, blend
If dx, dy are 0, there was a miscalculation of bottom and right,
leading to segvs.
2014-02-07 17:33:17 +09:00
Jean-Philippe Andre 62d7a2cb3f Evas filters: Implement all rgba mask operation
RGBA + RGBA blended to an RGBA target.
Uses existing infrastructure to combine all buffers together.
2014-02-07 17:33:17 +09:00
Jean-Philippe Andre 1c9865a8ae Evas filters: Implement repeat and stretch for rgba to alpha
Use the mapped rendering to implement repeat and stretch
with rgba to alpha buffers blending.
If stretch is required, it will add one more (expensive)
scaling step.
2014-02-07 17:33:17 +09:00
Jean-Philippe Andre 2d071a2cd4 Evas filters: Fix mask function
Mask iteration was not valid.
2014-02-07 17:33:17 +09:00
Jean-Philippe Andre 8062df320c Evas filters: OpenGL support part 2.
This patch implements the final draw from RGBA_Image to the
OpenGL surface. We can even steal the output buffer and
redraw it quickly, without having to re-render everything
(same as in SW).
2014-02-07 17:33:17 +09:00
Jean-Philippe Andre f007cd5665 Evas filters: Move font draw inside the filters functions
Since the filters will have to decide on which engine (SW, GL) to
choose from to render the font and the effects, move the font
draw call inside the filters module.
2014-02-07 17:33:17 +09:00
Jean-Philippe Andre 0135b45c12 Evas filters: OpenGL support part 1.
Quick and dirty solution to support the OpenGL engine:
[1] Allocate CPU buffers
[2] Render text and process all effects to these buffers
[3] Push final image as an OpenGL texture.

This patch implements [1].
2014-02-07 17:33:17 +09:00
Jean-Philippe Andre 4c4b44a575 Evas fitlers: Implement SLOW font draw to alpha targets
Well, raster did some great job at optimizing font draw... but only
to RGBA32 targets. In this font effects case, we also want to render
text on ALPHA buffers.

For now, reuse the existing alpha blending & glyph decompress
functions. It's MUCH easier, and works. Definitely slower than
decompressing on-the-fly and optimizing everything. But for now,
this will not even be the performance bottleneck in an effect
(blur will be a lot slower).
2014-02-07 17:33:17 +09:00
Jean-Philippe Andre e08a8fd934 Evas filters: Remove (never implemented) motion blur 2014-02-07 17:33:17 +09:00
Jean-Philippe Andre 209a7077a0 Evas filters: Add offset parameter to vflip
It is not possible to logically handle padding and offset at the same
time for a proper mirror effect, unless this is handled directly at the
transformation level.

Also, add support for blend() operation padding computation.
2014-02-07 17:33:17 +09:00
Jean-Philippe Andre d9fb0cdc34 Evas filters: Add transform filter
This is the simplest solution I can come up with for "mirror" effects.
Displacement maps are HARD to generate and use properly, since the buffer
size is unknown until runtime.
Even if we align the map to the text itself (using the padding information),
it's still hard to describe properly how to apply the displacement map, and
to generate it... So let's just add a simple flip operation.
2014-02-07 17:33:17 +09:00
Jean-Philippe Andre 388a30950a Evas filters: Add padding info to filter runtime context 2014-02-07 17:33:17 +09:00
Jean-Philippe Andre 8441290767 Evas filters: Add support for displacement map alpha
Not tested yet!
2014-02-07 17:33:17 +09:00
Jean-Philippe Andre e7a67dd13b Evas filters: Remove complicated displacement flags
The displacement effect is way too complicated. Let's keep it
simple and have only one displacement map format (RG + Alpha).

Here's what's missing now:
- Alpha support, to blend in the input with a variable intensity
- Extra padding (see below)

Also, the intensity VS. map values are not perfectly defined yet.

Problems: How to create a complete mirror effect (map needs to go
over boundaries... add extra padding to the buffers).
2014-02-07 17:33:17 +09:00
Jean-Philippe Andre b54eb40006 Evas filters: Optimize Text redraw with filters
Fix case when a proxy source has changed: need to fully render
the effect again.
2014-02-07 17:33:17 +09:00
Jean-Philippe Andre 7a53d39304 Evas filters: Factorize blend map logic 2014-02-07 17:33:17 +09:00
Jean-Philippe Andre 40fd036d8d Evas filters: Implement fill mode in blend
None, repeat (x,y) and stretch (x,y) are now working for RGBA
blending. The same logic shall be applied to alpha as well.
2014-02-07 17:33:17 +09:00
Jean-Philippe Andre df60cd30c0 Evas filters: Start implementing stretch for blend
The fillmode is ignored when blending... for now.
First, implement none and stretch options for RGBA.
2014-02-07 17:33:17 +09:00
Jean-Philippe Andre 12ddad2867 Evas filters: Reuse output buffer in Text object
This is the first possible optimization: save the rendered
text (since we already have the output buffer anyways), and
reuse it if the text + filter didn't change.
2014-02-07 17:33:17 +09:00
Jean-Philippe Andre 2da17927da Evas filters: Implement fill with padding
Add parameters l, r, t, b to clip the fill area.
While l=x and t=y, the width and height of the clip are determined
at filter run-time, since we don't know the buffer size before.
2014-02-07 17:33:17 +09:00
Jean-Philippe Andre b5b6f6ef3c Evas filters: Fix padding in blur with offset
If ox, oy were set, the padding was wrong in blur.
2014-02-07 17:33:17 +09:00
Jean-Philippe Andre 82032d494f Evas filters: Implement curve script API
Currently supports interpolation modes "none" and "linear".
Cubic interpolation is not implemented yet.
2014-02-07 17:33:17 +09:00
Jean-Philippe Andre 7000907cd3 Evas filters: Move scaling to a common file
NOTE: Alpha scaling is NOT supported.
It could be faked in 3 expensive steps:
1. Draw to RGBA
2. Scale RGBA
3. Draw to Alpha.
2014-02-07 17:33:17 +09:00
Jean-Philippe Andre 40bb984b42 Evas filters: Implement mask stretch in RGBA blend
Brutal method for now: allocate YET ANOTHER buffer,
render scaled image to it (smooth scaling, oh yeah),
use this as a new mask.

For now, supports:
Alpha Input, RGBA mask, RGBA output, X,Y,XY stretching
2014-02-07 17:33:16 +09:00
Jean-Philippe Andre 9623e1f238 Evas filters: Pass fillmode to the filters
I just need to actually implement them, now :)
2014-02-07 17:33:16 +09:00
Jean-Philippe Andre a87ef5735d Evas filters: Introduce "fill" mode in script API
This would mean: repeat (X,Y) or stretch (X,Y), for buffer
operations where it means something (blend, bump, ...)
2014-02-07 17:33:16 +09:00
Jean-Philippe Andre 37eb6b6233 Evas filters: Change default buffer size to input size
This should make more commands work intuitively.
Now we still need to specify how to repeat or stretch buffers
when running commands.
2014-02-07 17:33:16 +09:00
Jean-Philippe Andre 78a3eaaecd Evas filters: Change buffer creation API in script
Syntax was: buffer(name=bla,alpha=bool);
Changed to: buffer:bla(alpha);

There's a semicolon between buffer and its name because ALL whitespaces
are discarded. This might prove useful sometime in the future, so let's
keep it this way for now :)
2014-02-07 17:33:16 +09:00
Jean-Philippe Andre 7fbbf9eabe Evas filters: Use common color parse function 2014-02-07 17:33:16 +09:00
Jean-Philippe Andre 0ad8b02c16 Evas filters: Fix compilation after merge from master
- CRIT becomes CRI
2014-02-07 17:33:16 +09:00
Jean-Philippe Andre f723d8af8f Evas filters: Fix automatic buffers with Evas_Object_Text 2014-02-07 17:33:16 +09:00
Jean-Philippe Andre c0996b0669 Evas filters: Reduce padding to the minimum acceptable
Padding was brutally calculated by suming ALL the filters'
individual paddings. Now we try to be a bit smarter and propagate
the padding between buffers in the filter chain.
2014-02-07 17:33:16 +09:00
Jean-Philippe Andre 22b8377255 Evas filters: Rename Text's special_effect into filter_chain
For consistency with Textblock.
2014-02-07 17:33:16 +09:00
Jean-Philippe Andre 9da4789b66 Evas filters: Disable styles when filter_chain is set
Since the default theme includes a dark shadow behind normal
lines text (white on dark grey), we need to skip those when using
a filter program.
2014-02-07 17:33:16 +09:00
Jean-Philippe Andre 109894bb56 Evas filters: Add fill command
This will simply clear the target buffer with the specified color.
2014-02-07 17:33:16 +09:00
Jean-Philippe Andre 0a450b3ace Evas filters: Fix blur with small buffers
If the buffer is smaller than the blur kernel, then artifacts appear
and CRASHES happen because we read/write out of the buffer bounds.

Output buffer must be larger than the kernel diameter.
Input buffer's size is used to reduce the blurring effect on the edges.
2014-02-07 17:33:16 +09:00
Jean-Philippe Andre 91e20084c1 Evas filters: Clear buffers after allocation
malloc() and mmap() don't return empty buffers, so blending on top
will present tons of artifacts.
Visible mostly on very small buffers as they are malloc()'ed from
previously used memory segments.
2014-02-07 17:33:16 +09:00
Jean-Philippe Andre aa945c25e0 Evas filters: Use strcasecmp in the parser
We don't care about the case for our language.
EVEN for buffer names, so beware :)
2014-02-07 17:33:16 +09:00
Jean-Philippe Andre a5abbf784e Evas filters: Add basic support for clip in blend
Right now, clip is used only when blending RGBA surfaces.
2014-02-07 17:33:16 +09:00
Jean-Philippe Andre a0634dc04e Evas filters: Allow empty commands
If an instruction line contains only ';', skip it.
This is a convenience for Textblock and C++ style comments.
2014-02-07 17:33:16 +09:00
Jean-Philippe Andre 0450e027e7 Evas filters: Add Eo APIs and some comments
The entry points on evas text are there!
2014-02-07 17:33:16 +09:00
Jean-Philippe Andre 5e78ce5eeb Evas filters: Implement style parser
So, the (font) effects will be described by a string. It's
basically a new language (yeah yeah sorry), VERY simple, based
on function calls a la Python, with sequential and named arguments.

This string is intended to be passed directly to an evas text object
and embedded into the evas textblock's markup tags.

This file implements both the basic parsing functions, the
compilation of instructions into a queue of commands, and the glue
code for the rest of the filter infrastructure.
2014-02-07 17:33:16 +09:00
Jean-Philippe Andre d7ed901ffd Evas filters: Implement bump maps
These bump maps implement two light effects at once:
- 3D Shadows
- Specular lights

The specular light is activated by a flag.
Another flag enables compensation for darkening/whitening of
horizontal surfaces.

NOTE: This implementation is VERY SLOW.
It uses double values and divisions all over the place.
It might be possible to optimize by computing two LUTs before
running the algorithm.
2014-02-07 17:33:16 +09:00
Jean-Philippe Andre 40c7f90bdc Evas filters: Implement displacement maps
Displacement maps are a simple but powerful tool to move pixels
around in a buffer, based on a displacement map (image).

Currently, various modes are implemented:
- X, Y or XY displacement
- Alpha map or RGBA map where R and G only are used

An intensity parameter is given as well.

Some of these might not be useful, we can just strip them off when
the final API is decided.
2014-02-07 17:33:16 +09:00
Jean-Philippe Andre 6458df7a65 Evas filters: Implement color curves filter
Color curves are a very simple tool to alter the colors of an image,
on a per-pixel basis. This implementation will simply map each pixel
to a 256 bytes buffer, provided by the application.

NOTE: There are no convenience functions yet for easy curve
generation, but this is the plan (give point A, B, B and interpolate
between them to generate the 256 values array).
2014-02-07 17:33:16 +09:00
Jean-Philippe Andre 84caa5902e Evas filters: Implement blur functions
Currently supported:
- Box blur for Alpha and RGBA
- Gaussian blur for Alpha and RGBA

Motion blur is not implemented.

These effects are SLOW. Gaussian blur is based on a true gaussian
curve for small radii, or a sine-based approximation.
The true gaussian might need to be removed for consistency, since
it gives slightly different results from the sine one (less blur).

It is not possible to mix Alpha and RGBA surfaces in this filter.
2014-02-07 17:33:16 +09:00
Jean-Philippe Andre 65d779c7a3 Evas filters: Implement other masking functions
These functions differ from normal blending as they will use
a mask on top of input and output buffers.
So, basically they blend input+mask into a third buffer output.

If output is RGBA then mask or input MUST be RGBA.
2014-02-07 17:33:16 +09:00
Jean-Philippe Andre 3f0f703f50 Evas filters: Implement blend functions
Currently, blending supports the following:
- Alpha --> Alpha (simple alpha masking)
- Alpha + Color --> RGBA (same as mask)
- RGBA --> RGBA (normal blend)
- RGBA --> Alpha (desaturate using A=(R+G+B)/3)
2014-02-07 17:33:16 +09:00
Jean-Philippe Andre af106ffc81 Evas filters: Import main implementation file
evas_filter.c contains the entry points for the evas filters subsystem,
in particular, the filter API, the (yet very basic) buffer management
system, the command queue and main context handling functions.

Right now, the Evas engine is left untouched, so these implementations
will work ONLY in the software engine.

NOTE: This will not compile on its own (thus, not added to Makefile.am),
as it will require the filter implementations to be linked.
2014-02-07 17:33:16 +09:00
Jean-Philippe Andre 5a06208230 Evas filters: Import main header file
evas_filter.h contains the API declarations for the internal
Evas Filter module: enums, functions and some documentation.
2014-02-07 17:33:16 +09:00
Jean-Philippe Andre 9adbbe0bd1 Evas fonts: Pass RGBA_Image instead of DATA32 buffer
Since we want to be able to draw to alpha buffers, it's
easier if we pass the whole image struct instead of just
the data pointer.
2014-02-07 15:38:43 +09:00
Jean-Philippe Andre 160d012559 Evas text utils: Check syntax in color parse
If the color string is not correct (ie. not #RRGGBBAA, #RGBA, #RGB, #RRGGBB),
return an error.
2014-02-07 15:38:42 +09:00
Jean-Philippe Andre 2928a2d2da Evas: Move _format_color_parse to common file
This (simple) code should be shared between Textblock and Filters.
2014-02-07 15:38:42 +09:00
Jean-Philippe Andre d8301fae6e Evas: Add support for Alpha buffers
Evas is an RGBA only engine, BUT we also use some alpha masks,
especially in the font rendering pipeline.
This commit adds basic support for alpha buffer operations
(blend and copy).

RGBA_Image can then point to either alpha-only data, if
its colorspace is grey.
2014-02-07 15:38:42 +09:00
ChunEon Park 5efa4f9305 evas/common - code refactoring.
tiny change for readibility.
2014-02-07 13:39:11 +09:00
Tom Hacohen ec41f67be4 Evas font: Change font fallback to not depend on fontconfig >= 2.11.
Apparently, it was available for quite a while. It's just a case of confusing documentation
that made me think the minimum version is 2.11.
2014-02-05 13:54:41 +00:00
Tom Hacohen 9cc7e69338 Evas textblock: Improved error messages when detecting errors in markup. 2014-02-05 13:51:22 +00:00
Youngbok Shin c48c9827ff evas: textblock - Added Null checking in evas_textblock_text_markup_to_utf8 before calling eina_strbuf_append_length API.
Summary:
When input string has non-finished markup tags or escaped tags,
eina_strbuf_append_length is called with Null string.
There is a Null checking in eina_strbuf_* API, but it will print error message when input string is Null.
Strictly speaking, *_markup_to_utf8 API could be used with any kind of input string.
So, we need to add Null checking for removing the useless error message.

Test Plan:
Call the API like the following code.
evas_textblock_text_markup_to_utf8(NULL, "test_text&&&&");

ERR message will be printed.

Reviewers: woohyun, tasn, seoz, Hermet, hbr4570

CC: cedric

Differential Revision: https://phab.enlightenment.org/D493
2014-02-05 13:23:55 +00:00
ChunEon Park eea4fbff6a evas/map - added comment to do. 2014-02-05 20:55:38 +09:00
Tom Hacohen 17d028f944 Evas font: Added support for font fallback for eet/edje fonts.
This is a long awaited feature that has been requested years ago.
Fontconfig finally added the support needed to make it happen, so here
it is.

I added a fontconfig query to look for similar fonts in case we loaded a
font from eet/edje/file(no fontconfig). This now works quite well.

Still missing: if you load a bold/italic/whatever font directly (set the file)
without putting ":weight=bold" you will not get run-time emboldenment if
only non-bold fonts are found.

This unfortunately depends on very recent fontconfig version (#ifed out
when unavailable), so only people with fontconfig >= 2.11 will enjoy
this feature.
2014-02-04 10:44:11 +00:00
Tom Hacohen 1c44890491 Evas font: Renamed evas_load_fontconfig and added support for a base set.
Renamed it so it'll be more obvious that it's internal.
Added the parameter as the first step towards supporting edje font
fallback using fontconfig.
2014-02-04 10:44:11 +00:00
Carsten Haitzler ef2127c900 evas - fix tom's bold-killer from 2cb9db171e 2014-02-02 10:59:33 +09:00
Jihoon Kim ab712a9966 evas: fix doxygen warning in group of Evas_Key
Evas_Common.h:5243: warning: end of file while inside a group
2014-02-01 14:19:38 +09:00
Tom Hacohen 19cde8f194 Evas font: Added support for the freetype spacing tag.
This doesn't work nicely, as for some reason fontconfig doesn't work
nicely with ':spacing=mono' without a font name.
Doesn't work with fc-match either. It does work with fc-list, but that's
not what we'd like to use. It could be just an issue with my local
fontconfig configuration.

This fixes T865 although the problem is now with freetype.
2014-01-29 14:36:22 +00:00
Tom Hacohen 2cb9db171e Evas font: Added support for weight/width/slant font tags.
This let's you set those directly, instead of using the style tag.
2014-01-29 14:10:43 +00:00
Tom Hacohen 22813f5b52 Evas textblock: Fix selection with bidi text.
This is a regression introduced in
548e548632.

This is really bad, and essentially broke selection geometry for bidi
text. Very serious.

The problematic code assumed that the range comparison for the items
assumed the item marked with 1 is always logically before the item marked
with 2, which is just not true.
2014-01-29 13:27:45 +00:00
Daniel Kolesa 871597f8c2 fix evas_tiler bug (makes evas get stuck in an infinite loop there in certain scenarios) 2014-01-29 10:00:29 +00:00
Daniel Juyung Seo 4b457c5f2d evas_render: avoid unnecessary assignment. 2014-01-28 01:54:49 +09:00