platform/upstream/efl.git
4 years agoelm : fix return of gengrid item swap anim to prevent animation memory leak. 64/240164/1
SangHyeon Jade Lee [Tue, 4 Aug 2020 05:18:01 +0000 (14:18 +0900)]
elm : fix return of gengrid item swap anim to prevent animation memory leak.

Summary:
this is memory leak fix on gengrid item move.
when animation reached 1.0, it finish all animation and returns EINA_FALSE to delete current animation.

Test Plan: N/A

Reviewers: eagleeye

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D12083

Change-Id: I564ca939b96ab5fbe0cbc8784f32aab533f644ec

4 years agoedje_embryo: fix null pointer dereference in ALLOC_COPY_DESC
Jaehyun Cho [Mon, 3 Aug 2020 11:22:08 +0000 (20:22 +0900)]
edje_embryo: fix null pointer dereference in ALLOC_COPY_DESC

To fix null pointer dereference in ALLOC_COPY_DESC, allocated variable
"new" is checked.

4 years agoedje_embryo: fix to use parameter of macro ALLOC_COPY_DESC
Jaehyun Cho [Mon, 3 Aug 2020 10:22:27 +0000 (19:22 +0900)]
edje_embryo: fix to use parameter of macro ALLOC_COPY_DESC

The parameter "To" of macro ALLOC_COPY_DESC is not used.
To use the parameter "To", "d" is replaced to "To".

4 years agoevas_gl_core: fix memory leak of EVGL_Resource
Jaehyun Cho [Mon, 3 Aug 2020 06:54:35 +0000 (15:54 +0900)]
evas_gl_core: fix memory leak of EVGL_Resource

If eng_data is NULL and rsc is not NULL in _internal_resources_destroy,
then the allocated EVGL_Resource rsc is not free.

To resolve this memory leak, eng_data and rsc are checked separately.

4 years agoefl ui image - fix scal to fill - broken with non-rect src images accepted/tizen/unified/20200803.122206 submit/tizen/20200802.221805
Carsten Haitzler (Rasterman) [Sun, 2 Aug 2020 15:26:09 +0000 (16:26 +0100)]
efl ui image - fix scal to fill - broken with non-rect src images

@fix

4 years agoelua: add searchpath impl for 5.1 compat
Daniel Kolesa [Fri, 31 Jul 2020 16:54:04 +0000 (18:54 +0200)]
elua: add searchpath impl for 5.1 compat

4 years agoelua: fix elua_register with 5.1
Daniel Kolesa [Fri, 31 Jul 2020 16:37:03 +0000 (18:37 +0200)]
elua: fix elua_register with 5.1

4 years agoelua: do not link to cffi, load the module instead
Daniel Kolesa [Fri, 31 Jul 2020 16:21:15 +0000 (18:21 +0200)]
elua: do not link to cffi, load the module instead

4 years agoelm_config: add slider to configure tooltip_delay
Boris Faure [Fri, 31 Jul 2020 10:59:01 +0000 (12:59 +0200)]
elm_config: add slider to configure tooltip_delay

reviewers_: #reviewers, raster, cedric, netstar, bu5hm4n

Reviewed By: bu5hm4n

Subscribers: bu5hm4n, cedric, #reviewers, #committers

Tags: #efl

Reviewed-by: Marcel Hollerbach <mail@marcel-hollerbach.de>
Differential Revision: https://phab.enlightenment.org/D12060

4 years agoevas_textblock: remove logically dead code
Yeongjong Lee [Fri, 31 Jul 2020 06:44:44 +0000 (06:44 +0000)]
evas_textblock: remove logically dead code

Since `c->fmt` is allocated and dereferenced in `_layoutformat_push`, if
`c->fmt` is NULL, this causes a crash before checking for NULL.

Reviewed-by: Marcel Hollerbach <mail@marcel-hollerbach.de>
Differential Revision: https://phab.enlightenment.org/D12076

4 years agoecore_ipc: remove duplicated condition
Yeongjong Lee [Fri, 31 Jul 2020 07:09:40 +0000 (07:09 +0000)]
ecore_ipc: remove duplicated condition

The same condition is used above.

Reviewed-by: Stefan Schmidt <stefan@datenfreihafen.org>
Differential Revision: https://phab.enlightenment.org/D12077

4 years agoeina vpath - fix windows ~username handling to only error when used
Carsten Haitzler (Rasterman) [Thu, 30 Jul 2020 10:13:37 +0000 (11:13 +0100)]
eina vpath - fix windows ~username handling to only error when used

we would always rrturn 0 on windows ... missing  {} in block. fix that.

@fix

4 years agoevas_textblock : return correct value for gfx_filter_get
AbdullehGhujeh [Tue, 28 Jul 2020 13:38:33 +0000 (13:38 +0000)]
evas_textblock : return correct value for gfx_filter_get

return the same variable set with gfx_filter_set.
added test for it.

Reviewed-by: Ali Alzyod <ali198724@gmail.com>
Reviewed-by: Stefan Schmidt <stefan@datenfreihafen.org>
Differential Revision: https://phab.enlightenment.org/D12071

4 years agoevas_textblock : Remove unneeded code
AbdullehGhujeh [Tue, 28 Jul 2020 11:24:55 +0000 (11:24 +0000)]
evas_textblock : Remove unneeded code

Duplicated code removed

Reviewed-by: Ali Alzyod <ali198724@gmail.com>
Reviewed-by: Stefan Schmidt <stefan@datenfreihafen.org>
Differential Revision: https://phab.enlightenment.org/D12070

4 years agoevil: Remove unnecessary delay for evil startup
Lucas [Tue, 28 Jul 2020 20:26:35 +0000 (20:26 +0000)]
evil: Remove unnecessary delay for evil startup

Apparently there were two loops intended for an older (and dropped
off) implementation of `gettimeofday`. This patch simplifies the code removing
these loops and significantly lowering evil startup.

Without this patch `ecore-suite`, `efl-app` and `evas-suite` gets timeout in
Windows:
```
25/29 ecore-suite               TIMEOUT        30.12s
26/29 efl-app                   TIMEOUT        30.14s
...
29/29 evas-suite                TIMEOUT        60.07s
```

Reviewed-by: Vincent Torri <vincent.torri@gmail.com>
Reviewed-by: Stefan Schmidt <stefan@datenfreihafen.org>
Differential Revision: https://phab.enlightenment.org/D12064

4 years agotests: fix eio tests accepted/tizen/unified/20200729.165613 submit/tizen/20200728.225405
Marcel Hollerbach [Tue, 28 Jul 2020 07:23:11 +0000 (09:23 +0200)]
tests: fix eio tests

there are tests that init & shutdown efl_object in the same test, which
is since to switch to const _CLASS_GET dangerously wrong.

I checked for more cases but only found cases where no _CLASS_GET
macros where used.

Reviewed-by: Stefan Schmidt <stefan@datenfreihafen.org>
Differential Revision: https://phab.enlightenment.org/D12069

4 years agoevas - render - dont crash is private data is null
Carsten Haitzler (Rasterman) [Mon, 27 Jul 2020 21:45:36 +0000 (22:45 +0100)]
evas - render - dont crash is private data is null

@fix

4 years agoevas: remove unused define
Ali Alzyod [Mon, 27 Jul 2020 07:40:51 +0000 (07:40 +0000)]
evas: remove unused define

Reviewed-by: Stefan Schmidt <stefan@datenfreihafen.org>
Differential Revision: https://phab.enlightenment.org/D12066

4 years agoelementry_test: fix allocation size
Ali Alzyod [Sun, 26 Jul 2020 08:51:09 +0000 (08:51 +0000)]
elementry_test: fix allocation size

This fix Coverty Issue CID: 1430579

Reviewed-by: Vincent Torri <vincent.torri@gmail.com>
Reviewed-by: Stefan Schmidt <stefan@datenfreihafen.org>
Differential Revision: https://phab.enlightenment.org/D12065

4 years agoci: do not build tests on ci
Marcel Hollerbach [Mon, 27 Jul 2020 11:49:20 +0000 (13:49 +0200)]
ci: do not build tests on ci

we need to do the same on any platform that upgrades check from 0.15.0 to
0.15.1. For now this is only with macos

Reviewed-by: Stefan Schmidt <stefan@datenfreihafen.org>
Differential Revision: https://phab.enlightenment.org/D12068

4 years agobuild: warn of faulty check version
Marcel Hollerbach [Mon, 27 Jul 2020 10:24:57 +0000 (12:24 +0200)]
build: warn of faulty check version

Reviewed-by: Stefan Schmidt <stefan@datenfreihafen.org>
Differential Revision: https://phab.enlightenment.org/D12067

4 years agoefreetd - add more logging for what efreetd says to clients
Carsten Haitzler (Rasterman) [Fri, 24 Jul 2020 22:22:47 +0000 (23:22 +0100)]
efreetd - add more logging for what efreetd says to clients

4 years agoefreetd - log the cache runs and when they launch, show data, exit
Carsten Haitzler (Rasterman) [Fri, 24 Jul 2020 22:02:16 +0000 (23:02 +0100)]
efreetd - log the cache runs and when they launch, show data, exit

4 years agoefreetd - dont confuse log file file handle and log math func
Carsten Haitzler (Rasterman) [Fri, 24 Jul 2020 20:22:33 +0000 (21:22 +0100)]
efreetd - dont confuse log file file handle and log math func

better not to use the same symbol...

4 years agoevas: font glyphs texture garbage collector
Ali Alzyod [Fri, 24 Jul 2020 09:36:27 +0000 (10:36 +0100)]
evas: font glyphs texture garbage collector

Summary:
Introduce two public APIS
```

/**
 * Set the limit in bytes for memory allocated by font glyphs in evas.
 * @param[in] bytes cache size in bytes, pass negative value to ignore the limit.
 * @param[in] options for caching, pass 0x1 to set the texture cache (in case of accelerated rendering).
 *
 * @since 1.24
 */
EAPI void                    evas_font_data_cache_set(signed long long int byte, int options);

/**
 * @}
 */

/**
 * Get the limit in bytes for memory allocated by font glyphs in evas.
 * @param[in] options for caching, pass 0x1 to get the texture cache (in case of accelerated rendering).
 * @return Returns font allocated memory cache limit, if value is negative this means no limit.
 * @since 1.24
 */
EAPI signed long long int    evas_font_data_cache_get(int options);
```

Test Plan:
elementary_test => Text Memory
You need a tool to observe Video memory allocation.
1- If you have detected Graphics card then use **radiontop** or  **nvidia-smi** ).
2- If you have Integrated Graphics card, then you can detect memory allocation on RAM use.

----------------------------------------------

this example allows only 50 MByte Video memory texture allocated by font glyphs
```

typedef struct _APP
{
  Evas_Object *tb1;
  Evas_Object *btnLoad;
} APP;

char *text = "<align=center><color=#4DE0FFFF underline=on underline_color=#4DE0FFFF><a href='tel:1234567890'>1234567890</a></color>๐Ÿ˜€๐Ÿ˜๐Ÿ˜‚๐Ÿคฃ๐Ÿ˜ƒ๐Ÿ˜„๐Ÿ˜…๐Ÿ˜†๐Ÿ˜‰๐Ÿ˜Š๐Ÿ˜‹๐Ÿ˜Ž๐Ÿ˜๐Ÿ˜˜๐Ÿ˜—๐Ÿ˜™๐Ÿ˜šโ˜บ๐Ÿ™‚๐Ÿค—๐Ÿค”๐Ÿ˜๐Ÿ˜‘๐Ÿ˜ถ๐Ÿ™„๐Ÿ˜๐Ÿ˜ฃ๐Ÿ˜ฅ๐Ÿ˜ฎ๐Ÿค๐Ÿ˜ฏ๐Ÿ˜ช๐Ÿ˜ซ๐Ÿ˜ด๐Ÿ˜Œ๐Ÿค“๐Ÿ˜›๐Ÿ˜œ๐Ÿ˜๐Ÿคค๐Ÿ˜’๐Ÿ˜“๐Ÿ˜”๐Ÿ˜•๐Ÿ™ƒ๐Ÿค‘๐Ÿ˜ฒโ˜น๐Ÿ™๐Ÿ˜–๐Ÿ˜ž๐Ÿ˜Ÿ๐Ÿ˜ค๐Ÿ˜ข๐Ÿ˜ญ๐Ÿ˜ฆ๐Ÿ˜ง๐Ÿ˜จ๐Ÿ˜ฉ๐Ÿ˜ฌ๐Ÿ˜ฐ๐Ÿ˜ฑ๐Ÿ˜ณ๐Ÿ˜ต๐Ÿ˜ก๐Ÿ˜ ๐Ÿ˜‡๐Ÿค ๐Ÿคก๐Ÿคฅ๐Ÿ˜ท๐Ÿค’๐Ÿค•๐Ÿคข๐Ÿคงโ˜ป๐Ÿ˜ˆ๐Ÿ‘ฟ๐Ÿ‘น๐Ÿ‘บ๐Ÿ’€โ˜ ๐Ÿ‘ป๐Ÿ‘ฝ๐Ÿ‘พ๐Ÿค–๐Ÿ’ฉ๐Ÿ˜บ๐Ÿ˜ธ๐Ÿ˜น๐Ÿ˜ป๐Ÿ˜ผ๐Ÿ˜ฝ๐Ÿ™€๐Ÿ˜ฟ๐Ÿ˜พ๐Ÿ™ˆ๐Ÿ™‰๐Ÿ™Š๐Ÿ‘ฆ๐Ÿ‘ง๐Ÿ‘จ๐Ÿ‘ฉ๐Ÿ‘ต๐Ÿ‘ถ๐Ÿ‘ผ๐Ÿ‘จโ€โš•๏ธ๐Ÿ‘ฉโ€โš•๏ธ๐Ÿ‘จโ€๐ŸŽ“๐Ÿ‘ฉโ€๐ŸŽ“๐Ÿ‘จโ€๐Ÿซ๐Ÿ‘ฉโ€๐Ÿซ๐Ÿ‘จโ€โš–๐Ÿ‘ฉโ€โš–๐Ÿ‘จโ€๐ŸŒพ๐Ÿ‘ฉโ€๐ŸŒพ๐Ÿ‘จโ€๐Ÿณ๐Ÿ‘ฉโ€๐Ÿณ๐Ÿ‘จโ€๐Ÿ”ง๐Ÿ‘ฉโ€๐Ÿ”ง๐Ÿ‘จโ€๐Ÿญ๐Ÿ‘ฉโ€๐Ÿญ๐Ÿ‘จโ€๐Ÿ’ผ๐Ÿ‘ฉโ€๐Ÿ’ผ๐Ÿ‘จโ€๐Ÿ”ฌ๐Ÿ‘ฉโ€๐Ÿ”ฌ๐Ÿ‘จโ€๐Ÿ’ป๐Ÿ‘ฉโ€๐Ÿ’ป๐Ÿ‘จโ€๐ŸŽค๐Ÿ‘ฉโ€๐ŸŽค๐Ÿ‘จโ€๐ŸŽจ๐Ÿ‘ฉโ€๐ŸŽจ๐Ÿ‘จโ€โœˆ๏ธ๐Ÿ‘ฉโ€โœˆ๏ธ๐Ÿ‘จโ€๐Ÿš€๐Ÿ‘ฉโ€๐Ÿš€๐Ÿ‘จโ€๐Ÿš’๐Ÿ‘ฉโ€๐Ÿš’๐Ÿ‘ฎโ€โ™‚๏ธ๐Ÿ‘ฎโ€โ™€๏ธ๐Ÿ•ต๏ธโ€โ™‚๏ธ๐Ÿ•ต๏ธโ€โ™€๏ธ๐Ÿ’‚โ€โ™‚๏ธ๐Ÿ’‚โ€โ™€๏ธ๐Ÿ‘ทโ€โ™‚๏ธ๐Ÿ‘ทโ€โ™€๏ธ๐Ÿ‘ณโ€โ™‚๏ธ๐Ÿ‘ณโ€โ™€๏ธ๐Ÿ‘ฑโ€โ™‚๏ธ๐Ÿ‘ฑโ€โ™€๏ธ๐ŸŽ…๐Ÿคถ๐Ÿ‘ธ๐Ÿคด๐Ÿ‘ฐ๐Ÿคต๐Ÿคฐ๐Ÿ‘ฒ๐Ÿ™โ€โ™‚๏ธ๐Ÿ™โ€โ™€๏ธ๐Ÿ™Žโ€โ™‚๏ธ๐Ÿ™Žโ€โ™€๏ธ๐Ÿ™…โ€โ™‚๏ธ๐Ÿ™…โ€โ™€๏ธ๐Ÿ™†โ€โ™‚๏ธ๐Ÿ™†โ€โ™€๏ธ๐Ÿ’โ€โ™‚๏ธ๐Ÿ’โ€โ™€๏ธ๐Ÿ™‹โ€โ™‚๏ธ๐Ÿ™‹โ€โ™€๏ธ๐Ÿ™‡โ€โ™‚๏ธ๐Ÿ™‡โ€โ™€๏ธ๐Ÿคฆโ€โ™‚๏ธ๐Ÿคฆโ€โ™€๏ธ๐Ÿคทโ€โ™‚๏ธ๐Ÿคทโ€โ™€๏ธ๐Ÿ’†โ€โ™‚๏ธ๐Ÿ’†โ€โ™€๏ธ๐Ÿ’‡โ€โ™‚๏ธ๐Ÿ’‡โ€โ™€๏ธ๐Ÿšถโ€โ™‚๏ธ๐Ÿšถโ€โ™€๏ธ๐Ÿƒโ€โ™‚๏ธ๐Ÿƒโ€โ™€๏ธ๐Ÿ’ƒ๐Ÿ•บ๐Ÿ‘ฏโ€โ™‚๏ธ๐Ÿ‘ฏโ€โ™€๏ธ๐Ÿ•ด๐Ÿ—ฃ๐Ÿ‘ค๐Ÿ‘ฅ๐Ÿ‘ซ๐Ÿ‘ฌ๐Ÿ‘ญ๐Ÿ’๐Ÿ’‘๐Ÿ‘ช๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ง๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง๐Ÿ‘จโ€๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘ง๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง๐Ÿ‘ฉโ€๐Ÿ‘ฆ๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ๐Ÿ‘ฉโ€๐Ÿ‘ง๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง๐Ÿ’ช๐Ÿคณ๐Ÿ‘ˆ๐Ÿ‘‰โ˜๏ธ๐Ÿ‘†๐Ÿ–•๐Ÿ‘‡โœŒ๐Ÿคž๐Ÿ––๐Ÿค˜๐Ÿ‘Š๐Ÿ–โœ‹๐Ÿ‘Œ๐Ÿ‘๐Ÿ‘ŽโœŠ๐Ÿ‘Š๐Ÿค›๐Ÿคœ๐Ÿคš๐Ÿ‘‹๐Ÿ‘โœ๐Ÿ‘๐Ÿ™Œ๐Ÿ™๐Ÿค๐Ÿ’…๐Ÿ‘‚๐Ÿ‘ƒ๐Ÿ‘ฃ๐Ÿ‘€๐Ÿ‘๐Ÿ‘…๐Ÿ‘„๐Ÿ’‹๐Ÿ’˜โค๐Ÿ’“๐Ÿ’”๐Ÿ’•๐Ÿ’–๐Ÿ’—๐Ÿ’™๐Ÿ’š๐Ÿ’›๐Ÿ’œ๐Ÿ–ค๐Ÿ’๐Ÿ’ž๐Ÿ’Ÿโฃ๐Ÿ’Œ๐Ÿ’ค๐Ÿ’ข๐Ÿ’ฃ๐Ÿ’ฅ๐Ÿ’ฆ๐Ÿ’จ๐Ÿ’ซ๐Ÿ’ฌ๐Ÿ—จ๐Ÿ—ฏ๐Ÿ’ญ๐Ÿ•ณ๐Ÿ‘“๐Ÿ•ถ๐Ÿ‘”๐Ÿ‘•๐Ÿ‘–๐Ÿ‘—๐Ÿ‘˜๐Ÿ‘™๐Ÿ‘š๐Ÿ‘›๐Ÿ‘œ๐Ÿ‘๐Ÿ›๐ŸŽ’๐Ÿ‘ž๐Ÿ‘Ÿ๐Ÿ‘ ๐Ÿ‘ก๐Ÿ‘ข๐Ÿ‘‘๐Ÿ‘’๐ŸŽฉ๐ŸŽ“โ›‘๐Ÿ“ฟ๐Ÿ’„๐Ÿ’๐Ÿ’Ž๐Ÿต๐Ÿ’๐Ÿฆ๐Ÿถ๐Ÿ•๐Ÿฉ๐Ÿบ๐ŸฆŠ๐Ÿฑ๐Ÿˆ๐Ÿฆ๐Ÿฏ๐Ÿ…๐Ÿ†๐Ÿด๐ŸŽ๐ŸฆŒ๐Ÿฆ„๐Ÿฎ๐Ÿ‚๐Ÿƒ๐Ÿ„๐Ÿท๐Ÿ–๐Ÿ—๐Ÿฝ๐Ÿ๐Ÿ‘๐Ÿ๐Ÿช๐Ÿซ๐Ÿ˜๐Ÿฆ๐Ÿญ๐Ÿ๐Ÿ€๐Ÿน๐Ÿฐ๐Ÿ‡๐Ÿฟ๐Ÿฆ‡๐Ÿป๐Ÿจ๐Ÿผ๐Ÿพ๐Ÿฆƒ๐Ÿ”๐Ÿ“๐Ÿฃ๐Ÿค๐Ÿฅ๐Ÿฆ๐Ÿง๐Ÿ•Š๐Ÿฆ…๐Ÿฆ†๐Ÿฆ‰๐Ÿธ๐ŸŠ๐Ÿข๐ŸฆŽ๐Ÿ๐Ÿฒ๐Ÿ‰๐Ÿณ๐Ÿ‹๐Ÿฌ๐ŸŸ๐Ÿ ๐Ÿก๐Ÿฆˆ๐Ÿ™๐Ÿš๐Ÿฆ€๐Ÿฆ๐Ÿฆ‘๐Ÿฆ‹๐ŸŒ๐Ÿ›๐Ÿœ๐Ÿ๐Ÿž๐Ÿ•ท๐Ÿ•ธ๐Ÿฆ‚๐Ÿ’๐ŸŒธ๐Ÿ’ฎ๐Ÿต๐ŸŒน๐Ÿฅ€๐ŸŒบ๐ŸŒป๐ŸŒผ๐ŸŒทโš˜๐ŸŒฑ๐ŸŒฒ๐ŸŒณ๐ŸŒด๐ŸŒต๐ŸŒพ๐ŸŒฟโ˜˜๐Ÿ€๐Ÿ๐Ÿ‚๐Ÿƒ๐Ÿ‡๐Ÿˆ๐Ÿ‰๐ŸŠ๐Ÿ‹๐ŸŒ๐Ÿ๐ŸŽ๐Ÿ๐Ÿ๐Ÿ‘๐Ÿ’๐Ÿ“๐Ÿ…๐Ÿฅ๐Ÿฅ‘๐Ÿ†๐Ÿฅ”๐Ÿฅ•๐ŸŒฝ๐ŸŒถ๐Ÿฅ’๐Ÿ„๐Ÿฅœ๐ŸŒฐ๐Ÿž๐Ÿฅ๐Ÿฅ–๐Ÿฅž๐Ÿง€๐Ÿ–๐Ÿ—๐Ÿฅ“๐Ÿ”๐ŸŸ๐Ÿ•๐ŸŒญ๐ŸŒฎ๐ŸŒฏ๐Ÿฅ™๐Ÿฅš๐Ÿณ๐Ÿฅ˜๐Ÿฒ๐Ÿฅ—๐Ÿฟ๐Ÿฑ๐Ÿ˜๐Ÿ™๐Ÿš๐Ÿ›๐Ÿœ๐Ÿ๐Ÿ ๐Ÿข๐Ÿฃ๐Ÿค๐Ÿฅ๐Ÿก๐Ÿฆ๐Ÿง๐Ÿจ๐Ÿฉ๐Ÿช๐ŸŽ‚๐Ÿฐ๐Ÿซ๐Ÿฌ๐Ÿญ๐Ÿฎ๐Ÿฏ๐Ÿผ๐Ÿฅ›โ˜•๐Ÿต๐Ÿถ๐Ÿพ๐Ÿท๐Ÿธ๐Ÿน๐Ÿบ๐Ÿป๐Ÿฅ‚๐Ÿฝ๐Ÿด๐Ÿฅ„๐Ÿ”ช๐Ÿบ๐ŸŽƒ๐ŸŽ„๐ŸŽ†๐ŸŽ‡โœจ๐ŸŽˆ๐ŸŽ‰๐ŸŽŠ๐ŸŽ‹๐ŸŽ๐ŸŽŽ๐ŸŽ๐ŸŽ๐ŸŽ‘๐ŸŽ€๐ŸŽ๐ŸŽ—๐ŸŽŸ๐ŸŽซ๐ŸŽ–๐Ÿ†๐Ÿ…๐Ÿฅ‡๐Ÿฅˆ๐Ÿฅ‰โšฝ๏ธโšพ๏ธ๐Ÿ€๐Ÿ๐Ÿˆ๐Ÿ‰๐ŸŽพ๐ŸŽฑ๐ŸŽณ๐Ÿ๐Ÿ‘๐Ÿ’๐Ÿ“๐Ÿธ๐ŸฅŠ๐Ÿฅ‹๐Ÿฅ…๐ŸŽฏโ›ณ๐ŸŒ๏ธโ€โ™‚๏ธ๐ŸŒ๏ธโ€โ™€๏ธโ›ธ๐ŸŽฃ๐ŸŽฝ๐ŸŽฟโ›ท๐Ÿ‚๐Ÿ„โ€โ™‚๏ธ๐Ÿ„โ€โ™€๏ธ๐Ÿ‡๐ŸŠโ€โ™‚๏ธ๐ŸŠโ€โ™€๏ธโ›น๏ธโ€โ™‚๏ธโ›น๏ธโ€โ™€๏ธ๐Ÿ‹๏ธโ€โ™‚๏ธ๐Ÿ‹๏ธโ€โ™€๏ธ๐Ÿšดโ€โ™‚๏ธ๐Ÿšดโ€โ™€๏ธ๐Ÿšตโ€โ™‚๏ธ๐Ÿšตโ€โ™€๏ธ๐ŸŽ๐Ÿ๐Ÿคธโ€โ™‚๏ธ๐Ÿคธโ€โ™€๏ธ๐Ÿคผโ€โ™‚๏ธ๐Ÿคผโ€โ™€๏ธ๐Ÿคฝโ€โ™‚๏ธ๐Ÿคฝโ€โ™€๏ธ๐Ÿคพโ€โ™‚๏ธ๐Ÿคพโ€โ™€๏ธ๐Ÿคบ๐Ÿคนโ€โ™‚๏ธ๐Ÿคนโ€โ™€๏ธ๐ŸŽฎ๐Ÿ•น๐ŸŽฒโ™ ๏ธโ™ฅ๏ธโ™ฆ๏ธโ™ฃ๏ธ๐Ÿƒ๐Ÿ€„๐ŸŽด๐ŸŒ๐ŸŒŽ๐ŸŒ๐ŸŒ๐Ÿ—บ๐Ÿ”โ›ฐ๐ŸŒ‹๐Ÿ—ป๐Ÿ•๐Ÿ–๐Ÿœ๐Ÿ๐Ÿž๐ŸŸ๐Ÿ›๐Ÿ—๐Ÿ˜๐Ÿ™๐Ÿš๐Ÿ ๐Ÿก๐Ÿข๐Ÿฃ๐Ÿค๐Ÿฅ๐Ÿฆ๐Ÿจ๐Ÿฉ๐Ÿช๐Ÿซ๐Ÿฌ๐Ÿญ๐Ÿฏ๐Ÿฐ๐Ÿ’’๐Ÿ—ผ๐Ÿ—ฝโ›ช๐Ÿ•Œ๐Ÿ•โ›ฉ๐Ÿ•‹โ›ฒโ›บ๐ŸŒ๐ŸŒƒ๐ŸŒ„๐ŸŒ…๐ŸŒ†๐ŸŒ‡๐ŸŒ‰โ›ผโ™จ๏ธ๐ŸŒŒ๐ŸŽ ๐ŸŽก๐ŸŽข๐Ÿ’ˆ๐ŸŽช๐ŸŽญ๐Ÿ–ผ๐ŸŽจ๐ŸŽฐ๐Ÿš‚๐Ÿšƒ๐Ÿš„๐Ÿš…๐Ÿš†๐Ÿš‡๐Ÿšˆ๐Ÿš‰๐ŸšŠ๐Ÿš๐Ÿšž๐Ÿš‹๐ŸšŒ๐Ÿš๐ŸšŽ๐Ÿš๐Ÿš‘๐Ÿš’๐Ÿš“๐Ÿš”๐Ÿš•๐Ÿš–๐Ÿš—๐Ÿš˜๐Ÿš™๐Ÿšš๐Ÿš›โ›Ÿ๐Ÿšœ๐Ÿšฒ๐Ÿ›ด๐Ÿ›ต๐Ÿš๐Ÿ›ฃ๐Ÿ›คโ›ฝ๐Ÿšจ๐Ÿšฅ๐Ÿšฆ๐Ÿšง๐Ÿ›‘โš“โ›ต๐Ÿšฃโ€โ™‚๏ธ๐Ÿšฃโ€โ™€๏ธ๐Ÿ›ถ๐Ÿšค๐Ÿ›ณโ›ด๐Ÿ›ฅ๐Ÿšขโœˆ๐Ÿ›ฉ๐Ÿ›ซ๐Ÿ›ฌ๐Ÿ’บ๐Ÿš๐ŸšŸ๐Ÿš ๐Ÿšก๐Ÿš€๐Ÿ›ฐ๐Ÿ›Ž๐Ÿšช๐Ÿ›Œ๐Ÿ›๐Ÿ›‹๐Ÿšฝ๐Ÿšฟ๐Ÿ›€๐Ÿ›โŒ›โณโŒšโฐโฑโฒ๐Ÿ•ฐ๐Ÿ•›๐Ÿ•ง๐Ÿ•๐Ÿ•œ๐Ÿ•‘๐Ÿ•๐Ÿ•’๐Ÿ•ž๐Ÿ•“๐Ÿ•Ÿ๐Ÿ•”๐Ÿ• ๐Ÿ••๐Ÿ•ก๐Ÿ•–๐Ÿ•ข๐Ÿ•—๐Ÿ•ฃ๐Ÿ•˜๐Ÿ•ค๐Ÿ•™๐Ÿ•ฅ๐Ÿ•š๐Ÿ•ฆ๐ŸŒ‘๐ŸŒ’๐ŸŒ“๐ŸŒ”๐ŸŒ•๐ŸŒ–๐ŸŒ—๐ŸŒ˜๐ŸŒ™๐ŸŒš๐ŸŒ›๐ŸŒœ๐ŸŒกโ˜€๏ธ๐ŸŒ๐ŸŒžโญ๐ŸŒŸ๐ŸŒ โ˜๏ธโ›…โ›ˆ๐ŸŒค๐ŸŒฅ๐ŸŒฆ๐ŸŒง๐ŸŒจ๐ŸŒฉ๐ŸŒช๐ŸŒซ๐ŸŒฌ๐ŸŒ€๐ŸŒˆ๐ŸŒ‚โ˜‚๏ธโ˜”โ›ฑโšกโ„โ˜ƒ๏ธโ›„โ˜„๐Ÿ”ฅ๐Ÿ’ง๐ŸŒŠ๐Ÿ”‡๐Ÿ”ˆ๐Ÿ”‰๐Ÿ”Š๐Ÿ“ข๐Ÿ“ฃ๐Ÿ“ฏ๐Ÿ””๐Ÿ”•๐ŸŽผ๐ŸŽต๐ŸŽถ๐ŸŽ™๐ŸŽš๐ŸŽ›๐ŸŽค๐ŸŽง๐Ÿ“ป๐ŸŽท๐ŸŽธ๐ŸŽน๐ŸŽบ๐ŸŽป๐Ÿฅ๐Ÿ“ฑ๐Ÿ“ฒโ˜Ž๏ธ๐Ÿ“ž๐Ÿ“Ÿ๐Ÿ“ ๐Ÿ”‹๐Ÿ”Œ๐Ÿ’ป๐Ÿ–ฅ๐Ÿ–จโŒจ๐Ÿ–ฑ๐Ÿ–ฒ๐Ÿ’ฝ๐Ÿ’พ๐Ÿ’ฟ๐Ÿ“€๐ŸŽฅ๐ŸŽž๐Ÿ“ฝ๐ŸŽฌ๐Ÿ“บ๐Ÿ“ท๐Ÿ“ธ๐Ÿ“น๐Ÿ“ผ๐Ÿ”๐Ÿ”Ž๐Ÿ”ฌ๐Ÿ”ญ๐Ÿ“ก๐Ÿ•ฏ๐Ÿ’ก๐Ÿ”ฆ๐Ÿฎ๐Ÿ“”๐Ÿ“•๐Ÿ“–๐Ÿ“—๐Ÿ“˜๐Ÿ“™๐Ÿ“š๐Ÿ““๐Ÿ“’๐Ÿ“ƒ๐Ÿ“œ๐Ÿ“„๐Ÿ“ฐ๐Ÿ—ž๐Ÿ“‘๐Ÿ”–๐Ÿท๐Ÿ’ฐ๐Ÿ’ด๐Ÿ’ต๐Ÿ’ถ๐Ÿ’ท๐Ÿ’ธ๐Ÿ’ณ๐Ÿ’ฑ๐Ÿ’ฒโœ‰๐Ÿ“ง๐Ÿ“จ๐Ÿ“ฉ๐Ÿ“ค๐Ÿ“ฅ๐Ÿ“ฆ๐Ÿ“ซ๐Ÿ“ช๐Ÿ“ฌ๐Ÿ“ญ๐Ÿ“ฎ๐Ÿ—ณโœโœ’๐Ÿ–‹๐Ÿ–Š๐Ÿ–Œ๐Ÿ–๐Ÿ“๐Ÿ’ผ๐Ÿ“๐Ÿ“‚๐Ÿ—‚๐Ÿ“…๐Ÿ“†๐Ÿ—’๐Ÿ—“๐Ÿ“‡๐Ÿ“ˆ๐Ÿ“‰๐Ÿ“Š๐Ÿ“‹๐Ÿ“Œ๐Ÿ“๐Ÿ“Ž๐Ÿ–‡๐Ÿ“๐Ÿ“โœ‚๏ธ๐Ÿ—ƒ๐Ÿ—„๐Ÿ—‘๐Ÿ”’๐Ÿ”“๐Ÿ”๐Ÿ”๐Ÿ”‘๐Ÿ—๐Ÿ”จโ›โš’๐Ÿ› ๐Ÿ—กโš”๐Ÿ”ซ๐Ÿน๐Ÿ›ก๐Ÿ”ง๐Ÿ”ฉโš™๐Ÿ—œโš—โš–๐Ÿ”—โ›“๐Ÿ’‰๐Ÿ’Š๐Ÿšฌโšฐโšฑ๐Ÿ—ฟ๐Ÿ›ข๐Ÿ”ฎ๐Ÿ”ฎ๐Ÿง๐Ÿšฎ๐Ÿšฐโ™ฟ๐Ÿšน๐Ÿšบ๐Ÿšป๐Ÿšผ๐Ÿšพ๐Ÿ›‚๐Ÿ›ƒ๐Ÿ›„๐Ÿ›…โš ๏ธ๐Ÿšธโ›”๐Ÿšซ๐Ÿšณ๐Ÿšญ๐Ÿšฏ๐Ÿšฑ๐Ÿšท๐Ÿ“ต๐Ÿ”žโ˜ขโ˜ฃโฌ†๏ธโ†—๏ธโžก๏ธโ†˜๏ธโฌ‡๏ธโ†™๏ธโฌ…๏ธโ†–๏ธโ†•๏ธโ†”๏ธโ†ฉโ†ชโคด๏ธโคต๏ธ๐Ÿ”ƒ๐Ÿ”„๐Ÿ”™๐Ÿ”š๐Ÿ”›๐Ÿ”œ๐Ÿ”๐Ÿ›โš›๐Ÿ•‰โœกโ˜ธโ˜ฏ๏ธโ˜ฆโ˜ฎ๐Ÿ•Ž๐Ÿ”ฏโ™ˆโ™‰โ™Šโ™‹โ™Œโ™โ™Žโ™โ™โ™‘โ™’โ™“โ›Ž๐Ÿ”€๐Ÿ”๐Ÿ”‚โ–ถ๏ธโฉโญโฏโ—€๏ธโชโฎ๐Ÿ”ผโซ๐Ÿ”ฝโฌโธโนโบโ๐ŸŽฆ๐Ÿ”…๐Ÿ”†๐Ÿ“ถ๐Ÿ“ณ๐Ÿ“ดโ™ป๏ธ๐Ÿ“›โšœ๐Ÿ”ฐ๐Ÿ”ฑโญ•โœ…โ˜‘โœ”โœ–โŒโŽโž•โ™€๏ธโ™‚๏ธโš•โž–โž—โžฐโžฟใ€ฝโœณโœดโ‡โ‰๏ธโ“โ”โ•โ—ใ€ฐ๐Ÿ”Ÿ๐Ÿ’ฏ๐Ÿ” ๐Ÿ”ก๐Ÿ”ข๐Ÿ”ฃ๐Ÿ”ค๐Ÿ…ฐ๏ธ๐Ÿ†Ž๏ธ๐Ÿ…ฑ๏ธ๐Ÿ†‘๏ธ๐Ÿ†’๏ธ๐Ÿ†“๏ธโ„น๐Ÿ†”๏ธโ“‚๏ธ๐Ÿ†•๏ธ๐Ÿ†–๏ธ๐Ÿ…พ๏ธ๐Ÿ†—๏ธ๐Ÿ…ฟ๏ธ๐Ÿ†˜๏ธ๐Ÿ†™๏ธ๐Ÿ†š๏ธ๐Ÿˆ๐Ÿˆ‚๐Ÿˆท๐Ÿˆถ๐Ÿˆฏ๐Ÿ‰๐Ÿˆน๐Ÿˆš๐Ÿˆฒ๐Ÿ‰‘๐Ÿˆธ๐Ÿˆด๐ŸˆณใŠ—ใŠ™๐Ÿˆบ๐Ÿˆตโ–ซ๏ธโ—ปโ—ผโ—ฝโ—พโฌ›โฌœ๐Ÿ”ถ๏ธ๐Ÿ”ท๏ธ๐Ÿ”ธ๏ธ๐Ÿ”น๏ธ๐Ÿ”บ๏ธ๐Ÿ”ป๐Ÿ’ ๐Ÿ”˜๐Ÿ”ฒ๐Ÿ”ณโšชโšซ๐Ÿ”ด๐Ÿ”ต๐Ÿ๐Ÿšฉ๐Ÿด๐Ÿณ๐Ÿณ๏ธโ€๐ŸŒˆโš€โšโš‚โšƒโš„โš…โ›พโ™พ๐Ÿ‡ฆ๐Ÿ‡จ๐Ÿ‡ฆ๐Ÿ‡ฉ๐Ÿ‡ฆ๐Ÿ‡ช๐Ÿ‡ฆ๐Ÿ‡ซ๐Ÿ‡ฆ๐Ÿ‡ฌ๐Ÿ‡ฆ๐Ÿ‡ฎ๐Ÿ‡ฆ๐Ÿ‡ฑ๐Ÿ‡ฆ๐Ÿ‡ฒ๐Ÿ‡ฆ๐Ÿ‡ด๐Ÿ‡ฆ๐Ÿ‡ถ๐Ÿ‡ฆ๐Ÿ‡ท๐Ÿ‡ฆ๐Ÿ‡ธ๐Ÿ‡ฆ๐Ÿ‡น๐Ÿ‡ฆ๐Ÿ‡บ๐Ÿ‡ฆ๐Ÿ‡ผ๐Ÿ‡ฆ๐Ÿ‡ฝ๐Ÿ‡ฆ๐Ÿ‡ฟ๐Ÿ‡ง๐Ÿ‡ฆ๐Ÿ‡ง๐Ÿ‡ง๐Ÿ‡ง๐Ÿ‡ฉ๐Ÿ‡ง๐Ÿ‡ช๐Ÿ‡ง๐Ÿ‡ซ๐Ÿ‡ง๐Ÿ‡ฌ๐Ÿ‡ง๐Ÿ‡ญ๐Ÿ‡ง๐Ÿ‡ฎ๐Ÿ‡ง๐Ÿ‡ฏ๐Ÿ‡ง๐Ÿ‡ฑ๐Ÿ‡ง๐Ÿ‡ฒ๐Ÿ‡ง๐Ÿ‡ณ๐Ÿ‡ง๐Ÿ‡ด๐Ÿ‡ง๐Ÿ‡ถ๐Ÿ‡ง๐Ÿ‡ท๐Ÿ‡ง๐Ÿ‡ธ๐Ÿ‡ง๐Ÿ‡น๐Ÿ‡ง๐Ÿ‡ผ๐Ÿ‡ง๐Ÿ‡พ๐Ÿ‡ง๐Ÿ‡ฟ๐Ÿ‡จ๐Ÿ‡ฆ๐Ÿ‡จ๐Ÿ‡จ๐Ÿ‡จ๐Ÿ‡ฉ๐Ÿ‡จ๐Ÿ‡ซ๐Ÿ‡จ๐Ÿ‡ฌ๐Ÿ‡จ๐Ÿ‡ญ๐Ÿ‡จ๐Ÿ‡ฎ๐Ÿ‡จ๐Ÿ‡ฐ๐Ÿ‡จ๐Ÿ‡ฑ๐Ÿ‡จ๐Ÿ‡ฒ๐Ÿ‡จ๐Ÿ‡ณ๐Ÿ‡จ๐Ÿ‡ด๐Ÿ‡จ๐Ÿ‡ท๐Ÿ‡จ๐Ÿ‡บ๐Ÿ‡จ๐Ÿ‡ป๐Ÿ‡จ๐Ÿ‡ผ๐Ÿ‡จ๐Ÿ‡ฝ๐Ÿ‡จ๐Ÿ‡พ๐Ÿ‡จ๐Ÿ‡ฟ๐Ÿ‡ฉ๐Ÿ‡ช๐Ÿ‡ฉ๐Ÿ‡ฏ๐Ÿ‡ฉ๐Ÿ‡ฐ๐Ÿ‡ฉ๐Ÿ‡ฒ๐Ÿ‡ฉ๐Ÿ‡ด๐Ÿ‡ฉ๐Ÿ‡ฟ๐Ÿ‡ช๐Ÿ‡จ๐Ÿ‡ช๐Ÿ‡ช๐Ÿ‡ช๐Ÿ‡ฌ๐Ÿ‡ช๐Ÿ‡ญ๐Ÿ‡ช๐Ÿ‡ท๐Ÿ‡ช๐Ÿ‡ธ๐Ÿ‡ช๐Ÿ‡น๐Ÿ‡ช๐Ÿ‡บ๐Ÿ‡ซ๐Ÿ‡ฎ๐Ÿ‡ซ๐Ÿ‡ฏ๐Ÿ‡ซ๐Ÿ‡ฐ๐Ÿ‡ซ๐Ÿ‡ฒ๐Ÿ‡ซ๐Ÿ‡ด๐Ÿ‡ซ๐Ÿ‡ท๐Ÿ‡ฌ๐Ÿ‡ฆ๐Ÿ‡ฌ๐Ÿ‡ง๐Ÿ‡ฌ๐Ÿ‡ฉ๐Ÿ‡ฌ๐Ÿ‡ช๐Ÿ‡ฌ๐Ÿ‡ซ๐Ÿ‡ฌ๐Ÿ‡ฌ๐Ÿ‡ฌ๐Ÿ‡ญ๐Ÿ‡ฌ๐Ÿ‡ฎ๐Ÿ‡ฌ๐Ÿ‡ฑ๐Ÿ‡ฌ๐Ÿ‡ฒ๐Ÿ‡ฌ๐Ÿ‡ณ๐Ÿ‡ฌ๐Ÿ‡ต๐Ÿ‡ฌ๐Ÿ‡ถ๐Ÿ‡ฌ๐Ÿ‡ท๐Ÿ‡ฌ๐Ÿ‡ธ๐Ÿ‡ฌ๐Ÿ‡น๐Ÿ‡ฌ๐Ÿ‡บ๐Ÿ‡ฌ๐Ÿ‡ผ๐Ÿ‡ฌ๐Ÿ‡พ๐Ÿ‡ญ๐Ÿ‡ฐ๐Ÿ‡ญ๐Ÿ‡ฒ๐Ÿ‡ญ๐Ÿ‡ณ๐Ÿ‡ญ๐Ÿ‡ท๐Ÿ‡ญ๐Ÿ‡น๐Ÿ‡ญ๐Ÿ‡บ๐Ÿ‡ฎ๐Ÿ‡จ๐Ÿ‡ฎ๐Ÿ‡ฉ๐Ÿ‡ฎ๐Ÿ‡ช๐Ÿ‡ฎ๐Ÿ‡ฑ๐Ÿ‡ฎ๐Ÿ‡ฒ๐Ÿ‡ฎ๐Ÿ‡ณ๐Ÿ‡ฎ๐Ÿ‡ด๐Ÿ‡ฎ๐Ÿ‡ถ๐Ÿ‡ฎ๐Ÿ‡ท๐Ÿ‡ฎ๐Ÿ‡ธ๐Ÿ‡ฎ๐Ÿ‡น๐Ÿ‡ฏ๐Ÿ‡ช๐Ÿ‡ฏ๐Ÿ‡ฒ๐Ÿ‡ฏ๐Ÿ‡ด๐Ÿ‡ฏ๐Ÿ‡ต๐Ÿ‡ฐ๐Ÿ‡ช๐Ÿ‡ฐ๐Ÿ‡ฌ๐Ÿ‡ฐ๐Ÿ‡ญ๐Ÿ‡ฐ๐Ÿ‡ฎ๐Ÿ‡ฐ๐Ÿ‡ฒ๐Ÿ‡ฐ๐Ÿ‡ณ๐Ÿ‡ฐ๐Ÿ‡ต๐Ÿ‡ฐ๐Ÿ‡ท๐Ÿ‡ฐ๐Ÿ‡ผ๐Ÿ‡ฐ๐Ÿ‡พ๐Ÿ‡ฐ๐Ÿ‡ฟ๐Ÿ‡ฑ๐Ÿ‡ฆ๐Ÿ‡ฑ๐Ÿ‡ง๐Ÿ‡ฑ๐Ÿ‡จ๐Ÿ‡ฑ๐Ÿ‡ฎ๐Ÿ‡ฑ๐Ÿ‡ฐ๐Ÿ‡ฑ๐Ÿ‡ท๐Ÿ‡ฑ๐Ÿ‡ธ๐Ÿ‡ฑ๐Ÿ‡น๐Ÿ‡ฑ๐Ÿ‡บ๐Ÿ‡ฑ๐Ÿ‡ป๐Ÿ‡ฑ๐Ÿ‡พ๐Ÿ‡ฒ๐Ÿ‡ฆ๐Ÿ‡ฒ๐Ÿ‡จ๐Ÿ‡ฒ๐Ÿ‡ฉ๐Ÿ‡ฒ๐Ÿ‡ช๐Ÿ‡ฒ๐Ÿ‡ฌ๐Ÿ‡ฒ๐Ÿ‡ญ๐Ÿ‡ฒ๐Ÿ‡ฐ๐Ÿ‡ฒ๐Ÿ‡ฑ๐Ÿ‡ฒ๐Ÿ‡ฒ๐Ÿ‡ฒ๐Ÿ‡ณ๐Ÿ‡ฒ๐Ÿ‡ด๐Ÿ‡ฒ๐Ÿ‡ต๐Ÿ‡ฒ๐Ÿ‡ถ๐Ÿ‡ฒ๐Ÿ‡ท๐Ÿ‡ฒ๐Ÿ‡ธ๐Ÿ‡ฒ๐Ÿ‡น๐Ÿ‡ฒ๐Ÿ‡บ๐Ÿ‡ฒ๐Ÿ‡ป๐Ÿ‡ฒ๐Ÿ‡ผ๐Ÿ‡ฒ๐Ÿ‡ฝ๐Ÿ‡ฒ๐Ÿ‡พ๐Ÿ‡ฒ๐Ÿ‡ฟ๐Ÿ‡ณ๐Ÿ‡ฆ๐Ÿ‡ณ๐Ÿ‡จ๐Ÿ‡ณ๐Ÿ‡ช๐Ÿ‡ณ๐Ÿ‡ซ๐Ÿ‡ณ๐Ÿ‡ฌ๐Ÿ‡ณ๐Ÿ‡ฎ๐Ÿ‡ณ๐Ÿ‡ฑ๐Ÿ‡ณ๐Ÿ‡ด๐Ÿ‡ณ๐Ÿ‡ต๐Ÿ‡ณ๐Ÿ‡ท๐Ÿ‡ณ๐Ÿ‡บ๐Ÿ‡ณ๐Ÿ‡ฟ๐Ÿ‡ด๐Ÿ‡ฒ๐Ÿ‡ต๐Ÿ‡ฆ๐Ÿ‡ต๐Ÿ‡ช๐Ÿ‡ต๐Ÿ‡ซ๐Ÿ‡ต๐Ÿ‡ฌ๐Ÿ‡ต๐Ÿ‡ญ๐Ÿ‡ต๐Ÿ‡ฐ๐Ÿ‡ต๐Ÿ‡ฑ๐Ÿ‡ต๐Ÿ‡ฒ๐Ÿ‡ต๐Ÿ‡ณ๐Ÿ‡ต๐Ÿ‡ท๐Ÿ‡ต๐Ÿ‡ธ๐Ÿ‡ต๐Ÿ‡น๐Ÿ‡ต๐Ÿ‡ผ๐Ÿ‡ต๐Ÿ‡พ๐Ÿ‡ถ๐Ÿ‡ฆ๐Ÿ‡ท๐Ÿ‡ช๐Ÿ‡ท๐Ÿ‡ด๐Ÿ‡ท๐Ÿ‡ธ๐Ÿ‡ท๐Ÿ‡บ๐Ÿ‡ท๐Ÿ‡ผ๐Ÿ‡ธ๐Ÿ‡ฆ๐Ÿ‡ธ๐Ÿ‡ง๐Ÿ‡ธ๐Ÿ‡จ๐Ÿ‡ธ๐Ÿ‡ฉ๐Ÿ‡ธ๐Ÿ‡ช๐Ÿ‡ธ๐Ÿ‡ฌ๐Ÿ‡ธ๐Ÿ‡ญ๐Ÿ‡ธ๐Ÿ‡ฎ๐Ÿ‡ธ๐Ÿ‡ฐ๐Ÿ‡ธ๐Ÿ‡ฑ๐Ÿ‡ธ๐Ÿ‡ฒ๐Ÿ‡ธ๐Ÿ‡ณ๐Ÿ‡ธ๐Ÿ‡ด๐Ÿ‡ธ๐Ÿ‡ท๐Ÿ‡ธ๐Ÿ‡ธ๐Ÿ‡ธ๐Ÿ‡น๐Ÿ‡ธ๐Ÿ‡ป๐Ÿ‡ธ๐Ÿ‡ฝ๐Ÿ‡ธ๐Ÿ‡พ๐Ÿ‡ธ๐Ÿ‡ฟ๐Ÿ‡น๐Ÿ‡ฆ๐Ÿ‡น๐Ÿ‡จ๐Ÿ‡น๐Ÿ‡ฉ๐Ÿ‡น๐Ÿ‡ซ๐Ÿ‡น๐Ÿ‡ฌ๐Ÿ‡น๐Ÿ‡ญ๐Ÿ‡น๐Ÿ‡ฏ๐Ÿ‡น๐Ÿ‡ฐ๐Ÿ‡น๐Ÿ‡ฑ๐Ÿ‡น๐Ÿ‡ฒ๐Ÿ‡น๐Ÿ‡ณ๐Ÿ‡น๐Ÿ‡ด๐Ÿ‡น๐Ÿ‡ท๐Ÿ‡น๐Ÿ‡น๐Ÿ‡น๐Ÿ‡ป๐Ÿ‡น๐Ÿ‡ผ๐Ÿ‡น๐Ÿ‡ฟ๐Ÿ‡บ๐Ÿ‡ฆ๐Ÿ‡บ๐Ÿ‡ฌ๐Ÿ‡บ๐Ÿ‡ณ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡พ๐Ÿ‡บ๐Ÿ‡ฟ๐Ÿ‡ป๐Ÿ‡ฆ๐Ÿ‡ป๐Ÿ‡จ๐Ÿ‡ป๐Ÿ‡ช๐Ÿ‡ป๐Ÿ‡ฌ๐Ÿ‡ป๐Ÿ‡ฎ๐Ÿ‡ป๐Ÿ‡ณ๐Ÿ‡ป๐Ÿ‡บ๐Ÿ‡ผ๐Ÿ‡ซ๐Ÿ‡ผ๐Ÿ‡ธ๐Ÿ‡ฝ๐Ÿ‡ฐ๐Ÿ‡พ๐Ÿ‡ช๐Ÿ‡พ๐Ÿ‡น๐Ÿ‡ฟ๐Ÿ‡ฆ๐Ÿ‡ฟ๐Ÿ‡ฒ๐Ÿ‡ฟ๐Ÿ‡ผ8<br/><br/><br/><br/>Sent from my Samsung Galaxy smartphone.</align>";
int font_size = 200;

int counter = 0;
void _button_clicked(void *data, Evas_Object *obj, void *event_info)
{
   APP *app = data;

  font_size -= 5;
  Evas_Textblock_Style *style = evas_textblock_style_new();
  char buffer[100] = {0};
  sprintf(buffer, "DEFAULT='font=NotoColorEmoji font_size=%i color=red ellipsis=-1.0 wrap=mixed'", font_size);
  evas_textblock_style_set(style, buffer);
  evas_object_textblock_style_set(app->tb1, style);
  evas_textblock_style_free(style);
  style = NULL;
}

EAPI_MAIN int
elm_main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
{
  APP *app = calloc(1, sizeof(APP));
  Evas_Object *win, *scroller1, *scroller2, *box;

  elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);

  win = elm_win_util_standard_add("", "");
  elm_win_autodel_set(win, EINA_TRUE);

  box = elm_box_add(win);
  evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
  evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
  scroller1 = elm_scroller_add(win);
  evas_object_size_hint_weight_set(scroller1, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
  evas_object_size_hint_align_set(scroller1, EVAS_HINT_FILL, EVAS_HINT_FILL);

  evas_font_data_cache_set(50 * 1024* 1024, EVAS_FONT_DATA_CACHE_TEXTURE );

  app->tb1 = evas_object_textblock_add(win);
  Evas_Textblock_Style *style = evas_textblock_style_new();
  char buffer[100] = {0};
  sprintf(buffer, "DEFAULT='font=NotoColorEmoji font_size=%i color=red ellipsis=-1.0 wrap=mixed'", font_size);
  evas_textblock_style_set(style, buffer);
  evas_object_textblock_style_set(app->tb1, style);
  evas_textblock_style_free(style);
  style = NULL;

  evas_font_cache_set(evas_object_evas_get(app->tb1), 0);

  int w,h;
  evas_object_textblock_text_markup_set(app->tb1, "");
  evas_object_size_hint_min_set(app->tb1, 400, 400);
  elm_object_content_set(scroller1, app->tb1);
  elm_box_pack_end(box, scroller1);
  elm_object_content_set(win, box);

  app->btnLoad = elm_button_add(win);
  elm_object_text_set(app->btnLoad, "Scale Font");
  evas_object_smart_callback_add(app->btnLoad, "clicked", _button_clicked, app);
  evas_object_show(app->btnLoad);
  evas_object_move(app->btnLoad, 0, 20);
  evas_object_resize(app->btnLoad, 150, 20);

  evas_object_textblock_text_markup_set(app->tb1, text);
  evas_object_textblock_size_formatted_get(app->tb1, &w, &h);
  evas_object_size_hint_min_set(app->tb1, 400, w/400 + h + 150);

  evas_object_resize(win, 400, 400);
  evas_object_show(box);
  evas_object_show(scroller1);
  evas_object_show(scroller2);
  evas_object_show(win);
  elm_run();

  return 0;
}
ELM_MAIN()

```

Reviewers: raster, woohyun, zmike, cedric, bu5hm4n, Hermet

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Maniphest Tasks: T8737

Differential Revision: https://phab.enlightenment.org/D11943

4 years agoecore_wl2: ++safety code 16/239516/1
Shinwoo Kim [Mon, 27 Jul 2020 09:22:33 +0000 (18:22 +0900)]
ecore_wl2: ++safety code

add return value checking, and deallocate resource if it fails.

Change-Id: Ieebab8dead4465fd1c454d7022d570ecfd8679d0

4 years agocanvas engine: ++safety code 83/239483/1
Hermet Park [Mon, 27 Jul 2020 05:27:52 +0000 (14:27 +0900)]
canvas engine: ++safety code

added null checking, no logical changes.

Change-Id: Ia5b4dde77567a8854ad852aa0dee90dbf9d8e418

4 years agoecore_wl2: exclude video buffer from composition 71/239071/2
Shinwoo Kim [Tue, 21 Jul 2020 11:15:10 +0000 (20:15 +0900)]
ecore_wl2: exclude video buffer from composition

The buffer used for UI and Video sync does not have to be composed.
E20 does not compose if the buffer size is 1x1.

*tizen-fix

Change-Id: Ic5dd1ea97720eabe2b51d90b952f53bf28087141

4 years agoedje_cc: fix crash on image data initialization 93/239293/1 submit/tizen/20200723.215228
Yeongjong Lee [Thu, 23 Jul 2020 10:35:12 +0000 (19:35 +0900)]
edje_cc: fix crash on image data initialization

Summary:
Since commit a8538bacce1457a91e28b39a6417eaadb4744b50 a crash occurs when
Images.Set.Image is unused.

To avoid a crash, this patch skips setting image data for unused image sets.

Test Plan:

$edje_cc basic.edc

basic.edc
```
collections {
   set {
      name: "bubble";
      image {
         image: "bubble.png" COMP;
      }
   }
}
```

Reviewers: raster

Subscribers: cedric, #reviewers, #committers, eagleeye

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D12063

Change-Id: Ibcb14df831f0a6eb51d69267b379f6480256969f

4 years agoelementary: fix to calculate its min size after setting a style 92/239192/2
Yeongjong Lee [Wed, 22 Jul 2020 10:27:28 +0000 (19:27 +0900)]
elementary: fix to calculate its min size after setting a style

after replacing style of a widget, min size calculation should be needed.
this patch fixes them to calculate its min size after setting a style.

@tizen_fix

Co-authored-by: Wonki Kim <wonki_.kim@samsung.com>
Change-Id: Id974a9bfdda6b5c4230da4e44d3d6410da1b85e8

4 years agoelementary: modify to call group_calculate after creating 91/239191/2
Yeongjong Lee [Wed, 22 Jul 2020 10:20:09 +0000 (19:20 +0900)]
elementary: modify to call group_calculate after creating

user can't get min size for check/radios that have a min size definition of edc
just right after creating the objects.
user can get it after once it executes group_calculate.

to keep behavior backward compatability, this patch calls group_calculate
after creating the objects

@tizen_fix

Co-authored-by: Wonki Kim <wonki_.kim@samsung.com>
Change-Id: Icd08b60a516cc3ba4b5472bc013fddc5089d0a9a

4 years agoedje_textblock: remove duplicated textblock style properties 93/239193/1
Bowon Ryu [Wed, 22 Jul 2020 10:16:32 +0000 (19:16 +0900)]
edje_textblock: remove duplicated textblock style properties

Summary:
When there is "font" and "font_size" in  textblock style (already defined),
If "font" and "font_size" are set using edje_text_class_set(),
then "font" and "font_size" are defined duplicated in texblock style through eina_strbuf_append.

Duplicate properties use memory unnecessarily,
and also it is possible to cause confusion at debbuging.

This patch replaces duplicate properties "font", "font_size" using eina_strbuf_replace.

Test Plan:
* textblock style in edc
"font=Sans font_size=20 wrap=mixed text_class=TEXT_CLASS";

* edje_text_class_set in c
edje_text_class_set("TEXT_CLASS", "font=DejavuSans", 40);

* textblock style at runtime (BEFORE)
DEFAULT='font=Sans font_size=20 wrap=mixed font_size=40.0 font=DejavuSans'

* textblock style at runtime (AFTER)
DEFAULT='font=DejavuSans font_size=40 wrap=mixed'

Reviewers: subodh6129, woohyun, ali.alzyod

Reviewed By: ali.alzyod

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D11962

Change-Id: I5ca923695f49dd77b9f8de487a8a294af126a29d

4 years agoelm - genlist/grid - call realized/unrealized item func cb after eo cb
Carsten Haitzler (Rasterman) [Tue, 21 Jul 2020 07:56:16 +0000 (08:56 +0100)]
elm - genlist/grid - call realized/unrealized item func cb after eo cb

4 years agoevas_vg_cache: Add sector_list_get 63/238763/4
JunsuChoi [Fri, 17 Jul 2020 03:54:41 +0000 (12:54 +0900)]
evas_vg_cache: Add sector_list_get

Add an API that if there is sector data in animation, returns a list of it.

@TIZEN_ONLY

Change-Id: Ib375e99ccaac924b3dff156f452597ae6a6f4128

4 years agoEfl.Gfx.Frame_Contoller: Add sector_list property 64/238764/4
JunsuChoi [Fri, 17 Jul 2020 03:54:50 +0000 (12:54 +0900)]
Efl.Gfx.Frame_Contoller: Add sector_list property

sector_list pass information of sectors in animation data.

@TIZEN_ONLY

Change-Id: I55325042d2ae0e5af7f3960fb853349d2fbb4fda

4 years agoelementary: remove since_tizen 6.0 tag from elm_relative_container 70/238970/2
Yeongjong Lee [Tue, 21 Jul 2020 01:38:04 +0000 (10:38 +0900)]
elementary: remove since_tizen 6.0 tag from elm_relative_container

since_tizen tag will be generated by API Versioning script.

@tizen_fix

Change-Id: Ie6d9ac4dd99fc4dccc1a694221138e1498e8dea5

4 years agogenlist : remove focusable conditions for wearable feature accepted/tizen/unified/20200721.142254 submit/tizen/20200720.225554
SangHyeon Jade Lee [Tue, 30 Jun 2020 00:48:38 +0000 (09:48 +0900)]
genlist : remove focusable conditions for wearable feature

disable/display mode is not a restriction of focus in wearable.

Change-Id: Ic26ff5e4f610f0fb9d73e63b9cfe11cc173d2c90

4 years agoelm - genlist+gird - use item specific realize/unrealize not eo callback
Carsten Haitzler (Rasterman) [Mon, 20 Jul 2020 21:24:31 +0000 (22:24 +0100)]
elm - genlist+gird - use item specific realize/unrealize not eo callback

this saves a lot of cpu overhead to specialize this with func ptrs in
the widget item struct instead of everyone listening on the parent
gengrid/genlist widget and eo having to walk lots of callbacks and
call them all...

major optimization

@opt

4 years agowin - x io errors really just have to exit, so call the iorr cb + exit
Carsten Haitzler (Rasterman) [Mon, 20 Jul 2020 13:32:12 +0000 (14:32 +0100)]
win - x io errors really just have to exit, so call the iorr cb + exit

from xlib man page:

The XSetIOErrorHandler sets the fatal I/O error  handler. Xlib  calls
the  program's  supplied error handler if any sort of system call error
occurs (for example, the connection to the server was lost). This  is
assumed  to be a fatal condition, and the called routine should not reโ€
turn.  If the I/O error handler does return, the client process exits.

@fix

4 years agoefl: make all _class_get() functions const
Marcel Hollerbach [Thu, 16 Jul 2020 10:39:23 +0000 (12:39 +0200)]
efl: make all _class_get() functions const

please note, not the return type, but the function.
When appending __attribute__((const)) to a function, the compiler is
told that its enough to call this function once in a function.

This is quite often happening when we are efl_data_scope_get and
efl_super in a function that is different from a implemented function.

The compiler now starts to remove the calls that aggressivly that we
need to ensure that these calls are not removed, which means, the static
function calls, and the eo init are now checking the return value of
these functions, to ensure that they are called.

Please note that you now have to be carefull when your app calls
eo_shutdown, if it does so, you *must* call it at the end of a function,
or never call class_get after that anymore.

Overall this improves elm test runs 0.1s which is fair i guess, the main
thing that is faster is textrendering, where is also the point where
this is the most beneficial.

Please note, this replaces 42 occurences of double _class_get() ... THAT
is a sign!

Reviewed-by: Stefan Schmidt <stefan@datenfreihafen.org>
Reviewed-by: Daniel Kolesa <daniel@octaforge.org>
Differential Revision: https://phab.enlightenment.org/D12057

4 years agoEina log: flush stderr on mintty-based terminals submit/tizen/20200719.223823
Vincent Torri [Sun, 19 Jul 2020 17:27:49 +0000 (18:27 +0100)]
Eina log: flush stderr on mintty-based terminals

Summary: on those terminal, stderr is never flushed, so errors messages are not displayed when, for example, the app crashes

Test Plan:
test program :

```#include <Eina.h>

#define ERR(...)  EINA_LOG_DOM_ERR(log_dom, __VA_ARGS__)

int main()
{
  int log_dom = -1;

  eina_init();

  log_dom = eina_log_domain_register("eet", EINA_COLOR_CYAN);
  if (log_dom < 0)
    {
      printf("error register\n");
      return 0;
    }

  ERR("an error.");

  while (1)
    {
    }

  return 0;
}
```

without the patch, nothing is displayed, even after a Ctrl-C to finish the program

with the patch, the error message is displayed

Reviewers: raster

Reviewed By: raster

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D12058

4 years agoRevert "edje: Avoid string duplication when possible."
Carsten Haitzler (Rasterman) [Fri, 17 Jul 2020 09:35:52 +0000 (10:35 +0100)]
Revert "edje: Avoid string duplication when possible."

This reverts commit 8941514b467ce3e5d02c9b936d35a9d393989260.

found that this breaks e's systray icon layout... :(

4 years agoelementary: introduce elm_relative_container 22/238722/5
Yeongjong Lee [Thu, 16 Jul 2020 04:10:02 +0000 (13:10 +0900)]
elementary: introduce elm_relative_container

A relative container calculates the size and position of all the children based
on their relationship to each other.
For more information, please see documentation and examples.

@tizen_fix

Change-Id: I72b3af63a39e2944966392878ae0b0569cf149ec

4 years agoefl_ui_image: remove the unnecessary code in efl_file_unload 46/238746/1
Taehyub Kim [Fri, 17 Jul 2020 01:08:41 +0000 (10:08 +0900)]
efl_ui_image: remove the unnecessary code in efl_file_unload

Summary:
we don't need the image preload api call in efl_file_unload,
this make the unexpected SIG_LOAD_ERROR emit, when elm_image_memfile_set() is called.

@fix

Reviewers: Hermet, jsuya, kimcinoo

Reviewed By: Hermet

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D12056

Change-Id: I29415b8e95ed7be0bb5e3bc8a3f185ed0e69077a

4 years agoedje example - dont leak text
Carsten Haitzler (Rasterman) [Thu, 16 Jul 2020 20:00:36 +0000 (21:00 +0100)]
edje example - dont leak text

4 years agoedje: Avoid string duplication when possible.
Woochanlee [Thu, 16 Jul 2020 10:37:10 +0000 (11:37 +0100)]
edje: Avoid string duplication when possible.

Summary:
Most use case the part name dosen't contain the recursive name
so we don't have to go through expensive eina_string_split operation.

Test Plan:
edje-suite (34/37 edje-suite                              OK       0.67 s)
elementary-test
app launching on enlightenment

Reviewers: raster, smohanty, Hermet

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D12055

4 years agoedje_cc : resolve build warning
Ali Alzyod [Thu, 16 Jul 2020 08:58:45 +0000 (09:58 +0100)]
edje_cc : resolve build warning

Reviewers: raster

Reviewed By: raster

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D12054

4 years agoelm: tests: fix typo in test name
Stefan Schmidt [Thu, 16 Jul 2020 08:59:22 +0000 (10:59 +0200)]
elm: tests: fix typo in test name

Found while working on exactness scenarios. Better get this fixed here
before we use it in tools like exactness and make it harder to change.

4 years agoci: travis: force meson version 0.54.3 as install for codecov
Stefan Schmidt [Thu, 16 Jul 2020 08:04:49 +0000 (10:04 +0200)]
ci: travis: force meson version 0.54.3 as install for codecov

The newest meson 0.55 release is broken for a coverage build. (Version
0.55.1 should get the needed fix from this pull rewuest: https://github.com/mesonbuild/meson/pull/7411)

For now we force 0.54.3 as known working version.

4 years agoecore_wl2: support tizen_renderer protocol 15/238015/4
Changyeon Lee [Tue, 7 Jul 2020 09:36:18 +0000 (18:36 +0900)]
ecore_wl2: support tizen_renderer protocol

Some target can display only specific buffer at hardware layer.
enlightenment sends buffer to render engine (egl or software engine)
of client when enlightenment wants to display at hardware layer and
enlightenment wait that client attach buffer by render engine.
but if client doesn't have change of rendering after buffer is sent,
render engine doesn't render at buffer.
tizen_renderer protocol and redraw_request event were added.
enlightenment sends redraw_request event after buffer is sent and
wants client redraws at wl_surface.

1. add event ECORE_WL2_EVENT_WINDOW_REDRAW_REQUEST and
   Ecore_Wl2_Event_Window_Redraw_Request
2. add damage to ecore_evas in callback of redraw request

Change-Id: I951b458c10d8163cc37583ededcabd4cd807531e

4 years agospec: disable avif evas image loader
Jongmin Lee [Wed, 15 Jul 2020 22:29:45 +0000 (07:29 +0900)]
spec: disable avif evas image loader

Change-Id: I8d0450b3cd3a9c3a4dd1539ec03202c9f8ede4c2

4 years agomeson: allow empty values in disabler/bindings array
Daniel Kolesa [Wed, 15 Jul 2020 18:07:46 +0000 (20:07 +0200)]
meson: allow empty values in disabler/bindings array

This is supposed to simplify things for distro packagers and is
inspired by other projects doing this, e.g. Mesa.

The idea here is that the provided lists can now begin with a comma,
unlike before. This allows for things such as:

evas_disablers=""
if [ -z "$build_option_lottie" ]; then
    evas_disablers+=",json"
fi
if [ -z "$build_option_avif" ]; then
    evas_disablers+=",avif"
fi
...
configure_args+=" -Devas-loaders-disabler=$evas_disablers"

Previously this would fail because meson would interpret the
comma at the beginning as having an empty-string value in the
array, and checking whether the string is already empty is too
clunky.

4 years agoRevert "Revert "ci: travis: make sure we disable avif loader by default in our jobs""
Carsten Haitzler (Rasterman) [Wed, 15 Jul 2020 18:16:57 +0000 (19:16 +0100)]
Revert "Revert "ci: travis: make sure we disable avif loader by default in our jobs""

This reverts commit 42e3411ed7dacc652bd1c64d94941d7ac6aa67c4.

4 years agoEvas: add avif evas loader and saver
Vincent Torri [Wed, 15 Jul 2020 17:51:27 +0000 (18:51 +0100)]
Evas: add avif evas loader and saver

Summary:
Add AV1 image file loader and saver to Evas

The loader can be tested with this code :

```
#include <stdlib.h>
#include <stdio.h>

#include <Eina.h>
#include <Ecore.h>
#include <Evas.h>
#include <Ecore_Evas.h>

static int i = 0;

static unsigned char _timer(void *data)
{
  Evas_Object *o = (Evas_Object *)data;

  if (i < evas_object_image_animated_frame_count_get(o))
    {
      evas_object_image_animated_frame_set(o, i);
      i++;
      return ECORE_CALLBACK_RENEW;
    }

  return ECORE_CALLBACK_DONE;
}

static void _quit(Ecore_Evas *ee)
{
  ecore_main_loop_quit();
  (void)ee;
}

int main(int argc, char *argv[])
{
  Ecore_Evas *ee;
  Evas *evas;
  Evas_Object *o;
  int w,h;
  Evas_Load_Error err;

  if (argc < 2)
    {
      printf("usage : %s file\n", argv[0]);
      return 1;
    }

  ecore_evas_init();

  ee = ecore_evas_new(NULL, 0, 0, 1, 1, NULL);
  if (!ee)
    {
      printf("no ee\n");
      return 0;
    }

  evas = ecore_evas_get(ee);
  ecore_evas_title_set(ee, "avif test");
  ecore_evas_callback_delete_request_set(ee, _quit);

  o = evas_object_image_add(evas);
  evas_object_image_file_set(o, argv[1], NULL);
  err = evas_object_image_load_error_get(o);
  if (err != EVAS_LOAD_ERROR_NONE)
    {
      fprintf(stderr, "could not load image '%s'. error string is \"%s\"\n",
              argv[1], evas_load_error_str(err));
      return 1;
    }

  evas_object_image_size_get(o, &w, &h);
  evas_object_image_fill_set(o, 0, 0, w, h);
  evas_object_move(o, 0, 0);
  evas_object_resize(o, w, h);
      evas_object_show(o);

  printf("animated : %s\n", evas_object_image_animated_get(o) ? "yes" : "no");
  fflush(stdout);

  if (evas_object_image_animated_get(o))
    {
      Ecore_Timer *timer;
      printf("frame count : %d\n", evas_object_image_animated_frame_count_get(o));
      printf("duration    : %f\n", evas_object_image_animated_frame_duration_get(o,1,0));
      printf("loop count  : %d\n", evas_object_image_animated_loop_count_get(o));
      fflush(stdout);

      timer = ecore_timer_add(evas_object_image_animated_frame_duration_get(o,1,0), _timer, o);
    }

  ecore_evas_resize(ee, w,  h);
  ecore_evas_show(ee);

  ecore_main_loop_begin();

  ecore_evas_shutdown();

  return 0;
}
```

non animated files : https://github.com/AOMediaCodec/libavif/tree/master/tests/data/originals
animated files : https://github.com/AOMediaCodec/av1-avif/tree/master/testFiles/Netflix/avifs

to test the saver :

```
#include <stdlib.h>
#include <stdio.h>
#include <math.h>

#include <Eina.h>
#include <Ecore.h>
#include <Evas.h>
#include <Ecore_Evas.h>

void _quit(Ecore_Evas *ee)
{
  ecore_main_loop_quit();
  (void)ee;
}

static Evas_Object *
display_data(int w, int h, const char *title, unsigned int *data)
{
  Ecore_Evas *ee;
  Evas *evas;
  Evas_Object *o;
  unsigned int *d;

  ee = ecore_evas_new(NULL, 0, 0, w, h, NULL);
  if (!ee)
    return NULL;

  evas = ecore_evas_get(ee);
  ecore_evas_title_set(ee, title);
  ecore_evas_callback_delete_request_set(ee, _quit);

  o = evas_object_image_add(evas);
  evas_object_image_fill_set(o, 0, 0, w, h);
  evas_object_image_size_set(o, w, h);

  d = evas_object_image_data_get(o, 1);
  for (int i = 0; i < w*h; i++)
    d[i] = data[i];
  evas_object_image_data_set(o, d);
  evas_object_image_data_update_add(o, 0, 0, w, h);
  evas_object_move(o, 0, 0);
  evas_object_resize(o, w, h);
  evas_object_show(o);

  ecore_evas_show(ee);

  return o;
}

static unsigned int *
display_file(const char *title, const char *filename, int *w, int *h)
{
  Ecore_Evas *ee;
  Evas *evas;
  Evas_Object *o;
  Evas_Load_Error err;
  unsigned int *data;

  ee = ecore_evas_new(NULL, 0, 0, 1, 1, NULL);
  if (!ee)
    return NULL;

  evas = ecore_evas_get(ee);
  ecore_evas_title_set(ee, title);
  ecore_evas_callback_delete_request_set(ee, _quit);

  o = evas_object_image_add(evas);
  evas_object_image_file_set(o, filename, NULL);
  err = evas_object_image_load_error_get(o);
  if (err != EVAS_LOAD_ERROR_NONE)
    {
      fprintf(stderr, "could not load image '%s'. error string is \"%s\"\n",
              filename, evas_load_error_str(err));
      fflush(stderr);
      return NULL;
    }

  evas_object_image_size_get(o, w, h);
  evas_object_image_fill_set(o, 0, 0, *w, *h);
  evas_object_image_size_set(o, *w, *h);
  evas_object_move(o, 0, 0);
  evas_object_resize(o, *w, *h);
  evas_object_show(o);

  ecore_evas_resize(ee, *w, *h);
  ecore_evas_show(ee);

  data = evas_object_image_data_get(o, 1);

  return data;
}

double psnr(int w, int h, unsigned int *data_orig, unsigned int *data)
{
  unsigned char *iter_orig;
  unsigned char *iter;
  double psnr;

  psnr = 0.0;
  iter_orig = (unsigned char *)data_orig;
  iter = (unsigned char *)data;
  for (int i = 0; i < 4 * w * h; i++, iter_orig++, iter++)
    psnr += (*iter_orig - *iter) * (*iter_orig - *iter);
  psnr /= 4 * w * h;
  psnr = 10 * log10(255.0 * 255.0 / psnr);
  return psnr;
}

void compare(int quality, int w, int h, unsigned int *data_orig)
{
  char title[1024];
  char filename[1024];
  unsigned char *data;
  unsigned int *data_jpeg;
  unsigned int *data_avif;
  unsigned char *iter_orig;
  unsigned char *iter_jpeg;
  unsigned char *iter_avif;
  double psnr_jpeg;
  double psnr_avif;
  Eina_File *f_jpeg;
  Eina_File *f_avif;
  size_t size_jpeg;
  size_t size_avif;

  /* jpeg */

  snprintf(title, sizeof(title), "jpeg test quality %d", quality);
  snprintf(filename, sizeof(filename), "test_%d.jpg", quality);
  data_jpeg = display_file(title, filename, &w, &h);
  if (!data_jpeg)
    return;

  f_jpeg = eina_file_open(filename, EINA_FALSE);
  size_jpeg = eina_file_size_get(f_jpeg);
  eina_file_close(f_jpeg);
  fprintf(stderr, "size : %u\n", (unsigned int)size_jpeg);
  fflush(stderr);

  /* avif */

  snprintf(title, sizeof(title), "avif test quality %d", quality);
  snprintf(filename, sizeof(filename), "test_%d.avif", quality);
  data_avif = display_file(title, filename, &w, &h);
  if (!data_avif)
    return;

  f_avif = eina_file_open(filename, EINA_FALSE);
  size_avif = eina_file_size_get(f_avif);
  eina_file_close(f_avif);
  fprintf(stderr, "size : %u\n", (unsigned int)size_avif);
  fflush(stderr);

  psnr_jpeg = psnr(w, h, data_orig, data_jpeg);
  fprintf(stderr, "psnr jpeg : %f\n", psnr_jpeg);
  fflush(stderr);

  snprintf(title, sizeof(title), "jpeg vs orig (psnr: %.2f, size: %u b)", psnr_jpeg, (unsigned int)size_jpeg);
  iter_orig = (unsigned char *)data_orig;
  iter_jpeg = (unsigned char *)data_jpeg;
  data = malloc(4*w*h);
  for (int i = 0; i < 4*w*h; i++, iter_orig++, iter_jpeg++)
    data[i] = abs(*iter_jpeg - *iter_orig);
  display_data(w, h, title, (unsigned int *)data);

  psnr_avif = psnr(w, h, data_orig, data_avif);
  fprintf(stderr, "psnr avif : %f\n", psnr_avif);
  fflush(stderr);

  snprintf(title, sizeof(title), "avif vs orig (psnr: %.2f, size: %u b)", psnr_avif, (unsigned int)size_avif);
  iter_orig = (unsigned char *)data_orig;
  iter_avif = (unsigned char *)data_avif;
  data = malloc(4*w*h);
  for (int i = 0; i < 4*w*h; i++, iter_orig++, iter_avif++)
    data[i] = abs(*iter_avif - *iter_orig);
  display_data(w, h, title, (unsigned int *)data);
}

int main()
{
  Ecore_Evas *ee;
  Evas *evas;
  Evas_Object *o;
  Evas_Load_Error err;
  unsigned int *data;
  int w,h;

  ecore_evas_init();

  ee = ecore_evas_new(NULL, 0, 0, 1, 1, NULL);
  if (!ee)
    return 1;

  evas = ecore_evas_get(ee);
  ecore_evas_title_set(ee, "original");
  ecore_evas_callback_delete_request_set(ee, _quit);

  o = evas_object_image_add(evas);
  evas_object_image_file_set(o, "x1d-II-sample-02.fff", NULL);
  err = evas_object_image_load_error_get(o);
  if (err != EVAS_LOAD_ERROR_NONE)
    {
      fprintf(stderr, "could not load image '%s'. error string is \"%s\"\n",
              "x1d-II-sample-02.fff", evas_load_error_str(err));
      fflush(stderr);
      return 1;
    }

  evas_object_image_size_get(o, &w, &h);
  evas_object_image_fill_set(o, 0, 0, w, h);
  evas_object_image_size_set(o, w, h);
  evas_object_move(o, 0, 0);
  evas_object_resize(o, w, h);
  evas_object_show(o);

  data = evas_object_image_data_get(o, 1);

  ecore_evas_resize(ee, w, h);
  ecore_evas_show(ee);

  /* evas_object_image_save(o, "test_100.jpg", NULL, "quality=100"); */

  evas_object_image_save(o, "test_90.jpg", NULL, "quality=90");
  /* evas_object_image_save(o, "test_70.jpg", NULL, "quality=70"); */
  /* evas_object_image_save(o, "test_50.jpg", NULL, "quality=50"); */

  /* evas_object_image_save(o, "test_100.avif", NULL, "quality=100"); */

  evas_object_image_save(o, "test_90.avif", NULL, "quality=90");
  /* evas_object_image_save(o, "test_70.avif", NULL, "quality=70"); */
  /* evas_object_image_save(o, "test_50.avif", NULL, "quality=50"); */

  compare(90, w, h, data);

  ecore_main_loop_begin();

  ecore_evas_shutdown();

  return 0;
}
```

the raw file canbe found here : https://www.hasselblad.com/learn/sample-images/

Test Plan: test executable with avif files found in libavif project

Reviewers: raster, q66

Reviewed By: q66

Subscribers: q66, cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D12051

4 years agoedje - fix edje_cc mis-re-iding images in image sets
Carsten Haitzler (Rasterman) [Wed, 15 Jul 2020 11:22:22 +0000 (12:22 +0100)]
edje - fix edje_cc mis-re-iding images in image sets

wanr of unused images so it's properly fixed too... always warn to
stdout so devs know to cleanup their theme. by not removing image sets
this fixes the mis-id'ing too.

@fix

4 years agofilter: make grayscale, inverse_color faster (GL) 74/236674/8
Shinwoo Kim [Fri, 19 Jun 2020 07:30:41 +0000 (16:30 +0900)]
filter: make grayscale, inverse_color faster (GL)

This commit for grayscale, inverse_color filter used by enlightenment.
The fps is decreased with those filters because filter is using off-
screen buffer and copying data between buffers. This commit makes
filter do not use off-screen buffer. Finally the fps is almost same
between ON and OFF filter.

*tizen_only

Change-Id: Ia7ba742d4d8a893fe4908e17895c388cfa3fc286

4 years agoRevert "ci: travis: make sure we disable avif loader by default in our jobs"
Stefan Schmidt [Tue, 14 Jul 2020 13:56:54 +0000 (15:56 +0200)]
Revert "ci: travis: make sure we disable avif loader by default in our jobs"

This reverts commit 44a018d37ffdf03627fc5d45aa249c2237bf5dac.

With the libavif module patch reverted this also needs to go, until its
back.

4 years agoelm_code: cursor visbility fix.
Alastair Poole [Tue, 14 Jul 2020 11:11:48 +0000 (12:11 +0100)]
elm_code: cursor visbility fix.

If the widget is scrollable on the x axis, the cursor was being
displayed in some rare cases when scrolling and the code widget
did not cover the whole window region. e.g. a filepanel to the
left of the widget could potentially have the cursor erroneously
shown. This fixes as per the y axis hide.

@fix

4 years agoelm_code: on newline ensure line number visible.
Alastair Poole [Tue, 14 Jul 2020 10:11:16 +0000 (11:11 +0100)]
elm_code: on newline ensure line number visible.

@fix T2798

4 years agoRevert "Evas: add avif evas loader"
Carsten Haitzler (Rasterman) [Tue, 14 Jul 2020 09:54:57 +0000 (10:54 +0100)]
Revert "Evas: add avif evas loader"

This reverts commit dd23a6c84aee249aa5316b48af6956072233bb97.

i didn't mean to push this yet...

4 years agoci: travis: make sure we disable avif loader by default in our jobs
Stefan Schmidt [Tue, 14 Jul 2020 09:38:55 +0000 (11:38 +0200)]
ci: travis: make sure we disable avif loader by default in our jobs

This has been newly added (disabled by default) but we need to take care
of it in our manually disabled loaders in specific builds.

4 years agodocs: Correct the wrong API group name and typo in Evas, Eet, Eina, Eio and Elementary
Myoungwoon Roy, Kim [Tue, 14 Jul 2020 08:48:04 +0000 (09:48 +0100)]
docs: Correct the wrong API group name and typo in Evas, Eet, Eina, Eio and Elementary

Summary: I found wrong API reference group name in mapbuf, Evas, Eet, Eina, Eio and fixed them.

Test Plan: API reference documentation modification only

Reviewers: segfaultxavi, stefan_schmidt

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D12052

4 years agoEvas: add avif evas loader
Vincent Torri [Sat, 11 Jul 2020 10:34:01 +0000 (11:34 +0100)]
Evas: add avif evas loader

Summary: Add AV1 image file loader to Evas

Test Plan: test executable with avif files found in libavif project

Reviewers: raster

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D12051

4 years agotests: remove popup test.
Alastair Poole [Mon, 13 Jul 2020 12:21:35 +0000 (13:21 +0100)]
tests: remove popup test.

This was put here due to a miscommunication. It was for resolving
an issue with one of our applications. It wasn't meant to be in
this part of testing anyway. Remove as the popup in the application
itself was broken.

4 years agodocs: Correct the wrong group name in access, mapbuf, object, popup and win 39/238239/1 accepted/tizen/unified/20200714.065706 submit/tizen/20200713.050659
Myoungwoon Roy, Kim [Fri, 10 Jul 2020 00:27:35 +0000 (09:27 +0900)]
docs: Correct the wrong group name in access, mapbuf, object, popup and win

Change-Id: I70e6baa59453f97c439a1f80f5743c441cfb5f61

4 years agoefl_ui_image: fix hit_rect geometry only if scale type is expand submit/tizen/20200709.223535
Jaehyun Cho [Mon, 6 Jul 2020 04:42:11 +0000 (13:42 +0900)]
efl_ui_image: fix hit_rect geometry only if scale type is expand

In the past version, "clicked" event happens although image file is not
set and resizable is false and scale type is expand.

To keep the backward compatibility of supporting "clicked" event,
hit_rect geometry is set to be the same with object geometry if image
file is not set and scale type is expand.

The above logic is not applied to upstream.
Because size calculation logic between upstream and tizen is different
so _image_sizing_eval() is not called in upstream if image file is not
set.

@tizen_fix

Change-Id: I39e094702d631e2c3150ae7a9b4d8e314468fa5d

4 years agodocs: Correct the wrong API group name in Elementary and Change an invalid URL in...
Myoungwoon Roy, Kim [Thu, 9 Jul 2020 09:24:09 +0000 (10:24 +0100)]
docs: Correct the wrong API group name in Elementary and Change an invalid URL in Evas

Summary:
I had found broken URL address for SGI free software license B v2.0 and changed valid URL address
In addition, I found wrong group name in glview, grid, index, label, list, map, mapbuf, naviframe, notify, panel, photocam, plug, popup, radio, scroller, spinner, table, win, atspi, frame, access, textpath, elm_object, color_class and fixed them.

Test Plan: API reference documentation modification only

Reviewers: segfaultxavi, stefan_schmidt, raster

Reviewed By: raster

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D12049

4 years agoibox: Preview Theme Code
Alastair Poole [Tue, 7 Jul 2020 14:53:50 +0000 (15:53 +0100)]
ibox: Preview Theme Code

Summary: Dependency for https://phab.enlightenment.org/D12046

Reviewers: raster

Reviewed By: raster

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D12047

4 years agoRevert "edje: Avoid string duplication when possible."
Carsten Haitzler (Rasterman) [Tue, 7 Jul 2020 11:43:39 +0000 (12:43 +0100)]
Revert "edje: Avoid string duplication when possible."

This reverts commit 704d58d658ed4424a886c127f3bbe83afde1f2a1.

gee. it looked innocent enough... it broke tests and everything in e

4 years agoedje: Avoid string duplication when possible.
Woochanlee [Tue, 7 Jul 2020 10:20:53 +0000 (11:20 +0100)]
edje: Avoid string duplication when possible.

Summary:
Most use case the part name dosen't contain the recursive name
so we don't have to go through expensive eina_string_split operation.

Reviewers: smohanty, cedric, Hermet, raster

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D12045

4 years agoevas_text: lazy loading color glyph images in RAM 70/238070/1
Ali Alzyod [Mon, 6 Jul 2020 11:43:40 +0000 (12:43 +0100)]
evas_text: lazy loading color glyph images in RAM

Summary:
Lazy loading for glyph images into RAM, instead of caching at layout level we will cache only when rendering.

This may affect speed a bit since color glyphs will be loaded twice before caching (with FT_Load_Glyph)

Try to run test application, and hit `scale font`

** RAM consumption (Accelerated Rendering) **

| Before | After |
|-------:|-------|
|  111.9 | 21.8  |
|  204.8 | 24.4  |
|  298.0 | 26.3  |
|  391.5 | 28.4  |
|  484.8 | 29.9  |
|  578.1 | 31.4  |
|  671.4 | 32.5  |

** RAM consumption (SW Rendering) **

| Before | After |
|-------:|-------|
|  104   | 14.6  |
|  197   | 17    |
|  290   | 19.1  |
|  384   | 21.2  |
|  477   | 22.8  |
|  571   | 24.3  |
|  664   | 25.6  |

Test Plan:
```

typedef struct _APP
{
  Evas_Object *tb1;
  Evas_Object *btnLoad;
} APP;

char *text = "<align=center><color=#4DE0FFFF underline=on underline_color=#4DE0FFFF><a href='tel:1234567890'>1234567890</a></color>๐Ÿ˜€๐Ÿ˜๐Ÿ˜‚๐Ÿคฃ๐Ÿ˜ƒ๐Ÿ˜„๐Ÿ˜…๐Ÿ˜†๐Ÿ˜‰๐Ÿ˜Š๐Ÿ˜‹๐Ÿ˜Ž๐Ÿ˜๐Ÿ˜˜๐Ÿ˜—๐Ÿ˜™๐Ÿ˜šโ˜บ๐Ÿ™‚๐Ÿค—๐Ÿค”๐Ÿ˜๐Ÿ˜‘๐Ÿ˜ถ๐Ÿ™„๐Ÿ˜๐Ÿ˜ฃ๐Ÿ˜ฅ๐Ÿ˜ฎ๐Ÿค๐Ÿ˜ฏ๐Ÿ˜ช๐Ÿ˜ซ๐Ÿ˜ด๐Ÿ˜Œ๐Ÿค“๐Ÿ˜›๐Ÿ˜œ๐Ÿ˜๐Ÿคค๐Ÿ˜’๐Ÿ˜“๐Ÿ˜”๐Ÿ˜•๐Ÿ™ƒ๐Ÿค‘๐Ÿ˜ฒโ˜น๐Ÿ™๐Ÿ˜–๐Ÿ˜ž๐Ÿ˜Ÿ๐Ÿ˜ค๐Ÿ˜ข๐Ÿ˜ญ๐Ÿ˜ฆ๐Ÿ˜ง๐Ÿ˜จ๐Ÿ˜ฉ๐Ÿ˜ฌ๐Ÿ˜ฐ๐Ÿ˜ฑ๐Ÿ˜ณ๐Ÿ˜ต๐Ÿ˜ก๐Ÿ˜ ๐Ÿ˜‡๐Ÿค ๐Ÿคก๐Ÿคฅ๐Ÿ˜ท๐Ÿค’๐Ÿค•๐Ÿคข๐Ÿคงโ˜ป๐Ÿ˜ˆ๐Ÿ‘ฟ๐Ÿ‘น๐Ÿ‘บ๐Ÿ’€โ˜ ๐Ÿ‘ป๐Ÿ‘ฝ๐Ÿ‘พ๐Ÿค–๐Ÿ’ฉ๐Ÿ˜บ๐Ÿ˜ธ๐Ÿ˜น๐Ÿ˜ป๐Ÿ˜ผ๐Ÿ˜ฝ๐Ÿ™€๐Ÿ˜ฟ๐Ÿ˜พ๐Ÿ™ˆ๐Ÿ™‰๐Ÿ™Š๐Ÿ‘ฆ๐Ÿ‘ง๐Ÿ‘จ๐Ÿ‘ฉ๐Ÿ‘ต๐Ÿ‘ถ๐Ÿ‘ผ๐Ÿ‘จโ€โš•๏ธ๐Ÿ‘ฉโ€โš•๏ธ๐Ÿ‘จโ€๐ŸŽ“๐Ÿ‘ฉโ€๐ŸŽ“๐Ÿ‘จโ€๐Ÿซ๐Ÿ‘ฉโ€๐Ÿซ๐Ÿ‘จโ€โš–๐Ÿ‘ฉโ€โš–๐Ÿ‘จโ€๐ŸŒพ๐Ÿ‘ฉโ€๐ŸŒพ๐Ÿ‘จโ€๐Ÿณ๐Ÿ‘ฉโ€๐Ÿณ๐Ÿ‘จโ€๐Ÿ”ง๐Ÿ‘ฉโ€๐Ÿ”ง๐Ÿ‘จโ€๐Ÿญ๐Ÿ‘ฉโ€๐Ÿญ๐Ÿ‘จโ€๐Ÿ’ผ๐Ÿ‘ฉโ€๐Ÿ’ผ๐Ÿ‘จโ€๐Ÿ”ฌ๐Ÿ‘ฉโ€๐Ÿ”ฌ๐Ÿ‘จโ€๐Ÿ’ป๐Ÿ‘ฉโ€๐Ÿ’ป๐Ÿ‘จโ€๐ŸŽค๐Ÿ‘ฉโ€๐ŸŽค๐Ÿ‘จโ€๐ŸŽจ๐Ÿ‘ฉโ€๐ŸŽจ๐Ÿ‘จโ€โœˆ๏ธ๐Ÿ‘ฉโ€โœˆ๏ธ๐Ÿ‘จโ€๐Ÿš€๐Ÿ‘ฉโ€๐Ÿš€๐Ÿ‘จโ€๐Ÿš’๐Ÿ‘ฉโ€๐Ÿš’๐Ÿ‘ฎโ€โ™‚๏ธ๐Ÿ‘ฎโ€โ™€๏ธ๐Ÿ•ต๏ธโ€โ™‚๏ธ๐Ÿ•ต๏ธโ€โ™€๏ธ๐Ÿ’‚โ€โ™‚๏ธ๐Ÿ’‚โ€โ™€๏ธ๐Ÿ‘ทโ€โ™‚๏ธ๐Ÿ‘ทโ€โ™€๏ธ๐Ÿ‘ณโ€โ™‚๏ธ๐Ÿ‘ณโ€โ™€๏ธ๐Ÿ‘ฑโ€โ™‚๏ธ๐Ÿ‘ฑโ€โ™€๏ธ๐ŸŽ…๐Ÿคถ๐Ÿ‘ธ๐Ÿคด๐Ÿ‘ฐ๐Ÿคต๐Ÿคฐ๐Ÿ‘ฒ๐Ÿ™โ€โ™‚๏ธ๐Ÿ™โ€โ™€๏ธ๐Ÿ™Žโ€โ™‚๏ธ๐Ÿ™Žโ€โ™€๏ธ๐Ÿ™…โ€โ™‚๏ธ๐Ÿ™…โ€โ™€๏ธ๐Ÿ™†โ€โ™‚๏ธ๐Ÿ™†โ€โ™€๏ธ๐Ÿ’โ€โ™‚๏ธ๐Ÿ’โ€โ™€๏ธ๐Ÿ™‹โ€โ™‚๏ธ๐Ÿ™‹โ€โ™€๏ธ๐Ÿ™‡โ€โ™‚๏ธ๐Ÿ™‡โ€โ™€๏ธ๐Ÿคฆโ€โ™‚๏ธ๐Ÿคฆโ€โ™€๏ธ๐Ÿคทโ€โ™‚๏ธ๐Ÿคทโ€โ™€๏ธ๐Ÿ’†โ€โ™‚๏ธ๐Ÿ’†โ€โ™€๏ธ๐Ÿ’‡โ€โ™‚๏ธ๐Ÿ’‡โ€โ™€๏ธ๐Ÿšถโ€โ™‚๏ธ๐Ÿšถโ€โ™€๏ธ๐Ÿƒโ€โ™‚๏ธ๐Ÿƒโ€โ™€๏ธ๐Ÿ’ƒ๐Ÿ•บ๐Ÿ‘ฏโ€โ™‚๏ธ๐Ÿ‘ฏโ€โ™€๏ธ๐Ÿ•ด๐Ÿ—ฃ๐Ÿ‘ค๐Ÿ‘ฅ๐Ÿ‘ซ๐Ÿ‘ฌ๐Ÿ‘ญ๐Ÿ’๐Ÿ’‘๐Ÿ‘ช๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ง๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง๐Ÿ‘จโ€๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘ง๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง๐Ÿ‘ฉโ€๐Ÿ‘ฆ๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ๐Ÿ‘ฉโ€๐Ÿ‘ง๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง๐Ÿ’ช๐Ÿคณ๐Ÿ‘ˆ๐Ÿ‘‰โ˜๏ธ๐Ÿ‘†๐Ÿ–•๐Ÿ‘‡โœŒ๐Ÿคž๐Ÿ––๐Ÿค˜๐Ÿ‘Š๐Ÿ–โœ‹๐Ÿ‘Œ๐Ÿ‘๐Ÿ‘ŽโœŠ๐Ÿ‘Š๐Ÿค›๐Ÿคœ๐Ÿคš๐Ÿ‘‹๐Ÿ‘โœ๐Ÿ‘๐Ÿ™Œ๐Ÿ™๐Ÿค๐Ÿ’…๐Ÿ‘‚๐Ÿ‘ƒ๐Ÿ‘ฃ๐Ÿ‘€๐Ÿ‘๐Ÿ‘…๐Ÿ‘„๐Ÿ’‹๐Ÿ’˜โค๐Ÿ’“๐Ÿ’”๐Ÿ’•๐Ÿ’–๐Ÿ’—๐Ÿ’™๐Ÿ’š๐Ÿ’›๐Ÿ’œ๐Ÿ–ค๐Ÿ’๐Ÿ’ž๐Ÿ’Ÿโฃ๐Ÿ’Œ๐Ÿ’ค๐Ÿ’ข๐Ÿ’ฃ๐Ÿ’ฅ๐Ÿ’ฆ๐Ÿ’จ๐Ÿ’ซ๐Ÿ’ฌ๐Ÿ—จ๐Ÿ—ฏ๐Ÿ’ญ๐Ÿ•ณ๐Ÿ‘“๐Ÿ•ถ๐Ÿ‘”๐Ÿ‘•๐Ÿ‘–๐Ÿ‘—๐Ÿ‘˜๐Ÿ‘™๐Ÿ‘š๐Ÿ‘›๐Ÿ‘œ๐Ÿ‘๐Ÿ›๐ŸŽ’๐Ÿ‘ž๐Ÿ‘Ÿ๐Ÿ‘ ๐Ÿ‘ก๐Ÿ‘ข๐Ÿ‘‘๐Ÿ‘’๐ŸŽฉ๐ŸŽ“โ›‘๐Ÿ“ฟ๐Ÿ’„๐Ÿ’๐Ÿ’Ž๐Ÿต๐Ÿ’๐Ÿฆ๐Ÿถ๐Ÿ•๐Ÿฉ๐Ÿบ๐ŸฆŠ๐Ÿฑ๐Ÿˆ๐Ÿฆ๐Ÿฏ๐Ÿ…๐Ÿ†๐Ÿด๐ŸŽ๐ŸฆŒ๐Ÿฆ„๐Ÿฎ๐Ÿ‚๐Ÿƒ๐Ÿ„๐Ÿท๐Ÿ–๐Ÿ—๐Ÿฝ๐Ÿ๐Ÿ‘๐Ÿ๐Ÿช๐Ÿซ๐Ÿ˜๐Ÿฆ๐Ÿญ๐Ÿ๐Ÿ€๐Ÿน๐Ÿฐ๐Ÿ‡๐Ÿฟ๐Ÿฆ‡๐Ÿป๐Ÿจ๐Ÿผ๐Ÿพ๐Ÿฆƒ๐Ÿ”๐Ÿ“๐Ÿฃ๐Ÿค๐Ÿฅ๐Ÿฆ๐Ÿง๐Ÿ•Š๐Ÿฆ…๐Ÿฆ†๐Ÿฆ‰๐Ÿธ๐ŸŠ๐Ÿข๐ŸฆŽ๐Ÿ๐Ÿฒ๐Ÿ‰๐Ÿณ๐Ÿ‹๐Ÿฌ๐ŸŸ๐Ÿ ๐Ÿก๐Ÿฆˆ๐Ÿ™๐Ÿš๐Ÿฆ€๐Ÿฆ๐Ÿฆ‘๐Ÿฆ‹๐ŸŒ๐Ÿ›๐Ÿœ๐Ÿ๐Ÿž๐Ÿ•ท๐Ÿ•ธ๐Ÿฆ‚๐Ÿ’๐ŸŒธ๐Ÿ’ฎ๐Ÿต๐ŸŒน๐Ÿฅ€๐ŸŒบ๐ŸŒป๐ŸŒผ๐ŸŒทโš˜๐ŸŒฑ๐ŸŒฒ๐ŸŒณ๐ŸŒด๐ŸŒต๐ŸŒพ๐ŸŒฟโ˜˜๐Ÿ€๐Ÿ๐Ÿ‚๐Ÿƒ๐Ÿ‡๐Ÿˆ๐Ÿ‰๐ŸŠ๐Ÿ‹๐ŸŒ๐Ÿ๐ŸŽ๐Ÿ๐Ÿ๐Ÿ‘๐Ÿ’๐Ÿ“๐Ÿ…๐Ÿฅ๐Ÿฅ‘๐Ÿ†๐Ÿฅ”๐Ÿฅ•๐ŸŒฝ๐ŸŒถ๐Ÿฅ’๐Ÿ„๐Ÿฅœ๐ŸŒฐ๐Ÿž๐Ÿฅ๐Ÿฅ–๐Ÿฅž๐Ÿง€๐Ÿ–๐Ÿ—๐Ÿฅ“๐Ÿ”๐ŸŸ๐Ÿ•๐ŸŒญ๐ŸŒฎ๐ŸŒฏ๐Ÿฅ™๐Ÿฅš๐Ÿณ๐Ÿฅ˜๐Ÿฒ๐Ÿฅ—๐Ÿฟ๐Ÿฑ๐Ÿ˜๐Ÿ™๐Ÿš๐Ÿ›๐Ÿœ๐Ÿ๐Ÿ ๐Ÿข๐Ÿฃ๐Ÿค๐Ÿฅ๐Ÿก๐Ÿฆ๐Ÿง๐Ÿจ๐Ÿฉ๐Ÿช๐ŸŽ‚๐Ÿฐ๐Ÿซ๐Ÿฌ๐Ÿญ๐Ÿฎ๐Ÿฏ๐Ÿผ๐Ÿฅ›โ˜•๐Ÿต๐Ÿถ๐Ÿพ๐Ÿท๐Ÿธ๐Ÿน๐Ÿบ๐Ÿป๐Ÿฅ‚๐Ÿฝ๐Ÿด๐Ÿฅ„๐Ÿ”ช๐Ÿบ๐ŸŽƒ๐ŸŽ„๐ŸŽ†๐ŸŽ‡โœจ๐ŸŽˆ๐ŸŽ‰๐ŸŽŠ๐ŸŽ‹๐ŸŽ๐ŸŽŽ๐ŸŽ๐ŸŽ๐ŸŽ‘๐ŸŽ€๐ŸŽ๐ŸŽ—๐ŸŽŸ๐ŸŽซ๐ŸŽ–๐Ÿ†๐Ÿ…๐Ÿฅ‡๐Ÿฅˆ๐Ÿฅ‰โšฝ๏ธโšพ๏ธ๐Ÿ€๐Ÿ๐Ÿˆ๐Ÿ‰๐ŸŽพ๐ŸŽฑ๐ŸŽณ๐Ÿ๐Ÿ‘๐Ÿ’๐Ÿ“๐Ÿธ๐ŸฅŠ๐Ÿฅ‹๐Ÿฅ…๐ŸŽฏโ›ณ๐ŸŒ๏ธโ€โ™‚๏ธ๐ŸŒ๏ธโ€โ™€๏ธโ›ธ๐ŸŽฃ๐ŸŽฝ๐ŸŽฟโ›ท๐Ÿ‚๐Ÿ„โ€โ™‚๏ธ๐Ÿ„โ€โ™€๏ธ๐Ÿ‡๐ŸŠโ€โ™‚๏ธ๐ŸŠโ€โ™€๏ธโ›น๏ธโ€โ™‚๏ธโ›น๏ธโ€โ™€๏ธ๐Ÿ‹๏ธโ€โ™‚๏ธ๐Ÿ‹๏ธโ€โ™€๏ธ๐Ÿšดโ€โ™‚๏ธ๐Ÿšดโ€โ™€๏ธ๐Ÿšตโ€โ™‚๏ธ๐Ÿšตโ€โ™€๏ธ๐ŸŽ๐Ÿ๐Ÿคธโ€โ™‚๏ธ๐Ÿคธโ€โ™€๏ธ๐Ÿคผโ€โ™‚๏ธ๐Ÿคผโ€โ™€๏ธ๐Ÿคฝโ€โ™‚๏ธ๐Ÿคฝโ€โ™€๏ธ๐Ÿคพโ€โ™‚๏ธ๐Ÿคพโ€โ™€๏ธ๐Ÿคบ๐Ÿคนโ€โ™‚๏ธ๐Ÿคนโ€โ™€๏ธ๐ŸŽฎ๐Ÿ•น๐ŸŽฒโ™ ๏ธโ™ฅ๏ธโ™ฆ๏ธโ™ฃ๏ธ๐Ÿƒ๐Ÿ€„๐ŸŽด๐ŸŒ๐ŸŒŽ๐ŸŒ๐ŸŒ๐Ÿ—บ๐Ÿ”โ›ฐ๐ŸŒ‹๐Ÿ—ป๐Ÿ•๐Ÿ–๐Ÿœ๐Ÿ๐Ÿž๐ŸŸ๐Ÿ›๐Ÿ—๐Ÿ˜๐Ÿ™๐Ÿš๐Ÿ ๐Ÿก๐Ÿข๐Ÿฃ๐Ÿค๐Ÿฅ๐Ÿฆ๐Ÿจ๐Ÿฉ๐Ÿช๐Ÿซ๐Ÿฌ๐Ÿญ๐Ÿฏ๐Ÿฐ๐Ÿ’’๐Ÿ—ผ๐Ÿ—ฝโ›ช๐Ÿ•Œ๐Ÿ•โ›ฉ๐Ÿ•‹โ›ฒโ›บ๐ŸŒ๐ŸŒƒ๐ŸŒ„๐ŸŒ…๐ŸŒ†๐ŸŒ‡๐ŸŒ‰โ›ผโ™จ๏ธ๐ŸŒŒ๐ŸŽ ๐ŸŽก๐ŸŽข๐Ÿ’ˆ๐ŸŽช๐ŸŽญ๐Ÿ–ผ๐ŸŽจ๐ŸŽฐ๐Ÿš‚๐Ÿšƒ๐Ÿš„๐Ÿš…๐Ÿš†๐Ÿš‡๐Ÿšˆ๐Ÿš‰๐ŸšŠ๐Ÿš๐Ÿšž๐Ÿš‹๐ŸšŒ๐Ÿš๐ŸšŽ๐Ÿš๐Ÿš‘๐Ÿš’๐Ÿš“๐Ÿš”๐Ÿš•๐Ÿš–๐Ÿš—๐Ÿš˜๐Ÿš™๐Ÿšš๐Ÿš›โ›Ÿ๐Ÿšœ๐Ÿšฒ๐Ÿ›ด๐Ÿ›ต๐Ÿš๐Ÿ›ฃ๐Ÿ›คโ›ฝ๐Ÿšจ๐Ÿšฅ๐Ÿšฆ๐Ÿšง๐Ÿ›‘โš“โ›ต๐Ÿšฃโ€โ™‚๏ธ๐Ÿšฃโ€โ™€๏ธ๐Ÿ›ถ๐Ÿšค๐Ÿ›ณโ›ด๐Ÿ›ฅ๐Ÿšขโœˆ๐Ÿ›ฉ๐Ÿ›ซ๐Ÿ›ฌ๐Ÿ’บ๐Ÿš๐ŸšŸ๐Ÿš ๐Ÿšก๐Ÿš€๐Ÿ›ฐ๐Ÿ›Ž๐Ÿšช๐Ÿ›Œ๐Ÿ›๐Ÿ›‹๐Ÿšฝ๐Ÿšฟ๐Ÿ›€๐Ÿ›โŒ›โณโŒšโฐโฑโฒ๐Ÿ•ฐ๐Ÿ•›๐Ÿ•ง๐Ÿ•๐Ÿ•œ๐Ÿ•‘๐Ÿ•๐Ÿ•’๐Ÿ•ž๐Ÿ•“๐Ÿ•Ÿ๐Ÿ•”๐Ÿ• ๐Ÿ••๐Ÿ•ก๐Ÿ•–๐Ÿ•ข๐Ÿ•—๐Ÿ•ฃ๐Ÿ•˜๐Ÿ•ค๐Ÿ•™๐Ÿ•ฅ๐Ÿ•š๐Ÿ•ฆ๐ŸŒ‘๐ŸŒ’๐ŸŒ“๐ŸŒ”๐ŸŒ•๐ŸŒ–๐ŸŒ—๐ŸŒ˜๐ŸŒ™๐ŸŒš๐ŸŒ›๐ŸŒœ๐ŸŒกโ˜€๏ธ๐ŸŒ๐ŸŒžโญ๐ŸŒŸ๐ŸŒ โ˜๏ธโ›…โ›ˆ๐ŸŒค๐ŸŒฅ๐ŸŒฆ๐ŸŒง๐ŸŒจ๐ŸŒฉ๐ŸŒช๐ŸŒซ๐ŸŒฌ๐ŸŒ€๐ŸŒˆ๐ŸŒ‚โ˜‚๏ธโ˜”โ›ฑโšกโ„โ˜ƒ๏ธโ›„โ˜„๐Ÿ”ฅ๐Ÿ’ง๐ŸŒŠ๐Ÿ”‡๐Ÿ”ˆ๐Ÿ”‰๐Ÿ”Š๐Ÿ“ข๐Ÿ“ฃ๐Ÿ“ฏ๐Ÿ””๐Ÿ”•๐ŸŽผ๐ŸŽต๐ŸŽถ๐ŸŽ™๐ŸŽš๐ŸŽ›๐ŸŽค๐ŸŽง๐Ÿ“ป๐ŸŽท๐ŸŽธ๐ŸŽน๐ŸŽบ๐ŸŽป๐Ÿฅ๐Ÿ“ฑ๐Ÿ“ฒโ˜Ž๏ธ๐Ÿ“ž๐Ÿ“Ÿ๐Ÿ“ ๐Ÿ”‹๐Ÿ”Œ๐Ÿ’ป๐Ÿ–ฅ๐Ÿ–จโŒจ๐Ÿ–ฑ๐Ÿ–ฒ๐Ÿ’ฝ๐Ÿ’พ๐Ÿ’ฟ๐Ÿ“€๐ŸŽฅ๐ŸŽž๐Ÿ“ฝ๐ŸŽฌ๐Ÿ“บ๐Ÿ“ท๐Ÿ“ธ๐Ÿ“น๐Ÿ“ผ๐Ÿ”๐Ÿ”Ž๐Ÿ”ฌ๐Ÿ”ญ๐Ÿ“ก๐Ÿ•ฏ๐Ÿ’ก๐Ÿ”ฆ๐Ÿฎ๐Ÿ“”๐Ÿ“•๐Ÿ“–๐Ÿ“—๐Ÿ“˜๐Ÿ“™๐Ÿ“š๐Ÿ““๐Ÿ“’๐Ÿ“ƒ๐Ÿ“œ๐Ÿ“„๐Ÿ“ฐ๐Ÿ—ž๐Ÿ“‘๐Ÿ”–๐Ÿท๐Ÿ’ฐ๐Ÿ’ด๐Ÿ’ต๐Ÿ’ถ๐Ÿ’ท๐Ÿ’ธ๐Ÿ’ณ๐Ÿ’ฑ๐Ÿ’ฒโœ‰๐Ÿ“ง๐Ÿ“จ๐Ÿ“ฉ๐Ÿ“ค๐Ÿ“ฅ๐Ÿ“ฆ๐Ÿ“ซ๐Ÿ“ช๐Ÿ“ฌ๐Ÿ“ญ๐Ÿ“ฎ๐Ÿ—ณโœโœ’๐Ÿ–‹๐Ÿ–Š๐Ÿ–Œ๐Ÿ–๐Ÿ“๐Ÿ’ผ๐Ÿ“๐Ÿ“‚๐Ÿ—‚๐Ÿ“…๐Ÿ“†๐Ÿ—’๐Ÿ—“๐Ÿ“‡๐Ÿ“ˆ๐Ÿ“‰๐Ÿ“Š๐Ÿ“‹๐Ÿ“Œ๐Ÿ“๐Ÿ“Ž๐Ÿ–‡๐Ÿ“๐Ÿ“โœ‚๏ธ๐Ÿ—ƒ๐Ÿ—„๐Ÿ—‘๐Ÿ”’๐Ÿ”“๐Ÿ”๐Ÿ”๐Ÿ”‘๐Ÿ—๐Ÿ”จโ›โš’๐Ÿ› ๐Ÿ—กโš”๐Ÿ”ซ๐Ÿน๐Ÿ›ก๐Ÿ”ง๐Ÿ”ฉโš™๐Ÿ—œโš—โš–๐Ÿ”—โ›“๐Ÿ’‰๐Ÿ’Š๐Ÿšฌโšฐโšฑ๐Ÿ—ฟ๐Ÿ›ข๐Ÿ”ฎ๐Ÿ”ฎ๐Ÿง๐Ÿšฎ๐Ÿšฐโ™ฟ๐Ÿšน๐Ÿšบ๐Ÿšป๐Ÿšผ๐Ÿšพ๐Ÿ›‚๐Ÿ›ƒ๐Ÿ›„๐Ÿ›…โš ๏ธ๐Ÿšธโ›”๐Ÿšซ๐Ÿšณ๐Ÿšญ๐Ÿšฏ๐Ÿšฑ๐Ÿšท๐Ÿ“ต๐Ÿ”žโ˜ขโ˜ฃโฌ†๏ธโ†—๏ธโžก๏ธโ†˜๏ธโฌ‡๏ธโ†™๏ธโฌ…๏ธโ†–๏ธโ†•๏ธโ†”๏ธโ†ฉโ†ชโคด๏ธโคต๏ธ๐Ÿ”ƒ๐Ÿ”„๐Ÿ”™๐Ÿ”š๐Ÿ”›๐Ÿ”œ๐Ÿ”๐Ÿ›โš›๐Ÿ•‰โœกโ˜ธโ˜ฏ๏ธโ˜ฆโ˜ฎ๐Ÿ•Ž๐Ÿ”ฏโ™ˆโ™‰โ™Šโ™‹โ™Œโ™โ™Žโ™โ™โ™‘โ™’โ™“โ›Ž๐Ÿ”€๐Ÿ”๐Ÿ”‚โ–ถ๏ธโฉโญโฏโ—€๏ธโชโฎ๐Ÿ”ผโซ๐Ÿ”ฝโฌโธโนโบโ๐ŸŽฆ๐Ÿ”…๐Ÿ”†๐Ÿ“ถ๐Ÿ“ณ๐Ÿ“ดโ™ป๏ธ๐Ÿ“›โšœ๐Ÿ”ฐ๐Ÿ”ฑโญ•โœ…โ˜‘โœ”โœ–โŒโŽโž•โ™€๏ธโ™‚๏ธโš•โž–โž—โžฐโžฟใ€ฝโœณโœดโ‡โ‰๏ธโ“โ”โ•โ—ใ€ฐ๐Ÿ”Ÿ๐Ÿ’ฏ๐Ÿ” ๐Ÿ”ก๐Ÿ”ข๐Ÿ”ฃ๐Ÿ”ค๐Ÿ…ฐ๏ธ๐Ÿ†Ž๏ธ๐Ÿ…ฑ๏ธ๐Ÿ†‘๏ธ๐Ÿ†’๏ธ๐Ÿ†“๏ธโ„น๐Ÿ†”๏ธโ“‚๏ธ๐Ÿ†•๏ธ๐Ÿ†–๏ธ๐Ÿ…พ๏ธ๐Ÿ†—๏ธ๐Ÿ…ฟ๏ธ๐Ÿ†˜๏ธ๐Ÿ†™๏ธ๐Ÿ†š๏ธ๐Ÿˆ๐Ÿˆ‚๐Ÿˆท๐Ÿˆถ๐Ÿˆฏ๐Ÿ‰๐Ÿˆน๐Ÿˆš๐Ÿˆฒ๐Ÿ‰‘๐Ÿˆธ๐Ÿˆด๐ŸˆณใŠ—ใŠ™๐Ÿˆบ๐Ÿˆตโ–ซ๏ธโ—ปโ—ผโ—ฝโ—พโฌ›โฌœ๐Ÿ”ถ๏ธ๐Ÿ”ท๏ธ๐Ÿ”ธ๏ธ๐Ÿ”น๏ธ๐Ÿ”บ๏ธ๐Ÿ”ป๐Ÿ’ ๐Ÿ”˜๐Ÿ”ฒ๐Ÿ”ณโšชโšซ๐Ÿ”ด๐Ÿ”ต๐Ÿ๐Ÿšฉ๐Ÿด๐Ÿณ๐Ÿณ๏ธโ€๐ŸŒˆโš€โšโš‚โšƒโš„โš…โ›พโ™พ๐Ÿ‡ฆ๐Ÿ‡จ๐Ÿ‡ฆ๐Ÿ‡ฉ๐Ÿ‡ฆ๐Ÿ‡ช๐Ÿ‡ฆ๐Ÿ‡ซ๐Ÿ‡ฆ๐Ÿ‡ฌ๐Ÿ‡ฆ๐Ÿ‡ฎ๐Ÿ‡ฆ๐Ÿ‡ฑ๐Ÿ‡ฆ๐Ÿ‡ฒ๐Ÿ‡ฆ๐Ÿ‡ด๐Ÿ‡ฆ๐Ÿ‡ถ๐Ÿ‡ฆ๐Ÿ‡ท๐Ÿ‡ฆ๐Ÿ‡ธ๐Ÿ‡ฆ๐Ÿ‡น๐Ÿ‡ฆ๐Ÿ‡บ๐Ÿ‡ฆ๐Ÿ‡ผ๐Ÿ‡ฆ๐Ÿ‡ฝ๐Ÿ‡ฆ๐Ÿ‡ฟ๐Ÿ‡ง๐Ÿ‡ฆ๐Ÿ‡ง๐Ÿ‡ง๐Ÿ‡ง๐Ÿ‡ฉ๐Ÿ‡ง๐Ÿ‡ช๐Ÿ‡ง๐Ÿ‡ซ๐Ÿ‡ง๐Ÿ‡ฌ๐Ÿ‡ง๐Ÿ‡ญ๐Ÿ‡ง๐Ÿ‡ฎ๐Ÿ‡ง๐Ÿ‡ฏ๐Ÿ‡ง๐Ÿ‡ฑ๐Ÿ‡ง๐Ÿ‡ฒ๐Ÿ‡ง๐Ÿ‡ณ๐Ÿ‡ง๐Ÿ‡ด๐Ÿ‡ง๐Ÿ‡ถ๐Ÿ‡ง๐Ÿ‡ท๐Ÿ‡ง๐Ÿ‡ธ๐Ÿ‡ง๐Ÿ‡น๐Ÿ‡ง๐Ÿ‡ผ๐Ÿ‡ง๐Ÿ‡พ๐Ÿ‡ง๐Ÿ‡ฟ๐Ÿ‡จ๐Ÿ‡ฆ๐Ÿ‡จ๐Ÿ‡จ๐Ÿ‡จ๐Ÿ‡ฉ๐Ÿ‡จ๐Ÿ‡ซ๐Ÿ‡จ๐Ÿ‡ฌ๐Ÿ‡จ๐Ÿ‡ญ๐Ÿ‡จ๐Ÿ‡ฎ๐Ÿ‡จ๐Ÿ‡ฐ๐Ÿ‡จ๐Ÿ‡ฑ๐Ÿ‡จ๐Ÿ‡ฒ๐Ÿ‡จ๐Ÿ‡ณ๐Ÿ‡จ๐Ÿ‡ด๐Ÿ‡จ๐Ÿ‡ท๐Ÿ‡จ๐Ÿ‡บ๐Ÿ‡จ๐Ÿ‡ป๐Ÿ‡จ๐Ÿ‡ผ๐Ÿ‡จ๐Ÿ‡ฝ๐Ÿ‡จ๐Ÿ‡พ๐Ÿ‡จ๐Ÿ‡ฟ๐Ÿ‡ฉ๐Ÿ‡ช๐Ÿ‡ฉ๐Ÿ‡ฏ๐Ÿ‡ฉ๐Ÿ‡ฐ๐Ÿ‡ฉ๐Ÿ‡ฒ๐Ÿ‡ฉ๐Ÿ‡ด๐Ÿ‡ฉ๐Ÿ‡ฟ๐Ÿ‡ช๐Ÿ‡จ๐Ÿ‡ช๐Ÿ‡ช๐Ÿ‡ช๐Ÿ‡ฌ๐Ÿ‡ช๐Ÿ‡ญ๐Ÿ‡ช๐Ÿ‡ท๐Ÿ‡ช๐Ÿ‡ธ๐Ÿ‡ช๐Ÿ‡น๐Ÿ‡ช๐Ÿ‡บ๐Ÿ‡ซ๐Ÿ‡ฎ๐Ÿ‡ซ๐Ÿ‡ฏ๐Ÿ‡ซ๐Ÿ‡ฐ๐Ÿ‡ซ๐Ÿ‡ฒ๐Ÿ‡ซ๐Ÿ‡ด๐Ÿ‡ซ๐Ÿ‡ท๐Ÿ‡ฌ๐Ÿ‡ฆ๐Ÿ‡ฌ๐Ÿ‡ง๐Ÿ‡ฌ๐Ÿ‡ฉ๐Ÿ‡ฌ๐Ÿ‡ช๐Ÿ‡ฌ๐Ÿ‡ซ๐Ÿ‡ฌ๐Ÿ‡ฌ๐Ÿ‡ฌ๐Ÿ‡ญ๐Ÿ‡ฌ๐Ÿ‡ฎ๐Ÿ‡ฌ๐Ÿ‡ฑ๐Ÿ‡ฌ๐Ÿ‡ฒ๐Ÿ‡ฌ๐Ÿ‡ณ๐Ÿ‡ฌ๐Ÿ‡ต๐Ÿ‡ฌ๐Ÿ‡ถ๐Ÿ‡ฌ๐Ÿ‡ท๐Ÿ‡ฌ๐Ÿ‡ธ๐Ÿ‡ฌ๐Ÿ‡น๐Ÿ‡ฌ๐Ÿ‡บ๐Ÿ‡ฌ๐Ÿ‡ผ๐Ÿ‡ฌ๐Ÿ‡พ๐Ÿ‡ญ๐Ÿ‡ฐ๐Ÿ‡ญ๐Ÿ‡ฒ๐Ÿ‡ญ๐Ÿ‡ณ๐Ÿ‡ญ๐Ÿ‡ท๐Ÿ‡ญ๐Ÿ‡น๐Ÿ‡ญ๐Ÿ‡บ๐Ÿ‡ฎ๐Ÿ‡จ๐Ÿ‡ฎ๐Ÿ‡ฉ๐Ÿ‡ฎ๐Ÿ‡ช๐Ÿ‡ฎ๐Ÿ‡ฑ๐Ÿ‡ฎ๐Ÿ‡ฒ๐Ÿ‡ฎ๐Ÿ‡ณ๐Ÿ‡ฎ๐Ÿ‡ด๐Ÿ‡ฎ๐Ÿ‡ถ๐Ÿ‡ฎ๐Ÿ‡ท๐Ÿ‡ฎ๐Ÿ‡ธ๐Ÿ‡ฎ๐Ÿ‡น๐Ÿ‡ฏ๐Ÿ‡ช๐Ÿ‡ฏ๐Ÿ‡ฒ๐Ÿ‡ฏ๐Ÿ‡ด๐Ÿ‡ฏ๐Ÿ‡ต๐Ÿ‡ฐ๐Ÿ‡ช๐Ÿ‡ฐ๐Ÿ‡ฌ๐Ÿ‡ฐ๐Ÿ‡ญ๐Ÿ‡ฐ๐Ÿ‡ฎ๐Ÿ‡ฐ๐Ÿ‡ฒ๐Ÿ‡ฐ๐Ÿ‡ณ๐Ÿ‡ฐ๐Ÿ‡ต๐Ÿ‡ฐ๐Ÿ‡ท๐Ÿ‡ฐ๐Ÿ‡ผ๐Ÿ‡ฐ๐Ÿ‡พ๐Ÿ‡ฐ๐Ÿ‡ฟ๐Ÿ‡ฑ๐Ÿ‡ฆ๐Ÿ‡ฑ๐Ÿ‡ง๐Ÿ‡ฑ๐Ÿ‡จ๐Ÿ‡ฑ๐Ÿ‡ฎ๐Ÿ‡ฑ๐Ÿ‡ฐ๐Ÿ‡ฑ๐Ÿ‡ท๐Ÿ‡ฑ๐Ÿ‡ธ๐Ÿ‡ฑ๐Ÿ‡น๐Ÿ‡ฑ๐Ÿ‡บ๐Ÿ‡ฑ๐Ÿ‡ป๐Ÿ‡ฑ๐Ÿ‡พ๐Ÿ‡ฒ๐Ÿ‡ฆ๐Ÿ‡ฒ๐Ÿ‡จ๐Ÿ‡ฒ๐Ÿ‡ฉ๐Ÿ‡ฒ๐Ÿ‡ช๐Ÿ‡ฒ๐Ÿ‡ฌ๐Ÿ‡ฒ๐Ÿ‡ญ๐Ÿ‡ฒ๐Ÿ‡ฐ๐Ÿ‡ฒ๐Ÿ‡ฑ๐Ÿ‡ฒ๐Ÿ‡ฒ๐Ÿ‡ฒ๐Ÿ‡ณ๐Ÿ‡ฒ๐Ÿ‡ด๐Ÿ‡ฒ๐Ÿ‡ต๐Ÿ‡ฒ๐Ÿ‡ถ๐Ÿ‡ฒ๐Ÿ‡ท๐Ÿ‡ฒ๐Ÿ‡ธ๐Ÿ‡ฒ๐Ÿ‡น๐Ÿ‡ฒ๐Ÿ‡บ๐Ÿ‡ฒ๐Ÿ‡ป๐Ÿ‡ฒ๐Ÿ‡ผ๐Ÿ‡ฒ๐Ÿ‡ฝ๐Ÿ‡ฒ๐Ÿ‡พ๐Ÿ‡ฒ๐Ÿ‡ฟ๐Ÿ‡ณ๐Ÿ‡ฆ๐Ÿ‡ณ๐Ÿ‡จ๐Ÿ‡ณ๐Ÿ‡ช๐Ÿ‡ณ๐Ÿ‡ซ๐Ÿ‡ณ๐Ÿ‡ฌ๐Ÿ‡ณ๐Ÿ‡ฎ๐Ÿ‡ณ๐Ÿ‡ฑ๐Ÿ‡ณ๐Ÿ‡ด๐Ÿ‡ณ๐Ÿ‡ต๐Ÿ‡ณ๐Ÿ‡ท๐Ÿ‡ณ๐Ÿ‡บ๐Ÿ‡ณ๐Ÿ‡ฟ๐Ÿ‡ด๐Ÿ‡ฒ๐Ÿ‡ต๐Ÿ‡ฆ๐Ÿ‡ต๐Ÿ‡ช๐Ÿ‡ต๐Ÿ‡ซ๐Ÿ‡ต๐Ÿ‡ฌ๐Ÿ‡ต๐Ÿ‡ญ๐Ÿ‡ต๐Ÿ‡ฐ๐Ÿ‡ต๐Ÿ‡ฑ๐Ÿ‡ต๐Ÿ‡ฒ๐Ÿ‡ต๐Ÿ‡ณ๐Ÿ‡ต๐Ÿ‡ท๐Ÿ‡ต๐Ÿ‡ธ๐Ÿ‡ต๐Ÿ‡น๐Ÿ‡ต๐Ÿ‡ผ๐Ÿ‡ต๐Ÿ‡พ๐Ÿ‡ถ๐Ÿ‡ฆ๐Ÿ‡ท๐Ÿ‡ช๐Ÿ‡ท๐Ÿ‡ด๐Ÿ‡ท๐Ÿ‡ธ๐Ÿ‡ท๐Ÿ‡บ๐Ÿ‡ท๐Ÿ‡ผ๐Ÿ‡ธ๐Ÿ‡ฆ๐Ÿ‡ธ๐Ÿ‡ง๐Ÿ‡ธ๐Ÿ‡จ๐Ÿ‡ธ๐Ÿ‡ฉ๐Ÿ‡ธ๐Ÿ‡ช๐Ÿ‡ธ๐Ÿ‡ฌ๐Ÿ‡ธ๐Ÿ‡ญ๐Ÿ‡ธ๐Ÿ‡ฎ๐Ÿ‡ธ๐Ÿ‡ฐ๐Ÿ‡ธ๐Ÿ‡ฑ๐Ÿ‡ธ๐Ÿ‡ฒ๐Ÿ‡ธ๐Ÿ‡ณ๐Ÿ‡ธ๐Ÿ‡ด๐Ÿ‡ธ๐Ÿ‡ท๐Ÿ‡ธ๐Ÿ‡ธ๐Ÿ‡ธ๐Ÿ‡น๐Ÿ‡ธ๐Ÿ‡ป๐Ÿ‡ธ๐Ÿ‡ฝ๐Ÿ‡ธ๐Ÿ‡พ๐Ÿ‡ธ๐Ÿ‡ฟ๐Ÿ‡น๐Ÿ‡ฆ๐Ÿ‡น๐Ÿ‡จ๐Ÿ‡น๐Ÿ‡ฉ๐Ÿ‡น๐Ÿ‡ซ๐Ÿ‡น๐Ÿ‡ฌ๐Ÿ‡น๐Ÿ‡ญ๐Ÿ‡น๐Ÿ‡ฏ๐Ÿ‡น๐Ÿ‡ฐ๐Ÿ‡น๐Ÿ‡ฑ๐Ÿ‡น๐Ÿ‡ฒ๐Ÿ‡น๐Ÿ‡ณ๐Ÿ‡น๐Ÿ‡ด๐Ÿ‡น๐Ÿ‡ท๐Ÿ‡น๐Ÿ‡น๐Ÿ‡น๐Ÿ‡ป๐Ÿ‡น๐Ÿ‡ผ๐Ÿ‡น๐Ÿ‡ฟ๐Ÿ‡บ๐Ÿ‡ฆ๐Ÿ‡บ๐Ÿ‡ฌ๐Ÿ‡บ๐Ÿ‡ณ๐Ÿ‡บ๐Ÿ‡ธ๐Ÿ‡บ๐Ÿ‡พ๐Ÿ‡บ๐Ÿ‡ฟ๐Ÿ‡ป๐Ÿ‡ฆ๐Ÿ‡ป๐Ÿ‡จ๐Ÿ‡ป๐Ÿ‡ช๐Ÿ‡ป๐Ÿ‡ฌ๐Ÿ‡ป๐Ÿ‡ฎ๐Ÿ‡ป๐Ÿ‡ณ๐Ÿ‡ป๐Ÿ‡บ๐Ÿ‡ผ๐Ÿ‡ซ๐Ÿ‡ผ๐Ÿ‡ธ๐Ÿ‡ฝ๐Ÿ‡ฐ๐Ÿ‡พ๐Ÿ‡ช๐Ÿ‡พ๐Ÿ‡น๐Ÿ‡ฟ๐Ÿ‡ฆ๐Ÿ‡ฟ๐Ÿ‡ฒ๐Ÿ‡ฟ๐Ÿ‡ผ8<br/><br/><br/><br/>Sent from my Samsung Galaxy smartphone.</align>";
int font_size = 50;

int counter = 0;
void _button_clicked(void *data, Evas_Object *obj, void *event_info)
{
   APP *app = data;

  font_size += 10;
  Evas_Textblock_Style *style = evas_textblock_style_new();
  char buffer[100] = {0};
  sprintf(buffer, "DEFAULT='font=NotoColorEmoji font_size=%i color=red ellipsis=-1.0 wrap=mixed'", font_size);
  evas_textblock_style_set(style, buffer);
  evas_object_textblock_style_set(app->tb1, style);
  evas_textblock_style_free(style);
  style = NULL;
}

EAPI_MAIN int
elm_main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
{
  APP *app = calloc(1, sizeof(APP));
  Evas_Object *win, *scroller1, *scroller2, *box;

  elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);

  win = elm_win_util_standard_add("", "");
  elm_win_autodel_set(win, EINA_TRUE);

  box = elm_box_add(win);
  evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
  evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
  scroller1 = elm_scroller_add(win);
  evas_object_size_hint_weight_set(scroller1, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
  evas_object_size_hint_align_set(scroller1, EVAS_HINT_FILL, EVAS_HINT_FILL);

  app->tb1 = evas_object_textblock_add(win);
  Evas_Textblock_Style *style = evas_textblock_style_new();
  char buffer[100] = {0};
  sprintf(buffer, "DEFAULT='font=NotoColorEmoji font_size=%i color=red ellipsis=-1.0 wrap=mixed'", font_size);
  evas_textblock_style_set(style, buffer);
  evas_object_textblock_style_set(app->tb1, style);
  evas_textblock_style_free(style);
  style = NULL;

  evas_font_cache_set(evas_object_evas_get(app->tb1), 0);

  int w,h;
  evas_object_textblock_text_markup_set(app->tb1, "");
  evas_object_size_hint_min_set(app->tb1, 400, 400);
  elm_object_content_set(scroller1, app->tb1);
  elm_box_pack_end(box, scroller1);
  elm_object_content_set(win, box);

  app->btnLoad = elm_button_add(win);
  elm_object_text_set(app->btnLoad, "Scale Font");
  evas_object_smart_callback_add(app->btnLoad, "clicked", _button_clicked, app);
  evas_object_show(app->btnLoad);
  evas_object_move(app->btnLoad, 0, 20);
  evas_object_resize(app->btnLoad, 150, 20);

  evas_object_textblock_text_markup_set(app->tb1, text);
  evas_object_textblock_size_formatted_get(app->tb1, &w, &h);
  evas_object_size_hint_min_set(app->tb1, 400, w/400 + h + 150);

  evas_object_resize(win, 400, 400);
  evas_object_show(box);
  evas_object_show(scroller1);
  evas_object_show(scroller2);
  evas_object_show(win);
  elm_run();

  return 0;
}
ELM_MAIN()

```

Reviewers: raster, woohyun, bowonryu, bu5hm4n, zmike, segfaultxavi

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Maniphest Tasks: T8727

Differential Revision: https://phab.enlightenment.org/D11861

Change-Id: I602e18fc2918af94dd92636fdc718e473fe72ec6

4 years agobenchmark: eina: remove outdated ecore_hash
Stefan Schmidt [Wed, 17 Jun 2020 11:21:24 +0000 (13:21 +0200)]
benchmark: eina: remove outdated ecore_hash

Ecore_hash is an ancestor of eina_hash and not used anywhere anymore.
We simply forgot to remove it from our benchmark utility.

Together with ecore_hash we are removing ecore_strings, which uses it,
and the corresponding benchmark files.

Signed-off-by: Stefan Schmidt <s.schmidt@samsung.com>
Reviewed-by: Marcel Hollerbach <mail@marcel-hollerbach.de>
Differential Revision: https://phab.enlightenment.org/D12042

4 years agowindows: Fix path for file sanitization
Wander Lairson Costa [Tue, 23 Jun 2020 15:21:10 +0000 (15:21 +0000)]
windows: Fix path for file sanitization

```
> c:\
> cd /windows
```

Are valid paths. Paths starting with '\' or '/' should be considered
absolute paths.

Reviewed-by: Vincent Torri <vincent.torri@gmail.com>
Reviewed-by: Joรฃo Paulo Taylor Ienczak Zanette <joao.tiz@expertisesolutions.com.br>
Reviewed-by: Stefan Schmidt <stefan@datenfreihafen.org>
Differential Revision: https://phab.enlightenment.org/D12022

4 years agoFix typos - (Part #3)
Elyes HAOUAS [Mon, 22 Jun 2020 18:21:01 +0000 (18:21 +0000)]
Fix typos - (Part #3)

Fix some typos

Reviewed-by: Stefan Schmidt <stefan@datenfreihafen.org>
Differential Revision: https://phab.enlightenment.org/D12017

4 years agoFix typos - (Part #2)
Elyes HAOUAS [Fri, 26 Jun 2020 09:01:32 +0000 (09:01 +0000)]
Fix typos - (Part #2)

Fix some typos

Reviewed-by: Stefan Schmidt <stefan@datenfreihafen.org>
Differential Revision: https://phab.enlightenment.org/D12016

4 years agoefl_ui_image: fix hit_rect geometry 84/237884/1
Jaehyun Cho [Mon, 6 Jul 2020 04:42:11 +0000 (13:42 +0900)]
efl_ui_image: fix hit_rect geometry

In the past version, "clicked" event happens although image file is not
set and resizable is false and scale type is expand.

To keep the backward compatibility of supporting "clicked" event,
hit_rect geometry is set to be the same with object geometry if image
file is not set.

In the past version, hit_rect geometry is not the same with object if
image file is not set and resizable is false and scale type is not
expand.
e.g. In the past version, if object size is (360, 80), then hit_rect
     size is set to be (360, 360).

To fix the bug in the past version related to hit_rect, hit_rect
geometry is set to be the same with object geometry if image file is not
set regardless of resizable and scale type.

The above logic is not applied to upstream.
Because size calculation logic between upstream and tizen is different
so _image_sizing_eval() is not called in upstream if image file is not
set.

@tizen_fix

Change-Id: I5bfb1c973b9710b01594d2c1cfaa538dab02a2c2

4 years agoefl_ui_image: fix hit_rect geometry only if scale type is expand 43/237843/5
Jaehyun Cho [Mon, 6 Jul 2020 04:42:11 +0000 (13:42 +0900)]
efl_ui_image: fix hit_rect geometry only if scale type is expand

In the past version, "clicked" event happens although image file is not
set and resizable is false and scale type is expand.

To keep the backward compatibility of supporting "clicked" event,
hit_rect geometry is set to be the same with object geometry if image
file is not set and scale type is expand.

The above logic is not applied to upstream.
Because size calculation logic between upstream and tizen is different
so _image_sizing_eval() is not called in upstream if image file is not
set.

@tizen_fix

Change-Id: I39e094702d631e2c3150ae7a9b4d8e314468fa5d

4 years agoProtect EINA_(UN)LIKELY with parenthesis around the expr accepted/tizen/unified/20200707.141004 submit/tizen/20200705.221213
Wander Lairson Costa [Fri, 3 Jul 2020 14:06:03 +0000 (14:06 +0000)]
Protect EINA_(UN)LIKELY with parenthesis around the expr

Without it an expression like !EINA_LIKELY(a && b) expands
!a && b

Reviewed-by: Cedric BAIL <cedric.bail@free.fr>
Reviewed-by: Vincent Torri <vincent.torri@gmail.com>
Differential Revision: https://phab.enlightenment.org/D12041

4 years agoefl_ui_widget: Add exception handling for calloc
Myoungwoon Roy, Kim [Wed, 1 Jul 2020 00:07:41 +0000 (09:07 +0900)]
efl_ui_widget: Add exception handling for calloc

Change-Id: I5c897e3a98fe73289e6eb4adc08462c8c6eeab66

4 years agoefl_ui_widget: add color class update when the style is updated 74/237374/2
Jeonghyun Yun [Tue, 23 Jun 2020 05:59:12 +0000 (14:59 +0900)]
efl_ui_widget: add color class update when the style is updated

Change-Id: Iad6fe717a927f78238538b6c554edc4cf356c253
Signed-off-by: Jeonghyun Yun <jh0506.yun@samsung.com>
4 years agogl_tbm: unregister log domain correctly 94/237594/3
Shinwoo Kim [Wed, 1 Jul 2020 11:38:10 +0000 (20:38 +0900)]
gl_tbm: unregister log domain correctly

This patch will solve a SIGABRT issue caused by following step.

1. module_open
2. module_close /* does not set log domain to -1 */
3. module_open  /* does not register log domain
                   because it is not negative value */
4. module_close /* try to free not allocated memory */

Change-Id: Ifcb6b77481d433912b2527080bbb668f7ba7b1c8

4 years agoevas_common_privat: improve tiler merge flag
Marcel Hollerbach [Wed, 10 Jun 2020 18:48:45 +0000 (20:48 +0200)]
evas_common_privat: improve tiler merge flag

when this is a int and you assign 0, the whole "0" for the entire int is
moved. When this is a bit flag like this, it is a simple | operation,
which makes the whole thing somehow faster.

Reviewed-by: Christopher Michael <devilhorns@comcast.net>
Differential Revision: https://phab.enlightenment.org/D11998

4 years agoMeson.build cleanup.
Joรฃo Paulo Taylor Ienczak Zanette [Wed, 1 Jul 2020 07:23:53 +0000 (09:23 +0200)]
Meson.build cleanup.

Summary:
This is a 8 commit patch, but only for a while - after agreeing with
each of the changes, it shall be squashed into a single commit.

I want to make further changes on meson.build (maybe I can end up simplifying
the build system, or just let things more organized in the end) and thought
that starting with a cleanup would be a good first step.

The changes are:
1. build: set arguments scope to project instead of globally

   If we set arguments globally, it may conflict with other builds - specially
   considering [meson's subprojects
   feature](https://mesonbuild.com/Subprojects.html). Setting to project
   arguments ensures we are only considering EFL and not leaking unwanted flags.

2. build: Fix spacing and indent

   Mostly because it is not well standardized during the file - sometimes
   there's spaces between tokens, sometimes there is not, etc. The same applies
   to indent.

3. build: move test environment closer to test commands

   Just as a matter of organization. If we're doing things for tests that don't
   impact other stuff, then leave it when tests are handled.

4. build: Remove unnecessary parenthesis and == true comparisons

   Less noisy redundancy: `true` is already true, and `false` is already false,
   no need to re-check. Besides, reading `if sys_windows` and `if sys_windows
   == true` shouldn't have different effects, as the first you can read as "if
   the system is windows". It gets better when you have `not` instead of `==
   false`, so for an example you could read `if not sys_windows` as "if it is
   not a windows system" more naturally.

5. build: Switch pc_files to dict

   Just thought it could stay a little better (since it works as a dict),
   specially in the `foreach` right after.

6. **[removed to a future patch]** build: Use meson's warning_level instead of hardcoded -Wall

   This way we ensure this is compiler-independant (and use the correct feature
   for that, since meson even warns when configuring the build dir).

7. build: Use language args from add_project_arguments properly instead of a loop

   The `language:` kwarg from `add_{project,global}_arguments` receives a list
   of languages, so no need for that loop.

8. **[removed to a future patch]** build: Use '/' instead of join_paths

   As it [is recommended by meson since
   v0.49](https://mesonbuild.com/Release-notes-for-0-49-0.html#joining-paths-with-)
   (and stays clearer IMO, specially since that's how some languages are
   adopting path separation, e.g. C++'s filesystem stdlib).

Reviewers: bu5hm4n

Subscribers: vtorri, cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D11994

4 years agodocs: Correct the wrong API group name in Elementary 83/237483/2
Myoungwoon Roy, Kim [Wed, 1 Jul 2020 01:31:20 +0000 (10:31 +0900)]
docs: Correct the wrong API group name in Elementary

Change-Id: If71e4f3318a725c22f5a48ce2c8d5a928117ff48

4 years agoelc_naviframe: fix to show pushed item if top item is deleted 44/237544/1
Jaehyun Cho [Wed, 1 Jul 2020 06:49:40 +0000 (15:49 +0900)]
elc_naviframe: fix to show pushed item if top item is deleted

If top item is deleted in "transition,finished" smart callback by user
before _on_item_push_finished is not finished, then pushed item is
hidden in _on_item_push_finished and no item is visible.

To resolve the above issue, _on_item_push_finished does not hide
pushed item if pushed item becomes top item.

Change-Id: I8d7d31e681f52c66accb7ce2029232a35ee86025

4 years agodocs: Correct the wrong API group name in Edje and Elm_Box 48/237348/3 submit/tizen/20200630.100857
Myoungwoon Roy, Kim [Mon, 29 Jun 2020 09:52:33 +0000 (18:52 +0900)]
docs: Correct the wrong API group name in Edje and Elm_Box

Change-Id: Iaa5c77f33425a172bf03d3553d81d29b2609892a

4 years agoecore-evas-wayland: Fix minor typo in error message submit/tizen/20200629.234316
Christopher Michael [Mon, 29 Jun 2020 13:01:54 +0000 (09:01 -0400)]
ecore-evas-wayland: Fix minor typo in error message

4 years agoecore_wl2_input: initializes code variable. 25/237325/1
Hosang Kim [Mon, 29 Jun 2020 06:01:15 +0000 (15:01 +0900)]
ecore_wl2_input: initializes code variable.

Change-Id: I99440ba38835c42829e8d50b736d0904c7d30adb

4 years agoecore evas wl - cnp - dont segv is data is null submit/tizen/20200629.001406
Carsten Haitzler (Rasterman) [Sun, 28 Jun 2020 21:52:17 +0000 (22:52 +0100)]
ecore evas wl - cnp - dont segv is data is null

this is probably wrong but crashing is not nice... bettr to NOP than
crash right now.

4 years agoNative Windows: Eina: Resolve bad comparison while using windows strerror_s
Lucas Cavalcante de Sousa [Fri, 26 Jun 2020 12:51:01 +0000 (12:51 +0000)]
Native Windows: Eina: Resolve bad comparison while using windows strerror_s

`strerror_s` is the windows alternative of `strerror_r` used by EFL.

`strerror_s` never return the error code with the message as
`strerror_r` does, because of that, while comparing the first 14
characters of `Unknown error ` to the message from unknown code 4096
(`Unknown error`) they were accusing being different - in UNIX this
works because the message returned is `Unknown error 4096`.
This error was noticeable at `eina_error_test_failures` test case.

This Diff adds the error code to the message in case of an `Unknown
error`, making the windows implementation compliant with UNIX.

Reviewed-by: Vincent Torri <vincent.torri@gmail.com>
Reviewed-by: Wander Lairson Costa <wander.lairson@gmail.com>
Reviewed-by: Stefan Schmidt <stefan@datenfreihafen.org>
Differential Revision: https://phab.enlightenment.org/D12033

4 years agoWindows: fix eina_file_map_new()
Vincent Torri [Thu, 25 Jun 2020 14:44:15 +0000 (14:44 +0000)]
Windows: fix eina_file_map_new()

the offset passed to MapViewOfFile() must be a multiple of the granularity.

https://docs.microsoft.com/en-us/windows/win32/memory/creating-a-view-within-a-file is taken as basis for this patch

Reviewed-by: Stefan Schmidt <stefan@datenfreihafen.org>
Reviewed-by: Wander Lairson Costa <wander.lairson@gmail.com>
Differential Revision: https://phab.enlightenment.org/D12031

4 years agoFix eina file thread test on Windows
Wander Lairson Costa [Wed, 24 Jun 2020 13:32:12 +0000 (13:32 +0000)]
Fix eina file thread test on Windows

On windows, we try to open the "cmd.exe" file, but without the full path
the test fails unless it runs from the system directory.

We now use the full path to test the eina_file_open function.

Reviewed-by: Stefan Schmidt <stefan@datenfreihafen.org>
Reviewed-by: Vincent Torri <vincent.torri@gmail.com>
Reviewed-by: Joรฃo Paulo Taylor Ienczak Zanette <joao.tiz@expertisesolutions.com.br>
Differential Revision: https://phab.enlightenment.org/D12021

4 years agoeina_array: micro optimize eina_array_push
Marcel Hollerbach [Wed, 10 Jun 2020 18:48:37 +0000 (20:48 +0200)]
eina_array: micro optimize eina_array_push

This commit does two things:
- Tell the compiler that it is unlikely that we need to grow, and that
  it is unlikely that data is NULL. Sometimes the if check for data
  would get dropped out by the compiler when it can be ensured that it is
  != NULL. However, if we for example efl_add something and eina_push
  the result, the condition would not be removed, as there is no assertion
  efl_add would be != NULL.

- Do not hide the array assignment in a branch, but make it the default
  branch, this way instruction cache caches the correct instruction, as
  branch prediction will now hopefully, due to the hinting, take the
  correct branch.

While benchmarking this here (simply in elementary_perf), this reduced
pipeline faults in eina_array_push quite a bit. (Btw. it is hard to track
*which* exact calls to eina_array_push do cause that, as mostly this API
gets inlined, so it was easier optimizing that, instead of the method
arround)

Reviewed-by: Stefan Schmidt <stefan@datenfreihafen.org>
Differential Revision: https://phab.enlightenment.org/D11997

4 years agoFix typos - (Part #5)
Elyes HAOUAS [Sat, 20 Jun 2020 13:00:10 +0000 (13:00 +0000)]
Fix typos - (Part #5)

Fix some typos

Reviewed-by: Stefan Schmidt <stefan@datenfreihafen.org>
Differential Revision: https://phab.enlightenment.org/D12019

4 years agoFix typos
Elyes HAOUAS [Mon, 22 Jun 2020 18:24:38 +0000 (18:24 +0000)]
Fix typos

Fix some typos

Reviewed-by: Stefan Schmidt <stefan@datenfreihafen.org>
Differential Revision: https://phab.enlightenment.org/D12015

4 years agodocs: Changes non public Tizen elementary APIs in API reference to internal 19/237019/4
Myoungwoon Roy, Kim [Wed, 24 Jun 2020 05:40:20 +0000 (14:40 +0900)]
docs: Changes non public Tizen elementary APIs in API reference to internal

Change-Id: Ie6134546631a49acda3e52ee6ca7e2ceafaba17f

4 years agoRevert "Efl.Gfx.Path: Change draw of a rounded rect from arc to quadratic" 13/237113/1
JunsuChoi [Thu, 25 Jun 2020 04:13:31 +0000 (13:13 +0900)]
Revert "Efl.Gfx.Path: Change draw of a rounded rect from arc to quadratic"

Summary:
This reverts commit 4f15bde706ec8cd78fa57845c8eee7bdb5515282.
It is the correct way to draw with arc_to.
And breaking compatibility for current_get.

Test Plan: N/A

Reviewers: Hermet, kimcinoo, herb

Reviewed By: Hermet

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D12030

Change-Id: Ia0f38eedeba95646e52d360eadc690997fe33e7d

4 years agodoxygen: remove broken example images 12/236912/2
Hosang Kim [Tue, 23 Jun 2020 06:26:15 +0000 (15:26 +0900)]
doxygen: remove broken example images

Change-Id: I8d9c2ecf11c2e46c3cc21259164fddacc52e6610
(cherry picked from commit 8ca44052f8c2957a1a1ffef7c933972df33f82f7)

4 years agoefl_check.h: Replace stack allocated array by heap allocated submit/tizen/20200623.220408
Joao Antonio Cardoso [Mon, 15 Jun 2020 12:27:46 +0000 (12:27 +0000)]
efl_check.h: Replace stack allocated array by heap allocated

clang-cl doesn't support the syntax of dynamic stack allocated arrays.

ref: windows-native-port

Co-authored-by: Lucas <Coquinho@users.noreply.github.com>
Reviewed-by: Felipe Magno de Almeida <felipe@expertisesolutions.com.br>
Reviewed-by: Stefan Schmidt <stefan@datenfreihafen.org>
Differential Revision: https://phab.enlightenment.org/D11970

4 years agoecore-x vysnc - env var - fix typo
Carsten Haitzler (Rasterman) [Tue, 23 Jun 2020 13:00:48 +0000 (14:00 +0100)]
ecore-x vysnc - env var - fix typo