Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Harfbuzz
提交
c62b5037
T
Third Party Harfbuzz
项目概览
OpenHarmony
/
Third Party Harfbuzz
10 个月 前同步成功
通知
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,体验更适合开发者的 AI 搜索 >>
提交
c62b5037
编写于
8月 01, 2009
作者:
B
Behdad Esfahbod
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[HB] Add abstract font and face API
Not used yet.
上级
35a7383c
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
636 addition
and
8 deletion
+636
-8
src/Makefile.am
src/Makefile.am
+3
-0
src/hb-blob.c
src/hb-blob.c
+3
-3
src/hb-font-private.h
src/hb-font-private.h
+108
-0
src/hb-font.c
src/hb-font.c
+331
-0
src/hb-font.h
src/hb-font.h
+182
-0
src/hb-refcount-private.h
src/hb-refcount-private.h
+9
-5
未找到文件。
src/Makefile.am
浏览文件 @
c62b5037
...
...
@@ -14,6 +14,8 @@ HBSOURCES = \
hb-blob.c
\
hb-buffer.c
\
hb-buffer-private.h
\
hb-font.c
\
hb-font-private.h
\
hb-private.h
\
hb-ot-layout.cc
\
hb-ot-layout-common-private.h
\
...
...
@@ -30,6 +32,7 @@ HBHEADERS = \
hb-blob.h
\
hb-buffer.h
\
hb-common.h
\
hb-font.h
\
hb-ot-layout.h
\
$(NULL)
...
...
src/hb-blob.c
浏览文件 @
c62b5037
...
...
@@ -76,7 +76,7 @@ hb_blob_create (const char *data,
return
&
_hb_blob_nil
;
}
HB_
REFERENCE_COUN
T_DO_CREATE
(
blob
);
HB_
OBJEC
T_DO_CREATE
(
blob
);
blob
->
data
=
data
;
blob
->
len
=
len
;
...
...
@@ -96,13 +96,13 @@ hb_blob_create (const char *data,
hb_blob_t
*
hb_blob_reference
(
hb_blob_t
*
blob
)
{
HB_
REFERENCE_COUN
T_DO_REFERENCE
(
blob
);
HB_
OBJEC
T_DO_REFERENCE
(
blob
);
}
void
hb_blob_destroy
(
hb_blob_t
*
blob
)
{
HB_
REFERENCE_COUN
T_DO_DESTROY
(
blob
);
HB_
OBJEC
T_DO_DESTROY
(
blob
);
_hb_blob_destroy_user_data
(
blob
);
...
...
src/hb-font-private.h
0 → 100644
浏览文件 @
c62b5037
/*
* Copyright (C) 2009 Red Hat, Inc.
*
* This is part of HarfBuzz, an OpenType Layout engine 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_FONT_PRIVATE_H
#define HB_FONT_PRIVATE_H
#include "hb-private.h"
#include "hb-font.h"
#include "hb-refcount-private.h"
HB_BEGIN_DECLS
/*
* hb_font_callbacks_t
*/
struct
_hb_font_callbacks_t
{
hb_reference_count_t
ref_count
;
/*
hb_font_get_glyph_func_t glyph_func;
hb_font_get_contour_point_func_t contour_point_func;
hb_font_get_glyph_metrics_func_t glyph_metrics_func;
hb_font_get_kerning_func_t kerning_func;
*/
};
/*
* hb_unicode_callbacks_t
*/
struct
_hb_unicode_callbacks_t
{
hb_reference_count_t
ref_count
;
/*
hb_unicode_get_general_category_func_t general_category_func);
hb_unicode_get_combining_class_func_t combining_class_func);
hb_unicode_get_mirroring_char_func_t mirroring_char_func);
hb_unicode_get_script_func_t script_func);
hb_unicode_get_eastasian_width_func_t eastasian_width_func);
*/
};
/*
* hb_face_t
*/
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
;
hb_font_callbacks_t
*
fcallbacks
;
hb_unicode_callbacks_t
*
ucallbacks
;
};
/*
* hb_font_t
*/
struct
_hb_font_t
{
hb_reference_count_t
ref_count
;
hb_face_t
*
face
;
hb_16dot16_t
x_scale
;
hb_16dot16_t
y_scale
;
unsigned
int
x_ppem
;
unsigned
int
y_ppem
;
};
HB_END_DECLS
#endif
/* HB_FONT_PRIVATE_H */
src/hb-font.c
0 → 100644
浏览文件 @
c62b5037
/*
* Copyright (C) 2009 Red Hat, Inc.
*
* This is part of HarfBuzz, an OpenType Layout engine 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
*/
#include "hb-private.h"
#include "hb-font-private.h"
#include "hb-blob.h"
/*
* hb_font_callbacks_t
*/
static
hb_font_callbacks_t
_hb_font_callbacks_nil
=
{
HB_REFERENCE_COUNT_INVALID
/* ref_count */
/*
hb_font_get_glyph_func_t glyph_func;
hb_font_get_contour_point_func_t contour_point_func;
hb_font_get_glyph_metrics_func_t glyph_metrics_func;
hb_font_get_kerning_func_t kerning_func;
*/
};
hb_font_callbacks_t
*
hb_font_callbacks_create
(
void
)
{
hb_font_callbacks_t
*
fcallbacks
;
fcallbacks
=
calloc
(
1
,
sizeof
(
hb_font_callbacks_t
));
if
(
!
fcallbacks
)
return
&
_hb_font_callbacks_nil
;
HB_OBJECT_DO_CREATE
(
fcallbacks
);
return
fcallbacks
;
}
hb_font_callbacks_t
*
hb_font_callbacks_reference
(
hb_font_callbacks_t
*
fcallbacks
)
{
HB_OBJECT_DO_REFERENCE
(
fcallbacks
);
}
void
hb_font_callbacks_destroy
(
hb_font_callbacks_t
*
fcallbacks
)
{
HB_OBJECT_DO_DESTROY
(
fcallbacks
);
free
(
fcallbacks
);
}
hb_font_callbacks_t
*
hb_font_callbacks_duplicate
(
hb_font_callbacks_t
*
other_fcallbacks
)
{
hb_font_callbacks_t
*
fcallbacks
;
fcallbacks
=
calloc
(
1
,
sizeof
(
hb_font_callbacks_t
));
if
(
!
fcallbacks
)
return
&
_hb_font_callbacks_nil
;
*
fcallbacks
=
*
other_fcallbacks
;
HB_OBJECT_DO_CREATE
(
fcallbacks
);
return
fcallbacks
;
}
/*
* hb_unicode_callbacks_t
*/
static
hb_unicode_callbacks_t
_hb_unicode_callbacks_nil
=
{
HB_REFERENCE_COUNT_INVALID
/* ref_count */
/*
hb_unicode_get_general_category_func_t general_category_func);
hb_unicode_get_combining_class_func_t combining_class_func);
hb_unicode_get_mirroring_char_func_t mirroring_char_func);
hb_unicode_get_script_func_t script_func);
hb_unicode_get_eastasian_width_func_t eastasian_width_func);
*/
};
hb_unicode_callbacks_t
*
hb_unicode_callbacks_create
(
void
)
{
hb_unicode_callbacks_t
*
ucallbacks
;
ucallbacks
=
calloc
(
1
,
sizeof
(
hb_unicode_callbacks_t
));
if
(
!
ucallbacks
)
return
&
_hb_unicode_callbacks_nil
;
HB_OBJECT_DO_CREATE
(
ucallbacks
);
return
ucallbacks
;
}
hb_unicode_callbacks_t
*
hb_unicode_callbacks_reference
(
hb_unicode_callbacks_t
*
ucallbacks
)
{
HB_OBJECT_DO_REFERENCE
(
ucallbacks
);
}
void
hb_unicode_callbacks_destroy
(
hb_unicode_callbacks_t
*
ucallbacks
)
{
HB_OBJECT_DO_DESTROY
(
ucallbacks
);
free
(
ucallbacks
);
}
hb_unicode_callbacks_t
*
hb_unicode_callbacks_duplicate
(
hb_unicode_callbacks_t
*
other_ucallbacks
)
{
hb_unicode_callbacks_t
*
ucallbacks
;
ucallbacks
=
calloc
(
1
,
sizeof
(
hb_unicode_callbacks_t
));
if
(
!
ucallbacks
)
return
&
_hb_unicode_callbacks_nil
;
*
ucallbacks
=
*
other_ucallbacks
;
HB_OBJECT_DO_CREATE
(
ucallbacks
);
return
ucallbacks
;
}
/*
* hb_face_t
*/
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 */
NULL
,
/* fcallbacks */
NULL
/* ucallbacks */
};
hb_face_t
*
hb_face_create_for_data
(
hb_blob_t
*
blob
,
unsigned
int
index
)
{
hb_face_t
*
face
;
face
=
calloc
(
1
,
sizeof
(
hb_face_t
));
if
(
!
face
)
return
&
_hb_face_nil
;
HB_OBJECT_DO_CREATE
(
face
);
face
->
blob
=
hb_blob_reference
(
blob
);
face
->
index
=
index
;
return
face
;
}
hb_face_t
*
hb_face_create_for_tables
(
hb_get_table_func_t
get_table
,
hb_destroy_func_t
destroy
,
void
*
user_data
)
{
hb_face_t
*
face
;
face
=
calloc
(
1
,
sizeof
(
hb_face_t
));
if
(
!
face
)
{
if
(
destroy
)
destroy
(
user_data
);
return
&
_hb_face_nil
;
}
HB_OBJECT_DO_CREATE
(
face
);
face
->
get_table
=
get_table
;
face
->
destroy
=
destroy
;
face
->
user_data
=
user_data
;
return
face
;
}
hb_face_t
*
hb_face_reference
(
hb_face_t
*
face
)
{
HB_OBJECT_DO_REFERENCE
(
face
);
}
void
hb_face_destroy
(
hb_face_t
*
face
)
{
HB_OBJECT_DO_DESTROY
(
face
);
hb_blob_destroy
(
face
->
blob
);
if
(
face
->
destroy
)
face
->
destroy
(
face
->
user_data
);
hb_font_callbacks_destroy
(
face
->
fcallbacks
);
hb_unicode_callbacks_destroy
(
face
->
ucallbacks
);
free
(
face
);
}
void
hb_face_set_font_callbacks
(
hb_face_t
*
face
,
hb_font_callbacks_t
*
fcallbacks
)
{
if
(
HB_OBJECT_IS_INERT
(
face
))
return
;
hb_font_callbacks_reference
(
fcallbacks
);
hb_font_callbacks_destroy
(
face
->
fcallbacks
);
face
->
fcallbacks
=
fcallbacks
;
}
void
hb_face_set_unicode_callbacks
(
hb_face_t
*
face
,
hb_unicode_callbacks_t
*
ucallbacks
)
{
if
(
HB_OBJECT_IS_INERT
(
face
))
return
;
hb_unicode_callbacks_reference
(
ucallbacks
);
hb_unicode_callbacks_destroy
(
face
->
ucallbacks
);
face
->
ucallbacks
=
ucallbacks
;
}
/*
* hb_font_t
*/
static
hb_font_t
_hb_font_nil
=
{
HB_REFERENCE_COUNT_INVALID
,
/* ref_count */
NULL
,
/* face */
0
,
/* x_scale */
0
,
/* y_scale */
0
,
/* x_ppem */
0
/* y_ppem */
};
hb_font_t
*
hb_font_create
(
hb_face_t
*
face
)
{
hb_font_t
*
font
;
font
=
calloc
(
1
,
sizeof
(
hb_font_t
));
if
(
!
font
)
return
&
_hb_font_nil
;
HB_OBJECT_DO_CREATE
(
font
);
font
->
face
=
hb_face_reference
(
face
);
return
font
;
}
hb_font_t
*
hb_font_reference
(
hb_font_t
*
font
)
{
HB_OBJECT_DO_REFERENCE
(
font
);
}
void
hb_font_destroy
(
hb_font_t
*
font
)
{
HB_OBJECT_DO_DESTROY
(
font
);
hb_face_destroy
(
font
->
face
);
free
(
font
);
}
void
hb_font_set_scale
(
hb_font_t
*
font
,
hb_16dot16_t
x_scale
,
hb_16dot16_t
y_scale
)
{
if
(
HB_OBJECT_IS_INERT
(
font
))
return
;
font
->
x_scale
=
x_scale
;
font
->
y_scale
=
y_scale
;
}
void
hb_font_set_ppem
(
hb_font_t
*
font
,
unsigned
int
x_ppem
,
unsigned
int
y_ppem
)
{
if
(
HB_OBJECT_IS_INERT
(
font
))
return
;
font
->
x_ppem
=
x_ppem
;
font
->
y_ppem
=
y_ppem
;
}
src/hb-font.h
0 → 100644
浏览文件 @
c62b5037
/*
* Copyright (C) 2009 Red Hat, Inc.
*
* This is part of HarfBuzz, an OpenType Layout engine 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_FONT_H
#define HB_FONT_H
#include "hb-common.h"
HB_BEGIN_DECLS
/*
* hb_font_callbacks_t
*/
hb_font_callbacks_t
*
hb_font_callbacks_create
(
void
);
hb_font_callbacks_t
*
hb_font_callbacks_reference
(
hb_font_callbacks_t
*
fcallbacks
);
void
hb_font_callbacks_destroy
(
hb_font_callbacks_t
*
fcallbacks
);
hb_font_callbacks_t
*
hb_font_callbacks_duplicate
(
hb_font_callbacks_t
*
fcallbacks
);
/*
void
hb_font_callbacks_set_glyph_func (hb_font_callbacks_t *fcallbacks,
hb_font_get_glyph_func_t glyph_func);
void
hb_font_callbacks_set_contour_point_func (hb_font_callbacks_t *fcallbacks,
hb_font_get_contour_point_func_t contour_point_func);
void
hb_font_callbacks_set_glyph_metrics_func (hb_font_callbacks_t *fcallbacks,
hb_font_get_glyph_metrics_func_t glyph_metrics_func);
void
hb_font_callbacks_set_kerning_func (hb_font_callbacks_t *fcallbacks,
hb_font_get_kerning_func_t kerning_func);
*/
/*
* hb_unicode_callbacks_t
*/
hb_unicode_callbacks_t
*
hb_unicode_callbacks_create
(
void
);
hb_unicode_callbacks_t
*
hb_unicode_callbacks_reference
(
hb_unicode_callbacks_t
*
ucallbacks
);
void
hb_unicode_callbacks_destroy
(
hb_unicode_callbacks_t
*
ucallbacks
);
hb_unicode_callbacks_t
*
hb_unicode_callbacks_duplicate
(
hb_unicode_callbacks_t
*
ucallbacks
);
/*
void
hb_unicode_callbacks_set_general_category_func (hb_unicode_callbacks_t *ucallbacks,
hb_unicode_get_general_category_func_t general_category_func);
void
hb_unicode_callbacks_set_combining_class_func (hb_unicode_callbacks_t *ucallbacks,
hb_unicode_get_combining_class_func_t combining_class_func);
void
hb_unicode_callbacks_set_mirroring_char_func (hb_unicode_callbacks_t *ucallbacks,
hb_unicode_get_mirroring_char_func_t mirroring_char_func);
void
hb_unicode_callbacks_set_script_func (hb_unicode_callbacks_t *ucallbacks,
hb_unicode_get_script_func_t script_func);
void
hb_unicode_callbacks_set_eastasian_width_func (hb_unicode_callbacks_t *ucallbacks,
hb_unicode_get_eastasian_width_func_t eastasian_width_func);
*/
/*
* hb_face_t
*/
hb_face_t
*
hb_face_create_for_data
(
hb_blob_t
*
blob
,
unsigned
int
index
);
/* calls destory() when not needing user_data anymore */
hb_face_t
*
hb_face_create_for_tables
(
hb_get_table_func_t
get_table
,
hb_destroy_func_t
destroy
,
void
*
user_data
);
hb_face_t
*
hb_face_reference
(
hb_face_t
*
face
);
void
hb_face_destroy
(
hb_face_t
*
face
);
void
hb_face_set_font_callbacks
(
hb_face_t
*
face
,
hb_font_callbacks_t
*
fcallbacks
);
void
hb_face_set_unicode_callbacks
(
hb_face_t
*
face
,
hb_unicode_callbacks_t
*
ucallbacks
);
/*
* hb_font_t
*/
/* Fonts are very light-weight objects */
hb_font_t
*
hb_font_create
(
hb_face_t
*
face
);
hb_font_t
*
hb_font_reference
(
hb_font_t
*
font
);
void
hb_font_destroy
(
hb_font_t
*
font
);
/*
* XXX
* should we decompose this to units_per_EM and font-size?
* units_per_EM setting then can go into the face, or better,
* read from the 'head' table.
*
* Then we either need size+shape like freetype does, or a full
* matrix.
*/
void
hb_font_set_scale
(
hb_font_t
*
font
,
hb_16dot16_t
x_scale
,
hb_16dot16_t
y_scale
);
/*
* A zero value means "no hinting in that direction"
*/
void
hb_font_set_ppem
(
hb_font_t
*
font
,
unsigned
int
x_ppem
,
unsigned
int
y_ppem
);
HB_END_DECLS
#endif
/* HB_FONT_H */
src/hb-refcount-private.h
浏览文件 @
c62b5037
...
...
@@ -54,25 +54,29 @@ typedef struct {
#define HB_REFERENCE_COUNT_HAS_REFERENCE(RC) (HB_REFERENCE_COUNT_GET_VALUE (RC) > 0)
/* Helper macros */
#define HB_REFERENCE_COUNT_DO_CREATE(obj) \
#define HB_OBJECT_IS_INERT(obj) \
((obj) == NULL || HB_REFERENCE_COUNT_IS_INVALID ((obj)->ref_count))
#define HB_OBJECT_DO_CREATE(obj) \
HB_STMT_START { \
HB_REFERENCE_COUNT_INIT (obj->ref_count, 1); \
} HB_STMT_END
#define HB_
REFERENCE_COUN
T_DO_REFERENCE(obj) \
#define HB_
OBJEC
T_DO_REFERENCE(obj) \
HB_STMT_START { \
if (
obj == NULL || HB_REFERENCE_COUNT_IS_INVALID (obj->ref_count
)) \
if (
HB_OBJECT_IS_INERT (obj
)) \
return obj; \
assert (HB_REFERENCE_COUNT_HAS_REFERENCE (obj->ref_count)); \
_hb_reference_count_inc (obj->ref_count); \
return obj; \
} HB_STMT_END
#define HB_
REFERENCE_COUN
T_DO_DESTROY(obj) \
#define HB_
OBJEC
T_DO_DESTROY(obj) \
HB_STMT_START { \
if (
obj == NULL || HB_REFERENCE_COUNT_IS_INVALID (obj->ref_count
)) \
if (
HB_OBJECT_IS_INERT (obj
)) \
return; \
assert (HB_REFERENCE_COUNT_HAS_REFERENCE (obj->ref_count)); \
if (!_hb_reference_count_dec_and_test (obj->ref_count)) \
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录