Summary: that supports images : *.heif, *hiec and *.avif I have disabled *.avif images, there is already a loader.
Reviewers: stefan_schmidt, raster
Subscribers: raster, vtorri, cedric, #reviewers, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D12135
Summary:
Patch from a series of patches to rename EAPI symbols to specific
library DSOs.
= The Rationale =
This patch is from a series of patches to rename EAPI symbols to
specific library DSOs.
EAPI was designed to be able to pass
`__attribute__ ((visibility ("default")))` for symbols with
GCC, which would mean that even if -fvisibility=hidden was used
when compiling the library, the needed symbols would get exported.
MSVC __almost__ works like GCC (or mingw) in which you can
declare everything as export and it will just work (slower, but
it will work). But there's a caveat: global variables will not
work the same way for MSVC, but works for mingw and GCC.
For global variables (as opposed to functions), MSVC requires
correct DSO visibility for MSVC: instead of declaring a symbol as
export for everything, you need to declare it as import when
importing from another DSO and export when defining it locally.
With current EAPI definitions, we get the following example
working in mingw and MSVC (observe it doesn't define any global
variables as exported symbols).
Example 1:
dll1:
```
EAPI void foo(void);
EAPI void bar()
{
foo();
}
```
dll2:
```
EAPI void foo()
{
printf ("foo\n");
}
```
This works fine with API defined as __declspec(dllexport) in both
cases and for gcc defining as
`__atttribute__((visibility("default")))`.
However, the following:
Example 2:
dll1:
```
EAPI extern int foo;
EAPI void foobar(void);
EAPI void bar()
{
foo = 5;
foobar();
}
```
dll2:
```
EAPI int foo = 0;
EAPI void foobar()
{
printf ("foo %d\n", foo);
}
```
This will work on mingw but will not work for MSVC. And that's why
LIBAPI is the only solution that works for MSVC.
Co-authored-by: João Paulo Taylor Ienczak Zanette <jpaulotiz@gmail.com>
Co-authored-by: Lucas Cavalcante de Sousa <lucks.sousa@gmail.com>
Co-authored-by: Ricardo Campos <ricardo.campos@expertise.dev>
Reviewers: vtorri, woohyun, jptiz, lucas
Reviewed By: vtorri, lucas
Subscribers: cedric, #reviewers, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D12214
the test was wrong and waiting to fail. it worked by luck before, but
it was comparing a deleted image's data vs a new one that replaced it.
this fixes that. makes the test suite now reliable. asan pointed this
out.
@fix
This reverts commit 173b3a108e.
This was reverted because of freezing codes for release.
Now, release work was over. So, I think it's ok to restore this.
Summary:
The style padding was included in native width(not in native height)
and formatted height(not in formatted width).
This is so weired. In addition, there is no enough document about
the relation between formatted size, native size and the style padding.
This issue is caused by a confusing code which is about how to handle
the style padding on item's width and height.("x_adjustment"!)
When Evas calculates "c->wmax" in line finalization stage, it explicitly subtract
style padding from line width. So, I assumed the formatted size has not to include
style padding. It is same for the native size.
The style padding will not be included in formatted size and native size by this commit.
@fix
Test Plan:
A test case is included in this commit.
Evas_Object *tb = evas_object_textblock_add(evas);
newst = evas_textblock_style_new();
evas_textblock_style_set(newst, "DEFAULT='font=Sans font_size=50 color=#000 text_class=entry'");
evas_object_textblock_style_set(tb, newst);
evas_object_textblock_text_markup_set(tb, "<style=far_soft_shadow>Test</>");
evas_object_textblock_style_insets_get(tb, &l, &r, &t, &b);
fail_if((l != 0) || (r != 4) || (t != 0) || (b != 4));
/* Size with style padding */
evas_object_textblock_size_formatted_get(tb, &w, &h);
evas_object_textblock_size_native_get(tb, &nw, &nh);
/* It is non-sense if the following condition is true. */
fail_if((w + l + r == nw) && (h == nh + t + b));
Reviewers: raster, ali.alzyod, woohyun, bowonryu
Reviewed By: ali.alzyod
Subscribers: cedric, #reviewers, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D12110
Summary:
if we have rainbow flag emoji (🏳️‍🌈)
we can use mouse/keyboard to move cursor inside it because we break it into two clusters, we break on 1F308,
This is wrong as we should treat emoji as a single cluster (based on rules mentioned in Unicode segmentation standard “Do not break within emoji modifier sequences or emoji ZWJ sequences” (https://unicode.org/reports/tr29/#GB11 )).
this issue happens because we don’t give 1F308 its correct grapheme break property value, I think this is a bug in the unibreak library as this Unicode 1F308 should have word break class value equals to Glue_After_ZWJ (based on https://www.unicode.org/reports/tr29/tr29-31.html#Glue_After_Zwj_WB and http://unicode.org/Public/emoji/5.0/emoji-zwj-sequences.txt) which will not make it break and we will get a single cluster.
I noticed that the current unibreak lib used in EFL seems to implement Unicode 9 (latest is Unicode 13) which uses obsolete and unused grapheme break property, such as E_Modifier & Glue_After_ZWJ, so if a new emoji introduced (rainbow flag was introduced after Unicode 9) and based on Unicode 9 it should use property E_Modifier or Glue_After_ZWJ we will have issue with it.
So I have updated unibreak lib using latest released version of unibreak (4.2) which implement Unicode 12.
I needed to remove **BREAK_AFTER(i)** to pass the tests in D1140 as spaces do not break on latest update (also related to T995).
{F3868712}
this should fix T8665 & T8688
Reviewers: ali.alzyod, woohyun, bowonryu, zmike, segfaultxavi, bu5hm4n
Reviewed By: ali.alzyod
Subscribers: segfaultxavi, cedric, #reviewers, #committers
Tags: #efl
Maniphest Tasks: T8665
Differential Revision: https://phab.enlightenment.org/D11743
Summary:
If shadow format changed using style_apply , the event EFL_CANVAS_TEXTBLOCK_EVENT_CHANGED will not be fired.
also added tests for it.
Reviewers: ali.alzyod, woohyun
Reviewed By: ali.alzyod
Subscribers: cedric, #reviewers, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D11078
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
Summary:
when we set font source, for example with efl_text_font_source_set, the font source will not be updated in the textblock.
this is have same results that has been done in D9548
Test Plan:
#define EFL_EO_API_SUPPORT 1
#define EFL_BETA_API_SUPPORT 1
#include <Efl_Ui.h>
static void
_gui_quit_cb(void *data EINA_UNUSED, const Efl_Event *event EINA_UNUSED)
{
efl_exit(0);
}
static Eo *
_create_label(Eo *win, Eo *bx)
{
Eo *en;
en = efl_add(EFL_UI_TEXTBOX_CLASS, win);
printf("Added Efl.Ui.Text object\n");
efl_text_interactive_editable_set(en, EINA_FALSE);
efl_pack(bx, en);
return en;
}
static void
_gui_setup()
{
char buf[512], f_buf[512];
Eo *win, *bx;
win = efl_add(EFL_UI_WIN_CLASS, efl_main_loop_get(),
efl_ui_win_type_set(efl_added, EFL_UI_WIN_TYPE_BASIC),
efl_text_set(efl_added, "Hello World"),
efl_ui_win_autodel_set(efl_added, EINA_TRUE));
// when the user clicks "close" on a window there is a request to delete
efl_event_callback_add(win, EFL_UI_WIN_EVENT_DELETE_REQUEST, _gui_quit_cb, NULL);
bx = efl_add(EFL_UI_BOX_CLASS, win,
efl_content_set(win, efl_added),
efl_gfx_hint_size_min_set(efl_added, EINA_SIZE2D(360, 240)));
snprintf(buf, sizeof(buf), "./TestFontSource.eet");
Eo *en = _create_label(win, bx);
efl_text_set(en, "Hello, This Text Use The Font : Does_Not_Exists_Font_1 : Source + Font Name");
efl_text_font_source_set(en, buf);
efl_text_font_family_set(en, "Does_Not_Exists_Font_1");
efl_text_font_size_set(en, 35);
en = _create_label(win, bx);
efl_text_set(en, "Hello, This Text Use The Font : Does_Not_Exists_Font_1 : Font Name");
efl_text_font_family_set(en, "Does_Not_Exists_Font_1");
efl_text_font_size_set(en, 35);
en = _create_label(win, bx);
efl_text_set(en, "Hello, This Text Use The Font : Does_Not_Exists_Font_2 : Source + Font Name");
efl_text_font_source_set(en, buf);
efl_text_font_family_set(en, "Does_Not_Exists_Font_2");
efl_text_font_size_set(en, 35);
en = _create_label(win, bx);
efl_text_set(en, "Hello, This Text Use The Font : Does_Not_Exists_Font_2 : Font Name");
efl_text_font_family_set(en, "Does_Not_Exists_Font_2");
efl_text_font_size_set(en, 35);
}
EAPI_MAIN void
efl_main(void *data EINA_UNUSED, const Efl_Event *ev EINA_UNUSED)
{
_gui_setup();
}
EFL_MAIN()
Reviewers: ali.alzyod, woohyun, bowonryu, cedric
Reviewed By: ali.alzyod
Subscribers: cedric, #reviewers, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D11757
Summary:
if we have emoji only or emoji at line start we can move cursor using mouse click to be inside the emoji.
{F3868502}
this should fix T8664
Test Plan:
#include <Elementary.h>
EAPI_MAIN int
elm_main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
{
Evas_Object *win;
elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
win = elm_win_util_standard_add("emoji-test", "emoji-test");
elm_win_autodel_set(win, EINA_TRUE);
/* and now just resize the window to a size you want. normally widgets
* will determine the initial size though */
evas_object_resize(win, 320, 320);
Evas_Object *box;
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);
elm_win_resize_object_add(win, box);
Evas_Object *entry;
entry = elm_entry_add(box);
elm_entry_entry_set(entry, "☪️");
evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_box_pack_end(box, entry);
evas_object_show(entry);
evas_object_show(box);
/* and show the window */
evas_object_show(win);
elm_run(); /* and run the program now, starting to handle all
* events, etc. */
/* exit code */
return 0;
}
ELM_MAIN()
Reviewers: ali.alzyod, woohyun, bowonryu, zmike, bu5hm4n
Reviewed By: ali.alzyod
Subscribers: cedric, #reviewers, #committers
Tags: #efl
Maniphest Tasks: T8664
Differential Revision: https://phab.enlightenment.org/D11732
eina_file_mkstemp would return -1 in an error case. Make sure we check
the return when clsoing here.
CID: 1400790
Reviewed-by: Christopher Michael <devilhorns@comcast.net>
Differential Revision: https://phab.enlightenment.org/D11957
libraries are split into deps, external deps, and pub deps.
Evas engines are refactored to use the predefined engine deps.
this is preparation work for efl-one.
Reviewed-by: Stefan Schmidt <stefan@datenfreihafen.org>
Differential Revision: https://phab.enlightenment.org/D11806
Summary:
The same principle we use for the build stage we use here for running
our tests. Leak detection has just to many problems for us on the
shutdown path that it makes no sense to use here.
I am also bumping the evas timeout form the default 30s to 60 as I have
been running into timeouts with asan enabled on my machine. This would
not change anything on a default build.
Depends on D11137
Reviewers: smohanty, bu5hm4n, raster, zmike
Reviewed By: zmike
Subscribers: zmike, cedric, #reviewers, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D11862
Summary:
Picking font on textrun, will now give priority into font picked by the user, regardless of script type.
picking font due script can cause many inconvenient results
Example of wrong results: (User font is **NotoColorEmoji**)
{F3847118} -> add 'a' at the end (notice how text render is wrong) {F3847119} -> add tab before 'a' (text rendering now is right) {F3847120}
After Change results: (User font is **NotoColorEmoji**)
{F3847118} -> add 'a' at the end -> {F3847122}-> add tab before 'a' -> {F3847123}
Also now the following lines will be shown exactly the same, regardless of characters order
```
"가123A321"
"A321가123"
"123가A321"
"A가123321"
```
Test Plan:
```
#include <Elementary.h>
/*
gcc -o example test.c `pkg-config --cflags --libs elementary`
*/
EAPI_MAIN int
elm_main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
{
Evas_Object *win, *en;
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);
en = elm_entry_add(win);
elm_entry_scrollable_set(en, EINA_TRUE);
evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_entry_text_style_user_push(en,"DEFAULT='font=NotoColorEmoji font_size=30 color=red'");
elm_object_text_set(en, "☪123456a");
evas_object_show(en);
elm_object_content_set(win, en);
evas_object_resize(win, 400, 200);
evas_object_show(win);
elm_run();
return 0;
}
ELM_MAIN()
```
Reviewers: woohyun, bowonryu, tasn, raster, cedric
Reviewed By: tasn
Subscribers: cedric, #reviewers, #committers
Tags: #efl
Maniphest Tasks: T8556
Differential Revision: https://phab.enlightenment.org/D11302
```
#include <Elementary.h>
EAPI_MAIN int
elm_main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
{
Evas_Object *win, *textblock;
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);
textblock = evas_object_textblock_add(win);
evas_object_resize(textblock, 360, 360);
evas_object_show(textblock);
evas_object_textblock_text_markup_set(textblock, "<b>b</b>");
evas_object_resize(win, 360, 360);
evas_object_show(win);
elm_run();
return 0;
}
ELM_MAIN()
```
this application will crash.
Any font format specified in text, if there are now style will cause the crash.
Reviewed-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Reviewed-by: Stefan Schmidt <stefan@datenfreihafen.org>
Differential Revision: https://phab.enlightenment.org/D11686
Summary:
Picking font on textrun, will now give priority into font picked by the user, regardless of script type.
picking font due script can cause many inconvenient results
Example of wrong results: (User font is **NotoColorEmoji**)
{F3847118} -> add 'a' at the end (notice how text render is wrong) {F3847119} -> add tab before 'a' (text rendering now is right) {F3847120}
After Change results: (User font is **NotoColorEmoji**)
{F3847118} -> add 'a' at the end -> {F3847122}-> add tab before 'a' -> {F3847123}
Also now the following lines will be shown exactly the same, regardless of characters order
```
"가123A321"
"A321가123"
"123가A321"
"A가123321"
```
Test Plan:
```
#include <Elementary.h>
/*
gcc -o example test.c `pkg-config --cflags --libs elementary`
*/
EAPI_MAIN int
elm_main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
{
Evas_Object *win, *en;
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);
en = elm_entry_add(win);
elm_entry_scrollable_set(en, EINA_TRUE);
evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_entry_text_style_user_push(en,"DEFAULT='font=NotoColorEmoji font_size=30 color=red'");
elm_object_text_set(en, "☪123456a");
evas_object_show(en);
elm_object_content_set(win, en);
evas_object_resize(win, 400, 200);
evas_object_show(win);
elm_run();
return 0;
}
ELM_MAIN()
```
Reviewers: woohyun, bowonryu, tasn, raster, cedric
Reviewed By: tasn
Subscribers: cedric, #reviewers, #committers
Tags: #efl
Maniphest Tasks: T8556
Differential Revision: https://phab.enlightenment.org/D11302
Three renames are applied here:
Efl.Text.Cursor -> Efl.Text_Cursor.Object (class)
Efl.Text.Cursor_Type -> Efl.Text_Cursor.Type (enum)
Efl.Text.Cursor_Move_Type -> Efl.Text_Cursor.Move_Type (enum)
Nothing changes for the enums on the C side. For the class... Well,
the method names are a bit more verbose now.
These renames are required to avoid clashing with the Efl.Text interface.
This did not cause trouble to C# because interfaces are prefixed with "I",
but it did cause trouble to Eolian when the EO files were installed and
somebody tried to use them.
Ref T8648
Differential Revision: https://phab.enlightenment.org/D11663
the cur_obj would have been always dead at this point, as the textblock
was freed. This now moved the textcursor object to a previous point.
However, we could also remove the explicit cursor deletion...
Reviewed-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Differential Revision: https://phab.enlightenment.org/D11596
ensure that these functions are still usable with async load
Reviewed-by: Marcel Hollerbach <mail@marcel-hollerbach.de>
Differential Revision: https://phab.enlightenment.org/D11424
Summary:
when using this property, there should be no mmap loaded after a call
to evas_object_image_file_set, and we want to make sure the image is
eventually loaded
ref T8378
Depends on D11340
Reviewers: raster
Reviewed By: raster
Subscribers: cedric, #reviewers, #committers
Tags: #efl
Maniphest Tasks: T8378
Differential Revision: https://phab.enlightenment.org/D11341
Summary:
style string can contain any kind of white spaces and it will be fine
For example
```
"font=sans font_size=30 color=red "
```
Is the same as
```
"font=sans\tfont_size=30\n color=red "
```
Reviewers: woohyun, segfaultxavi, tasn, zmike
Reviewed By: segfaultxavi
Subscribers: bu5hm4n, cedric, #reviewers, #committers
Tags: #efl
Maniphest Tasks: T8532
Differential Revision: https://phab.enlightenment.org/D11303
Summary:
Update the test to check that the first character is rendered after the obstacle.
To ensure that the obstacle feature keeps working correctly.
Reviewers: ali.alzyod, woohyun
Reviewed By: ali.alzyod
Subscribers: segfaultxavi, cedric, #reviewers, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D11033
This causes many issues because textbox functions deals with <br> <tab> differently depending that user write them with or without '/' at the end (for example <br> vs <br/>)
while most functionaliity are the same (like viewing <br> and <br/> are the same).
cursor dealing with these tags can be differently.
now we will assume <br> <tab> are already have there own closing tag, even if it is missing
Reviewed-by: Marcel Hollerbach <mail@marcel-hollerbach.de>
Differential Revision: https://phab.enlightenment.org/D11293
Summary:
File_Save.save does not work for proxy object from following commit.
c53f152 evas: Make save() work on snapshots
Test Plan:
1. Add an image object and set source object.
evas_object_image_source_set(obj, source);
2. Save the object as a file when you need.
evas_object_image_save(obj, "./file_name.png", NULL, NULL);
Reviewers: cedric, Hermet, jsuya
Reviewed By: Hermet
Subscribers: zmike, subodh6129, #reviewers, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D10629
Markup_set will emit change events, if user set empty string.
This Change is related to D10985, where markup_prepend will not emit events if empty string was added
Reviewed-by: Al Poole <netstar@gmail.com>
Reviewed-by: Marcel Hollerbach <mail@marcel-hollerbach.de>
Differential Revision: https://phab.enlightenment.org/D11020
efl.text.cursor: emit events CANVAS_TEXTBLOCK_CHANGED when insert text using efl_text_cursor_markup_insert
Differential Revision: https://phab.enlightenment.org/D10985
Summary:
This patch will make **efl_text_cursor_move** method, when it is working with **WORD_START** or **WORD_END** If no actual movement happened then return false, and do not fire CHANGE event
for example if cursor at word start, and we call efl_text_cursor_move(cursor, word_start);
1- this call should return false because no actual movement happened. If no actual movement happened then return false
2- this call should not fire CHANGE event for cursor.and do not fire CHANGE event
Reviewers: woohyun, segfaultxavi, cedric, zmike
Reviewed By: woohyun
Subscribers: cedric, #reviewers, #committers
Tags: #efl
Maniphest Tasks: T8454
Differential Revision: https://phab.enlightenment.org/D10949
Summary:
When the cursor is at line beginning of line, and user click "Up" then "Down" on keyboard cursor will position at second character.
If text is: **occaecat \n mollit**
Reviewers: woohyun, zmike, cedric, segfaultxavi
Reviewed By: woohyun
Subscribers: cedric, #reviewers, #committers
Tags: #efl
Maniphest Tasks: T8454
Differential Revision: https://phab.enlightenment.org/D10947
Summary:
From documentation `line_jump_by` should return `EINA_TRUE` if cursor moved, and `EINA_FALSE` if not moved.
But the current behaviour is reversed, so this should fix it.
Reviewers: ali.alzyod, segfaultxavi, woohyun
Subscribers: AbdullehGhujeh, #committers, cedric, #reviewers
Tags: #efl
Maniphest Tasks: T8454
Differential Revision: https://phab.enlightenment.org/D10946