Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
sxychenjing
engine
提交
dd06cda5
E
engine
项目概览
sxychenjing
/
engine
与 Fork 源项目一致
从无法访问的项目Fork
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
E
engine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
dd06cda5
编写于
7月 17, 2019
作者:
G
Gary Qian
提交者:
GitHub
7月 17, 2019
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix justify for RTL paragraphs. (#9859)
上级
be3e2ed4
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
26 addition
and
9 deletion
+26
-9
third_party/txt/src/txt/paragraph_txt.cc
third_party/txt/src/txt/paragraph_txt.cc
+9
-4
third_party/txt/src/txt/paragraph_txt.h
third_party/txt/src/txt/paragraph_txt.h
+3
-1
third_party/txt/tests/paragraph_unittests.cc
third_party/txt/tests/paragraph_unittests.cc
+14
-4
未找到文件。
third_party/txt/src/txt/paragraph_txt.cc
浏览文件 @
dd06cda5
...
...
@@ -1047,14 +1047,14 @@ void ParagraphTxt::Layout(double width) {
// advance subtracted, so we do add the advance here to reset the
// run_x_offset. We do keep the record though so GetRectsForRange() can
// find metrics for trailing spaces.
// if (!run.is_ghost() || run.is_rtl()) {
if
((
!
run
.
is_ghost
()
||
run
.
is_rtl
())
&&
!
run
.
is_placeholder_run
())
{
run_x_offset
+=
layout
.
getAdvance
();
}
}
// for each in line_runs
// Adjust the glyph positions based on the alignment of the line.
double
line_x_offset
=
GetLineXOffset
(
run_x_offset
);
double
line_x_offset
=
GetLineXOffset
(
run_x_offset
,
line_number
,
line_limit
);
if
(
line_x_offset
)
{
for
(
CodeUnitRun
&
code_unit_run
:
line_code_unit_runs
)
{
code_unit_run
.
Shift
(
line_x_offset
);
...
...
@@ -1174,13 +1174,18 @@ void ParagraphTxt::Layout(double width) {
longest_line_
=
max_right_
-
min_left_
;
}
double
ParagraphTxt
::
GetLineXOffset
(
double
line_total_advance
)
{
double
ParagraphTxt
::
GetLineXOffset
(
double
line_total_advance
,
size_t
line_number
,
size_t
line_limit
)
{
if
(
isinf
(
width_
))
return
0
;
TextAlign
align
=
paragraph_style_
.
effective_align
();
if
(
align
==
TextAlign
::
right
)
{
if
(
align
==
TextAlign
::
right
||
(
align
==
TextAlign
::
justify
&&
paragraph_style_
.
text_direction
==
TextDirection
::
rtl
&&
line_number
==
line_limit
-
1
))
{
return
width_
-
line_total_advance
;
}
else
if
(
align
==
TextAlign
::
center
)
{
return
(
width_
-
line_total_advance
)
/
2
;
...
...
third_party/txt/src/txt/paragraph_txt.h
浏览文件 @
dd06cda5
...
...
@@ -362,7 +362,9 @@ class ParagraphTxt : public Paragraph {
// Calculate the starting X offset of a line based on the line's width and
// alignment.
double
GetLineXOffset
(
double
line_total_advance
);
double
GetLineXOffset
(
double
line_total_advance
,
size_t
line_number
,
size_t
line_limit
);
// Creates and draws the decorations onto the canvas.
void
PaintDecorations
(
SkCanvas
*
canvas
,
...
...
third_party/txt/tests/paragraph_unittests.cc
浏览文件 @
dd06cda5
...
...
@@ -1856,15 +1856,25 @@ TEST_F(ParagraphTest, DISABLE_ON_WINDOWS(JustifyRTL)) {
GetCanvas
()
->
drawRect
(
boxes
[
i
].
rect
,
paint
);
}
ASSERT_EQ
(
boxes
.
size
(),
5ull
);
paint
.
setColor
(
SK_ColorBLUE
);
boxes
=
paragraph
->
GetRectsForRange
(
240
,
250
,
rect_height_style
,
rect_width_style
);
for
(
size_t
i
=
0
;
i
<
boxes
.
size
();
++
i
)
{
GetCanvas
()
->
drawRect
(
boxes
[
i
].
rect
,
paint
);
}
ASSERT_EQ
(
boxes
.
size
(),
1ull
);
EXPECT_FLOAT_EQ
(
boxes
[
0
].
rect
.
left
(),
588
);
EXPECT_FLOAT_EQ
(
boxes
[
0
].
rect
.
top
(),
130
);
EXPECT_FLOAT_EQ
(
boxes
[
0
].
rect
.
right
(),
640
);
EXPECT_FLOAT_EQ
(
boxes
[
0
].
rect
.
bottom
(),
156
);
ASSERT_TRUE
(
Snapshot
());
// All lines
except the last
should be justified to the width of the
// All lines should be justified to the width of the
// paragraph.
for
(
size_t
i
=
0
;
i
<
paragraph
->
glyph_lines_
.
size
()
-
1
;
++
i
)
{
for
(
size_t
i
=
0
;
i
<
paragraph
->
glyph_lines_
.
size
();
++
i
)
{
ASSERT_EQ
(
glyph_line_width
(
i
),
paragraph_width
);
}
ASSERT_NE
(
glyph_line_width
(
paragraph
->
glyph_lines_
.
size
()
-
1
),
paragraph_width
);
}
TEST_F
(
ParagraphTest
,
DecorationsParagraph
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录