diff options
author | Ali Alzyod <ali198724@gmail.com> | 2020-07-24 10:36:27 +0100 |
---|---|---|
committer | Carsten Haitzler (Rasterman) <raster@rasterman.com> | 2020-07-24 10:36:27 +0100 |
commit | 54850ccd2f630b1397a4268088ba53b3305ffcb7 (patch) | |
tree | 3020011ae5a831b0745ca9cd265fb4eddd1e99f9 /src | |
parent | 59b9bbc496c0503ece2fa39d8d031d2933f10bc0 (diff) |
evas: font glyphs texture garbage collector
Summary:
Introduce two public APIS
```
#define EVAS_FONT_DATA_CACHE_TEXTURE 0x01
/**
* 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
```
#include <Elementary.h>
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
Diffstat (limited to '')
-rw-r--r-- | src/bin/elementary/test.c | 2 | ||||
-rw-r--r-- | src/bin/elementary/test_label.c | 118 | ||||
-rw-r--r-- | src/lib/evas/Evas_Common.h | 33 | ||||
-rw-r--r-- | src/lib/evas/canvas/evas_render.c | 5 | ||||
-rw-r--r-- | src/lib/evas/common/evas_font_main.c | 22 | ||||
-rw-r--r-- | src/lib/evas/include/evas_common_private.h | 1 | ||||
-rw-r--r-- | src/lib/evas/include/evas_private.h | 2 | ||||
-rw-r--r-- | src/modules/evas/engines/gl_common/evas_gl_common.h | 3 | ||||
-rw-r--r-- | src/modules/evas/engines/gl_common/evas_gl_font.c | 26 | ||||
-rw-r--r-- | src/modules/evas/engines/gl_common/evas_gl_texture.c | 5 | ||||
-rw-r--r-- | src/modules/evas/engines/gl_generic/evas_engine.c | 37 | ||||
-rw-r--r-- | src/modules/evas/engines/software_generic/evas_engine.c | 7 |
12 files changed, 259 insertions, 2 deletions
diff --git a/src/bin/elementary/test.c b/src/bin/elementary/test.c index 1acf333dcf..d0d374ece4 100644 --- a/src/bin/elementary/test.c +++ b/src/bin/elementary/test.c | |||
@@ -241,6 +241,7 @@ void test_label(void *data, Evas_Object *obj, void *event_info); | |||
241 | void test_label_slide(void *data, Evas_Object *obj, void *event_info); | 241 | void test_label_slide(void *data, Evas_Object *obj, void *event_info); |
242 | void test_label_wrap(void *data, Evas_Object *obj, void *event_info); | 242 | void test_label_wrap(void *data, Evas_Object *obj, void *event_info); |
243 | void test_textblock_fit(void *data, Evas_Object *obj, void *event_info); | 243 | void test_textblock_fit(void *data, Evas_Object *obj, void *event_info); |
244 | void test_text_memory(void *data, Evas_Object *obj, void *event_info); | ||
244 | void test_label_ellipsis(void *data, Evas_Object *obj, void *event_info); | 245 | void test_label_ellipsis(void *data, Evas_Object *obj, void *event_info); |
245 | void test_label_colors(void *data, Evas_Object *obj, void *event_info); | 246 | void test_label_colors(void *data, Evas_Object *obj, void *event_info); |
246 | void test_label_emoji(void *data, Evas_Object *obj, void *event_info); | 247 | void test_label_emoji(void *data, Evas_Object *obj, void *event_info); |
@@ -1220,6 +1221,7 @@ add_tests: | |||
1220 | ADD_TEST(NULL, "Text", "Label Slide", test_label_slide); | 1221 | ADD_TEST(NULL, "Text", "Label Slide", test_label_slide); |
1221 | ADD_TEST(NULL, "Text", "Label Wrap", test_label_wrap); | 1222 | ADD_TEST(NULL, "Text", "Label Wrap", test_label_wrap); |
1222 | ADD_TEST(NULL, "Text", "Textblock Fit", test_textblock_fit); | 1223 | ADD_TEST(NULL, "Text", "Textblock Fit", test_textblock_fit); |
1224 | ADD_TEST(NULL, "Text", "Text Memory", test_text_memory); | ||
1223 | ADD_TEST(NULL, "Text", "Label Ellipsis", test_label_ellipsis); | 1225 | ADD_TEST(NULL, "Text", "Label Ellipsis", test_label_ellipsis); |
1224 | ADD_TEST(NULL, "Text", "Label Colors", test_label_colors); | 1226 | ADD_TEST(NULL, "Text", "Label Colors", test_label_colors); |
1225 | ADD_TEST(NULL, "Text", "Label Emoji", test_label_emoji); | 1227 | ADD_TEST(NULL, "Text", "Label Emoji", test_label_emoji); |
diff --git a/src/bin/elementary/test_label.c b/src/bin/elementary/test_label.c index 414058d9ad..d8d1a80698 100644 --- a/src/bin/elementary/test_label.c +++ b/src/bin/elementary/test_label.c | |||
@@ -543,6 +543,124 @@ test_textblock_fit(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *e | |||
543 | evas_object_show(app->win); | 543 | evas_object_show(app->win); |
544 | } | 544 | } |
545 | 545 | ||
546 | /*** Text Memory Configuration **************************************************************/ | ||
547 | enum BUTTON_MEM{ | ||
548 | BUTTON_MEM_SET_TEXT = 0, | ||
549 | BUTTON_MEM_APPLY_MEM = 1, | ||
550 | BUTTON_MEM_APPLY_FONT_SIZE = 2, | ||
551 | BUTTON_MEM_ALL = BUTTON_MEM_APPLY_FONT_SIZE+1, | ||
552 | }; | ||
553 | |||
554 | char* BUTTON_MEM_STR[BUTTON_MEM_ALL] ={ | ||
555 | "Load Emojis Text", | ||
556 | "Memory Limit(MB)", | ||
557 | "Font Size" | ||
558 | }; | ||
559 | |||
560 | char *content = "<align=center>๐๐๐๐คฃ๐๐๐ ๐๐๐๐๐๐๐๐๐๐โบ๐๐ค๐ค๐๐๐ถ๐๐๐ฃ๐ฅ๐ฎ๐ค๐ฏ๐ช๐ซ๐ด๐๐ค๐๐๐๐คค๐๐๐๐๐๐ค๐ฒโน๐๐๐๐๐ค๐ข๐ญ๐ฆ๐ง๐จ๐ฉ๐ฌ๐ฐ๐ฑ๐ณ๐ต๐ก๐ ๐๐ค ๐คก๐คฅ๐ท๐ค๐ค๐คข๐คงโป๐๐ฟ๐น๐บ๐โ ๐ป๐ฝ๐พ๐ค๐ฉ๐บ๐ธ๐น๐ป๐ผ๐ฝ๐๐ฟ๐พ๐๐๐๐ฆ๐ง๐จ๐ฉ๐ต๐ถ๐ผ๐จโโ๏ธ๐ฉโโ๏ธ๐จโ๐๐ฉโ๐๐จโ๐ซ๐ฉโ๐ซ๐จโโ๐ฉโโ๐จโ๐พ๐ฉโ๐พ๐จโ๐ณ๐ฉโ๐ณ๐จโ๐ง๐ฉโ๐ง๐จโ๐ญ๐ฉโ๐ญ๐จโ๐ผ๐ฉโ๐ผ๐จโ๐ฌ๐ฉโ๐ฌ๐จโ๐ป๐ฉโ๐ป๐จโ๐ค๐ฉโ๐ค๐จโ๐จ๐ฉโ๐จ๐จโโ๏ธ๐ฉโโ๏ธ๐จโ๐๐ฉโ๐๐จโ๐๐ฉโ๐๐ฎโโ๏ธ๐ฎโโ๏ธ๐ต๏ธโโ๏ธ๐ต๏ธโโ๏ธ๐โโ๏ธ๐โโ๏ธ๐ทโโ๏ธ๐ทโโ๏ธ๐ณโโ๏ธ๐ณโโ๏ธ๐ฑโโ๏ธ๐ฑโโ๏ธ๐ ๐คถ๐ธ๐คด๐ฐ๐คต๐คฐ๐ฒ๐โโ๏ธ๐โโ๏ธ๐โโ๏ธ๐โโ๏ธ๐ โโ๏ธ๐ โโ๏ธ๐โโ๏ธ๐โโ๏ธ๐โโ๏ธ๐โโ๏ธ๐โโ๏ธ๐โโ๏ธ๐โโ๏ธ๐โโ๏ธ๐คฆโโ๏ธ๐คฆโโ๏ธ๐คทโโ๏ธ๐คทโโ๏ธ๐โโ๏ธ๐โโ๏ธ๐โโ๏ธ๐โโ๏ธ๐ถโโ๏ธ๐ถโโ๏ธ๐โโ๏ธ๐โโ๏ธ๐๐บ๐ฏโโ๏ธ๐ฏโโ๏ธ๐ด๐ฃ๐ค๐ฅ๐ซ๐ฌ๐ญ๐๐๐ช๐จโ๐ฉโ๐ง๐จโ๐ฉโ๐งโ๐ฆ๐จโ๐ฉโ๐ฆโ๐ฆ๐จโ๐ฉโ๐งโ๐ง๐จโ๐ฆ๐จโ๐ฆโ๐ฆ๐จโ๐ง๐จโ๐งโ๐ฆ๐จโ๐งโ๐ง๐ฉโ๐ฆ๐ฉโ๐ฆโ๐ฆ๐ฉโ๐ง๐ฉโ๐งโ๐ฆ๐ฉโ๐งโ๐ง๐ช๐คณ๐๐โ๏ธ๐๐๐โ๐ค๐๐ค๐๐โ๐๐๐โ๐๐ค๐ค๐ค๐๐โ๐๐๐๐ค๐ ๐๐๐ฃ๐๐๐ ๐๐๐โค๐๐๐๐๐๐๐๐๐๐ค๐๐๐โฃ๐๐ค๐ข๐ฃ๐ฅ๐ฆ๐จ๐ซ๐ฌ๐จ๐ฏ๐ญ๐ณ๐๐ถ๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐ ๐ก๐ข๐๐๐ฉ๐โ๐ฟ๐๐๐๐ต๐๐ฆ๐ถ๐๐ฉ๐บ๐ฆ๐ฑ๐๐ฆ๐ฏ๐ ๐๐ด๐๐ฆ๐ฆ๐ฎ๐๐๐๐ท๐๐๐ฝ๐๐๐๐ช๐ซ๐๐ฆ๐ญ๐๐๐น๐ฐ๐๐ฟ๐ฆ๐ป๐จ๐ผ๐พ๐ฆ๐๐๐ฃ๐ค๐ฅ๐ฆ๐ง๐๐ฆ ๐ฆ๐ฆ๐ธ๐๐ข๐ฆ๐๐ฒ๐๐ณ๐๐ฌ๐๐ ๐ก๐ฆ๐๐๐ฆ๐ฆ๐ฆ๐ฆ๐๐๐๐๐๐ท๐ธ๐ฆ๐๐ธ๐ฎ๐ต๐น๐ฅ๐บ๐ป๐ผ๐ทโ๐ฑ๐ฒ๐ณ๐ด๐ต๐พ๐ฟโ๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐ ๐ฅ๐ฅ๐๐ฅ๐ฅ๐ฝ๐ถ๐ฅ๐๐ฅ๐ฐ๐๐ฅ๐ฅ๐ฅ๐ง๐๐๐ฅ๐๐๐๐ญ๐ฎ๐ฏ๐ฅ๐ฅ๐ณ๐ฅ๐ฒ๐ฅ๐ฟ๐ฑ๐๐๐๐๐๐๐ ๐ข๐ฃ๐ค๐ฅ๐ก๐ฆ๐ง๐จ๐ฉ๐ช๐๐ฐ๐ซ๐ฌ๐ญ๐ฎ๐ฏ๐ผ๐ฅโ๐ต๐ถ๐พ๐ท๐ธ๐น๐บ๐ป๐ฅ๐ฝ๐ด๐ฅ๐ช๐บ๐๐๐๐โจ๐๐๐๐๐๐๐๐๐๐๐๐๐๐ซ๐๐๐ ๐ฅ๐ฅ๐ฅโฝ๏ธโพ๏ธ๐๐๐๐๐พ๐ฑ๐ณ๐๐๐๐๐ธ๐ฅ๐ฅ๐ฅ ๐ฏโณ๐๏ธโโ๏ธ๐๏ธโโ๏ธโธ๐ฃ๐ฝ๐ฟโท๐๐โโ๏ธ๐โโ๏ธ๐๐โโ๏ธ๐โโ๏ธโน๏ธโโ๏ธโน๏ธโโ๏ธ๐๏ธโโ๏ธ๐๏ธโโ๏ธ๐ดโโ๏ธ๐ดโโ๏ธ๐ตโโ๏ธ๐ตโโ๏ธ๐๐๐คธโโ๏ธ๐คธโโ๏ธ๐คผโโ๏ธ๐คผโโ๏ธ๐คฝโโ๏ธ๐คฝโโ๏ธ๐คพโโ๏ธ๐คพโโ๏ธ๐คบ๐คนโโ๏ธ๐คนโโ๏ธ๐ฎ๐น๐ฒโ ๏ธโฅ๏ธโฆ๏ธโฃ๏ธ๐๐๐ด๐๐๐๐๐บ๐โฐ๐๐ป๐๐๐๐๐๐๐๐๐๐๐๐ ๐ก๐ข๐ฃ๐ค๐ฅ๐ฆ๐จ๐ฉ๐ช๐ซ๐ฌ๐ญ๐ฏ๐ฐ๐๐ผ๐ฝโช๐๐โฉ๐โฒโบ๐๐๐๐ ๐๐๐โผโจ๏ธ๐๐ ๐ก๐ข๐๐ช๐ญ๐ผ๐จ๐ฐ๐๐๐๐ ๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐โ๐๐ฒ๐ด๐ต๐๐ฃ๐คโฝ๐จ๐ฅ๐ฆ๐ง๐โโต๐ฃโโ๏ธ๐ฃโโ๏ธ๐ถ๐ค๐ณโด๐ฅ๐ขโ๐ฉ๐ซ๐ฌ๐บ๐๐๐ ๐ก๐๐ฐ๐๐ช๐๐๐๐ฝ๐ฟ๐๐โโณโโฐโฑโฒ๐ฐ๐๐ง๐๐๐๐๐๐๐๐๐๐ ๐๐ก๐๐ข๐๐ฃ๐๐ค๐๐ฅ๐๐ฆ๐๐๐๐๐๐๐๐๐๐๐๐๐กโ๏ธ๐๐โญ๐๐ โ๏ธโ โ๐ค๐ฅ๐ฆ๐ง๐จ๐ฉ๐ช๐ซ๐ฌ๐๐๐โ๏ธโโฑโกโโ๏ธโโ๐ฅ๐ง๐๐๐๐๐๐ข๐ฃ๐ฏ๐๐๐ผ๐ต๐ถ๐๐๐๐ค๐ง๐ป๐ท๐ธ๐น๐บ๐ป๐ฅ๐ฑ๐ฒโ๏ธ๐๐๐ ๐๐๐ป๐ฅ๐จโจ๐ฑ๐ฒ๐ฝ๐พ๐ฟ๐๐ฅ๐๐ฝ๐ฌ๐บ๐ท๐ธ๐น๐ผ๐๐๐ฌ๐ญ๐ก๐ฏ๐ก๐ฆ๐ฎ๐๐๐๐๐๐๐๐๐๐๐๐๐ฐ๐๐๐๐ท๐ฐ๐ด๐ต๐ถ๐ท๐ธ๐ณ๐ฑ๐ฒโ๐ง๐จ๐ฉ๐ค๐ฅ๐ฆ๐ซ๐ช๐ฌ๐ญ๐ฎ๐ณโโ๐๐๐๐๐๐ผ๐๐๐๐ ๐๐๐๐๐๐๐๐๐๐๐๐๐๐โ๏ธ๐๐๐๐๐๐๐๐๐๐จโโ๐ ๐กโ๐ซ๐น๐ก๐ง๐ฉโ๐โโ๐โ๐๐๐ฌโฐโฑ๐ฟ๐ข๐ฎ๐ฎ๐ง๐ฎ๐ฐโฟ๐น๐บ๐ป๐ผ๐พ๐๐๐๐ โ ๏ธ๐ธโ๐ซ๐ณ๐ญ๐ฏ๐ฑ๐ท๐ต๐โขโฃโฌ๏ธโ๏ธโก๏ธโ๏ธโฌ๏ธโ๏ธโฌ ๏ธโ๏ธโ๏ธโ๏ธโฉโชโคด๏ธโคต๏ธ๐๐๐๐๐๐๐๐โ๐โกโธโฏ๏ธโฆโฎ๐๐ฏโโโโโโโโโโโโโ๐๐๐โถ๏ธโฉโญโฏโ๏ธโชโฎ๐ผโซ๐ฝโฌโธโนโบโ๐ฆ๐ ๐๐ถ๐ณ๐ดโป๏ธ๐โ๐ฐ๐ฑโญโ โโโโโโโ๏ธโ๏ธโโโโฐโฟใฝโณโดโโ๏ธโโโโใฐ๐๐ฏ๐ ๐ก๐ข๐ฃ๐ค๐ ฐ๏ธ๐๏ธ๐ ฑ๏ธ๐๏ธ๐๏ธ๐๏ธโน๐๏ธโ๏ธ๐๏ธ๐๏ธ๐ พ๏ธ๐๏ธ๐ ฟ๏ธ๐๏ธ๐๏ธ๐๏ธ๐๐๐ท๐ถ๐ฏ๐๐น๐๐ฒ๐๐ธ๐ด๐ณใใ๐บ๐ตโซ๏ธโปโผโฝโพโฌโฌ๐ถ๏ธ๐ท๏ธ๐ธ๏ธ๐น๏ธ๐บ๏ธ๐ป๐ ๐๐ฒ๐ณโชโซ๐ด๐ต๐๐ฉ๐ด๐ณ๐ณ๏ธโ๐โโโโโโ โพโพ๐ฆ๐จ๐ฆ๐ฉ๐ฆ๐ช๐ฆ๐ซ๐ฆ๐ฌ๐ฆ๐ฎ๐ฆ๐ฑ๐ฆ๐ฒ๐ฆ๐ด๐ฆ๐ถ๐ฆ๐ท๐ฆ๐ธ๐ฆ๐น๐ฆ๐บ๐ฆ๐ผ๐ฆ๐ฝ๐ฆ๐ฟ๐ง๐ฆ๐ง๐ง๐ง๐ฉ๐ง๐ช๐ง๐ซ๐ง๐ฌ๐ง๐ญ๐ง๐ฎ๐ง๐ฏ๐ง๐ฑ๐ง๐ฒ๐ง๐ณ๐ง๐ด๐ง๐ถ๐ง๐ท๐ง๐ธ๐ง๐น๐ง๐ผ๐ง๐พ๐ง๐ฟ๐จ๐ฆ๐จ๐จ๐จ๐ฉ๐จ๐ซ๐จ๐ฌ๐จ๐ญ๐จ๐ฎ๐จ๐ฐ๐จ๐ฑ๐จ๐ฒ๐จ๐ณ๐จ๐ด๐จ๐ท๐จ๐บ๐จ๐ป๐จ๐ผ๐จ๐ฝ๐จ๐พ๐จ๐ฟ๐ฉ๐ช๐ฉ๐ฏ๐ฉ๐ฐ๐ฉ๐ฒ๐ฉ๐ด๐ฉ๐ฟ๐ช๐จ๐ช๐ช๐ช๐ฌ๐ช๐ญ๐ช๐ท๐ช๐ธ๐ช๐น๐ช๐บ๐ซ๐ฎ๐ซ๐ฏ๐ซ๐ฐ๐ซ๐ฒ๐ซ๐ด๐ซ๐ท๐ฌ๐ฆ๐ฌ๐ง๐ฌ๐ฉ๐ฌ๐ช๐ฌ๐ซ๐ฌ๐ฌ๐ฌ๐ญ๐ฌ๐ฎ๐ฌ๐ฑ๐ฌ๐ฒ๐ฌ๐ณ๐ฌ๐ต๐ฌ๐ถ๐ฌ๐ท๐ฌ๐ธ๐ฌ๐น๐ฌ๐บ๐ฌ๐ผ๐ฌ๐พ๐ญ๐ฐ๐ญ๐ฒ๐ญ๐ณ๐ญ๐ท๐ญ๐น๐ญ๐บ๐ฎ๐จ๐ฎ๐ฉ๐ฎ๐ช๐ฎ๐ฑ๐ฎ๐ฒ๐ฎ๐ณ๐ฎ๐ด๐ฎ๐ถ๐ฎ๐ท๐ฎ๐ธ๐ฎ๐น๐ฏ๐ช๐ฏ๐ฒ๐ฏ๐ด๐ฏ๐ต๐ฐ๐ช๐ฐ๐ฌ๐ฐ๐ญ๐ฐ๐ฎ๐ฐ๐ฒ๐ฐ๐ณ๐ฐ๐ต๐ฐ๐ท๐ฐ๐ผ๐ฐ๐พ๐ฐ๐ฟ๐ฑ๐ฆ๐ฑ๐ง๐ฑ๐จ๐ฑ๐ฎ๐ฑ๐ฐ๐ฑ๐ท๐ฑ๐ธ๐ฑ๐น๐ฑ๐บ๐ฑ๐ป๐ฑ๐พ๐ฒ๐ฆ๐ฒ๐จ๐ฒ๐ฉ๐ฒ๐ช๐ฒ๐ฌ๐ฒ๐ญ๐ฒ๐ฐ๐ฒ๐ฑ๐ฒ๐ฒ๐ฒ๐ณ๐ฒ๐ด๐ฒ๐ต๐ฒ๐ถ๐ฒ๐ท๐ฒ๐ธ๐ฒ๐น๐ฒ๐บ๐ฒ๐ป๐ฒ๐ผ๐ฒ๐ฝ๐ฒ๐พ๐ฒ๐ฟ๐ณ๐ฆ๐ณ๐จ๐ณ๐ช๐ณ๐ซ๐ณ๐ฌ๐ณ๐ฎ๐ณ๐ฑ๐ณ๐ด๐ณ๐ต๐ณ๐ท๐ณ๐บ๐ณ๐ฟ๐ด๐ฒ๐ต๐ฆ๐ต๐ช๐ต๐ซ๐ต๐ฌ๐ต๐ญ๐ต๐ฐ๐ต๐ฑ๐ต๐ฒ๐ต๐ณ๐ต๐ท๐ต๐ธ๐ต๐น๐ต๐ผ๐ต๐พ๐ถ๐ฆ๐ท๐ช๐ท๐ด๐ท๐ธ๐ท๐บ๐ท๐ผ๐ธ๐ฆ๐ธ๐ง๐ธ๐จ๐ธ๐ฉ๐ธ๐ช๐ธ๐ฌ๐ธ๐ญ๐ธ๐ฎ๐ธ๐ฐ๐ธ๐ฑ๐ธ๐ฒ๐ธ๐ณ๐ธ๐ด๐ธ๐ท๐ธ๐ธ๐ธ๐น๐ธ๐ป๐ธ๐ฝ๐ธ๐พ๐ธ๐ฟ๐น๐ฆ๐น๐จ๐น๐ฉ๐น๐ซ๐น๐ฌ๐น๐ญ๐น๐ฏ๐น๐ฐ๐น๐ฑ๐น๐ฒ๐น๐ณ๐น๐ด๐น๐ท๐น๐น๐น๐ป๐น๐ผ๐น๐ฟ๐บ๐ฆ๐บ๐ฌ๐บ๐ณ๐บ๐ธ๐บ๐พ๐บ๐ฟ๐ป๐ฆ๐ป๐จ๐ป๐ช๐ป๐ฌ๐ป๐ฎ๐ป๐ณ๐ป๐บ๐ผ๐ซ๐ผ๐ธ๐ฝ๐ฐ๐พ๐ช๐พ๐น๐ฟ๐ฆ๐ฟ๐ฒ๐ฟ๐ผ</align>"; | ||
561 | |||
562 | typedef struct _APP_MEM | ||
563 | { | ||
564 | Evas_Object *win, *box, *main_entry; | ||
565 | Eo *btn[BUTTON_MEM_ALL]; | ||
566 | Eo *entry[BUTTON_MEM_ALL]; | ||
567 | } APP_MEM; | ||
568 | APP_MEM *app_mem; | ||
569 | |||
570 | static void _btn_clicked_mem(void *data EINA_UNUSED, Eo *obj, void *eventInfo EINA_UNUSED){ | ||
571 | if (obj == app_mem->btn[BUTTON_MEM_SET_TEXT]) | ||
572 | { | ||
573 | elm_object_text_set(app_mem->main_entry, content); | ||
574 | } | ||
575 | else if (obj == app_mem->btn[BUTTON_MEM_APPLY_MEM]) | ||
576 | { | ||
577 | int size = atoi(elm_object_text_get(app_mem->entry[BUTTON_MEM_APPLY_MEM])); | ||
578 | if (size > 0 && size < 4000) | ||
579 | { | ||
580 | evas_font_data_cache_set(EVAS_FONT_DATA_CACHE_TEXTURE, size * 1024 * 1024); | ||
581 | } | ||
582 | else | ||
583 | { | ||
584 | elm_object_text_set(app_mem->entry[BUTTON_MEM_APPLY_MEM], "NAN"); | ||
585 | } | ||
586 | } | ||
587 | else if (obj == app_mem->btn[BUTTON_MEM_APPLY_FONT_SIZE]) | ||
588 | { | ||
589 | int font_size = atoi(elm_object_text_get(app_mem->entry[BUTTON_MEM_APPLY_FONT_SIZE])); | ||
590 | if (font_size > 0 && font_size < 1000) | ||
591 | { | ||
592 | char sfont_size[256] = {0}; | ||
593 | sprintf(sfont_size,"DEFAULT='font_size=%i'", font_size); | ||
594 | elm_entry_text_style_user_push(app_mem->main_entry, sfont_size); | ||
595 | } | ||
596 | else | ||
597 | { | ||
598 | elm_object_text_set(app_mem->entry[BUTTON_MEM_APPLY_FONT_SIZE], "NAN"); | ||
599 | } | ||
600 | } | ||
601 | } | ||
602 | |||
603 | void | ||
604 | test_text_memory(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) | ||
605 | { | ||
606 | app_mem = calloc(sizeof(APP), 1); | ||
607 | |||
608 | elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); | ||
609 | |||
610 | app_mem->win = elm_win_util_standard_add("Main", "App"); | ||
611 | elm_win_autodel_set(app_mem->win, EINA_TRUE); | ||
612 | |||
613 | app_mem->box = elm_box_add(app_mem->win); | ||
614 | app_mem->main_entry = elm_entry_add(app_mem->box); | ||
615 | |||
616 | evas_object_size_hint_weight_set(app_mem->box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); | ||
617 | evas_object_size_hint_align_set(app_mem->box, EVAS_HINT_FILL, EVAS_HINT_FILL); | ||
618 | |||
619 | app_mem->btn[BUTTON_MEM_SET_TEXT] = elm_button_add(app_mem->box); | ||
620 | evas_object_smart_callback_add(app_mem->btn[BUTTON_MEM_SET_TEXT], "clicked", _btn_clicked_mem, NULL); | ||
621 | elm_object_text_set(app_mem->btn[BUTTON_MEM_SET_TEXT], BUTTON_MEM_STR[BUTTON_MEM_SET_TEXT]); | ||
622 | evas_object_size_hint_align_set(app_mem->btn[BUTTON_MEM_SET_TEXT], EVAS_HINT_FILL, EVAS_HINT_FILL); | ||
623 | elm_box_pack_end(app_mem->box, app_mem->btn[BUTTON_MEM_SET_TEXT]); | ||
624 | evas_object_show(app_mem->btn[BUTTON_MEM_SET_TEXT]); | ||
625 | |||
626 | elm_entry_scrollable_set(app_mem->main_entry, EINA_TRUE); | ||
627 | evas_object_show(app_mem->main_entry); | ||
628 | evas_object_show(app_mem->box); | ||
629 | |||
630 | elm_box_pack_end(app_mem->box, app_mem->main_entry); | ||
631 | evas_object_smart_callback_add(app_mem->btn[BUTTON_MEM_SET_TEXT], "clicked", _btn_clicked_mem, NULL); | ||
632 | evas_object_show(app_mem->btn[BUTTON_MEM_SET_TEXT]); | ||
633 | |||
634 | elm_win_resize_object_add(app_mem->win, app_mem->box); | ||
635 | evas_object_resize(app_mem->win, 320, 320); | ||
636 | |||
637 | elm_entry_text_style_user_push(app_mem->main_entry, "DEFAULT='font_size=20'"); | ||
638 | |||
639 | for(int i = BUTTON_MEM_APPLY_MEM ; i < BUTTON_MEM_ALL ; i++) | ||
640 | { | ||
641 | app_mem->btn[i] = elm_button_add(app_mem->box); | ||
642 | app_mem->entry[i] = elm_entry_add(app_mem->box); | ||
643 | evas_object_smart_callback_add(app_mem->btn[i], "clicked", _btn_clicked_mem, NULL); | ||
644 | elm_object_text_set(app_mem->btn[i], BUTTON_MEM_STR[i]); | ||
645 | elm_box_pack_end(app_mem->box, app_mem->btn[i]); | ||
646 | elm_box_pack_end(app_mem->box, app_mem->entry[i]); | ||
647 | |||
648 | evas_object_size_hint_align_set(app_mem->btn[i], EVAS_HINT_FILL, EVAS_HINT_FILL); | ||
649 | evas_object_size_hint_align_set(app_mem->entry[i], EVAS_HINT_FILL, EVAS_HINT_FILL); | ||
650 | |||
651 | evas_object_show(app_mem->btn[i]); | ||
652 | evas_object_show(app_mem->entry[i]); | ||
653 | } | ||
654 | |||
655 | elm_object_text_set(app_mem->entry[BUTTON_MEM_APPLY_MEM],"Texture limit in MB"); | ||
656 | elm_object_text_set(app_mem->entry[BUTTON_MEM_APPLY_FONT_SIZE],"20"); | ||
657 | |||
658 | evas_object_size_hint_weight_set(app_mem->main_entry, EVAS_HINT_EXPAND,EVAS_HINT_EXPAND); | ||
659 | evas_object_size_hint_align_set(app_mem->main_entry, EVAS_HINT_FILL, EVAS_HINT_FILL); | ||
660 | |||
661 | evas_object_show(app_mem->win); | ||
662 | } | ||
663 | |||
546 | /*** Label Wrap **************************************************************/ | 664 | /*** Label Wrap **************************************************************/ |
547 | void | 665 | void |
548 | test_label_wrap(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) | 666 | test_label_wrap(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) |
diff --git a/src/lib/evas/Evas_Common.h b/src/lib/evas/Evas_Common.h index 97a5e1adb4..e365eb9f0d 100644 --- a/src/lib/evas/Evas_Common.h +++ b/src/lib/evas/Evas_Common.h | |||
@@ -385,6 +385,12 @@ typedef Efl_Text_Bidirectional_Type Evas_BiDi_Direction; | |||
385 | #define EVAS_BIDI_DIRECTION_RTL EFL_TEXT_BIDIRECTIONAL_TYPE_RTL | 385 | #define EVAS_BIDI_DIRECTION_RTL EFL_TEXT_BIDIRECTIONAL_TYPE_RTL |
386 | #define EVAS_BIDI_DIRECTION_INHERIT EFL_TEXT_BIDIRECTIONAL_TYPE_INHERIT | 386 | #define EVAS_BIDI_DIRECTION_INHERIT EFL_TEXT_BIDIRECTIONAL_TYPE_INHERIT |
387 | 387 | ||
388 | typedef enum _Evas_Font_Data_Cache | ||
389 | { | ||
390 | EVAS_FONT_DATA_CACHE_TEXTURE = 0x01,/**< Texture caching (in case of accelerated rendering) */ | ||
391 | } Evas_Font_Data_Cache; /**< font caching options, used for evas_font_data_cache_set()/evas_font_data_cache_get()*/ | ||
392 | |||
393 | |||
388 | /** | 394 | /** |
389 | * How the mouse pointer should be handled by Evas. | 395 | * How the mouse pointer should be handled by Evas. |
390 | * | 396 | * |
@@ -3374,6 +3380,33 @@ EAPI void evas_font_reinit(void); | |||
3374 | * @} | 3380 | * @} |
3375 | */ | 3381 | */ |
3376 | 3382 | ||
3383 | #define EVAS_FONT_DATA_CACHE_TEXTURE 0x01 | ||
3384 | |||
3385 | /** | ||
3386 | * Set the limit in bytes for memory allocated by font glyphs in evas. | ||
3387 | * @param[in] options for caching. | ||
3388 | * @param[in] bytes cache size in bytes, pass negative value to ignore the limit. | ||
3389 | * | ||
3390 | * @since 1.24 | ||
3391 | */ | ||
3392 | EAPI void evas_font_data_cache_set(Evas_Font_Data_Cache options, int byte); | ||
3393 | |||
3394 | /** | ||
3395 | * @} | ||
3396 | */ | ||
3397 | |||
3398 | /** | ||
3399 | * Get the limit in bytes for memory allocated by font glyphs in evas. | ||
3400 | * @param[in] options for caching. | ||
3401 | * @return Returns font allocated memory cache limit, if value is negative this means no limit. | ||
3402 | * @since 1.24 | ||
3403 | */ | ||
3404 | EAPI int evas_font_data_cache_get(Evas_Font_Data_Cache options); | ||
3405 | |||
3406 | /** | ||
3407 | * @} | ||
3408 | */ | ||
3409 | |||
3377 | // The below type are necessary for legacy API and need to be manually kept in sync with .eo file. | 3410 | // The below type are necessary for legacy API and need to be manually kept in sync with .eo file. |
3378 | #ifndef _EFL_INPUT_DEVICE_EO_CLASS_TYPE | 3411 | #ifndef _EFL_INPUT_DEVICE_EO_CLASS_TYPE |
3379 | #define _EFL_INPUT_DEVICE_EO_CLASS_TYPE | 3412 | #define _EFL_INPUT_DEVICE_EO_CLASS_TYPE |
diff --git a/src/lib/evas/canvas/evas_render.c b/src/lib/evas/canvas/evas_render.c index c33f69a22d..cac56d1757 100644 --- a/src/lib/evas/canvas/evas_render.c +++ b/src/lib/evas/canvas/evas_render.c | |||
@@ -3713,6 +3713,11 @@ evas_render_updates_internal(Evas *eo_e, | |||
3713 | } | 3713 | } |
3714 | eina_evlog("-render_phase8", eo_e, 0.0, NULL); | 3714 | eina_evlog("-render_phase8", eo_e, 0.0, NULL); |
3715 | 3715 | ||
3716 | if (evas_font_data_cache_get(EVAS_FONT_DATA_CACHE_TEXTURE) == 0) | ||
3717 | ENFN->font_glyphs_gc_collect(ENC, 1.0f, NULL, NULL, EINA_TRUE); | ||
3718 | else | ||
3719 | ENFN->font_glyphs_gc_collect(ENC, 0.33f, NULL, NULL, EINA_TRUE); | ||
3720 | |||
3716 | eina_evlog("+render_clear", eo_e, 0.0, NULL); | 3721 | eina_evlog("+render_clear", eo_e, 0.0, NULL); |
3717 | if (!do_async && rendering) | 3722 | if (!do_async && rendering) |
3718 | { | 3723 | { |
diff --git a/src/lib/evas/common/evas_font_main.c b/src/lib/evas/common/evas_font_main.c index 3a5b280437..50de0819bc 100644 --- a/src/lib/evas/common/evas_font_main.c +++ b/src/lib/evas/common/evas_font_main.c | |||
@@ -13,7 +13,8 @@ LK(lock_font_draw); // for freetype2 API calls | |||
13 | LK(lock_bidi); // for evas bidi internal usage. | 13 | LK(lock_bidi); // for evas bidi internal usage. |
14 | LK(lock_ot); // for evas bidi internal usage. | 14 | LK(lock_ot); // for evas bidi internal usage. |
15 | 15 | ||
16 | int _evas_font_log_dom_global = -1; | 16 | int _evas_font_log_dom_global = -1; |
17 | int _evas_font_texture_cache = -1; | ||
17 | 18 | ||
18 | EAPI void | 19 | EAPI void |
19 | evas_common_font_init(void) | 20 | evas_common_font_init(void) |
@@ -854,6 +855,25 @@ evas_common_font_int_cache_glyph_get(RGBA_Font_Int *fi, FT_UInt idx) | |||
854 | return fg; | 855 | return fg; |
855 | } | 856 | } |
856 | 857 | ||
858 | EAPI void | ||
859 | evas_font_data_cache_set(Evas_Font_Data_Cache options, int bytes) | ||
860 | { | ||
861 | if ((options & EVAS_FONT_DATA_CACHE_TEXTURE) == EVAS_FONT_DATA_CACHE_TEXTURE) | ||
862 | { | ||
863 | _evas_font_texture_cache = bytes; | ||
864 | //FIXME No direct free happend until next render call | ||
865 | } | ||
866 | } | ||
867 | |||
868 | EAPI int | ||
869 | evas_font_data_cache_get(Evas_Font_Data_Cache options) | ||
870 | { | ||
871 | if ((options & EVAS_FONT_DATA_CACHE_TEXTURE) == EVAS_FONT_DATA_CACHE_TEXTURE) | ||
872 | return _evas_font_texture_cache; | ||
873 | else | ||
874 | return -1; | ||
875 | } | ||
876 | |||
857 | EAPI Eina_Bool | 877 | EAPI Eina_Bool |
858 | evas_common_font_int_cache_glyph_render(RGBA_Font_Glyph *fg) | 878 | evas_common_font_int_cache_glyph_render(RGBA_Font_Glyph *fg) |
859 | { | 879 | { |
diff --git a/src/lib/evas/include/evas_common_private.h b/src/lib/evas/include/evas_common_private.h index 509f7c93a8..e4a5168bdb 100644 --- a/src/lib/evas/include/evas_common_private.h +++ b/src/lib/evas/include/evas_common_private.h | |||
@@ -691,6 +691,7 @@ struct _RGBA_Draw_Context | |||
691 | void *(*gl_image_new) (void *gc, RGBA_Font_Glyph *fg, int alpha, Evas_Colorspace cspace); | 691 | void *(*gl_image_new) (void *gc, RGBA_Font_Glyph *fg, int alpha, Evas_Colorspace cspace); |
692 | void (*gl_image_free) (void *image); | 692 | void (*gl_image_free) (void *image); |
693 | void (*gl_image_draw) (void *gc, void *im, int dx, int dy, int dw, int dh, int smooth); | 693 | void (*gl_image_draw) (void *gc, void *im, int dx, int dy, int dw, int dh, int smooth); |
694 | void (*gl_garbage_collector) (void *gc, float ratio, int *texture_size, int *atlas_size); | ||
694 | } func; | 695 | } func; |
695 | void *data; | 696 | void *data; |
696 | } font_ext; | 697 | } font_ext; |
diff --git a/src/lib/evas/include/evas_private.h b/src/lib/evas/include/evas_private.h index 147e2ae0d1..d270b2be65 100644 --- a/src/lib/evas/include/evas_private.h +++ b/src/lib/evas/include/evas_private.h | |||
@@ -1103,6 +1103,8 @@ struct _Evas_Func | |||
1103 | Evas_Filter_Support (*gfx_filter_supports) (void *engine, Evas_Filter_Command *cmd); | 1103 | Evas_Filter_Support (*gfx_filter_supports) (void *engine, Evas_Filter_Command *cmd); |
1104 | Eina_Bool (*gfx_filter_process) (void *engine, Evas_Filter_Command *cmd); | 1104 | Eina_Bool (*gfx_filter_process) (void *engine, Evas_Filter_Command *cmd); |
1105 | 1105 | ||
1106 | void (*font_glyphs_gc_collect) (void *engine, float ratio, int *texture_size, int *atlas_size, Eina_Bool only_when_requested); | ||
1107 | |||
1106 | unsigned int info_size; | 1108 | unsigned int info_size; |
1107 | }; | 1109 | }; |
1108 | 1110 | ||
diff --git a/src/modules/evas/engines/gl_common/evas_gl_common.h b/src/modules/evas/engines/gl_common/evas_gl_common.h index 5873b93fb6..c7b4d22150 100644 --- a/src/modules/evas/engines/gl_common/evas_gl_common.h +++ b/src/modules/evas/engines/gl_common/evas_gl_common.h | |||
@@ -368,6 +368,9 @@ struct _Evas_Engine_GL_Context | |||
368 | Eina_List *font_glyph_images; | 368 | Eina_List *font_glyph_images; |
369 | Evas_GL_Image *def_surface; | 369 | Evas_GL_Image *def_surface; |
370 | RGBA_Image *font_surface; | 370 | RGBA_Image *font_surface; |
371 | int font_glyph_textures_size; | ||
372 | int font_glyph_atlas_size; | ||
373 | Eina_Bool font_glyph_gc_requested :1; | ||
371 | 374 | ||
372 | #ifdef GL_GLES | 375 | #ifdef GL_GLES |
373 | // FIXME: hack. expose egl display to gl core for egl image sec extn. | 376 | // FIXME: hack. expose egl display to gl core for egl image sec extn. |
diff --git a/src/modules/evas/engines/gl_common/evas_gl_font.c b/src/modules/evas/engines/gl_common/evas_gl_font.c index 53260d971d..4a5f428487 100644 --- a/src/modules/evas/engines/gl_common/evas_gl_font.c +++ b/src/modules/evas/engines/gl_common/evas_gl_font.c | |||
@@ -218,13 +218,37 @@ void | |||
218 | evas_gl_font_image_draw(void *gc, void *gl_image, int dx, int dy, int dw, int dh, int smooth) | 218 | evas_gl_font_image_draw(void *gc, void *gl_image, int dx, int dy, int dw, int dh, int smooth) |
219 | { | 219 | { |
220 | Evas_GL_Image *im = (Evas_GL_Image *)gl_image; | 220 | Evas_GL_Image *im = (Evas_GL_Image *)gl_image; |
221 | Evas_Engine_GL_Context *gl_context = gc; | ||
222 | Eina_Bool is_cached = EINA_FALSE; | ||
223 | Eina_Bool is_new_atlas = EINA_FALSE; | ||
221 | 224 | ||
222 | if (!im || !im->fglyph) return; | 225 | if (!im || !im->fglyph) return; |
223 | 226 | ||
224 | evas_gl_common_image_draw((Evas_Engine_GL_Context *)gc, | 227 | is_cached = (im->tex != NULL) && (im->tex->pt != NULL); |
228 | |||
229 | evas_gl_common_image_draw(gl_context, | ||
225 | im, 0, 0, | 230 | im, 0, 0, |
226 | (unsigned int)im->fglyph->glyph_out->bitmap.width, | 231 | (unsigned int)im->fglyph->glyph_out->bitmap.width, |
227 | (unsigned int)im->fglyph->glyph_out->bitmap.rows, | 232 | (unsigned int)im->fglyph->glyph_out->bitmap.rows, |
228 | dx, dy, dw, dh, | 233 | dx, dy, dw, dh, |
229 | smooth); | 234 | smooth); |
235 | |||
236 | // Move latest used glyph image to the back, because GC will start freeing from the beginning | ||
237 | gl_context->font_glyph_images = eina_list_remove(gl_context->font_glyph_images, im); | ||
238 | gl_context->font_glyph_images = eina_list_append(gl_context->font_glyph_images, im); | ||
239 | |||
240 | if (!is_cached) | ||
241 | { | ||
242 | gl_context->font_glyph_textures_size += im->w * im->h * 4; | ||
243 | } | ||
244 | |||
245 | is_new_atlas = (!is_cached) && (im->tex != NULL) && (im->tex->pt) && (im->tex->pt->references == 1); | ||
246 | if (is_new_atlas) | ||
247 | { | ||
248 | int size = (im->tex->pt->w * im->tex->pt->h * 4); | ||
249 | gl_context->font_glyph_atlas_size += size; | ||
250 | if ((evas_font_data_cache_get(EVAS_FONT_DATA_CACHE_TEXTURE) >= 0) && | ||
251 | (evas_font_data_cache_get(EVAS_FONT_DATA_CACHE_TEXTURE) * 0.95 < gl_context->font_glyph_atlas_size)) | ||
252 | gl_context->font_glyph_gc_requested = EINA_TRUE; | ||
253 | } | ||
230 | } | 254 | } |
diff --git a/src/modules/evas/engines/gl_common/evas_gl_texture.c b/src/modules/evas/engines/gl_common/evas_gl_texture.c index 1aa9d3ccb0..47dd8305a8 100644 --- a/src/modules/evas/engines/gl_common/evas_gl_texture.c +++ b/src/modules/evas/engines/gl_common/evas_gl_texture.c | |||
@@ -1565,6 +1565,7 @@ evas_gl_common_texture_free(Evas_GL_Texture *tex, Eina_Bool force) | |||
1565 | if (tex->references != 0) return; | 1565 | if (tex->references != 0) return; |
1566 | if (tex->fglyph) | 1566 | if (tex->fglyph) |
1567 | { | 1567 | { |
1568 | tex->gc->font_glyph_textures_size -= tex->w * tex->h * 4; | ||
1568 | tex->gc->font_glyph_textures = eina_list_remove(tex->gc->font_glyph_textures, tex); | 1569 | tex->gc->font_glyph_textures = eina_list_remove(tex->gc->font_glyph_textures, tex); |
1569 | tex->fglyph->ext_dat = NULL; | 1570 | tex->fglyph->ext_dat = NULL; |
1570 | tex->fglyph->ext_dat_free = NULL; | 1571 | tex->fglyph->ext_dat_free = NULL; |
@@ -1575,6 +1576,10 @@ evas_gl_common_texture_free(Evas_GL_Texture *tex, Eina_Bool force) | |||
1575 | tex->pt->allocations = eina_list_remove(tex->pt->allocations, tex->apt); | 1576 | tex->pt->allocations = eina_list_remove(tex->pt->allocations, tex->apt); |
1576 | if (tex->apt) eina_rectangle_pool_release(tex->apt); | 1577 | if (tex->apt) eina_rectangle_pool_release(tex->apt); |
1577 | tex->apt = NULL; | 1578 | tex->apt = NULL; |
1579 | if (tex->fglyph && (tex->pt->references == 1)) | ||
1580 | { | ||
1581 | tex->gc->font_glyph_atlas_size -= tex->pt->w * tex->pt->h * 4; | ||
1582 | } | ||
1578 | pt_unref(tex->pt); | 1583 | pt_unref(tex->pt); |
1579 | tex->pt = NULL; | 1584 | tex->pt = NULL; |
1580 | } | 1585 | } |
diff --git a/src/modules/evas/engines/gl_generic/evas_engine.c b/src/modules/evas/engines/gl_generic/evas_engine.c index 0fc241643d..a051f00242 100644 --- a/src/modules/evas/engines/gl_generic/evas_engine.c +++ b/src/modules/evas/engines/gl_generic/evas_engine.c | |||
@@ -3023,6 +3023,42 @@ eng_gfx_filter_process(void *engine, Evas_Filter_Command *cmd) | |||
3023 | return pfunc.gfx_filter_process(&re->software, cmd); | 3023 | return pfunc.gfx_filter_process(&re->software, cmd); |
3024 | } | 3024 | } |
3025 | 3025 | ||
3026 | static void | ||
3027 | eng_font_glyphs_gc_collect(void *data EINA_UNUSED, float ratio EINA_UNUSED, int *texture_size EINA_UNUSED, int *atlas_size EINA_UNUSED, Eina_Bool only_when_requested EINA_UNUSED) | ||
3028 | { | ||
3029 | Evas_Engine_GL_Context *gl_context; | ||
3030 | gl_context = gl_generic_context_find(data, 1); | ||
3031 | |||
3032 | if ((only_when_requested && gl_context->font_glyph_gc_requested) || (!only_when_requested)) | ||
3033 | { | ||
3034 | if (ratio > 0.0) | ||
3035 | { | ||
3036 | int requested_size = ratio * gl_context->font_glyph_textures_size; | ||
3037 | |||
3038 | Eina_List *l; | ||
3039 | Eina_List *ll; | ||
3040 | Evas_GL_Image *im; | ||
3041 | EINA_LIST_FOREACH_SAFE(gl_context->font_glyph_images, l, ll, im) | ||
3042 | { | ||
3043 | int size = im->w * im->h * 4; | ||
3044 | gl_context->font_glyph_textures_size -= size; | ||
3045 | requested_size -= size; | ||
3046 | if ((im->tex != NULL) && (im->tex->pt) && (im->tex->pt->references == 1)) | ||
3047 | { | ||
3048 | gl_context->font_glyph_atlas_size -= im->tex->pt->w * im->tex->pt->h * 4; | ||
3049 | } | ||
3050 | evas_gl_common_image_free(im); | ||
3051 | if (requested_size <= 0) | ||
3052 | break; | ||
3053 | } | ||
3054 | } | ||
3055 | |||
3056 | gl_context->font_glyph_gc_requested = EINA_FALSE; | ||
3057 | } | ||
3058 | if (texture_size) *texture_size = gl_context->font_glyph_textures_size; | ||
3059 | if (atlas_size) *atlas_size = gl_context->font_glyph_atlas_size; | ||
3060 | } | ||
3061 | |||
3026 | //------------------------------------------------// | 3062 | //------------------------------------------------// |
3027 | 3063 | ||
3028 | static int | 3064 | static int |
@@ -3178,6 +3214,7 @@ module_open(Evas_Module *em) | |||
3178 | ORD(ector_surface_cache_drop); | 3214 | ORD(ector_surface_cache_drop); |
3179 | ORD(gfx_filter_supports); | 3215 | ORD(gfx_filter_supports); |
3180 | ORD(gfx_filter_process); | 3216 | ORD(gfx_filter_process); |
3217 | ORD(font_glyphs_gc_collect); | ||
3181 | 3218 | ||
3182 | /* now advertise out own api */ | 3219 | /* now advertise out own api */ |
3183 | em->functions = (void *)(&func); | 3220 | em->functions = (void *)(&func); |
diff --git a/src/modules/evas/engines/software_generic/evas_engine.c b/src/modules/evas/engines/software_generic/evas_engine.c index a942a96f02..aca24c4936 100644 --- a/src/modules/evas/engines/software_generic/evas_engine.c +++ b/src/modules/evas/engines/software_generic/evas_engine.c | |||
@@ -4645,6 +4645,12 @@ eng_gfx_filter_supports(void *data EINA_UNUSED, Evas_Filter_Command *cmd) | |||
4645 | return EVAS_FILTER_SUPPORT_CPU; | 4645 | return EVAS_FILTER_SUPPORT_CPU; |
4646 | } | 4646 | } |
4647 | 4647 | ||
4648 | static void | ||
4649 | eng_font_glyphs_gc_collect(void *data EINA_UNUSED, float ratio EINA_UNUSED, int *texture_size EINA_UNUSED, int *atlas_size EINA_UNUSED, Eina_Bool only_when_requested EINA_UNUSED) | ||
4650 | { | ||
4651 | return; | ||
4652 | } | ||
4653 | |||
4648 | static Eina_Bool | 4654 | static Eina_Bool |
4649 | eng_gfx_filter_process(void *data EINA_UNUSED, Evas_Filter_Command *cmd) | 4655 | eng_gfx_filter_process(void *data EINA_UNUSED, Evas_Filter_Command *cmd) |
4650 | { | 4656 | { |
@@ -4851,6 +4857,7 @@ static Evas_Func func = | |||
4851 | eng_gfx_filter_supports, | 4857 | eng_gfx_filter_supports, |
4852 | eng_gfx_filter_process, | 4858 | eng_gfx_filter_process, |
4853 | /* FUTURE software generic calls go here */ | 4859 | /* FUTURE software generic calls go here */ |
4860 | eng_font_glyphs_gc_collect, | ||
4854 | 0 // sizeof (Info) | 4861 | 0 // sizeof (Info) |
4855 | }; | 4862 | }; |
4856 | 4863 | ||