Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小雨青年
freetype
提交
8373bbf0
F
freetype
项目概览
小雨青年
/
freetype
通知
14
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
F
freetype
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
8373bbf0
编写于
10月 16, 2013
作者:
N
Nigel Tao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
freetype/truetype: implement compound glyph transforms.
R=bsiegert CC=golang-dev
https://codereview.appspot.com/14425064
上级
c8094ec9
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
32 addition
and
11 deletion
+32
-11
freetype/truetype/glyph.go
freetype/truetype/glyph.go
+28
-2
freetype/truetype/truetype_test.go
freetype/truetype/truetype_test.go
+4
-9
未找到文件。
freetype/truetype/glyph.go
浏览文件 @
8373bbf0
...
...
@@ -286,7 +286,7 @@ func (g *GlyphBuf) loadCompound(recursion int32, glyf []byte) error {
for
offset
:=
loadOffset
;
;
{
flags
:=
u16
(
glyf
,
offset
)
component
:=
Index
(
u16
(
glyf
,
offset
+
2
))
dx
,
dy
:=
int32
(
0
),
int32
(
0
)
dx
,
dy
,
transform
,
hasTransform
:=
int32
(
0
),
int32
(
0
),
[
4
]
int32
{},
false
if
flags
&
flagArg1And2AreWords
!=
0
{
dx
=
int32
(
int16
(
u16
(
glyf
,
offset
+
4
)))
dy
=
int32
(
int16
(
u16
(
glyf
,
offset
+
6
)))
...
...
@@ -300,12 +300,38 @@ func (g *GlyphBuf) loadCompound(recursion int32, glyf []byte) error {
return
UnsupportedError
(
"compound glyph transform vector"
)
}
if
flags
&
(
flagWeHaveAScale
|
flagWeHaveAnXAndYScale
|
flagWeHaveATwoByTwo
)
!=
0
{
return
UnsupportedError
(
"compound glyph scale/transform"
)
hasTransform
=
true
switch
{
case
flags
&
flagWeHaveAScale
!=
0
:
transform
[
0
]
=
int32
(
int16
(
u16
(
glyf
,
offset
+
0
)))
transform
[
3
]
=
transform
[
0
]
offset
+=
2
case
flags
&
flagWeHaveAnXAndYScale
!=
0
:
transform
[
0
]
=
int32
(
int16
(
u16
(
glyf
,
offset
+
0
)))
transform
[
3
]
=
int32
(
int16
(
u16
(
glyf
,
offset
+
2
)))
offset
+=
4
case
flags
&
flagWeHaveATwoByTwo
!=
0
:
transform
[
0
]
=
int32
(
int16
(
u16
(
glyf
,
offset
+
0
)))
transform
[
1
]
=
int32
(
int16
(
u16
(
glyf
,
offset
+
2
)))
transform
[
2
]
=
int32
(
int16
(
u16
(
glyf
,
offset
+
4
)))
transform
[
3
]
=
int32
(
int16
(
u16
(
glyf
,
offset
+
6
)))
offset
+=
8
}
}
np0
:=
len
(
g
.
Point
)
if
err
:=
g
.
load
(
recursion
+
1
,
component
,
flags
&
flagUseMyMetrics
!=
0
);
err
!=
nil
{
return
err
}
if
hasTransform
{
for
i
:=
np0
;
i
<
len
(
g
.
Point
);
i
++
{
p
:=
&
g
.
Point
[
i
]
newX
:=
int32
((
int64
(
p
.
X
)
*
int64
(
transform
[
0
])
+
1
<<
13
)
>>
14
)
+
int32
((
int64
(
p
.
Y
)
*
int64
(
transform
[
2
])
+
1
<<
13
)
>>
14
)
newY
:=
int32
((
int64
(
p
.
X
)
*
int64
(
transform
[
1
])
+
1
<<
13
)
>>
14
)
+
int32
((
int64
(
p
.
Y
)
*
int64
(
transform
[
3
])
+
1
<<
13
)
>>
14
)
p
.
X
,
p
.
Y
=
newX
,
newY
}
}
dx
=
g
.
font
.
scale
(
g
.
scale
*
dx
)
dy
=
g
.
font
.
scale
(
g
.
scale
*
dy
)
if
flags
&
flagRoundXYToGrid
!=
0
{
...
...
freetype/truetype/truetype_test.go
浏览文件 @
8373bbf0
...
...
@@ -263,7 +263,6 @@ var scalingTestCases = []struct {
// TODO: also test bounding boxes, not just points.
func
testScaling
(
t
*
testing
.
T
,
hinter
*
Hinter
)
{
loop
:
for
_
,
tc
:=
range
scalingTestCases
{
font
,
testdataIsOptional
,
err
:=
parseTestdataFont
(
tc
.
name
)
if
err
!=
nil
{
...
...
@@ -272,7 +271,7 @@ loop:
}
else
{
t
.
Error
(
err
)
}
continue
loop
continue
}
hinting
:=
"sans"
if
hinter
!=
nil
{
...
...
@@ -282,7 +281,7 @@ loop:
"../../testdata/%s-%dpt-%s-hinting.txt"
,
tc
.
name
,
tc
.
size
,
hinting
))
if
err
!=
nil
{
t
.
Errorf
(
"%s: Open: %v"
,
tc
.
name
,
err
)
continue
loop
continue
}
defer
f
.
Close
()
...
...
@@ -293,7 +292,7 @@ loop:
}
if
err
:=
scanner
.
Err
();
err
!=
nil
&&
err
!=
io
.
EOF
{
t
.
Errorf
(
"%s: Scanner: %v"
,
tc
.
name
,
err
)
continue
loop
continue
}
glyphBuf
:=
NewGlyphBuf
()
...
...
@@ -305,12 +304,8 @@ loop:
}
if
err
=
glyphBuf
.
Load
(
font
,
tc
.
size
*
64
,
Index
(
i
),
hinter
);
err
!=
nil
{
if
ue
,
ok
:=
err
.
(
UnsupportedError
);
ok
&&
ue
==
"compound glyph scale/transform"
{
// TODO: implement compound glyph scale/transform.
continue
loop
}
t
.
Errorf
(
"%s: glyph #%d: Load: %v"
,
tc
.
name
,
i
,
err
)
continue
loop
continue
}
got
:=
glyphBuf
.
Point
for
i
:=
range
got
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录