Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
sxychenjing
engine
提交
10b45405
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,发现更多精彩内容 >>
未验证
提交
10b45405
编写于
10月 03, 2018
作者:
G
Gary Qian
提交者:
GitHub
10月 03, 2018
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Implement ParagraphStyle.line_height and add tests for line_height and baselines. (#6417)
上级
7e3b41dc
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
158 addition
and
4 deletion
+158
-4
third_party/txt/src/txt/paragraph.cc
third_party/txt/src/txt/paragraph.cc
+5
-4
third_party/txt/src/txt/paragraph.h
third_party/txt/src/txt/paragraph.h
+1
-0
third_party/txt/src/txt/styled_runs.h
third_party/txt/src/txt/styled_runs.h
+1
-0
third_party/txt/tests/paragraph_unittests.cc
third_party/txt/tests/paragraph_unittests.cc
+151
-0
未找到文件。
third_party/txt/src/txt/paragraph.cc
浏览文件 @
10b45405
...
...
@@ -729,14 +729,15 @@ void Paragraph::Layout(double width, bool force) {
auto
update_line_metrics
=
[
&
](
const
SkPaint
::
FontMetrics
&
metrics
,
const
TextStyle
&
style
)
{
double
line_spacing
=
(
line_number
==
0
)
?
-
metrics
.
fAscent
*
style
.
height
:
(
-
metrics
.
fAscent
+
metrics
.
fLeading
)
*
style
.
height
;
(
line_number
==
0
)
?
-
metrics
.
fAscent
*
style
.
height
:
(
-
metrics
.
fAscent
+
metrics
.
fLeading
)
*
style
.
height
*
paragraph_style_
.
line_
height
;
if
(
line_spacing
>
max_line_spacing
)
{
max_line_spacing
=
line_spacing
;
if
(
line_number
==
0
)
{
alphabetic_baseline_
=
line_spacing
;
// TODO(garyq): Properly implement ideographic_baseline_.
// TODO(garyq): Properly implement ideographic_baseline_ and update
// tests.
ideographic_baseline_
=
(
metrics
.
fUnderlinePosition
-
metrics
.
fAscent
)
*
style
.
height
;
}
...
...
third_party/txt/src/txt/paragraph.h
浏览文件 @
10b45405
...
...
@@ -206,6 +206,7 @@ class Paragraph {
FRIEND_TEST
(
ParagraphTest
,
RepeatLayoutParagraph
);
FRIEND_TEST
(
ParagraphTest
,
Ellipsize
);
FRIEND_TEST
(
ParagraphTest
,
UnderlineShiftParagraph
);
FRIEND_TEST
(
ParagraphTest
,
LineHeightsParagraph
);
// Starting data to layout.
std
::
vector
<
uint16_t
>
text_
;
...
...
third_party/txt/src/txt/styled_runs.h
浏览文件 @
10b45405
...
...
@@ -79,6 +79,7 @@ class StyledRuns {
FRIEND_TEST
(
ParagraphTest
,
HyphenBreakParagraph
);
FRIEND_TEST
(
ParagraphTest
,
RepeatLayoutParagraph
);
FRIEND_TEST
(
ParagraphTest
,
Ellipsize
);
FRIEND_TEST
(
ParagraphTest
,
LineHeightsParagraph
);
struct
IndexedRun
{
size_t
style_index
=
0
;
...
...
third_party/txt/tests/paragraph_unittests.cc
浏览文件 @
10b45405
...
...
@@ -1731,4 +1731,155 @@ TEST_F(ParagraphTest, UnderlineShiftParagraph) {
}
}
TEST_F
(
ParagraphTest
,
DISABLE_ON_WINDOWS
(
LineHeightsParagraph
))
{
const
char
*
text
=
"This is a very long sentence to test if the text will properly wrap "
"around and go to the next line. Sometimes, short sentence. Longer "
"sentences are okay too because they are nessecary. Very short. "
"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod "
"tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim "
"veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea "
"commodo consequat. Duis aute irure dolor in reprehenderit in voluptate "
"velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint "
"occaecat cupidatat non proident, sunt in culpa qui officia deserunt "
"mollit anim id est laborum. "
"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod "
"tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim "
"veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea "
"commodo consequat. Duis aute irure dolor in reprehenderit in voluptate "
"velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint "
"occaecat cupidatat non proident, sunt in culpa qui officia deserunt "
"mollit anim id est laborum."
;
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
::
left
;
double
line_height
=
2.0
;
paragraph_style
.
line_height
=
line_height
;
txt
::
ParagraphBuilder
builder
(
paragraph_style
,
GetTestFontCollection
());
txt
::
TextStyle
text_style
;
text_style
.
font_family
=
"Roboto"
;
text_style
.
font_size
=
26
;
text_style
.
letter_spacing
=
1
;
text_style
.
word_spacing
=
5
;
text_style
.
color
=
SK_ColorBLACK
;
text_style
.
height
=
1
;
text_style
.
decoration
=
TextDecoration
::
kUnderline
;
text_style
.
decoration_color
=
SK_ColorBLACK
;
builder
.
PushStyle
(
text_style
);
builder
.
AddText
(
u16_text
);
builder
.
Pop
();
auto
paragraph
=
builder
.
Build
();
paragraph
->
Layout
(
GetTestCanvasWidth
()
-
100
);
paragraph
->
Paint
(
GetCanvas
(),
0
,
0
);
ASSERT_TRUE
(
Snapshot
());
ASSERT_EQ
(
paragraph
->
text_
.
size
(),
std
::
string
{
text
}.
length
());
for
(
size_t
i
=
0
;
i
<
u16_text
.
length
();
i
++
)
{
ASSERT_EQ
(
paragraph
->
text_
[
i
],
u16_text
[
i
]);
}
ASSERT_EQ
(
paragraph
->
runs_
.
runs_
.
size
(),
1ull
);
ASSERT_EQ
(
paragraph
->
runs_
.
styles_
.
size
(),
2ull
);
ASSERT_TRUE
(
paragraph
->
runs_
.
styles_
[
1
].
equals
(
text_style
));
ASSERT_EQ
(
paragraph
->
records_
.
size
(),
paragraph_style
.
max_lines
);
double
expected_y
=
24
;
ASSERT_TRUE
(
paragraph
->
records_
[
0
].
style
().
equals
(
text_style
));
ASSERT_DOUBLE_EQ
(
paragraph
->
records_
[
0
].
offset
().
y
(),
expected_y
);
expected_y
+=
27.5
*
line_height
;
ASSERT_DOUBLE_EQ
(
paragraph
->
records_
[
0
].
offset
().
x
(),
0
);
ASSERT_TRUE
(
paragraph
->
records_
[
1
].
style
().
equals
(
text_style
));
ASSERT_DOUBLE_EQ
(
paragraph
->
records_
[
1
].
offset
().
y
(),
expected_y
);
expected_y
+=
27.5
*
line_height
;
ASSERT_DOUBLE_EQ
(
paragraph
->
records_
[
1
].
offset
().
x
(),
0
);
ASSERT_TRUE
(
paragraph
->
records_
[
2
].
style
().
equals
(
text_style
));
ASSERT_DOUBLE_EQ
(
paragraph
->
records_
[
2
].
offset
().
y
(),
expected_y
);
expected_y
+=
27.5
*
line_height
;
ASSERT_DOUBLE_EQ
(
paragraph
->
records_
[
2
].
offset
().
x
(),
0
);
ASSERT_TRUE
(
paragraph
->
records_
[
3
].
style
().
equals
(
text_style
));
ASSERT_DOUBLE_EQ
(
paragraph
->
records_
[
3
].
offset
().
y
(),
expected_y
);
expected_y
+=
27.5
*
10
*
line_height
;
ASSERT_DOUBLE_EQ
(
paragraph
->
records_
[
3
].
offset
().
x
(),
0
);
ASSERT_TRUE
(
paragraph
->
records_
[
13
].
style
().
equals
(
text_style
));
ASSERT_DOUBLE_EQ
(
paragraph
->
records_
[
13
].
offset
().
y
(),
expected_y
);
ASSERT_DOUBLE_EQ
(
paragraph
->
records_
[
13
].
offset
().
x
(),
0
);
ASSERT_EQ
(
paragraph_style
.
text_align
,
paragraph
->
GetParagraphStyle
().
text_align
);
// Tests for GetGlyphPositionAtCoordinate()
ASSERT_EQ
(
paragraph
->
GetGlyphPositionAtCoordinate
(
0
,
0
).
position
,
0ull
);
ASSERT_EQ
(
paragraph
->
GetGlyphPositionAtCoordinate
(
1
,
1
).
position
,
0ull
);
ASSERT_EQ
(
paragraph
->
GetGlyphPositionAtCoordinate
(
1
,
35
).
position
,
68ull
);
ASSERT_EQ
(
paragraph
->
GetGlyphPositionAtCoordinate
(
1
,
70
).
position
,
68ull
);
ASSERT_EQ
(
paragraph
->
GetGlyphPositionAtCoordinate
(
2000
,
35
).
position
,
134ull
);
ASSERT_TRUE
(
Snapshot
());
}
TEST_F
(
ParagraphTest
,
BaselineParagraph
)
{
const
char
*
text
=
"左線読設Byg後碁給能上目秘使約。満毎冠行来昼本可必図将発確年。今属場育"
"図情闘陰野高備込制詩西校客。審対江置講今固残必託地集済決維駆年策。立得"
;
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
.
line_height
=
1.5
;
txt
::
ParagraphBuilder
builder
(
paragraph_style
,
GetTestFontCollection
());
txt
::
TextStyle
text_style
;
text_style
.
color
=
SK_ColorBLACK
;
text_style
.
font_size
=
55
;
text_style
.
letter_spacing
=
2
;
text_style
.
font_family
=
"Source Han Serif CN"
;
text_style
.
decoration_style
=
txt
::
TextDecorationStyle
::
kSolid
;
text_style
.
decoration_color
=
SK_ColorBLACK
;
builder
.
PushStyle
(
text_style
);
builder
.
AddText
(
u16_text
);
builder
.
Pop
();
auto
paragraph
=
builder
.
Build
();
paragraph
->
Layout
(
GetTestCanvasWidth
()
-
100
);
paragraph
->
Paint
(
GetCanvas
(),
0
,
0
);
SkPaint
paint
;
paint
.
setStyle
(
SkPaint
::
kStroke_Style
);
paint
.
setAntiAlias
(
true
);
paint
.
setStrokeWidth
(
1
);
paint
.
setColor
(
SK_ColorRED
);
GetCanvas
()
->
drawLine
(
0
,
paragraph
->
GetIdeographicBaseline
(),
paragraph
->
GetMaxWidth
(),
paragraph
->
GetIdeographicBaseline
(),
paint
);
paint
.
setColor
(
SK_ColorGREEN
);
GetCanvas
()
->
drawLine
(
0
,
paragraph
->
GetAlphabeticBaseline
(),
paragraph
->
GetMaxWidth
(),
paragraph
->
GetAlphabeticBaseline
(),
paint
);
ASSERT_DOUBLE_EQ
(
paragraph
->
GetIdeographicBaseline
(),
70.180000305175781
);
ASSERT_DOUBLE_EQ
(
paragraph
->
GetAlphabeticBaseline
(),
63.305000305175781
);
ASSERT_TRUE
(
Snapshot
());
}
}
// namespace txt
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录