Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
weixin_43355755
engine
提交
e18298c9
E
engine
项目概览
weixin_43355755
/
engine
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
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,发现更多精彩内容 >>
未验证
提交
e18298c9
编写于
9月 03, 2019
作者:
G
Gary Qian
提交者:
GitHub
9月 03, 2019
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix RTL justification alignment with newline (#11842)
上级
fde7c8c3
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
90 addition
and
4 deletion
+90
-4
third_party/txt/src/txt/paragraph_txt.cc
third_party/txt/src/txt/paragraph_txt.cc
+3
-3
third_party/txt/src/txt/paragraph_txt.h
third_party/txt/src/txt/paragraph_txt.h
+2
-1
third_party/txt/tests/paragraph_unittests.cc
third_party/txt/tests/paragraph_unittests.cc
+85
-0
未找到文件。
third_party/txt/src/txt/paragraph_txt.cc
浏览文件 @
e18298c9
...
@@ -1065,7 +1065,7 @@ void ParagraphTxt::Layout(double width) {
...
@@ -1065,7 +1065,7 @@ void ParagraphTxt::Layout(double width) {
// Adjust the glyph positions based on the alignment of the line.
// Adjust the glyph positions based on the alignment of the line.
double
line_x_offset
=
double
line_x_offset
=
GetLineXOffset
(
run_x_offset
,
line_number
,
line_limit
);
GetLineXOffset
(
run_x_offset
,
line_number
,
justify_line
);
if
(
line_x_offset
)
{
if
(
line_x_offset
)
{
for
(
CodeUnitRun
&
code_unit_run
:
line_code_unit_runs
)
{
for
(
CodeUnitRun
&
code_unit_run
:
line_code_unit_runs
)
{
code_unit_run
.
Shift
(
line_x_offset
);
code_unit_run
.
Shift
(
line_x_offset
);
...
@@ -1192,7 +1192,7 @@ void ParagraphTxt::Layout(double width) {
...
@@ -1192,7 +1192,7 @@ void ParagraphTxt::Layout(double width) {
double
ParagraphTxt
::
GetLineXOffset
(
double
line_total_advance
,
double
ParagraphTxt
::
GetLineXOffset
(
double
line_total_advance
,
size_t
line_number
,
size_t
line_number
,
size_t
line_limit
)
{
bool
justify_line
)
{
if
(
isinf
(
width_
))
if
(
isinf
(
width_
))
return
0
;
return
0
;
...
@@ -1201,7 +1201,7 @@ double ParagraphTxt::GetLineXOffset(double line_total_advance,
...
@@ -1201,7 +1201,7 @@ double ParagraphTxt::GetLineXOffset(double line_total_advance,
if
(
align
==
TextAlign
::
right
||
if
(
align
==
TextAlign
::
right
||
(
align
==
TextAlign
::
justify
&&
(
align
==
TextAlign
::
justify
&&
paragraph_style_
.
text_direction
==
TextDirection
::
rtl
&&
paragraph_style_
.
text_direction
==
TextDirection
::
rtl
&&
line_number
==
line_limit
-
1
))
{
!
justify_line
))
{
return
width_
-
line_total_advance
;
return
width_
-
line_total_advance
;
}
else
if
(
align
==
TextAlign
::
center
)
{
}
else
if
(
align
==
TextAlign
::
center
)
{
return
(
width_
-
line_total_advance
)
/
2
;
return
(
width_
-
line_total_advance
)
/
2
;
...
...
third_party/txt/src/txt/paragraph_txt.h
浏览文件 @
e18298c9
...
@@ -136,6 +136,7 @@ class ParagraphTxt : public Paragraph {
...
@@ -136,6 +136,7 @@ class ParagraphTxt : public Paragraph {
FRIEND_TEST_WINDOWS_DISABLED
(
ParagraphTest
,
CenterAlignParagraph
);
FRIEND_TEST_WINDOWS_DISABLED
(
ParagraphTest
,
CenterAlignParagraph
);
FRIEND_TEST_WINDOWS_DISABLED
(
ParagraphTest
,
JustifyAlignParagraph
);
FRIEND_TEST_WINDOWS_DISABLED
(
ParagraphTest
,
JustifyAlignParagraph
);
FRIEND_TEST_WINDOWS_DISABLED
(
ParagraphTest
,
JustifyRTL
);
FRIEND_TEST_WINDOWS_DISABLED
(
ParagraphTest
,
JustifyRTL
);
FRIEND_TEST_WINDOWS_DISABLED
(
ParagraphTest
,
JustifyRTLNewLine
);
FRIEND_TEST
(
ParagraphTest
,
DecorationsParagraph
);
FRIEND_TEST
(
ParagraphTest
,
DecorationsParagraph
);
FRIEND_TEST
(
ParagraphTest
,
ItalicsParagraph
);
FRIEND_TEST
(
ParagraphTest
,
ItalicsParagraph
);
FRIEND_TEST
(
ParagraphTest
,
ChineseParagraph
);
FRIEND_TEST
(
ParagraphTest
,
ChineseParagraph
);
...
@@ -362,7 +363,7 @@ class ParagraphTxt : public Paragraph {
...
@@ -362,7 +363,7 @@ class ParagraphTxt : public Paragraph {
// alignment.
// alignment.
double
GetLineXOffset
(
double
line_total_advance
,
double
GetLineXOffset
(
double
line_total_advance
,
size_t
line_number
,
size_t
line_number
,
size_t
line_limit
);
bool
justify_line
);
// Creates and draws the decorations onto the canvas.
// Creates and draws the decorations onto the canvas.
void
PaintDecorations
(
SkCanvas
*
canvas
,
void
PaintDecorations
(
SkCanvas
*
canvas
,
...
...
third_party/txt/tests/paragraph_unittests.cc
浏览文件 @
e18298c9
...
@@ -2242,6 +2242,91 @@ TEST_F(ParagraphTest, DISABLE_ON_WINDOWS(JustifyRTL)) {
...
@@ -2242,6 +2242,91 @@ TEST_F(ParagraphTest, DISABLE_ON_WINDOWS(JustifyRTL)) {
}
}
}
}
TEST_F
(
ParagraphTest
,
DISABLE_ON_WINDOWS
(
JustifyRTLNewLine
))
{
const
char
*
text
=
"אאא בּבּבּבּ אאאא
\n
בּבּ אאא בּבּבּ אאאאא בּבּבּבּ אאאא בּבּבּבּבּ "
"אאאאא בּבּבּבּבּ אאאבּבּבּבּבּבּאאאאא בּבּבּבּבּבּאאאאאבּבּבּבּבּבּ אאאאא בּבּבּבּבּ "
"אאאאא בּבּבּבּבּבּ אאאאא בּבּבּבּבּבּ אאאאא בּבּבּבּבּבּ אאאאא בּבּבּבּבּבּ אאאאא בּבּבּבּבּבּ"
;
auto
icu_text
=
icu
::
UnicodeString
::
fromUTF8
(
text
);
std
::
u16string
u16_text
(
icu_text
.
getBuffer
(),
icu_text
.
getBuffer
()
+
icu_text
.
length
());
txt
::
ParagraphStyle
paragraph_style
;
paragraph_style
.
max_lines
=
14
;
paragraph_style
.
text_align
=
TextAlign
::
justify
;
paragraph_style
.
text_direction
=
TextDirection
::
rtl
;
txt
::
ParagraphBuilderTxt
builder
(
paragraph_style
,
GetTestFontCollection
());
txt
::
TextStyle
text_style
;
text_style
.
font_families
=
std
::
vector
<
std
::
string
>
(
1
,
"Ahem"
);
text_style
.
font_size
=
26
;
text_style
.
color
=
SK_ColorBLACK
;
text_style
.
height
=
1
;
builder
.
PushStyle
(
text_style
);
builder
.
AddText
(
u16_text
);
builder
.
Pop
();
auto
paragraph
=
BuildParagraph
(
builder
);
size_t
paragraph_width
=
GetTestCanvasWidth
()
-
100
;
paragraph
->
Layout
(
paragraph_width
);
paragraph
->
Paint
(
GetCanvas
(),
0
,
0
);
auto
glyph_line_width
=
[
&
paragraph
](
int
index
)
{
size_t
second_to_last_position_index
=
paragraph
->
glyph_lines_
[
index
].
positions
.
size
()
-
1
;
return
paragraph
->
glyph_lines_
[
index
]
.
positions
[
second_to_last_position_index
]
.
x_pos
.
end
;
};
SkPaint
paint
;
paint
.
setStyle
(
SkPaint
::
kStroke_Style
);
paint
.
setAntiAlias
(
true
);
paint
.
setStrokeWidth
(
1
);
ASSERT_TRUE
(
Snapshot
());
// Tests for GetRectsForRange()
Paragraph
::
RectHeightStyle
rect_height_style
=
Paragraph
::
RectHeightStyle
::
kMax
;
Paragraph
::
RectWidthStyle
rect_width_style
=
Paragraph
::
RectWidthStyle
::
kTight
;
paint
.
setColor
(
SK_ColorRED
);
std
::
vector
<
txt
::
Paragraph
::
TextBox
>
boxes
=
paragraph
->
GetRectsForRange
(
0
,
30
,
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
(),
2ull
);
EXPECT_FLOAT_EQ
(
boxes
[
0
].
rect
.
left
(),
562
);
EXPECT_FLOAT_EQ
(
boxes
[
0
].
rect
.
top
(),
-
1.4305115e-06
);
EXPECT_FLOAT_EQ
(
boxes
[
0
].
rect
.
right
(),
900
);
EXPECT_FLOAT_EQ
(
boxes
[
0
].
rect
.
bottom
(),
26
);
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
(),
68
);
EXPECT_FLOAT_EQ
(
boxes
[
0
].
rect
.
top
(),
130
);
EXPECT_FLOAT_EQ
(
boxes
[
0
].
rect
.
right
(),
120
);
EXPECT_FLOAT_EQ
(
boxes
[
0
].
rect
.
bottom
(),
156
);
ASSERT_TRUE
(
Snapshot
());
// All lines should be justified to the width of the
// paragraph.
for
(
size_t
i
=
0
;
i
<
paragraph
->
glyph_lines_
.
size
();
++
i
)
{
ASSERT_EQ
(
glyph_line_width
(
i
),
paragraph_width
);
}
}
TEST_F
(
ParagraphTest
,
DecorationsParagraph
)
{
TEST_F
(
ParagraphTest
,
DecorationsParagraph
)
{
txt
::
ParagraphStyle
paragraph_style
;
txt
::
ParagraphStyle
paragraph_style
;
paragraph_style
.
max_lines
=
14
;
paragraph_style
.
max_lines
=
14
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录