elm textpath: reduces differences between actual pos and modified pos

Summary:
In a previous patch, textpath was modified to use differences between
prev/next values to decide next position. Actually, it improved rendering
quality. But, the modified position could have a big difference from actual position.
It caused a distortion problem.
So, this patch was made for reducing that differences.
@fix

Test Plan:
I'll attach some screenshots of before/after.

1. Modify text in text_ui_textpath.c to see distortion of text. ex) "―――――――――――――――――――..."
2. Build and install.
3. Run
   "ELM_SCALE=0.8 ELM_ACCEL=gl elementary_test -to efl.ui.textpath"

Reviewers: Hermet, raster, cedric

Reviewed By: Hermet

Subscribers: #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D7418
This commit is contained in:
Youngbok Shin 2019-02-25 15:26:25 +09:00 committed by Hermet Park
parent a2cfa9340a
commit 45b475d9d4
1 changed files with 8 additions and 1 deletions

View File

@ -178,7 +178,8 @@ _segment_draw(Efl_Ui_Textpath_Data *pd, int slice_no, double dt, double dist,
/* Set mp1, mp2 position according to difference between
* previous points and next points.
* It improves smoothness of curve's slope changing. */
* It improves smoothness of curve's slope changing.
* But, it can cause huge differeces from actual positions. */
mp0_x = *last_x1;
mp0_y = *last_y1;
mp1_x = *last_x1 + (int) round(vec1.x - vec0.x);
@ -188,6 +189,12 @@ _segment_draw(Efl_Ui_Textpath_Data *pd, int slice_no, double dt, double dist,
mp3_x = *last_x2;
mp3_y = *last_y2;
/* It reduces differences between actual position and modified position. */
mp1_x += (int)round(((double)vec1.x - mp1_x) / 2);
mp1_y += (int)round(((double)vec1.y - mp1_y) / 2);
mp2_x += (int)round(((double)vec2.x - mp2_x) / 2);
mp2_y += (int)round(((double)vec2.y - mp2_y) / 2);
evas_map_point_coord_set(map, cmp + i * 4, mp0_x, mp0_y, 0);
evas_map_point_coord_set(map, cmp + i * 4 + 1, mp1_x, mp1_y, 0);
evas_map_point_coord_set(map, cmp + i * 4 + 2, mp2_x, mp2_y, 0);