platform/core/graphics/tizenvg.git
3 years agocommon Scene: Fix validation check for child's bounds
JunsuChoi [Mon, 30 Nov 2020 05:51:04 +0000 (14:51 +0900)]
common Scene: Fix validation check for child's bounds

Fix typo. and Change return to continue.
Even if the child's boundary calculation is wrong,
other child's boundary should be calculated.

Change-Id: I7e3a73046bef3eee26592a66e0d46bff2a733c8f

3 years agocommon Test: Add Paint.bounds unit test
JunsuChoi [Mon, 30 Nov 2020 05:50:05 +0000 (14:50 +0900)]
common Test: Add Paint.bounds unit test

Change-Id: I0d99925afc9a942c65098a6f8c39c6ad9cb4d700

3 years agosw_engine Raster: Add null check for transform
JunsuChoi [Mon, 30 Nov 2020 06:20:49 +0000 (15:20 +0900)]
sw_engine Raster: Add null check for transform

If transform is null, identify matrix is used.

Change-Id: Ia01b687c3894354cafd80fc4fe944c0b4756718d

3 years agoPicture capi binding
Michal Maciola [Thu, 26 Nov 2020 10:27:05 +0000 (11:27 +0100)]
Picture capi binding

Change-Id: I83af4cf0ee4452041057e097a1f64a08862607bf

3 years agocapi: Added fill rule API.
Michal Szczecinski [Mon, 30 Nov 2020 04:08:24 +0000 (05:08 +0100)]
capi: Added fill rule API.

Added capi binding for fill rule setter and getter.

@API changes:

enum Tvg_Fill_Rule {
  TVG_FILL_RULE_WINDING = 0,
  TVG_FILL_RULE_EVEN_ODD,
}

Tvg_Result     tvg_shape_set_fill_rule(Tvg_Paint* paint, Tvg_Fill_Rule rule)
Tvg_Fill_Rule  tvg_shape_get_fill_rule(Tvg_Paint* paint, Tvg_Fill_Rule* rule)

Change-Id: If83a08dfaceb4e861085de8a38d86d3e321cc64f

3 years agoexamples: ignore loading raw image file. accepted/tizen/unified/20201130.122949 submit/tizen/20201129.214353
Hermet Park [Mon, 23 Nov 2020 09:33:10 +0000 (18:33 +0900)]
examples: ignore loading raw image file.

in the last commit, it added a raw image file in the images folder.
It breaks Multicanvas, Svg which try to load all kinds of files in it.

We don't need to load all files by figuring out file extension name.

Change-Id: Iecea64379fabd85aa636158740a224a43ebc89c0

3 years agoraw_loader Loader: Introduce Raw image loader
JunsuChoi [Mon, 23 Nov 2020 09:12:36 +0000 (18:12 +0900)]
raw_loader Loader: Introduce Raw image loader

Add RawLoader class that loads and display raw images,
and adds a Rasterizer for image data.
Image data can be loaded via picture.
Loaded image supports Composition, Transformation and Alpha blending.

New API
Result load(uint32_t* data, uint32_t width, uint32_t height, bool isCopy) noexcept;

Change-Id: I180863466f833586df1fa47fee86dd72e45f1368

3 years agocapi: Added free flag to clear API. accepted/tizen/unified/20201124.123022 submit/tizen/20201122.211513
Michal Szczecinski [Thu, 19 Nov 2020 06:39:07 +0000 (07:39 +0100)]
capi: Added free flag to clear API.

Cpp implementaiton of library has free flag which was not used in
capi bindings.

@API changes
from: tvg_canvas_clear(Tvg_Canvas *canvas);
to: tvg_canvas_clear(Tvg_Canvas *canvas, bool free);

Change-Id: I4e7f5ced229dbd449dc5c2e2e1148f43d37bc50e

3 years agocommon taskScheduler: code refactoring accepted/tizen/unified/20201116.220339 submit/tizen/20201115.212153
Hermet Park [Wed, 11 Nov 2020 04:55:46 +0000 (13:55 +0900)]
common taskScheduler: code refactoring

removed unnecessary code.

Change-Id: I0e02fa8c2d8e33678b42bd88412b562afd551b86

3 years agocommon taskScheduler: fix a synchronization data race.
Subhransu Mohanty [Tue, 10 Nov 2020 07:43:19 +0000 (16:43 +0900)]
common taskScheduler: fix a synchronization data race.

std mutex shouldn't be used among threads. behavior is unexpected by implmentation.

This resolves it by introducing conditional value.

Change-Id: I276fab65919b979f0f4a882ef52214bda6a69bde

3 years agocapi examples: Added scene API C bindings.
Michal Szczecinski [Tue, 10 Nov 2020 03:13:48 +0000 (04:13 +0100)]
capi examples: Added scene API C bindings.

Scene CAPI allows to use scene functionaliy in C applications such as
set opacity to few shapes at one time or implement transparent layers.

@API Additions:
```c
Tvg_Paint* tvg_scene_new();
Tvg_Result tvg_scene_reserve(Tvg_Paint* scene, uint32_t size);
Tvg_Result tvg_scene_push(Tvg_Paint* scene, Tvg_Paint *paint);
```

Examples:
```c
Tvg_Paint *scene = tvg_scene_new();

Tvg_Paint *shape1 = tvg_shape_new();
tvg_shape_append_rect(shape1, 10, 10, 100, 100, 0, 0);
tvg_shape_set_fill_color(shape1, 255, 0, 0, 255);

Tvg_Paint *shape2 = tvg_shape_new();
tvg_shape_append_rect(shape2, 120, 10, 100, 100, 0, 0);
tvg_shape_set_fill_color(shape2, 255, 0, 0, 255);

tvg_scene_push(scene, shape1);
tvg_scene_push(scene, shape2);

tvg_paint_set_opacity(scene, 100);

tvg_canvas_push(canvas, scene);
```

Change-Id: I0043826fbddd8aa5d523f68bb271144f8c39e35c
Co-authored-by: Michal Szczecinski <m.szczecinsk@partner.samsung.com>
3 years agoexamples capi: removed printf()
Hermet Park [Mon, 9 Nov 2020 05:43:15 +0000 (14:43 +0900)]
examples capi: removed printf()

there is no point to print information.

Change-Id: Ic18abdf4da21d17d215384c1198c1e7732cb22d5

3 years agocommon taskScheduler: thread sync optmization
Hermet Park [Mon, 9 Nov 2020 05:36:22 +0000 (14:36 +0900)]
common taskScheduler: thread sync optmization

replaced future/promise with mutex since they use a lot of memory allocation number.

plus, binary size is reduced from 2094896 -> 1746864

Change-Id: Iea8cf9c8336e50d1272aa512f3a4d8b35d182534

3 years agoRevert "examples: revise example code." submit/tizen/20201108.215920
Hermet Park [Fri, 6 Nov 2020 06:37:17 +0000 (15:37 +0900)]
Revert "examples: revise example code."

This broke gl_engine rendering, revert it.

This reverts commit 9bb1972ef97e1ae3c83fe9e48c16262d9f246a4a.

Change-Id: I7304fd73c77ae3487681e2241a9d47f7c5b686f7

3 years agocommon renderer: code refactoring.
Hermet Park [Fri, 6 Nov 2020 06:19:52 +0000 (15:19 +0900)]
common renderer: code refactoring.

renamed internal methods from flush() to sync()
since flush() is reserved for caching flush.

Change-Id: I14c2f5b530907d573a2400f3cbd01dad1aaef0af

3 years agogl_engine renderer: fix build break.
Hermet Park [Fri, 6 Nov 2020 06:25:11 +0000 (15:25 +0900)]
gl_engine renderer: fix build break.

just found a missing change for the fillColor api.

Change-Id: Ife45e37a02ba7fb1beba324f81801ab0ea758548

3 years agosw_engine mempool: ++optimization
Hermet Park [Fri, 6 Nov 2020 04:38:00 +0000 (13:38 +0900)]
sw_engine mempool: ++optimization

These memory pools requires very simple mechanism.

Remove stl vector but use direct memory for less binary size.(2127696 -> 2094094)

@Issues: 75

Change-Id: Id13d3dc0b6425457858921e1f7b43c747af17272

3 years agocommon shape: memory optimization
Hermet Park [Fri, 6 Nov 2020 02:18:35 +0000 (11:18 +0900)]
common shape: memory optimization

All shapes will have path data,
avoid unnecesary dynamic memory allocation internally.

@Issues: 75

Change-Id: Ib3eefcf962ea391229668710aab364bd6cbd18c3

3 years agoupdated AUTHORS
Hermet Park [Fri, 6 Nov 2020 02:30:31 +0000 (11:30 +0900)]
updated AUTHORS

Change-Id: I978fe66900b8b15d93da79f3576843d9f08e4bd3

3 years agofix compilation on Windows
Vincent Torri [Thu, 5 Nov 2020 11:25:47 +0000 (12:25 +0100)]
fix compilation on Windows

Change-Id: I1afe19b0ed0a98c1488871e1ac3f0a4be8cde816

3 years agofix compilation on Windows
Vincent Torri [Thu, 5 Nov 2020 10:36:43 +0000 (11:36 +0100)]
fix compilation on Windows

Change-Id: Ie1cfe437abb250c87389e2f122cb2fda0c50e8dc

3 years agosw_engine rle: performance optimization.
Hermet Park [Thu, 5 Nov 2020 07:34:14 +0000 (16:34 +0900)]
sw_engine rle: performance optimization.

Tis is a subsequential trial of 1b8188ee676eae5c690b1b88bb823b6ad126bb78
for opimizing memory alloc count.

In this time, it concentrates on rle span.

@Issues: 75

Change-Id: Ie7a0324c33856b2ac938f4300a280b5fb6d3b39f

3 years agoUpdate README.md
Hermet Park [Thu, 5 Nov 2020 05:44:43 +0000 (14:44 +0900)]
Update README.md

Change-Id: I4022490bb0a206b5cbd77deeb0720de4d0b483dd

3 years agoUpdate README.md
Hermet Park [Thu, 5 Nov 2020 05:43:32 +0000 (14:43 +0900)]
Update README.md

Change-Id: I8f7343ae0c3b41f6c1672afda40d1de4f1a7bd91

3 years agoUpdate CONTRIBUTING.md
Hermet Park [Thu, 5 Nov 2020 04:57:21 +0000 (13:57 +0900)]
Update CONTRIBUTING.md

Change-Id: I5d7e3c08106c05912be07537fd7ddc09311da19b

3 years agoUpdate README.md
Hermet Park [Wed, 4 Nov 2020 12:01:22 +0000 (21:01 +0900)]
Update README.md

Change-Id: Iddf24b5580e6157a966d1c38fde40a16c93adb4c

3 years agores: updated thorvg card images.
Hermet Park [Wed, 4 Nov 2020 11:58:54 +0000 (20:58 +0900)]
res: updated thorvg card images.

Change-Id: Ic527aad2533ea9de0b15a7e6f8d164b5bda2e880

3 years agosw_engine mempool: performance optimization.
Hermet Park [Wed, 4 Nov 2020 10:58:14 +0000 (19:58 +0900)]
sw_engine mempool: performance optimization.

This is a subsequential trial of 1b8188ee676eae5c690b1b88bb823b6ad126bb78
for opimizing memory alloc count.

In this time, it concentrates on stroke outline.

@Issues: 75

Change-Id: I0f73b83cb7aee51186455d2312fa77cdb434ab3d

3 years agosw_engine mempool: changed caching policy.
Hermet Park [Wed, 4 Nov 2020 10:20:29 +0000 (19:20 +0900)]
sw_engine mempool: changed caching policy.

for smart usage, clear memory only when engine is terminated.

Change-Id: I377fd6f1953a50b64945cbf0e84c882aa1cb92d8

3 years agocommon sw_engine: code refactoring
Hermet Park [Wed, 4 Nov 2020 10:18:59 +0000 (19:18 +0900)]
common sw_engine: code refactoring

replaced names and fixed out of coding convention.

Change-Id: I1a2f17a3da6ea38e7ef2c00ff787323267439e0e

3 years agoexamples: revise example code.
Hermet Park [Wed, 4 Nov 2020 08:56:33 +0000 (17:56 +0900)]
examples: revise example code.

Move the Clear call to the end of drawing those scenarios doesn't need to retain paints resources.

We should show the examples as the best usage.

@Issues: 75

Change-Id: Ieea116077e578742d627b71fb5fad395a74dbc9d

3 years agosw_engine shape: performance optimization.
Hermet Park [Wed, 4 Nov 2020 07:28:47 +0000 (16:28 +0900)]
sw_engine shape: performance optimization.

we introduced shared memory pool for avoiding reallocate memory
while it process the stroke outlines, It experimentally increase
the outline data if we use the allocated memory for multiples shape strokes,
we don't need to alloc/free memory during the process.

This shared outline memory is allocated for threads count
so that we don't interrupt memory access during the tasks.

@Issues: 75

Change-Id: I2794c4368e392fa774a5cf9a9fc771963427269a

3 years agores: polishing example pictures.
Hermet Park [Wed, 4 Nov 2020 02:46:49 +0000 (11:46 +0900)]
res: polishing example pictures.

Change-Id: I83f085a843425d9f747183cd99dce2800a6ac706

3 years agoUpdate README.md
Hermet Park [Wed, 4 Nov 2020 02:33:27 +0000 (11:33 +0900)]
Update README.md

Change-Id: I34d108e90bea2fb5278d3f0e2202730b270c37ab

3 years agoUpdate README.md
Hermet Park [Wed, 4 Nov 2020 02:32:27 +0000 (11:32 +0900)]
Update README.md

Change-Id: Ie28f9b92e5ee8ec20966b6cedc7d1b6b40cdec4d

3 years agores: adds working-flow picture.
Hermet Park [Wed, 4 Nov 2020 02:28:34 +0000 (11:28 +0900)]
res: adds working-flow picture.

this picture will be used in README.

Change-Id: Id9f1ce6df61a19ce1bdefd302d5c809dd6a191d4

3 years agocommon capi: Added opacity C bindings.
Michal Szczecinski [Tue, 3 Nov 2020 11:42:57 +0000 (12:42 +0100)]
common capi: Added opacity C bindings.

Added opacity setter/getter to CAPI. They will be useful to simplify
code responsible for set visiblility of paint.

@API Additions:
Tvg_Result tvg_paint_set_opacity(Tvg_Paint* paint, uint8_t opacity)
Tvg_Result tvg_paint_get_opacity(Tvg_Paint* paint, uint8_t* opacity)

Change-Id: Ifeae545d12d74f316b8d27b5e047c55f82a696fe

3 years agoUpdate README.md
Hermet Park [Tue, 3 Nov 2020 07:23:29 +0000 (16:23 +0900)]
Update README.md

Change-Id: I19b6f77d80640ee7791e85a93cc2c1e38d92fcb7

3 years agoUpdate README.md
Hermet Park [Tue, 3 Nov 2020 05:48:40 +0000 (14:48 +0900)]
Update README.md

Change-Id: I64a0d9afe5795fbd3305e7ac7ba4cb04026e522d

3 years agores: updated example screenshot resources
Hermet Park [Tue, 3 Nov 2020 05:45:52 +0000 (14:45 +0900)]
res: updated example screenshot resources

Change-Id: I4605c2b57206b447b40358e1272ecbf280fb8639

3 years agoUpdate README.md
Hermet Park [Tue, 3 Nov 2020 05:45:44 +0000 (14:45 +0900)]
Update README.md

Change-Id: I0758a443349254d54e2dc7b86bd79d2a8b5bfa85

3 years agoUpdate README.md
Hermet Park [Tue, 3 Nov 2020 05:42:33 +0000 (14:42 +0900)]
Update README.md

Change-Id: I5c713c8c3edeaae4f7a1fdddb436fca51e0331ff

3 years agores: replaced primitive example screenshot.
Hermet Park [Tue, 3 Nov 2020 05:40:51 +0000 (14:40 +0900)]
res: replaced primitive example screenshot.

Change-Id: I243b0790ad7bf9649fcc992caae8371324497cda

3 years agoUpdate README.md
Hermet Park [Tue, 3 Nov 2020 05:26:05 +0000 (14:26 +0900)]
Update README.md

Change-Id: I15dd7878ec85d703ee4af8ec9afeece171afc90a

3 years agoUpdate README.md
Hermet Park [Tue, 3 Nov 2020 05:25:00 +0000 (14:25 +0900)]
Update README.md

Change-Id: I4059109d548b47cbeb170fcb2175e8d00ffaf0f4

3 years agocommon LoaderMgr: code refactoring
Hermet Park [Tue, 3 Nov 2020 04:40:47 +0000 (13:40 +0900)]
common LoaderMgr: code refactoring

keep clean & neat thorvg coding style.

Change-Id: I9525b37922fd7a273677fb8522e7257d9d4fb611

3 years agores: adds primitive example screenshot.
Hermet Park [Tue, 3 Nov 2020 05:19:31 +0000 (14:19 +0900)]
res: adds primitive example screenshot.

Change-Id: I35fe24913d5f7e71436286b052c8e86a2ef75968

3 years agoUpdate README.md
Hermet Park [Tue, 3 Nov 2020 05:07:58 +0000 (14:07 +0900)]
Update README.md

Change-Id: I91e6118d1c190397e687c9aff2f1d4623873967b

3 years agosvg_loader LoaderMgr: Delegates file validation check to LoaderMgr.
JunsuChoi [Thu, 22 Oct 2020 04:10:48 +0000 (13:10 +0900)]
svg_loader LoaderMgr: Delegates file validation check to LoaderMgr.

Delegates extension string check and header(open) check
for file to LoaderMgr.
This makes it easy to add a loader afterwards.

Change-Id: I93b355cdc78fe371b77ada56fe08e4dc47e0d5d5

3 years agosw_engine shape: code refactoring.
Hermet Park [Mon, 2 Nov 2020 10:25:36 +0000 (19:25 +0900)]
sw_engine shape: code refactoring.

thorvg always prefer simpler code, less LOC.

Change-Id: I93a1314f5cd96c5080360f622940cf239e698c2e

3 years agosw_engine shape: change of the rectangle fast tracking algorithm
Mira Grudzinska [Sun, 1 Nov 2020 15:38:14 +0000 (16:38 +0100)]
sw_engine shape: change of the rectangle fast tracking algorithm

The algorithm erroneously treated some shapes (like isosceles trapezoids
and specifically arranged zero width parallelograms) as rectangles,
which causes the whole bbox to be filled.

Change-Id: If5aa87c53cf174367841323ac813b28ead4871b4

3 years agosvg_loader: Fixed a typo
JunsuChoi [Thu, 29 Oct 2020 08:48:09 +0000 (17:48 +0900)]
svg_loader: Fixed a typo

lenght ->length

Change-Id: I0d05b3ff1ae5dc6c8330a3f29a290feacd705c00

3 years agotest Canvas: Set up unit test based on gtest.
JunsuChoi [Thu, 29 Oct 2020 10:45:21 +0000 (19:45 +0900)]
test Canvas: Set up unit test based on gtest.

In test directory, set up unit_test based on gtest
First, add a test for SwCanvas generate.

Change-Id: I2b7ab96b5f7bc17408cc43cebda2ec731f73d1e7

3 years agocommon lib/loaders: Fix missing space for coding convention
JunsuChoi [Fri, 30 Oct 2020 02:54:03 +0000 (11:54 +0900)]
common lib/loaders: Fix missing space for coding convention

Correct missing or incorrect spaces according to coding convention.

Change-Id: If90d7c1926a99fe0ee6847920a8c08ecf6cec89f

3 years agosvg_loader SvgLoader: Fix wrong indentation
JunsuChoi [Fri, 30 Oct 2020 03:07:15 +0000 (12:07 +0900)]
svg_loader SvgLoader: Fix wrong indentation

indent 3 -> 4

Change-Id: I9578df16f1300adff507e416bd1cd06646e4a58f

3 years agosvg_loader SvgLoader: Prevent memory overflow for tagName
JunsuChoi [Fri, 23 Oct 2020 02:55:07 +0000 (11:55 +0900)]
svg_loader SvgLoader: Prevent memory overflow for tagName

When copying tagName, if length of referenced string is longer
than general case, it is not used as tagName.

Change-Id: I205b4eb58f97a75bed43caafe55de8f56e6700d4

3 years agocommon paint: introduce opacity() method.
Hermet Park [Mon, 26 Oct 2020 09:57:11 +0000 (18:57 +0900)]
common paint: introduce opacity() method.

We introduced separate opacity interface to adjust alpha value by paint.
This opacity will affect to whole paint image if paint is a group of paints.

Also, this opacity is to multipy with fill/stroke alpha values.
This means if the opacity is valid, the paint might deal with a composition step,
which is very expensive due to additional rendering step.

One tip is, if you want to toggle on/off for a certian paint,
you can set opacity to 255 or 0.

@API Additions:

Result Paint::opacity(uint8_t o) noexcept;
uint8_t Paint::opacity() const noexcept;

@Examples: examples/Opacity

@Issues: 94

Change-Id: Ie291890304230c34006fbe7f96a8707e01d9439c

3 years agoxexamples fillrule: revise code.
Hermet Park [Mon, 26 Oct 2020 08:13:02 +0000 (17:13 +0900)]
xexamples fillrule: revise code.

just adjusted start points for better visual.

Change-Id: Ib1a121e5acd375bedc737cc56c2f9f5549ab110d

3 years agoexamples svgs: replace logo design resource.
Hermet Park [Mon, 26 Oct 2020 07:52:52 +0000 (16:52 +0900)]
examples svgs: replace logo design resource.

White background is our official thorvg logo,
cyan is for Tizen customed.

Change-Id: Ic32b4cd9349daef7cb9eaea91da69f5b7b734cd8

3 years agosw_engine shape: adding a dash pattern switch condition accepted/tizen/unified/20201102.124229 submit/tizen/20201101.231042
Mira Grudzinska [Mon, 26 Oct 2020 01:13:30 +0000 (02:13 +0100)]
sw_engine shape: adding a dash pattern switch condition

Preventing switching to the next dash pattern for a line with a length of zero.

Change-Id: I364a39cbf99f14d0a3563c65f7523c288fe97a6d

3 years agocommon shape: handling dash patterns < 1
Mira Grudzinska [Thu, 22 Oct 2020 23:32:52 +0000 (01:32 +0200)]
common shape: handling dash patterns < 1

For the dash pattern values (both, length and gap) < 1 the program crashed.
curLen - variable type changed from int to float.

Change-Id: I9a50f1d247c210de7e5017b652554d94f00eb875

3 years agocommon api: interface refactoring
Hermet Park [Thu, 22 Oct 2020 12:01:55 +0000 (21:01 +0900)]
common api: interface refactoring

returning color fill() method renamed to fillColor() as like others-strokeXXX, fillRule- do.

This change is for naming consistency.

Change-Id: I8022219514b829e78097ac2f308688129d586a05

3 years agosw_engine shape: support fillRule method
Hermet Park [Thu, 22 Oct 2020 08:14:29 +0000 (17:14 +0900)]
sw_engine shape: support fillRule method

this change supports EvenOdd fillrule in shape rendering

@Examples: examples/FillRule.cpp

@Isuses: 97

Change-Id: Iff5ce7228cff607131a4725fb9b335561fc883d8

3 years agosw_engine renderer: fix aliasing shape outline result.
Hermet Park [Thu, 22 Oct 2020 05:55:22 +0000 (14:55 +0900)]
sw_engine renderer: fix aliasing shape outline result.

There a scenario detected that stroke 2 is not enough to cover
shape outlines. So make it bigger size.

Change-Id: Ic1042706ef8af1aa5d57f77e438e671faded4188

3 years agoexamples FillRule: added shape::fillRule() example
Hermet Park [Thu, 22 Oct 2020 04:36:29 +0000 (13:36 +0900)]
examples FillRule: added shape::fillRule() example

one shape shows Winding, the other one shows EvenOdd.

Change-Id: I5e0280c1caf72b2533cf1c40da232e0d984abb39

3 years agocommon fill: add fill-rule interface.
Hermet Park [Tue, 20 Oct 2020 10:36:26 +0000 (19:36 +0900)]
common fill: add fill-rule interface.

Fill rule is used to select how paths are filled.

For both fill rules, wheter or not a point is included in the fill is determined by taking a ray
from that point to infinity and looking at intersections with the path. The ray can be in any
direction, as long as it doens't pass through the end point of a segment or have a tricky
intersection such as intersecting tangent to the path.

@API Addtions:

enum class TVG_EXPORT FillRule { Winding = 0, EvenOdd };
Result Fill::rule(FillRule r) noexcept;
FillRule Fill::rule() const noexcept;

@Examples:

shape->rule(FillRule::EvenOdd);

@issue: 97

Change-Id: Ia282acd5f9d6154216683c1a65369a9a48220544

3 years agoBezier curve: introducing BEZIER_EPSILON
Mira Grudzinska [Thu, 15 Oct 2020 20:10:56 +0000 (22:10 +0200)]
Bezier curve: introducing BEZIER_EPSILON

BEZIER_EPSILON is used instead of EPSILON_FLT, because its
value was to small causing in some cases an infinite loop.

Change-Id: I90e25aed0d6138c2927d96cbbfea02e56d83c9ed

3 years agosvg_loader XmlParser: just renamed file name to simplify.
Hermet Park [Thu, 15 Oct 2020 11:37:53 +0000 (20:37 +0900)]
svg_loader XmlParser: just renamed file name to simplify.

XmlParser without "Simple" is enough to address itself.

Change-Id: Ib2d41d75674763be9e2757bb05c592d5fa655eaa

3 years agowasm test: update sample index.html
Shinwoo Kim [Thu, 15 Oct 2020 05:33:40 +0000 (14:33 +0900)]
wasm test: update sample index.html

Update index.html according to updated wasm interface.
Missed chance to update index.html during review.

Change-Id: Ib2ada27619e3bee6d500f0804209dbac076be30f

3 years agoUpdate CONTRIBUTING.md
Hermet Park [Thu, 15 Oct 2020 03:14:50 +0000 (12:14 +0900)]
Update CONTRIBUTING.md

Change-Id: I8cd6512b93c91f9b7f190980b4422efa53e7e6d0

3 years agoUpdate CONTRIBUTING.md submit/tizen/20201018.221456
Hermet Park [Thu, 15 Oct 2020 03:09:08 +0000 (12:09 +0900)]
Update CONTRIBUTING.md

Change-Id: I03e3f6c3d2dc1f0f96a2bbae5432a801402dae1d

3 years agoUpdate CONTRIBUTING.md
Hermet Park [Thu, 15 Oct 2020 03:04:05 +0000 (12:04 +0900)]
Update CONTRIBUTING.md

Change-Id: Id18191e2b7afd2a18d90d45a99a66c40bf06aad3

3 years agoCreate CONTRIBUTING.md
Hermet Park [Thu, 15 Oct 2020 03:01:01 +0000 (12:01 +0900)]
Create CONTRIBUTING.md

First guideline for contribution.

Change-Id: Ie52b32c1fcfe4127b295c1d29f55ea4b63245e74

3 years agothorvg viewer: fix scale problem
Shinwoo Kim [Wed, 14 Oct 2020 08:26:14 +0000 (17:26 +0900)]
thorvg viewer: fix scale problem

If viewer calls load() with a data which does not have size changes of both
viewbox and canvas, then load() does not set a scale value.
This makes incorrect result on viewer side.

So thorvg wasm should set a scale value, whenever load() is called.

Change-Id: I2d29c56d9ae3295f86a2a78944f8cbd4a3cebbb4

3 years agothorvg viewer: add getDefualtData interface
Shinwoo Kim [Wed, 14 Oct 2020 08:43:04 +0000 (17:43 +0900)]
thorvg viewer: add getDefualtData interface

The 'getDefaultData' interface will be used when the svg data area
of thorvg viewer does not have any value.

Change-Id: I5eb8f0bae1d90432b25bf90ebd01403ee908d34f

3 years agosvg_loader: fix wasm data type compile error.
Hermet Park [Wed, 14 Oct 2020 08:51:59 +0000 (17:51 +0900)]
svg_loader: fix wasm data type compile error.

Change-Id: Ie46ef91ccd032cda2a5c27a5811ab505616e0798

3 years agoimprove svg logo design quality.
Hermet Park [Wed, 14 Oct 2020 08:50:32 +0000 (17:50 +0900)]
improve svg logo design quality.

Change-Id: I3d447db750f830db809b28ba7248564a6f6cba2b

3 years agoUpdate README.md
Hermet Park [Tue, 13 Oct 2020 10:15:17 +0000 (19:15 +0900)]
Update README.md

Change-Id: Icd7b27ec9de21f18991f550b129a1072776d42a9

3 years agoUpdate README.md
Hermet Park [Tue, 13 Oct 2020 10:13:46 +0000 (19:13 +0900)]
Update README.md

Change-Id: Id38719d554db7036418596075b843c0644130912

3 years agothorvg viewer: introduce thorvg viewer
Shinwoo Kim [Tue, 15 Sep 2020 06:40:41 +0000 (15:40 +0900)]
thorvg viewer: introduce thorvg viewer

Support Emscripten wasm build for thorvg viewer

Change-Id: I0a70a721acb6446733f714a6d30273949b61be2c

3 years agore-tourched logo design for better quality.
Hermet Park [Tue, 13 Oct 2020 08:22:04 +0000 (17:22 +0900)]
re-tourched logo design for better quality.

Change-Id: I961ee405cf71f9e4a09723035676bfa7184e486b

3 years agosw_engine: fix missing shape update issue.
Hermet Park [Tue, 13 Oct 2020 07:31:39 +0000 (16:31 +0900)]
sw_engine: fix missing shape update issue.

It missed to update shape data if visilibity is changed from false to true by alpha.

Also, it needs to update engine shape data for every requests.

There scenario can be allowed,

1. update shape
2. change shape property
3. update shape
4. draw

previously engine could skip step 3, its result was not properly expected.

@fix #84

Change-Id: Ia37ce4b68ba9cbcea5f590fa365abbee66e9b6cd

3 years agotvgSvgLoader: Add points copy of missing polygon/polyline
JunsuChoi [Tue, 13 Oct 2020 04:45:40 +0000 (13:45 +0900)]
tvgSvgLoader: Add points copy of missing polygon/polyline

When using <use> node, do atrribute copy.
At that time, when target(url) is polygon or polyline,
points array is not copied, causing a problem in output.
So, add missing array copy.

Change-Id: I0c8b295f4723a3e4d96831191073d49058d2923a

3 years agotvgSvgLoader: Fix wrong bracket
JunsuChoi [Tue, 13 Oct 2020 01:00:03 +0000 (10:00 +0900)]
tvgSvgLoader: Fix wrong bracket

Change-Id: I4ae7242816febbddf7b6d1cd05fffe3b8abc0fa6

3 years agotvgSvgLoader: Add "clip-path" attribute
JunsuChoi [Mon, 12 Oct 2020 06:35:28 +0000 (15:35 +0900)]
tvgSvgLoader: Add "clip-path" attribute

Below node types support clip-path.
<circle>
<ellipse>
<g>
<path>
<polygon>
<polyline>
<rect>

Change-Id: I45780fe56d85fe69ec09d1dea7241872c6acb956

3 years agoSvgLoader: Implement ClipPath style
JunsuChoi [Thu, 24 Sep 2020 02:52:26 +0000 (11:52 +0900)]
SvgLoader: Implement ClipPath style

Supports case of using style attribute for defined <clipPath>.
In SVG, <clipPath> can be used as a "clipPath" attribute or a style "clip-path".
This patch only supports "clip-path" of style is declared.
The remaining features will be added later.

[Example SVG case]

<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
 viewBox="0 0 64 64" enable-background="new 0 0 64 64" xml:space="preserve">
 <defs>
      <clipPath id="clipPath">
          <rect x="15" y="15" width="40" height="40" fill="#F00" />
          <circle cx="20" cy="20" r="10" fill="#F00" />
      </clipPath>
  </defs>

  <circle cx="25" cy="25" r="20"
          style="fill: #0000ff; clip-path: url(#clipPath); " />
</svg>

Change-Id: Ie9b1000a52070ca86f67ce794413c3640784a079

3 years agoexamples: update DirectUpdate
Hermet Park [Tue, 13 Oct 2020 04:31:29 +0000 (13:31 +0900)]
examples: update DirectUpdate

Shape::clear() method is changed.
Now it clear all properties, the examples must be updated.

Change-Id: Ic5b971240b65738a24a5857a28e42f161ca234cb

3 years agoAdded thorvg logo svg resources,
Hermet Park [Tue, 13 Oct 2020 03:02:31 +0000 (12:02 +0900)]
Added thorvg logo svg resources,
Also replaced svg examples to use them.

Change-Id: I52b5f3af9cf379588d94fcbe0e477aac69e75e99

3 years agosvg_loader: use designated fabsf() for float values.
Hermet Park [Mon, 12 Oct 2020 11:17:42 +0000 (20:17 +0900)]
svg_loader: use designated fabsf() for float values.

fabs() is designed for double type,
but here it uses float type.

Change-Id: Icdc2d6c6541f029e4e8d406da49895d9169fa046

3 years agocommon shape: fix reset() bug. (#99) submit/tizen/20201012.232328
Hermet Park [Thu, 8 Oct 2020 07:37:39 +0000 (16:37 +0900)]
common shape: fix reset() bug. (#99)

Previous reset() doesn't implemented properly.
It resets only path data.

Now Shape resets all drawing properties.

Change-Id: I9385dec0fc1bf34724c85be133f7598a84339050

3 years agoexamples: add stacking example
Hermet Park [Thu, 8 Oct 2020 06:57:01 +0000 (15:57 +0900)]
examples: add stacking example

This example shows how to restack paints node

Change-Id: I7a6fa0ed52976ff0adcdb9910f762c183b1fee86

3 years agoTravis-CI: Add build options
JunsuChoi [Wed, 7 Oct 2020 11:01:39 +0000 (20:01 +0900)]
Travis-CI: Add build options

enable examples and svg2png tool

Change-Id: Ic89459496fc4be1e6d3f49da1909875484bf0cb1

3 years agocommon canvas: revise clear method.
Hermet Park [Thu, 8 Oct 2020 02:55:50 +0000 (11:55 +0900)]
common canvas: revise clear method.

Canvas::clear() introduces a new argument "free" that deterimes freeing the retained paints.

If free is true, Canvas won't delete the retained paints so that user keep paints valid.

In this scenario, user must have paints pointers, free them manually or push them again to the canvas.

This scenario is useful if user wants to re-organize paints order in the list or reuse them.

Change-Id: Ib8c9125dafed301430eee4cd293434b8d84c0ed7

3 years agoAdd PULL_REQUEST_TEMPLATE.md (#92)
JunsuChoi [Wed, 7 Oct 2020 07:27:50 +0000 (16:27 +0900)]
Add PULL_REQUEST_TEMPLATE.md (#92)

[Template]
- Description :

- Issue Tickets (if any) :

- Tests or Samples (if any) :

- Screen Shots (if any) :

Change-Id: I64e671ce55745db25e6b1b5d50585ca446bba05d

3 years agocommon: code refactoring
Hermet Park [Wed, 7 Oct 2020 07:25:09 +0000 (16:25 +0900)]
common: code refactoring

renamed the enum CompMethod -> CompositionMethod

added FIXME comment
also clean up internals for less code.

Change-Id: I5ac3c85fc7cbf8c37578be7b97455e763a898658

3 years agocommon bezier: code refactoring.
Hermet Park [Wed, 7 Oct 2020 05:33:17 +0000 (14:33 +0900)]
common bezier: code refactoring.

use a zero ranged macro.

Change-Id: I1b94518ef2785755663739d26ad693d596a32d21

3 years agoBezier curve: improvement of the curve splitting algorithm
Mira Grudzinska [Thu, 1 Oct 2020 01:09:36 +0000 (03:09 +0200)]
Bezier curve:  improvement of the curve splitting algorithm

bezAt() function needed to be fixed.
Also the convergence in the while loop was sped up and
the break condition was changed.

Change-Id: I7571d2cbe7fd8a3207cc21e5a15892478877b6bf

3 years agoexamples: add missing files.
Hermet Park [Wed, 7 Oct 2020 05:28:11 +0000 (14:28 +0900)]
examples: add missing files.

Change-Id: Id5da21d2c1981df2022c5581ae8f8c5fd19b7473

3 years agoexamples: removed test prefix
Hermet Park [Wed, 7 Oct 2020 04:57:10 +0000 (13:57 +0900)]
examples: removed test prefix

Change-Id: Ie7a897ebaac59701665a5340db31110599a63b8d

3 years agoexamples: revise Stroke, StrokeLine
Hermet Park [Wed, 7 Oct 2020 04:48:09 +0000 (13:48 +0900)]
examples: revise Stroke, StrokeLine