Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Harfbuzz
提交
1cebfbb0
T
Third Party Harfbuzz
项目概览
OpenHarmony
/
Third Party Harfbuzz
大约 1 年 前同步成功
通知
0
Star
18
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
Third Party Harfbuzz
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
1cebfbb0
编写于
4月 23, 2010
作者:
B
Behdad Esfahbod
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Cleanup hb_face_create_for_data()
上级
d6b3c83a
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
123 addition
and
50 deletion
+123
-50
src/Makefile.am
src/Makefile.am
+1
-0
src/hb-blob-private.h
src/hb-blob-private.h
+57
-0
src/hb-blob.c
src/hb-blob.c
+2
-18
src/hb-font-private.h
src/hb-font-private.h
+0
-3
src/hb-font.cc
src/hb-font.cc
+63
-29
未找到文件。
src/Makefile.am
浏览文件 @
1cebfbb0
...
...
@@ -11,6 +11,7 @@ HBCFLAGS =
HBLIBS
=
HBSOURCES
=
\
hb-blob.c
\
hb-blob-private.h
\
hb-buffer.c
\
hb-buffer-private.h
\
hb-font.cc
\
...
...
src/hb-blob-private.h
0 → 100644
浏览文件 @
1cebfbb0
/*
* Copyright (C) 2010 Red Hat, Inc.
*
* This is part of HarfBuzz, a text shaping library.
*
* Permission is hereby granted, without written agreement and without
* license or royalty fees, to use, copy, modify, and distribute this
* software and its documentation for any purpose, provided that the
* above copyright notice and the following two paragraphs appear in
* all copies of this software.
*
* IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
* ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
* IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*
* THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
* BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
* ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
*
* Red Hat Author(s): Behdad Esfahbod
*/
#ifndef HB_BLOB_PRIVATE_H
#define HB_BLOB_PRIVATE_H
#include "hb-private.h"
#include "hb-blob.h"
HB_BEGIN_DECLS
struct
_hb_blob_t
{
hb_reference_count_t
ref_count
;
unsigned
int
length
;
hb_mutex_t
lock
;
/* the rest are protected by lock */
unsigned
int
lock_count
;
hb_memory_mode_t
mode
;
const
char
*
data
;
hb_destroy_func_t
destroy
;
void
*
user_data
;
};
HB_INTERNAL
hb_blob_t
_hb_blob_nil
;
HB_END_DECLS
#endif
/* HB_BLOB_PRIVATE_H */
src/hb-blob.c
浏览文件 @
1cebfbb0
...
...
@@ -26,7 +26,7 @@
#include "hb-private.h"
#include "hb-blob.h"
#include "hb-blob
-private
.h"
#ifdef HAVE_SYS_MMAN_H
#ifdef HAVE_UNISTD_H
...
...
@@ -44,23 +44,7 @@
#include <errno.h>
#endif
struct
_hb_blob_t
{
hb_reference_count_t
ref_count
;
unsigned
int
length
;
hb_mutex_t
lock
;
/* the rest are protected by lock */
unsigned
int
lock_count
;
hb_memory_mode_t
mode
;
const
char
*
data
;
hb_destroy_func_t
destroy
;
void
*
user_data
;
};
static
hb_blob_t
_hb_blob_nil
=
{
hb_blob_t
_hb_blob_nil
=
{
HB_REFERENCE_COUNT_INVALID
,
/* ref_count */
0
,
/* length */
...
...
src/hb-font-private.h
浏览文件 @
1cebfbb0
...
...
@@ -60,9 +60,6 @@ _hb_font_funcs_nil;
struct
_hb_face_t
{
hb_reference_count_t
ref_count
;
hb_blob_t
*
blob
;
unsigned
int
index
;
hb_get_table_func_t
get_table
;
hb_destroy_func_t
destroy
;
void
*
user_data
;
...
...
src/hb-font.cc
浏览文件 @
1cebfbb0
...
...
@@ -27,8 +27,8 @@
#include "hb-private.h"
#include "hb-font-private.h"
#include "hb-blob-private.h"
#include "hb-open-file-private.hh"
#include "hb-blob.h"
#include "hb-ot-layout-private.h"
...
...
@@ -218,33 +218,14 @@ hb_font_get_kerning (hb_font_t *font, hb_face_t *face,
first_glyph
,
second_glyph
);
}
/*
* hb_face_t
*/
static
hb_blob_t
*
_hb_face_get_table_from_blob
(
hb_tag_t
tag
,
void
*
user_data
)
{
hb_face_t
*
face
=
(
hb_face_t
*
)
user_data
;
const
OpenTypeFontFile
&
ot_file
=
*
CastP
<
OpenTypeFontFile
>
(
hb_blob_lock
(
face
->
blob
));
const
OpenTypeFontFace
&
ot_face
=
ot_file
.
get_face
(
face
->
index
);
const
OpenTypeTable
&
table
=
ot_face
.
get_table_by_tag
(
tag
);
hb_blob_t
*
blob
=
hb_blob_create_sub_blob
(
face
->
blob
,
table
.
offset
,
table
.
length
);
hb_blob_unlock
(
face
->
blob
);
return
blob
;
}
static
hb_face_t
_hb_face_nil
=
{
HB_REFERENCE_COUNT_INVALID
,
/* ref_count */
NULL
,
/* blob */
0
,
/* index */
NULL
,
/* get_table */
NULL
,
/* destroy */
NULL
,
/* user_data */
...
...
@@ -252,6 +233,7 @@ static hb_face_t _hb_face_nil = {
{}
/* ot_layout */
};
hb_face_t
*
hb_face_create_for_tables
(
hb_get_table_func_t
get_table
,
hb_destroy_func_t
destroy
,
...
...
@@ -274,6 +256,58 @@ hb_face_create_for_tables (hb_get_table_func_t get_table,
return
face
;
}
typedef
struct
_hb_face_for_data_closure_t
{
hb_blob_t
*
blob
;
unsigned
int
index
;
}
hb_face_for_data_closure_t
;
static
hb_face_for_data_closure_t
_hb_face_for_data_closure_nil
=
{
&
_hb_blob_nil
,
0
};
static
hb_face_for_data_closure_t
*
_hb_face_for_data_closure_create
(
hb_blob_t
*
blob
,
unsigned
int
index
)
{
hb_face_for_data_closure_t
*
closure
;
closure
=
(
hb_face_for_data_closure_t
*
)
malloc
(
sizeof
(
hb_face_for_data_closure_t
));
if
(
HB_UNLIKELY
(
!
closure
))
return
&
_hb_face_for_data_closure_nil
;
closure
->
blob
=
hb_blob_reference
(
blob
);
closure
->
index
=
index
;
return
closure
;
}
static
void
_hb_face_for_data_closure_destroy
(
hb_face_for_data_closure_t
*
closure
)
{
if
(
HB_LIKELY
(
closure
!=
&
_hb_face_for_data_closure_nil
))
{
hb_blob_destroy
(
closure
->
blob
);
free
(
closure
);
}
}
static
hb_blob_t
*
_hb_face_for_data_get_table
(
hb_tag_t
tag
,
void
*
user_data
)
{
hb_face_for_data_closure_t
*
data
=
(
hb_face_for_data_closure_t
*
)
user_data
;
const
OpenTypeFontFile
&
ot_file
=
*
CastP
<
OpenTypeFontFile
>
(
hb_blob_lock
(
data
->
blob
));
const
OpenTypeFontFace
&
ot_face
=
ot_file
.
get_face
(
data
->
index
);
const
OpenTypeTable
&
table
=
ot_face
.
get_table_by_tag
(
tag
);
hb_blob_t
*
blob
=
hb_blob_create_sub_blob
(
data
->
blob
,
table
.
offset
,
table
.
length
);
hb_blob_unlock
(
data
->
blob
);
return
blob
;
}
hb_face_t
*
hb_face_create_for_data
(
hb_blob_t
*
blob
,
unsigned
int
index
)
...
...
@@ -283,16 +317,18 @@ hb_face_create_for_data (hb_blob_t *blob,
if
(
!
HB_OBJECT_DO_CREATE
(
hb_face_t
,
face
))
return
&
_hb_face_nil
;
face
->
blob
=
Sanitizer
<
OpenTypeFontFile
>::
sanitize
(
hb_blob_reference
(
blob
));
face
->
index
=
index
;
face
->
get_table
=
_hb_face_get_table_from_blob
;
face
->
user_data
=
face
;
face
->
get_table
=
_hb_face_for_data_get_table
;
face
->
destroy
=
(
hb_destroy_func_t
)
_hb_face_for_data_closure_destroy
;
hb_blob_reference
(
blob
);
face
->
user_data
=
_hb_face_for_data_closure_create
(
Sanitizer
<
OpenTypeFontFile
>::
sanitize
(
blob
),
index
);
hb_blob_destroy
(
blob
);
_hb_ot_layout_init
(
face
);
return
face
;
}
hb_face_t
*
hb_face_reference
(
hb_face_t
*
face
)
{
...
...
@@ -312,8 +348,6 @@ hb_face_destroy (hb_face_t *face)
_hb_ot_layout_fini
(
face
);
hb_blob_destroy
(
face
->
blob
);
if
(
face
->
destroy
)
face
->
destroy
(
face
->
user_data
);
...
...
@@ -327,11 +361,11 @@ hb_face_get_table (hb_face_t *face,
hb_blob_t
*
blob
;
if
(
HB_UNLIKELY
(
!
face
||
!
face
->
get_table
))
return
hb_blob_create_empty
()
;
return
&
_hb_blob_nil
;
blob
=
face
->
get_table
(
tag
,
face
->
user_data
);
return
blob
?
blob
:
hb_blob_create_empty
()
;
return
blob
?
blob
:
&
_hb_blob_nil
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录