platform/core/graphics/tizenvg.git
2 years agoexample: gradtransf.svg
Mira Grudzinska [Tue, 26 Oct 2021 00:13:57 +0000 (02:13 +0200)]
example: gradtransf.svg

The file enables to check the correctness of the gradient transformations
and units.
Removed duplicate file.

2 years agoUpdate CONTRIBUTING.md
Hermet Park [Tue, 26 Oct 2021 06:52:24 +0000 (15:52 +0900)]
Update CONTRIBUTING.md

2 years agojpg loader: support static jpeg loader using richgel999
Michal Maciola [Fri, 22 Oct 2021 15:01:14 +0000 (17:01 +0200)]
jpg loader: support static jpeg loader using richgel999

Adds an alternative static jpg loader.

The jpg loader copied the jpeg decoding implementation from this open-source
repo: https://github.com/richgel999/jpeg-compressor
That opensource has the public-domain license, it doesn't have any restriction
of the copy.

note: jpgd.cpp is modified version (changed decompress_jpeg_image_from_stream)
for returning BGRA

2 years agocapi: casting on 'const Paint*' instead of constness removing
Mira Grudzinska [Tue, 26 Oct 2021 00:02:46 +0000 (02:02 +0200)]
capi: casting on 'const Paint*' instead of constness removing

2 years agoexample: modify the tvg example to plot all of the files
Mira Grudzinska [Tue, 26 Oct 2021 00:21:07 +0000 (02:21 +0200)]
example: modify the tvg example to plot all of the files

Change-Id: I63908b03d0276aa78bc8a266c62a89c98f9634c1

2 years agocapi: ++missing const in capis.
Hermet Park [Mon, 25 Oct 2021 10:24:45 +0000 (19:24 +0900)]
capi: ++missing const in capis.

Non-changeable apis should keep the const parameter so that
user knows the api won't change the internal data.

Thanksfully, we didn't release the capis, we can change it.

2 years agotests: added Capis gradient transformation tests
Mira Grudzinska [Fri, 22 Oct 2021 18:28:28 +0000 (20:28 +0200)]
tests: added Capis gradient transformation tests

2 years agocapi: gradient transformation apis added
Mira Grudzinska [Fri, 22 Oct 2021 11:46:06 +0000 (13:46 +0200)]
capi: gradient transformation apis added

2 years agosw_engine: including gradient transformation into gradient preparation
Mira Grudzinska [Fri, 22 Oct 2021 23:50:18 +0000 (01:50 +0200)]
sw_engine: including gradient transformation into gradient preparation

The gradient transformation has to be taken into account as the last
step of the gradient preparation.

2 years agosw_engine: proper linear gradient transformation
Mira Grudzinska [Fri, 17 Sep 2021 22:33:32 +0000 (00:33 +0200)]
sw_engine: proper linear gradient transformation

In the case of any shape transformation, the gradient fill
was not correct.

2 years agosvg_loader SvgLoader: Fix gradient default value
JunsuChoi [Mon, 25 Oct 2021 04:43:20 +0000 (13:43 +0900)]
svg_loader SvgLoader: Fix gradient default value

If isXXPercentage is true, then it is calculated accordingly.

2 years agoexample: Modify the number of svg image examples
JunsuChoi [Mon, 25 Oct 2021 05:33:20 +0000 (14:33 +0900)]
example: Modify the number of svg image examples

Find the hidden example...

2 years agosvg_loader: requested changes applied
Mira Grudzinska [Sat, 23 Oct 2021 00:16:40 +0000 (02:16 +0200)]
svg_loader: requested changes applied

2 years agosvg_loader: gradient handling and recalculation changed
Mira Grudzinska [Sun, 10 Oct 2021 15:14:42 +0000 (17:14 +0200)]
svg_loader: gradient handling and recalculation changed

The need to convert the gradient values occurs only when they are given
as nominal values in the current user coordinate system (userSpaceOnUse).

2 years agocapi: added pointer validation
Mira Grudzinska [Fri, 22 Oct 2021 11:49:44 +0000 (13:49 +0200)]
capi: added pointer validation

2 years agodoc: updated api doc.
Hermet Park [Sat, 23 Oct 2021 02:52:10 +0000 (11:52 +0900)]
doc: updated api doc.

use @retval for the multiple return values.

2 years agosvg loader: converting the image path to the absolute one
Mira Grudzinska [Tue, 21 Sep 2021 01:11:47 +0000 (03:11 +0200)]
svg loader: converting the image path to the absolute one

The href image tag should point to an absolute image path.

2 years agowasm: update the code.
Hermet Park [Fri, 22 Oct 2021 14:21:26 +0000 (23:21 +0900)]
wasm: update the code.

Yes, now we have standard apis for getting class types,
don't need to hack it anymore.

Now, replaced the redundant id() calls with identifier()

2 years agocommon: code refactoring
Hermet Park [Fri, 22 Oct 2021 14:14:23 +0000 (23:14 +0900)]
common: code refactoring

renamed internal module name IteratorModule -> IteratorAccessor

Change-Id: Ic317e5738161e697f3dbfe1bc7b9f1fd653f03cd

2 years agotests: fill transformation tests added
Mira Grudzinska [Fri, 22 Oct 2021 10:33:50 +0000 (12:33 +0200)]
tests: fill transformation tests added

2 years agoapi: not allow the inheritance of the Saver.
Hermet Park [Fri, 22 Oct 2021 10:09:25 +0000 (19:09 +0900)]
api: not allow the inheritance of the Saver.

We missed the final keyword for the Saver,
This inheritance is out of our policy.

It might be break apis but Saver class is just opened,
and we're pretty sure that there is no any extension of this.

I know this is the bad decision, but we have a chance yet,
so we must correct it before further late.

2 years agocommon: replace the id() -> identifier()
Hermet Park [Fri, 22 Oct 2021 07:18:35 +0000 (16:18 +0900)]
common: replace the id() -> identifier()

2 years agotest: API coverage up
Hermet Park [Fri, 22 Oct 2021 06:15:33 +0000 (15:15 +0900)]
test: API coverage up

Added identifier() test cases.

2 years agocommon: Introduce class type identifier apis.
Hermet Park [Fri, 22 Oct 2021 05:39:38 +0000 (14:39 +0900)]
common: Introduce class type identifier apis.

This identifier is useful when user identify the instance type in runtime.

ThorVG basically don't prefer to dynamic_cast() nor typeid(),
it compiles with -fno-rtti option for the optimial size.

Here is an example for the simple usage.

if (paint->identifier() == Shape::identifier())
  auto shape = static_cast<Shape*>(paint);

@Issue: https://github.com/Samsung/thorvg/issues/693

2 years agocommon: Fix typo
신지예 [Fri, 22 Oct 2021 09:11:11 +0000 (18:11 +0900)]
common: Fix typo

Change-Id: Idfd45fc9eb3beb1ad720492e55888db57745aaca

2 years agopng_loader meson: Remove dependency check using find_library()
JunsuChoi [Fri, 22 Oct 2021 05:42:33 +0000 (14:42 +0900)]
png_loader meson: Remove dependency check using find_library()

meson's find_library() throws an error when the package cannot be found.
png static library is added, so it should be passed when package is not found.
Therefore, delete unnecessary find_library.

2 years agocommon: Fix typo
Ji2z [Fri, 22 Oct 2021 03:27:31 +0000 (12:27 +0900)]
common: Fix typo
Fix typo backeneds to backends

Change-Id: Idd13c3972ba2fa0fddc2a1eb706c55a9ea46674f

2 years agoupdated README.md
Hermet Park [Fri, 22 Oct 2021 03:33:07 +0000 (12:33 +0900)]
updated README.md

2 years agoUpdate README.md
Hermet Park [Fri, 22 Oct 2021 03:15:42 +0000 (12:15 +0900)]
Update README.md

2 years agodocs: updated example resource.
Hermet Park [Fri, 22 Oct 2021 03:09:32 +0000 (12:09 +0900)]
docs: updated example resource.

2 years agoloader png: support static png loader
Hermet Park [Fri, 15 Oct 2021 10:55:34 +0000 (19:55 +0900)]
loader png: support static png loader

Copied only necessary decoding functions from the lodepng opensource.
See: https://lodev.org/lodepng/

additional changes:
- disabled crc for the optimal size.
- converted the format bgr -> rgb for our png example.

Still we don't have a concrete idea for the image formats,
We should fix the converting methods between bgra <-> rgba.

@Issue: https://github.com/Samsung/thorvg/issues/594

2 years agosvg_loader: code refactoring.
Hermet Park [Thu, 21 Oct 2021 06:15:07 +0000 (15:15 +0900)]
svg_loader: code refactoring.

cast to proper value type.

2 years agosvg_loader XMLParser: Clean up parameter type
JunsuChoi [Thu, 21 Oct 2021 04:13:23 +0000 (13:13 +0900)]
svg_loader XMLParser: Clean up parameter type

size_t to unsigned int

2 years agosvg_loader XMLParser: Refacotring simpleXmlParse method
JunsuChoi [Wed, 20 Oct 2021 06:40:12 +0000 (15:40 +0900)]
svg_loader XMLParser: Refacotring simpleXmlParse method

1.
Remove macro function. The existing macro function
was doing meaningless nested `return false`.

2.
Extract the logic to find the type as a function.

3.
The SimpleXMLType::Error case is not actually used,
and in case of invalid XML, Do 'return false' immediately.

2 years agoupdated license
Hermet Park [Wed, 20 Oct 2021 13:50:07 +0000 (22:50 +0900)]
updated license

Add missing original copyright texts in the source code.

2 years agoRevert "common: Update license infomation"
Hermet Park [Wed, 20 Oct 2021 13:18:19 +0000 (22:18 +0900)]
Revert "common: Update license infomation"

This reverts commit 4c87f18345d65617a89b04347fffd1df810681fc.

Come to think of it, this is not correct.

Apply the copyright to only files from the original source code.

2 years agocommon: Update license infomation
JunsuChoi [Wed, 20 Oct 2021 07:01:43 +0000 (16:01 +0900)]
common: Update license infomation

Update LICENSE by adding BSD license.

2 years agosvg_loader: fix potential mem corruption in _idFromUrl function
Michal Maciola [Wed, 22 Sep 2021 07:48:54 +0000 (09:48 +0200)]
svg_loader: fix potential mem corruption in _idFromUrl function

This patch fixes some potential memory corruptions in _idFromUrl function
when name (url) is longer than 50 chars or is incorrectly terminated.

2 years agocommon: new api for a grad transformation
Mira Grudzinska [Mon, 11 Oct 2021 13:20:03 +0000 (15:20 +0200)]
common: new api for a grad transformation

The new apii allows to transform the gradient fill.

2 years agocommon: Fix typo
JunsuChoi [Tue, 19 Oct 2021 06:49:50 +0000 (15:49 +0900)]
common: Fix typo

2 years agocapi: example modified
Mira Grudzinska [Sun, 17 Oct 2021 23:39:54 +0000 (01:39 +0200)]
capi: example modified

2 years agosvg_loader util: fix the floating constant truncated to zero issue.
Hermet Park [Wed, 13 Oct 2021 11:15:44 +0000 (20:15 +0900)]
svg_loader util: fix the floating constant truncated to zero issue.

fyi, the minimum value of the float is 1.175494351 E-38

@Issue: https://github.com/Samsung/thorvg/issues/899

2 years agosvg_loader: fixing viewBox clipping
Mira Grudzinska [Thu, 14 Oct 2021 00:12:49 +0000 (02:12 +0200)]
svg_loader: fixing viewBox clipping

For vw=width and vh=height, vx or vy > 0 had no effect. Fixed

2 years ago[Tizen] common: Change dlog tag name for VD profile 31/265331/1
JunsuChoi [Fri, 15 Oct 2021 04:19:03 +0000 (13:19 +0900)]
[Tizen] common: Change dlog tag name for VD profile

Change-Id: Id9c8e235fe86f690b3a9dee2ea0caae954aae0bd

2 years agosvg_loader util: fix missing quot
Michal Maciola [Thu, 14 Oct 2021 15:40:31 +0000 (17:40 +0200)]
svg_loader util: fix missing quot

There was checking for 0 ('\0') that should be checking for '0'

2 years agoUpdate README.md
Hermet Park [Thu, 14 Oct 2021 07:18:46 +0000 (16:18 +0900)]
Update README.md

2 years agoUpdate README.md
Hermet Park [Thu, 14 Oct 2021 07:16:26 +0000 (16:16 +0900)]
Update README.md

2 years agoAdd files via upload
Hermet Park [Thu, 14 Oct 2021 07:16:06 +0000 (16:16 +0900)]
Add files via upload

2 years agoDelete example_tvg.png
Hermet Park [Thu, 14 Oct 2021 07:15:21 +0000 (16:15 +0900)]
Delete example_tvg.png

2 years agoAdd files via upload
Hermet Park [Thu, 14 Oct 2021 07:14:09 +0000 (16:14 +0900)]
Add files via upload

2 years agoDelete example_tvg.png
Hermet Park [Thu, 14 Oct 2021 07:13:34 +0000 (16:13 +0900)]
Delete example_tvg.png

2 years agoUpdate README.md
Hermet Park [Thu, 14 Oct 2021 07:12:36 +0000 (16:12 +0900)]
Update README.md

2 years agoAdd files via upload
Hermet Park [Thu, 14 Oct 2021 07:12:04 +0000 (16:12 +0900)]
Add files via upload

2 years agoDelete example_tvg.png
Hermet Park [Thu, 14 Oct 2021 07:11:37 +0000 (16:11 +0900)]
Delete example_tvg.png

2 years agoinfra: add "all" option for tools.
Hermet Park [Wed, 13 Oct 2021 11:24:21 +0000 (20:24 +0900)]
infra: add "all" option for tools.

just for developer convenience.

2 years agocapi: change defines to enum
Mira Grudzinska [Thu, 14 Oct 2021 00:32:35 +0000 (02:32 +0200)]
capi: change defines to enum

Tvg_Engine enum introduced to replace TVG_ENGINE_SW/GL defs.

2 years agotests: saver capis added into the tests
Mira Grudzinska [Wed, 13 Oct 2021 11:46:41 +0000 (13:46 +0200)]
tests: saver capis added into the tests

2 years agowasm: saveTvg add compress option
Michal Maciola [Wed, 13 Oct 2021 09:12:52 +0000 (11:12 +0200)]
wasm: saveTvg add compress option

2 years agosvg_loader util: just fix a typo
Hermet Park [Wed, 13 Oct 2021 11:12:51 +0000 (20:12 +0900)]
svg_loader util: just fix a typo

exponet -> exponent

2 years agosvg_loader util: code refactoring
Hermet Park [Wed, 13 Oct 2021 10:49:24 +0000 (19:49 +0900)]
svg_loader util: code refactoring

fix for thorvg coding convention.

no logical changes.

2 years agocapi: tvg_swcanvas_set_mempool capi added (#903)
Mira Grudzinska [Wed, 13 Oct 2021 10:31:39 +0000 (12:31 +0200)]
capi: tvg_swcanvas_set_mempool capi added (#903)

* capi: tvg_swcanvas_set_mempool capi added

* tests: tvg_swcanvas_set_mempool added to the tests

2 years agobindings capi: code refactoring
Hermet Park [Wed, 13 Oct 2021 10:02:55 +0000 (19:02 +0900)]
bindings capi: code refactoring

fix for code consistency, no logical changes.

2 years agocapi: saver capis added
Mira Grudzinska [Tue, 12 Oct 2021 14:32:06 +0000 (16:32 +0200)]
capi: saver capis added

2 years agocapi: introduced Tvg_Colorspace enum instead of defs
Mira Grudzinska [Tue, 12 Oct 2021 11:13:48 +0000 (13:13 +0200)]
capi: introduced Tvg_Colorspace enum instead of defs

Used in the tvg_swcanvas_set_target() capi.

2 years agotvg_saver: fix the argument of the sizeof call
Mira Grudzinska [Tue, 12 Oct 2021 19:00:19 +0000 (21:00 +0200)]
tvg_saver: fix the argument of the sizeof call

We got the size of a pointer instead of the size of a whole table.
Fixed now

2 years agosvg_loader: removed unused variable
Mira Grudzinska [Mon, 11 Oct 2021 11:36:53 +0000 (13:36 +0200)]
svg_loader: removed unused variable

The gradient values passed to the scene builder are always given as percentages,
so there is no need to mark/check that.

2 years agotests: tvg_gradient_duplicate added to the capi tests
Mira Grudzinska [Tue, 12 Oct 2021 21:43:38 +0000 (23:43 +0200)]
tests: tvg_gradient_duplicate added to the capi tests

2 years agocapi: tvg_gradient_duplicate() added
Mira Grudzinska [Tue, 12 Oct 2021 12:49:31 +0000 (14:49 +0200)]
capi: tvg_gradient_duplicate() added

2 years agodocs: ++
Mira Grudzinska [Tue, 12 Oct 2021 12:00:05 +0000 (14:00 +0200)]
docs: ++

2 years agodocs: saver module description ++
Mira Grudzinska [Mon, 11 Oct 2021 21:32:06 +0000 (23:32 +0200)]
docs: saver module description ++

2 years agosvg_loader: removed unnecessary casting
Mira Grudzinska [Sun, 10 Oct 2021 14:39:06 +0000 (16:39 +0200)]
svg_loader: removed unnecessary casting

The used scaling factor should be a float - casting it to an int caused
misevaluation of the radial gradient radius

2 years agotools svg2tvg: remove unused header
Hermet Park [Mon, 11 Oct 2021 06:34:42 +0000 (15:34 +0900)]
tools svg2tvg: remove unused header

2 years agosvg2tvg: added missing array lib
Mira Grudzinska [Sun, 10 Oct 2021 22:13:11 +0000 (00:13 +0200)]
svg2tvg: added missing array lib

2 years agoall: fix warnings on MSVC
projectitis [Sat, 9 Oct 2021 02:33:45 +0000 (15:33 +1300)]
all:  fix warnings on MSVC

* Explicit casts to suppress warnings
* Fixed compiler warnings

2 years agowasm: fix compilation
Michal Maciola [Fri, 8 Oct 2021 14:55:20 +0000 (16:55 +0200)]
wasm: fix compilation

After 'all: fixing clang warnings' (e7c3a91) there was a problem with wasm
compilation, as strncpy and strdup.
Disable define is __EMSCRIPTEN__.

2 years agoexample: added image-embeded-jpeg.svg (#890)
Michal Maciola [Fri, 8 Oct 2021 15:38:18 +0000 (17:38 +0200)]
example: added image-embeded-jpeg.svg (#890)

2 years agoUpdate CONTRIBUTING.md
Hermet Park [Thu, 7 Oct 2021 10:59:33 +0000 (19:59 +0900)]
Update CONTRIBUTING.md

2 years agoinfra: renamed build badge names.
Hermet Park [Thu, 7 Oct 2021 06:24:16 +0000 (15:24 +0900)]
infra: renamed build badge names.

2 years agotest: ++safety.
Hermet Park [Thu, 7 Oct 2021 05:59:54 +0000 (14:59 +0900)]
test: ++safety.

add null handlings just in case.

2 years agotests: added tests for size and composite C apis
Mira Grudzinska [Tue, 5 Oct 2021 13:20:19 +0000 (15:20 +0200)]
tests: added tests for size and composite C apis

2 years agodocs: TVG logo svg file added to the docs directory
Mira Grudzinska [Thu, 30 Sep 2021 22:06:12 +0000 (00:06 +0200)]
docs: TVG logo svg file added to the docs directory

The logo path is changed in the Doxygen file.

2 years agoinfra : add window build (with loaders)
JunsuChoi [Thu, 7 Oct 2021 03:55:13 +0000 (12:55 +0900)]
infra : add window build (with loaders)

2 years agotests: fix stack overflow error in testPicture for windows
projectitis [Thu, 7 Oct 2021 05:51:07 +0000 (18:51 +1300)]
tests: fix stack overflow error in testPicture for windows

2 years agoall: fix compiler warnings
Mira Grudzinska [Fri, 24 Sep 2021 11:32:53 +0000 (13:32 +0200)]
all: fix compiler warnings

pow->powf and sqrt->sqrtf

2 years agoexamples, tests: replace backslashes with forward slashes for portability (#880)
projectitis [Wed, 6 Oct 2021 13:18:56 +0000 (02:18 +1300)]
examples, tests: replace backslashes with forward slashes for portability (#880)

* Replace backslashes with forward slashes

* Downgrade to older meson syntax

2 years agotest capi: update tvg_paint_get_bounds() utc.
Hermet Park [Fri, 1 Oct 2021 10:31:04 +0000 (19:31 +0900)]
test capi: update tvg_paint_get_bounds() utc.

The api has been changed by 060564cc938f3773467b56e66ccee0562b5192e3
update it according its change.

2 years agocapi: replaced bounds() api with the latest.
Hermet Park [Fri, 1 Oct 2021 10:15:39 +0000 (19:15 +0900)]
capi: replaced bounds() api with the latest.

The next api of c++ version has been deprecated

Tvg_Result tvg_paint_get_bounds(const Tvg_Paint* paint, float* x, float* y, float* w, float* h);

instead, we introduce the next one under the beta.

Tvg_Result tvg_paint_get_bounds(const Tvg_Paint* paint, float* x, float* y, float* w, float* h, bool transformed);

2 years agodocs: c and c++ apis docs improved
Mira Grudzinska [Mon, 4 Oct 2021 00:12:37 +0000 (02:12 +0200)]
docs: c and c++ apis docs improved

2 years agoinfra: Change test name
JunsuChoi [Wed, 6 Oct 2021 07:07:59 +0000 (16:07 +0900)]
infra: Change test name

Build Test -> Build(Linux)

2 years agoinfra: add all option to enable all loader formats.
Hermet Park [Wed, 6 Oct 2021 02:13:49 +0000 (11:13 +0900)]
infra: add all option to enable all loader formats.

just for developer convenience (including me)

ex) $meson . build -Dloaders="all" ...

2 years agoall: fixing clang warnings
Mira Grudzinska [Sun, 3 Oct 2021 12:25:14 +0000 (14:25 +0200)]
all: fixing clang warnings

fopen->fopen_s, strdup -> _strdup, strncpy -> strncpy_s
__declspec(dllexport) -> __attribute__ ((visibility ("default")))

2 years agotests: ++LOC svg loader, tvg saver
Mira Grudzinska [Tue, 5 Oct 2021 14:36:41 +0000 (16:36 +0200)]
tests: ++LOC svg loader, tvg saver

2 years agoUpdate authors
Projectitis [Wed, 6 Oct 2021 00:16:39 +0000 (13:16 +1300)]
Update authors

2 years agoReadme: Add window build test badge
JunsuChoi [Wed, 6 Oct 2021 01:47:21 +0000 (10:47 +0900)]
Readme: Add window build test badge

2 years agoinfra: Add window build test in CI
JunsuChoi [Tue, 28 Sep 2021 02:07:58 +0000 (11:07 +0900)]
infra: Add window build test in CI

Add build test for normal build

2 years agoRevert "sw_engine: border cases for gradients"
Mira Grudzinska [Tue, 5 Oct 2021 23:08:34 +0000 (01:08 +0200)]
Revert "sw_engine: border cases for gradients"

This reverts commit 284298445b900bbba09beb4673e9d055584e1f81.

2 years agosw_engine: border cases for gradients
Mira Grudzinska [Mon, 4 Oct 2021 23:17:30 +0000 (01:17 +0200)]
sw_engine: border cases for gradients

According to the svg standard, in a case when 'x1==x2 and y1==y2'
for a linear gradient or when 'r==0' for a radial gradient, the area
should be painted as a single color - the last gradient stop color.

2 years agodocs: ++ docs of the load apis
Mira Grudzinska [Mon, 4 Oct 2021 13:07:44 +0000 (15:07 +0200)]
docs: ++ docs of the load apis

2 years agoloaders: prepare for static jpg/png loaders.
Hermet Park [Fri, 1 Oct 2021 11:23:16 +0000 (20:23 +0900)]
loaders: prepare for static jpg/png loaders.

This patch has 2 purposes,

1. revise the loaders infrastructure to support both static/external linking loaders.
2. add a template for static jpg/png loaders after external jpg/png.

Our default loaders prefer static linking, external loaders are only available
when dependent libraries on the build system are found.

You might wonder why we have the external loaders together,
they might be faster than static loaders since the popular libraries are likely to be well maintained,
fine-grained optimized.

Thus in this patch, meson tries to apply the external loaders first
then see if the dependencies were found or not,
if it's failed, it turns to the default static loaders.

Next this patch, we need the contribution for actual static jpg/png loaders implementation.

@Issue: https://github.com/Samsung/thorvg/issues/594

2 years agosvg_loader: proper handling width/height units (#851)
Mira Grudzinska [Tue, 5 Oct 2021 10:04:40 +0000 (12:04 +0200)]
svg_loader: proper handling width/height units (#851)

Units of the svg width and height tags were incorrectly assigned.
Percentage values will be handled separately.