Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Harfbuzz
提交
9c93f5cc
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看板
未验证
提交
9c93f5cc
编写于
7月 01, 2019
作者:
E
Ebrahim Byagowi
提交者:
GitHub
7月 01, 2019
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #1806 from carlo-bramini/master
Make harfbuzz working on all existing versions of Windows
上级
ad341d5f
4ab2d1d6
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
46 addition
and
11 deletion
+46
-11
configure.ac
configure.ac
+1
-1
src/hb-directwrite.cc
src/hb-directwrite.cc
+45
-10
未找到文件。
configure.ac
浏览文件 @
9c93f5cc
...
...
@@ -376,7 +376,7 @@ if test "x$with_directwrite" = "xyes" -a "x$have_directwrite" != "xtrue"; then
fi
if $have_directwrite; then
DIRECTWRITE_CXXFLAGS=
DIRECTWRITE_LIBS=
"-ldwrite"
DIRECTWRITE_LIBS=
AC_SUBST(DIRECTWRITE_CXXFLAGS)
AC_SUBST(DIRECTWRITE_LIBS)
AC_DEFINE(HAVE_DIRECTWRITE, 1, [Have DirectWrite library])
...
...
src/hb-directwrite.cc
浏览文件 @
9c93f5cc
...
...
@@ -28,11 +28,18 @@
#include "hb-shaper-impl.hh"
#include <
DW
rite_1.h>
#include <
dw
rite_1.h>
#include "hb-directwrite.h"
/* Declare object creator for dynamic support of DWRITE */
typedef
HRESULT
(
*
WINAPI
t_DWriteCreateFactory
)(
DWRITE_FACTORY_TYPE
factoryType
,
REFIID
iid
,
IUnknown
**
factory
);
/*
* hb-directwrite uses new/delete syntatically but as we let users
* to override malloc/free, we will redefine new/delete so users
...
...
@@ -138,6 +145,7 @@ public:
struct
hb_directwrite_face_data_t
{
HMODULE
dwrite_dll
;
IDWriteFactory
*
dwriteFactory
;
IDWriteFontFile
*
fontFile
;
DWriteFontFileStream
*
fontFileStream
;
...
...
@@ -153,12 +161,43 @@ _hb_directwrite_shaper_face_data_create (hb_face_t *face)
if
(
unlikely
(
!
data
))
return
nullptr
;
#define FAIL(...) \
HB_STMT_START { \
DEBUG_MSG (DIRECTWRITE, nullptr, __VA_ARGS__); \
return nullptr; \
} HB_STMT_END
data
->
dwrite_dll
=
LoadLibrary
(
TEXT
(
"DWRITE"
));
if
(
unlikely
(
!
data
->
dwrite_dll
))
FAIL
(
"Cannot find DWrite.DLL"
);
t_DWriteCreateFactory
p_DWriteCreateFactory
;
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wcast-function-type"
#endif
p_DWriteCreateFactory
=
(
t_DWriteCreateFactory
)
GetProcAddress
(
data
->
dwrite_dll
,
"DWriteCreateFactory"
);
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif
if
(
unlikely
(
!
p_DWriteCreateFactory
))
FAIL
(
"Cannot find DWriteCreateFactory()."
);
HRESULT
hr
;
// TODO: factory and fontFileLoader should be cached separately
IDWriteFactory
*
dwriteFactory
;
DWriteCreateFactory
(
DWRITE_FACTORY_TYPE_SHARED
,
__uuidof
(
IDWriteFactory
),
(
IUnknown
**
)
&
dwriteFactory
);
hr
=
p_DWriteCreateFactory
(
DWRITE_FACTORY_TYPE_SHARED
,
__uuidof
(
IDWriteFactory
),
(
IUnknown
**
)
&
dwriteFactory
);
if
(
unlikely
(
hr
!=
S_OK
))
FAIL
(
"Failed to run DWriteCreateFactory()."
);
HRESULT
hr
;
hb_blob_t
*
blob
=
hb_face_reference_blob
(
face
);
DWriteFontFileStream
*
fontFileStream
;
fontFileStream
=
new
DWriteFontFileStream
((
uint8_t
*
)
hb_blob_get_data
(
blob
,
nullptr
),
...
...
@@ -172,12 +211,6 @@ _hb_directwrite_shaper_face_data_create (hb_face_t *face)
hr
=
dwriteFactory
->
CreateCustomFontFileReference
(
&
fontFileKey
,
sizeof
(
fontFileKey
),
fontFileLoader
,
&
fontFile
);
#define FAIL(...) \
HB_STMT_START { \
DEBUG_MSG (DIRECTWRITE, nullptr, __VA_ARGS__); \
return nullptr; \
} HB_STMT_END
if
(
FAILED
(
hr
))
FAIL
(
"Failed to load font file from data!"
);
...
...
@@ -224,6 +257,8 @@ _hb_directwrite_shaper_face_data_destroy (hb_directwrite_face_data_t *data)
delete
data
->
fontFileStream
;
if
(
data
->
faceBlob
)
hb_blob_destroy
(
data
->
faceBlob
);
if
(
data
->
dwrite_dll
)
FreeLibrary
(
data
->
dwrite_dll
);
if
(
data
)
delete
data
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录