Commit Graph

362 Commits

Author SHA1 Message Date
Lauro Moura f203c164d8 eo files: Avoid container<ptr(value_type)> usage.
Summary:
Value types are already assumed to be stored by pointer (e.g.
`int val = *(node->data);`)

This commit just changes the current usage of the `ptr` modifier in the
ptr, not affecting the parser.

Reviewers: q66, segfaultxavi, bu5hm4n, felipealmeida

Reviewed By: q66

Subscribers: cedric, #reviewers, #committers, brunobelo

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D10769
2019-11-29 17:22:07 -03:00
WooHyun Jung 247331363a eolian: fix eolian errors with EOLIAN_ENFORCE_SINCE=1
Summary:
This is not the end of fixing eolian errors. I need to keep fixing
more.

Test Plan:
1. export EOLIAN_ENFORCE_SINCE=1
2. ninja

Reviewers: q66, segfaultxavi, zmike, bu5hm4n, Jaehyun_Cho

Reviewed By: segfaultxavi, Jaehyun_Cho

Subscribers: Jaehyun_Cho, stefan_schmidt, cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D10370
2019-10-14 16:55:52 +09:00
Hermet Park 24ed24a9db ector: refer exact stride size for jumping buffer lines.
Actual buffer and used width size could be different,
stride must be referred.
2019-09-17 12:03:25 +09:00
Hermet Park dc0056ca93 ector: removed cairo backend.
For reducing maintainability burden,
We drop supporting cairo backend.

The default backend is to software implementation from now.
It's well maintained so far and works good.x
2019-09-11 13:14:56 +09:00
Hermet Park 3d50083f41 ector: don't alloc memory if the size is 0. 2019-09-11 12:01:25 +09:00
Hermet Park 20abcba3b0 ector: code refactoring.
more neat and clean code, no logical changes.
2019-09-11 12:01:19 +09:00
Hermet Park 690dd5d33a ector: code refactoring.
Current vector drawing requires several methods for compositing,
it's shouldnt have only masking but other blending functions
such as matte in lottie, porter&duff in android, etc.

Previously we didn't specify this method name,
just reserved the options and now we started to define the methods
with ector_renderer_composite_method() with Efl.Gfx.VG_Composite_Method
instead of mask_set().
2019-09-06 17:56:02 +09:00
Hermet Park c5b88ca745 ector: add FIXME for coming issues.
We have no any test resouce but it seems very weird code...
Leave a comment for future task.
2019-09-04 20:03:05 +09:00
Hermet Park f90c8b8910 ector: fix a wrong target buffer size.
the target buffer is allocated by backend engine,
The buffer size must be specified with the stride, not the width.
It's real dimension can be different with the our request.
2019-09-04 20:03:05 +09:00
Hermet Park 9a4b6728d5 ector gradient: ++ optmization.
we know what size will be used for every span,
this graident buffer will be overwritten with new one,

So it doesn't need to clear every spans.
2019-08-30 17:15:06 +09:00
Hermet Park e4b9807ee3 ector: remove unnecessary blending processing.
gradient buffer in masking doesn't need to apply anti-aliasing
since it would be taken by masking buffer.

This also fixes memory overflow case if the tbuffer is lack of size.
2019-08-30 13:44:56 +09:00
Hermet Park 17320a1318 ector: code refactoring.
just renamed internal variables, no logical changes.
2019-08-30 13:44:56 +09:00
Daniel Kolesa 9c018613ee eolian: drop @cref
In the end this was just a failed experiment that didn't turn
out to be practical. For now, revert back to ptr(const(T)) until
a proper replacement for pointer syntax is added.
2019-08-29 13:58:16 +02:00
junsu choi 34dc52dbd2 efl_canvas_vg_shape/ector_software : Set and use stroke miterlimit
Summary:
efl_canvas_vg_shape is set to miterlimit with Efl.Gfx.Shape.stroke_miterlimit
and pass the value from rasterizer to freetype.

NOTE: The default value is 4. It only refers to the standard of web svg.
      https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit

Depends D9657

Test Plan: N/A

Reviewers: Hermet, smohanty, kimcinoo

Subscribers: cedric, #committers, #reviewers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D9665
2019-08-22 13:00:01 +09:00
junsu choi ca8df7067c ector_software_rasterizer: Change default value of stroke linejoin
Summary:
SW_FT_STROKER_LINEJOIN_MITER is same SW_FT_STROKER_LINEJOIN_MITER_VARIABLE
We pass miterlimit values in fixed-point type.
Therefore, change the default value to SW_FT_STROKER_LINEJOIN_MITER_FIXED.

Test Plan: N/A

Reviewers: Hermet, smohanty, kimcinoo

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D9656
2019-08-22 12:38:57 +09:00
Hermet Park b0737c7434 Revert "ector: code refactoring."
This reverts commit dad166f84a.

Ector is not public, this breaks enlightenment compilation,
2019-08-20 20:24:27 +09:00
Hermet Park dad166f84a ector: code refactoring.
Current vector drawing requires several methods for compositing,
it's shouldnt have only masking but other blending functions
such as matte in lottie, porter&duff in android, etc.

Previously we didn't specify this method name,
just reserved the options and now we started to define the methods
with ector_renderer_composite_method() instead of mask_set().
2019-08-20 18:23:41 +09:00
Hermet Park 9b7d71df79 ector: ++safety.
null handling just in corner case.
2019-08-08 23:34:02 +09:00
junsu choi 949cf2750b ector_software_rasterizer: Add default value for stroke's miter_limit
Summary:
Currently the default value of miter_limit is defined as 0.
miter_limit should be specified to a value other than 0. becuase it is affected by width.
See below for an explanation of this.
https://www.freetype.org/freetype2/docs/reference/ft2-glyph_stroker.html#ft_stroker_linejoin

There is no particular reason why the default value is 0x4.
It only refers to the standard of web svg.
https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit

Test Plan:
   setenv("ECTOR_BACKEND", "default", 1);
   elm_init(argc, argv);
   Evas_Object *win = elm_win_util_standard_add(NULL, "test");
   evas_object_smart_callback_add(win, "delete,request", win_del, 0);
   elm_win_autodel_set(win, 1);
   Evas_Object *bg = elm_bg_add(win);
   elm_bg_color_set(bg, 255,255,255);
   evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, EVAS_HINT_FILL);
   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
   evas_object_show(bg);

   Evas *evas = evas_object_evas_get(win);

   Evas_Object *vg = evas_object_vg_add(evas);
   evas_object_show(vg);
   Evas_Object *container = evas_vg_container_add(vg);

   Evas_Object *shape = evas_vg_shape_add(container); //Default is EFL_GFX_JOIN_MITER
   evas_vg_shape_append_rect(shape, 0, 0, 100 , 100, 0, 0);
   evas_vg_shape_stroke_color_set(shape, 255, 0, 0, 255);
   evas_vg_shape_stroke_width_set(shape, 10);
   evas_vg_node_origin_set(shape, 50, 150);

   shape = evas_vg_shape_add(container);
   evas_vg_shape_append_rect(shape, 0, 0, 100 , 100, 0, 0);
   evas_vg_shape_stroke_join_set(shape, EFL_GFX_JOIN_BEVEL);
   evas_vg_shape_stroke_color_set(shape, 255, 0, 0, 255);
   evas_vg_shape_stroke_width_set(shape, 10);
   evas_vg_node_origin_set(shape, 200, 150);

   shape = evas_vg_shape_add(container);
   evas_vg_shape_append_rect(shape, 0, 0, 100 , 100, 0, 0);
   evas_vg_shape_stroke_join_set(shape, EFL_GFX_JOIN_ROUND);
   evas_vg_shape_stroke_color_set(shape, 255, 0, 0, 255);
   evas_vg_shape_stroke_width_set(shape, 10);
   evas_vg_node_origin_set(shape, 350, 150);

   evas_object_vg_root_node_set(vg, container);
   elm_object_content_set(bg, vg);

   elm_win_resize_object_add(win, bg);
   evas_object_resize(win, WIDTH, HEIGHT);
   evas_object_show(win);
   elm_run();
   elm_shutdown();

Reviewers: smohanty, Hermet, kimcinoo

Reviewed By: Hermet

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D9492
2019-08-05 18:08:50 +09:00
junsu choi 3210fa3d69 ector: Prevent access to NULL buffer in software rasterizer
Summary:
Prevents a crash caused by a null pointer exception
when ector surface buffer is NULL.

Test Plan: N/A

Reviewers: Hermet, smohanty, kimcinoo

Reviewed By: Hermet

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D9390
2019-07-26 13:12:48 +09:00
junsu choi 1ce14bc85d Ector.Renderer : Implement Ector.Renderer.(Software).Image class
Summary:
Implement a class and drawer that outputs image data from the Ector.
Image data is output with a vector object and supports transform.

Test Plan: N/A

Reviewers: Hermet, smohanty, kimcinoo

Reviewed By: Hermet

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D9218
2019-07-22 13:29:02 +09:00
junsu choi be419d64d2 Ector.Renderer: Prevent too many unref.
Summary:
pd-> surface will try efl_xref whenever surface_set is called.
desturctor is called from a subclass, ref and unref do not match.
So, Add this condition temporarily.

Test Plan: N/A

Reviewers: Hermet, smohanty, kimcinoo

Reviewed By: Hermet

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D9235
2019-07-09 15:46:41 +09:00
junsu choi c7b1a40b5e ector: Fix precomp layer rendering issue when it has alpha value
Summary:
When the precomp layer(parent layer) has alpha transparency and has more than 1 child layer
and they overlap each other if vg object just propagate the alpha to child layer
it will be applied twice in overlapped area.
Even if the child layer does not have alpha transparency, parent alpha is applied to each child.

Test Plan: N/A

Reviewers: Hermet, smohanty

Reviewed By: Hermet

Subscribers: cedric, #reviewers, kimcinoo, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D9072
2019-06-20 16:07:05 +09:00
Daniel Kolesa 13ddc5dbc1 eolian: rename @warn_unused and its associated API
@warn_unused in syntax is now called @no_unused - this is because
"warning about unused" is a C thing (or rather, an extension to C)
and various languages might want to use stricter behavior for this.

Its associated API does the reverse now - it lets you query whether
being unused is allowed at all. This is to match future behavior
of Eolian (once it supports versioning) that will likely reverse it.

@feature
2019-05-26 17:41:22 +02:00
Daniel Kolesa d0fed247bb eolian: remove param @nonull
This has been deprecated for a while and is not strictly necessary
- as a part of an effort to stabilize Eolian, remove this. Eolian
will eventually gain support for versioning and use a reversed
behavior (i.e. no NULL by default), but the API it wlll use for
that will be very different. Features can always be added, it's
much harder to drop them.

@feature
2019-05-26 17:25:15 +02:00
junsu choi 10062fd957 ector_software_rasterizer: Improved masking calculation.
Summary:
The memory allocation for the buffer size is improved to
allocate only the width size.

Test Plan: N/A

Reviewers: Hermet, kimcinoo

Reviewed By: Hermet

Subscribers: cedric, #reviewers, smohanty, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D8873
2019-05-15 11:22:45 +09:00
Daniel Kolesa 6312cafe20 eolian: move from eo_prefix to c_prefix 2019-05-09 16:17:44 +02:00
junsu choi c10dfc3bca ector_software_rasterizer : Move duplicate alloca
Summary: Move the alloca() outside of the loop.

Test Plan: N/A

Reviewers: Hermet, kimcinoo

Reviewed By: Hermet

Subscribers: cedric, #reviewers, smohanty, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D8869
2019-05-09 19:30:37 +09:00
junsu choi 4473062dd4 ector_software_rasterizer: Support gradient mask blending
Summary: This patch supports mask blending of gradient shapes.

Test Plan: N/A

Reviewers: Hermet, kimcinoo

Reviewed By: Hermet

Subscribers: cedric, #reviewers, smohanty, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D8855
2019-05-08 16:57:19 +09:00
junsu choi 83d5ea1a42 ector_software_rasterizer: Implement mask blending function.
Summary:
Add Mask blend function(Add, Substract, Intersect, Difference)
this blending function only use mask blending case.

Test Plan: N/A

Reviewers: Hermet

Reviewed By: Hermet

Subscribers: cedric, kimcinoo, #reviewers, smohanty, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D8509
2019-04-11 19:17:10 +09:00
Xavi Artigas 68c530080b docs: Fix common misspellings in H files
Fixed all appearances of words from this list in H files:
https://en.wikipedia.org/wiki/Wikipedia:Lists_of_common_misspellings/For_machines
2019-04-02 13:28:48 +02:00
Xavi Artigas bbd4b6e514 docs: Remove obsolete @since tags from EO files
Summary:
All legacy @since tags have already moved to the *.legacy.h files.
EO files are now devoid of @since tags (except some eldbus still
needed for legacy).
Upcoming patches will add @since 1.22 to those APIs which come out
of beta in this release.
APIs marked @beta do not need @since tags.

Test Plan: Everything builds, EO docs (like DocFX) have no Since tags.

Reviewers: zmike, bu5hm4n, lauromoura, cedric

Reviewed By: cedric

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D8430
2019-03-20 20:16:05 +01:00
Marcel Hollerbach 30bb8395c3 build: add a option to disable eo file installation
Summary:
this is done because .eo files are not stable, and in order to stop
people depending on it, its better for now to disable the installation
of them for now.

ref T7676

Reviewers: stefan_schmidt, cedric, zmike, devilhorns

Reviewed By: zmike

Subscribers: #reviewers, #committers

Tags: #efl

Maniphest Tasks: T7676

Differential Revision: https://phab.enlightenment.org/D7897
2019-03-14 12:44:00 -04:00
Daniel Kolesa d3c5384cd0 eolian: enable checking of beta/stable contexts in all classes
Summary:
This enables all the checks unconditionally, without ignoring
classes that don't have an Efl namespace. This required a lot
of beta marking to make it build. It most likely doesn't
mark types correctly, as that is not fully enabled yet.

Reviewers: zmike, cedric, segfaultxavi, bu5hm4n

Reviewed By: segfaultxavi

Subscribers: #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D8266
2019-03-11 13:42:29 +01:00
Mike Blumenkrantz 12e78b5059 headers: ensure Efl.h is always included behind BETA define guards
Reviewed-by: Cedric BAIL <cedric.bail@free.fr>
Differential Revision: https://phab.enlightenment.org/D8244
2019-03-08 12:06:22 -08:00
Mike Blumenkrantz a4ad866bc1 eo files: mark a bunch of types with @beta
Summary:
these are all types that we do not currently want to release

Depends on D8102

Reviewers: segfaultxavi

Reviewed By: segfaultxavi

Subscribers: segfaultxavi, cedric

Tags: #efl_api

Differential Revision: https://phab.enlightenment.org/D8241
2019-03-08 16:40:40 +01:00
Marcel Hollerbach dfb0a2a458 ector: remove unused function
done is not called, nor implemented in a single spot, lets remove it.
It can still be readded once its needed.

ref T5719

Reviewed-by: Cedric BAIL <cedric.bail@free.fr>
Differential Revision: https://phab.enlightenment.org/D7713
2019-01-22 14:07:14 +01:00
Marcel Hollerbach 3b6a9152c1 efl: convert all abstracts to the new eolian syntax
ref T7459

Reviewed-by: Daniel Kolesa <daniel@octaforge.org>
Reviewed-by: Xavi Artigas <xavierartigas@yahoo.es>
Differential Revision: https://phab.enlightenment.org/D7686
2019-01-18 16:31:30 +01:00
Marcel Hollerbach 4fc83c9cbb efl: convert all mixins to new eolian syntax
ref T7459

Reviewed-by: Daniel Kolesa <daniel@octaforge.org>
Reviewed-by: Xavi Artigas <xavierartigas@yahoo.es>
Differential Revision: https://phab.enlightenment.org/D7685
2019-01-18 16:31:28 +01:00
Marcel Hollerbach 34efdfb1b1 efl: convert all classes to the new eolian syntax
ref T7459

Reviewed-by: Daniel Kolesa <daniel@octaforge.org>
Reviewed-by: Xavi Artigas <xavierartigas@yahoo.es>
Differential Revision: https://phab.enlightenment.org/D7684
2019-01-18 16:31:26 +01:00
Marcel Hollerbach ba065f9eed evas: make classes abstract
Summary:
those classes are defining pure_virtual functions, so the class should
be abstract.

ref T7632

Depends on D7670

Reviewers: cedric, segfaultxavi, zmike, q66

Reviewed By: segfaultxavi

Subscribers: #reviewers, #committers

Tags: #efl

Maniphest Tasks: T7632

Differential Revision: https://phab.enlightenment.org/D7671
2019-01-17 17:17:40 +01:00
Daniel Kolesa b1ee0f3acd evas/engines/gl_generic: remove multiclass inheritance
evas_ector_gl_buffer/evas_ector_gl_image_buffer contained a regular
class in extensions list, which is wrong.
2019-01-16 20:00:16 +01:00
Marcel Hollerbach 3ddd577fb0 efl: refactor all mixins
Differential Revision: https://phab.enlightenment.org/D7585
2019-01-11 12:37:27 +01:00
Hermet Park d2ec3ce170 efl gfx_path: remove EFL_GFX_PATH_EVENT_CHANGED
Summary:
Here is an additional optmization patch for removing
unnecessary updation of path,

For instance, let's assume this scenario:

If one vg object has 20 path nodes(shapes),
and every single nodes would have 50 path changes.
(like, append_cubic, append_rect, append_xxx ...);
There would 1000 events triggering.

Furthermore, if there are 20 vector objects in one view,
hese events would be triggered 20000 in one frame.

It's insane, actually I could figured out that happens.
and it took a lot of cpu consumption in some vector usages.

efl_gfx_path_commit() is my idea to avoid this.
When path is ready, the path need to get this api call in the last
 to make object changed properly.

@feature

Reviewers: #committers, cedric

Reviewed By: #committers, cedric

Subscribers: segfaultxavi, cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D7494
2018-12-28 12:20:15 +09:00
Hermet Park 0e278d1de8 Revert "efl gfx_path: remove EFL_GFX_PATH_EVENT_CHANGED"
This reverts commit 7c38c0c915.

Oops, didn't intend this patch.
2018-12-26 19:32:42 +09:00
Hermet Park 7c38c0c915 efl gfx_path: remove EFL_GFX_PATH_EVENT_CHANGED
Summary:
Here is an additional optmization patch for removing
unnecessary updation of path,

For instance, let's assume this scenario:

If one vg object has 20 path nodes(shapes),
and every single nodes would have 50 path changes.
(like, append_cubic, append_rect, append_xxx ...);
There would 1000 events triggering.

Furthermore, if there are 20 vector objects in one view,
hese events would be triggered 20000 in one frame.

It's insane, actually I could figured out that happens.
and it took a lot of cpu consumption in some vector usages.

efl_gfx_path_commit() is my idea to avoid this.
When path is ready, the path need to get this api call in the last
 to make object changed properly.

@feature

Reviewers: #committers, cedric

Subscribers: segfaultxavi, cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D7494
2018-12-26 19:29:10 +09:00
Marcel Hollerbach e43f090265 cmake: remove!
This build was never complete and also was not maintained probebly.

It is also dropped in favour of meson which is cool, merged, works & is fast.

Differential Revision: https://phab.enlightenment.org/D7010
2018-12-20 20:07:26 +01:00
Hermet Park e6f66e56fd ector software: Be careful at alloca() usage.
allocate one spare span memory then reuse it.
2018-12-07 19:54:41 +09:00
Hermet Park fbe92aa67f evas ector: add software implmentation for masking feature.
This implementation uses Ector_Buffer to generate mask image from vg container,
and pass it to Ector engine. Ector renderer could blend this image as a mask.
Yet only vg container works as a mask, we could extend shape to support masking later.

Still vector gl drawing is not completed, We use software ector buffer to draw on it.
This is on progessing.
2018-12-07 19:50:08 +09:00
Hermet Park cfc66dd0bd ector: code refactoring.
make code clean and neat.
no logical changes.
2018-12-07 15:50:57 +09:00