Commit Graph

68 Commits

Author SHA1 Message Date
Youngbok Shin a9b4be11e1 Evas object: Add paragraph_direciton APIs
Summary:
It adds evas_object_paragraph_direction_set, get APIs.
The APIs set or get paragraph direction to/from the given object.
It changes BiDi calculations and affect the direction and aligning of text.
It doesn't have any effect to text without Fribidi library.

The default paragraph direction is EVAS_BIDI_DIRECTION_INHERIT.
If dir is EVAS_BIDI_DIRECTION_INHERIT, paragraph direction is changed
according to smart parent object. If there is no smart parent object,
paragraph direction works as EVAS_BIDI_DIRECTION_NEUTRAL.

@feature

Test Plan:
Test cases included to the following files.
- evas_test_textblock.c
- evas_test_text.c
- evas_test_object_smart.c

Run "make check".

Reviewers: woohyun, raster, herdsman, tasn

Subscribers: c, raster, cedric

Differential Revision: https://phab.enlightenment.org/D1690
2015-11-19 11:43:39 +00:00
Daniel Hirt d6e0d902cf Evas textblock: fix bad deletion in test case
No need to delete this object. It is already being deleted when the
textblock is freed at the end of the test.
2015-11-17 16:22:02 +02:00
Minwoo, Lee c196422e63 evas textblock: fixed ascent/descent calculation
Summary:
If textblock has linegap and multi language, ascent/descent calculation is
incorrect.
In _layout_format_ascent_descent_adjust(), descent is accumulated.
(for example, for a line gap of 50, the first line gap is more than 100)

Test Plan:
Textblock has "linegap=50" and multi language (ex.
        "This is a test suite for line gap -
        ഈ ലൈൻ വിടവ് ടെസ്റ്റ് ടെസ്റ്റ് ടെസ്റ്റ് ടെസ്റ്റ് ഒരു പരീക്ഷണ വെയര് ")
Added test suite in evas_test_textblock.c file.

Reviewers: tasn

Subscribers: subodh6129, cedric

Differential Revision: https://phab.enlightenment.org/D3311
2015-11-13 12:27:59 +00:00
Daniel Hirt 74ad947ded Evas textblock: Clear unused paragraphs
This fixes a scenario in which paragraphs in the current layout still
store visual lines from the previous layout. This is possible if the
text uses an ellipsis format, allowing the layout work to stop at a
certain paragraph. This inconsistency affects some query functions that
consider lines which may be irrelevant in the current layout.

Test Case: see added test case to evas_suite.

@fix
2015-07-14 16:04:40 +03:00
Daniel Hirt e8afd5241c Evas Textblock: Add obstacle objects feature
Summary:
Introducing a new feature for Evas Textblock. This allows the layout to
wrap around other evas objects.
The following API is added:
 - obstacle_add
 - obstacle_del
 - obstacle_update
Evas objects can now serve as textblock obstacles, if positioned and
visible on the text area. The text will wrap around the obstacles
according to the wrapping mode set to it.

This also modifies the current wrapping code to handle obstacle wrap
points as well. The wrap index query function is modified so that
forward-scanning (specific cases) may be disabled when treating
obstacle wrap point.

RTL text is currently unsupported by this feature.
Consult added docs and example for usage.

@feature

Test Plan: Evas example and test in evas_suite are provided with this.

Reviewers: tasn

Subscribers: raster, JackDanielZ, cedric

Differential Revision: https://phab.enlightenment.org/D2405
2015-07-01 16:24:31 +01:00
Daniel Hirt 0de8ebbb3a Evas textblock: Fix infinite loop case
This fixes a case with wrapping, where the text has a mixture of 'none'
and 'word' wrapping modes, and the layout function decides to
roll-back a few items.
The test case is added to the evas_suite.
This might not be a common case, or even a case we had defined a proper
behavior to, but since it causes an infinite loop, it needs to be fixed.

@fix
2015-06-29 16:43:49 +03:00
Tom Hacohen 76ff4430a2 Evas textblock: Fix the newly added test to use ck_assert_int_eq. 2015-06-26 15:24:56 +01:00
Vladyslav Shevchenko fbfeb9af48 Evas textblock: Add a failing test for line_coord_set.
See more information in the next commit.

This commit message was edited by TAsn, and only the test case preserved
from the original commit in D2574.
2015-06-26 15:21:05 +01:00
Subodh Kumar 77e3ac7f82 Evas textblock: Add underline height support
Summary:
For showing text error like spell error thick underline is used hence added the underline height support.

@feature

Test Plan: test case added in evas textblock test.

Reviewers: raster, shilpasingh, tasn

Subscribers: govi, rajeshps, cedric

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

TAsn comment: I wonder if the format should be renamed to
underline_relheight instead of height. If you have any thoughts, please
let me know.
2015-05-27 11:18:19 +01:00
Thiep Ha c30303d7e8 edje entry: improve selection performance
Summary:
The selection performance is slow if we select large chunk of text.
This is caused by many rectangles created and deleted.
This patch provides a way to improve it by combine selection rectangles
of line in middle into one rectangles (i.e, if we have N lines,
the selection rectangle for lines 2 to N-1 will be combined into one.)

@feature

Reviewers: raster, cedric, tasn

Subscribers: herdsman, woohyun, cedric

Differential Revision: https://phab.enlightenment.org/D1508
2014-11-26 11:29:09 +00:00
Thiep Ha e9a40835f2 textblock: correct text position for RTL text with margins
Summary:
If a RTL textblock has right margin, text is wrongly placed
(right margin is moved to left).
This patch fixes this issue.
Test cases are also added to test text position with margins.

@fix

Reviewers: tasn, herdsman

Subscribers: woohyun, cedric

Differential Revision: https://phab.enlightenment.org/D1691
2014-11-26 10:18:49 +02:00
Thiep Ha dee98ea248 evas textblock: return text direction for under cursor in cursor geometry get
Summary:
Currently, in cursor geometry get function, the text direction is not
returned if cursor is under cursor.
This patch fixs it by returning text direction for under cursor.

@fix

Reviewers: tasn

Subscribers: herdsman, cedric

Differential Revision: https://phab.enlightenment.org/D1505
2014-10-02 08:36:35 +01:00
Daniel Hirt fae337469e Evas Textblock: Fix native width of BiDi text
Summary:
This fixes an issue that causes BiDi text to get wrapped even when
resizing the textblock to its native size.
The way we find the last visual item in the native line is wrong. The
'visual_pos' describes the visual position in the formatted layout, in
which wrapping may occur. So, this is really bad to use it for native
width calculations as well.
Also, there's no need to actually reorder the line - we just need the
last visual item.
This adds and uses a function very similar to _layout_line_reorder, in
which we retrieve the last visual item in the native line. This
function does not do any actual reordering, as the native layout is
disposed of after calculation is done.

Also, added GET_ITEM_LEN macro for convenience.

Fixes T1532

@fix

Test Plan: Added to evas textblock test suite in this patch

Reviewers: tasn

Subscribers: id213sin, JackDanielZ, cedric

Maniphest Tasks: T1532

Differential Revision: https://phab.enlightenment.org/D1353
2014-10-01 16:45:58 +01:00
Daniel Hirt a4d716d1c0 Evas Textblock: Fix bad empty line add on wrapping
Summary:
In some cases of char or word wrapping, an empty line might be
accidentally added at the end of the paragraph. That line contains
no items. Of course, this line should not exist.
One outcome of this is that it causes wrong height values of the
paragraph, when the finalizing code uses the
_layout_last_line_max_descent_adjust_calc, which in turn
looks at that empty line to calculate the descent values.

@fix

Test Plan: Char-wrap and word-wrap tests to test suite included in this revision.

Reviewers: tasn

Subscribers: JackDanielZ, cedric

Projects: #efl

Differential Revision: https://phab.enlightenment.org/D1444
2014-09-26 13:20:14 +01:00
Youngbok Shin 15281561e5 evas textblock: fixed ellipsis character cut off issue with complex markup text.
Summary:
Evas Textblock ellipsis is handled in a item.
When the ellipsis item is added in the text, some characters are cut off
considering width of ellipsis character.
But, it is handled in only one text item.
If there are many short text item, the ellipsis item can be cut off visually.
And there was a bug in the patch when text is displayed in two lines or more.
The bug is also fixed.

Fixes Phab ticket T1213

@fix

Test Plan: This commit includes test case.

Reviewers: woohyun, seoz, sohyun, tasn, raster

Subscribers: cedric, herdsman

Differential Revision: https://phab.enlightenment.org/D1360
2014-09-02 11:47:36 +01:00
Tom Hacohen 4f3ab0db34 Evas textblock: Add a test for multiline ellipsis.
This tests that even with multiline ellipsis, the ellipsis in the second
line is not overdone (i.e it only does ellipsis as needed).

This is a test for something we found out when we applied D1311 (for T1213).
2014-08-20 16:19:44 +01:00
Tom Hacohen 841191d907 Evas textblock: Fix BiDi text cut-off at the edges.
This patch fixes an issue causing text to be cut off in some cases.
The problem was that we were calculating line width and alignment before
we did any bidi calculations, which in turn caused us to use the wrong
text items for those calculations.

Many thanks to Daniel Hirt for investigating this deeply, finding all
the nitty-gritty and generally pointing me to where the problem is.
Daniel also provided the test case.
His patch (D1291) was close, but not enough.

Fixes T1496

@Fix
2014-08-20 15:10:23 +01:00
Carsten Haitzler 9a91261a4e Revert "evas textblock: fixed ellipsis character cut off issue with complex markup text."
This reverts commit d408408283.

this breaks mult-line "long" filenames in efm. 2nd line is just ...
for almost all of them (ones that are actually in need of 3 or more
lines). break break! REVERT!
2014-08-20 12:03:14 +09:00
Youngbok Shin d408408283 evas textblock: fixed ellipsis character cut off issue with complex markup text.
Summary:
Evas Textblock ellipsis is handled in a item.
When the ellipsis item is added in the text, some characters are cut off
considering width of ellipsis character.
But, it is handled in only one text item.
If there are many short text item, the ellipsis item can be cut off visually.

Fixes Phab ticket T1213

@fix

Test Plan: This commit includes test case.

Reviewers: woohyun, seoz, sohyun, tasn

Subscribers: herdsman, cedric

Differential Revision: https://phab.enlightenment.org/D1311
2014-08-19 15:20:35 +01:00
Youngbok Shin 7a87f322f4 textblock: Update visual_pos before calling _size_native_calc_line_finalize.
Summary:
In items loop of _size_native_calc_line_finalize,
last_it should be replaced with new item according to position.
But, visual_pos is not prepared and it is always zero in the function.
So, we need to update visual_pos.
And when textblock only has LTR text,
we can replace last_it according to item list sequence.
@fix

Test Plan:
It includes test cases using the following test case.
 1. "i<b>。</b>"
 2. "。<b>i</b>"

Reviewers: seoz, woohyun, sohyun, tasn

Subscribers: raster, herdsman, cedric

Differential Revision: https://phab.enlightenment.org/D859
2014-08-06 10:40:02 +01:00
Youngbok Shin 1984961ba6 evas/textblock: fix to keep original format when a markup tag is matched to a style tag.
Summary:
We can define a style tag as opener, closer and own closer.
If there is a markup tag that is matched to style tag,
it is reprocessed to format node inside of textblock.
But, when the format node will be converted to markup text,
'/' character can be appended to text at closer and own closer style tag.
Even if original markup tag does not has '/' character,
it will be appended according to format node information.

It makes some issue when compare input text with output text.
@fix

Test Plan: This commit includes test case.

Reviewers: woohyun, raster, sohyun, tasn

Subscribers: herdsman, cedric

Differential Revision: https://phab.enlightenment.org/D1037
2014-08-05 10:26:05 +01:00
Thiep Ha 104f04eda1 Evas textblock: Correct word start/end moving at new line or line begins with spaces
Summary:
Word start/end works incorrectly when it goes to new line or line begins with spaces.
Ex: In elementary_test/Entry, place cursor at the end of line, press ctrl + right arrow keys: cursor moves to begin of next line. In this case, cursor should move to end of 1st word in next line.
Ex2: In elementary_test/Entry, add some spaces to begin of 2nd line ("   uses markup"), place cursor at the first word ("uses"), press ctrl + left arrow keys twice, cursor moves to begin of 2nd line. In this case, cursor should move to begin of last word in 1st line.

This patch provides a fix by considerring next/previous text node to move cursor to correct place.

@fix

Reviewers: woohyun, raster, tasn

Subscribers: cedric

Differential Revision: https://phab.enlightenment.org/D1140
2014-08-04 11:01:51 +01:00
Daniel Hirt 2b40860f78 Evas/Textblock: Introduce PS deletion bug test and fix
Summary:
This test should make the test suite fail. It sets "a<ps>b" and
"a<ps/>b" markups, and deletes the PS format. Essentially, these two
different markups should have the same result by this deletion. Instead,
only the <ps/> format gets deleted properly.
A follow-up commit is added with this as a fix.

Evas/Textblock: fix deletion of PS bug

Fixes an issue with deletion of "<ps>". Format deletion was only
performed for formats that are own-closers. This sets the paragraph
separator to be an own-closer format.

@fix

Reviewers: tasn

Reviewed By: tasn

CC: JackDanielZ, id213sin

Differential Revision: https://phab.enlightenment.org/D1046
2014-06-17 11:11:33 +01:00
Youngbok Shin 3e81b73aa8 evas/tests - textblock: add a test case for item format with ellipsis.
Summary:
When item format is cutoff by ellipsis, *_cursor_format_item_geometry_get API
should be failed at the item position.
But, it can be success and returns abnormal geometry.

Reviewers: woohyun, tasn

CC: cedric, herdsman

Differential Revision: https://phab.enlightenment.org/D974
2014-06-10 15:17:41 +01:00
Tom Hacohen 3b70b4f28f Evas textblock: Fix crash when cutting ligatures with formats.
"f<color=#f00>i</color>f" could cause textblock to crash. It doesn't
crash anymore. It doesn't render the colours correctly either, but at
least this is the first step.

This is the start of fixing T1308

@bugfix
2014-06-04 10:14:24 +01:00
Daniel Hirt 177135ff0d Evas/Textblock: add support for ellipsis values
Summary:
This enables textblock to support more values other than 1.0.
For 0 <= ellipsis < 1.0, it splits the text such that it fits the
textblock's width. The ellipsis is relatively position according to the
ellipsis value, and characters are removed also relatively.
For example, a value of 0.5 will position the ellipsis right in the
center of the textblock's width, while removing characters equally right
and left from the center.

Basic approach to this feature was to do some work before the layout
process. We calculate the expected total width of the items, and by how
much we exceed from the textblock's width. Afterwards is it just some
careful work to set the boundaries of the width we want to cut, and
deciding which characters we need to removed to fulfill this requirement.
The rest is splitting the text and visually-removing the part we
need to cut.
This is all handled before any logical lines are created, so the
_layout_par function remains almost intact. A designated _ellip_prev_it
field in the Paragraph struct instructs after which item we place the
ellipsis item, if at all.

Note that we keep the fast path for ellipsis 1.0, as heavier work needs
to be done for the other values.

Added tests to evas_suite for a range of ellipsis values.

Also, multiline is unsupported at the moment.
@feature

Test Plan: Anything that uses Evas Textblock (single-line, please)

Reviewers: tasn, id213sin, raster

CC: cedric, JackDanielZ, raster

Differential Revision: https://phab.enlightenment.org/D905
2014-05-29 15:52:01 +01:00
Tom Hacohen 30506b9025 Revert "tests: Add a case for ellipsis in complex markup text."
Opened a task (1151) for it and should revert this when ready to fix.

This reverts commit 9128ac82a0.
2014-04-03 11:52:00 +01:00
Youngbok Shin 9128ac82a0 tests: Add a case for ellipsis in complex markup text.
Summary: Evas textblock can't cut off text properly when it has separated items.

Reviewers: tasn, woohyun, raster

Reviewed By: raster

CC: cedric, herdsman

Differential Revision: https://phab.enlightenment.org/D667
2014-04-02 15:57:17 +09:00
Tom Hacohen aad13a286f Evas text: Make tests more lax so they'll work on Ubuntu.
It seems that a different version of freetype is causing some different
values to be calculated for some glyphs. Also, we consider the whole
font list when calculating max ascent/descent, so there will always be
differences there.

This commit just laxes the tests, requiring the values to be at least
the values we expect from our font.

Fixes T1079
2014-03-18 15:02:13 +00:00
Tom Hacohen d175b8aa69 Evas textblock: Fix clipping issues with some texts with width > advance.
This happens with many texts. The issue occurs when the width of the
last char is larger than it's advance. Before this patch, we didn't the
width into account when calculating width, thus causing clipping issues
in some cases.
2014-03-10 14:58:18 +00:00
Tom Hacohen 00b2974a2c Evas textblock tests: Improved textblock word start/end tests.
Removed a wrong test and added some more tests.
2014-02-19 14:38:06 +00:00
Tom Hacohen e0428e9cb0 Evas textblock tests: Add a wrapping test for complex cluster wrapping.
This test uses some Devanagari text that should have more complex
clusters than what latin text can provide. This is a more complex
wrapping case that should be tested and haven't been tested until now.
2014-02-19 12:08:56 +00:00
Tom Hacohen 1dcf143192 Evas textblock: Added a test for rendering of spaces in some cases.
This checks that spaces are one again used, in a specific case
with wrapping.
2014-02-10 14:17:02 +00:00
Tom Hacohen 13664f3af1 Evas textblock: Fixed test shadow warnings. 2014-02-07 13:18:38 +00:00
Tom Hacohen 97f625c021 Evas textblock: Added tests for *_cursor_char_coord_set.
There are issues with values between the beginning of the first par and
the beginning of the first line.
2014-02-07 13:14:21 +00:00
Tom Hacohen a5691571e3 Evas textblock: Added a test for range geometry with bidi text. 2014-01-29 13:27:45 +00:00
Jean-Philippe Andre cc82e2ded5 Textblock: Add test cases for style padding
In the previous commit, style padding has been changed, so
that lines don't get extra space just because there's a special
style (glow, ...)

This adds some test cases that check the actual geometry of the
lines relatively to each other.

NOTE: This test does not fail before the padding commits, as
_relayout_if_needed() adjusts the padding properly.
2014-01-15 17:55:27 +09:00
Youngbok Shin b4106c90d9 Evas test textblock: Added a test for a broken range_text_get case.
Summary: Added a test for range_text_get case on the text that include multi text node.

Reviewers: tasn, woohyun, seoz

CC: cedric

Differential Revision: https://phab.enlightenment.org/D398
2013-12-23 11:01:57 +09:00
Youngbok Shin 8bee8853ae Evas test textblock: Added a test for a broken range_delete case.
This fixes bad integration by me (Tom) of Youngbok's patch in
42a06f24d8.
2013-12-16 12:05:47 +00:00
Youngbok Shin 42a06f24d8 Evas textblock: Added more range_delete tests.
These tests check for a regression with deletion of ranges ending with
visual formats.
Thanks to Youngbok Shin for sending me the tests.
2013-12-13 14:44:16 +00:00
Jean-Philippe Andre a1c3fef538 Evas tests: Add invalid markup test
Commit 0cb048f9b6 fixed a crash in Textblock where
a couple "key=val" had an empty value ("key=").
2013-12-10 20:57:19 +09:00
Tom Hacohen ada27a49d7 Evas textblock: Added a test for wraps ending with whites.
This tests for word wraps of lines ending with whites.
Those whites should not be cut, they should be wrapped as well.
2013-11-25 14:41:24 +00:00
Tom Hacohen 0e363f54b4 Evas textblock tests: Added tests for correct tag ordering.
Check that tags entered are correctly ordered.
2013-11-19 15:56:49 +00:00
Tom Hacohen 61264aebe3 Evas textblock tests: Added a complex markup set/get test.
This should make things more robust as thing tests a lot.
2013-11-19 15:56:49 +00:00
Tom Hacohen 4850c4660f Evas textblock: Fixed broken test.
Item is not meant to take the size of the max ascent, just the ascent.
2013-09-23 14:37:19 +01:00
Tom Hacohen bda3ceb632 Evas textblock: fixed *_markup_get issue with escaped chars.
Markup_get was misbehaving and returning wrong results with some escaped
chars. markup_to_utf8 was working correctly. Merged the code together
and now both are consistent and correct.

Thanks to WooHyun for reporting.
2013-09-03 11:50:34 +01:00
Tom Hacohen 6ca84f0486 Evas textblock tests: Make the tests more lax.
The tests were failing on jenkins (gentoo), and on arch, but passing on an
old ubuntu. Ubuntu patches freetype, and that's probably the reason for that
with the tests more lax, both work.
2013-08-20 13:32:03 +01:00
Tom Hacohen 1e9f121f42 Evas textblock tests: Adjust tests according to descent fix. 2013-08-20 11:13:06 +01:00
Tom Hacohen 92a6d2e2d2 Evas textblock tests: Fix a broken test and add another test.
The test was running without a text being set.
The added test runs with an empty textblock.
2013-08-20 11:13:06 +01:00
Tom Hacohen ec573948b0 Evas textblock tests: use the libcheck assert macros. 2013-08-20 11:13:06 +01:00