Index: core/fxge/ge/fx_ge_text.cpp |
diff --git a/core/fxge/ge/fx_ge_text.cpp b/core/fxge/ge/fx_ge_text.cpp |
index 1d18ecd3779b21bfe99a72681011334a9601017b..0815bfaa67655a3b1aaaeddf3593601b2abf1be6 100644 |
--- a/core/fxge/ge/fx_ge_text.cpp |
+++ b/core/fxge/ge/fx_ge_text.cpp |
@@ -9,6 +9,11 @@ |
#include "core/include/fxge/fx_freetype.h" |
#include "core/include/fxge/fx_ge.h" |
+#ifdef _SKIA_SUPPORT_ |
+#include "third_party/skia/include/core/SkStream.h" |
+#include "third_party/skia/include/core/SkTypeface.h" |
+#endif |
+ |
#undef FX_GAMMA |
#undef FX_GAMMA_INVERSE |
#define FX_GAMMA(value) (value) |
@@ -1198,6 +1203,20 @@ CFX_FaceCache* CFX_FontCache::GetCachedFace(CFX_Font* pFont) { |
return face_cache; |
} |
+#ifdef _SKIA_SUPPORT_ |
+CFX_TypeFace* CFX_FontCache::GetDeviceCache(CFX_Font* pFont) { |
+ return GetCachedFace(pFont)->GetDeviceCache(pFont); |
+} |
+ |
+CFX_TypeFace* CFX_FaceCache::GetDeviceCache(CFX_Font* pFont) { |
+ if (!m_pTypeface) { |
+ m_pTypeface = SkTypeface::CreateFromStream( |
+ new SkMemoryStream(pFont->GetFontData(), pFont->GetSize())); |
+ } |
+ return m_pTypeface; |
+} |
+#endif |
+ |
void CFX_FontCache::ReleaseCachedFace(CFX_Font* pFont) { |
FXFT_Face internal_face = pFont->GetFace(); |
const bool bExternal = !internal_face; |
@@ -1237,7 +1256,14 @@ void CFX_FontCache::FreeCache(FX_BOOL bRelease) { |
} |
} |
-CFX_FaceCache::CFX_FaceCache(FXFT_Face face) : m_Face(face) {} |
+CFX_FaceCache::CFX_FaceCache(FXFT_Face face) |
+ : m_Face(face) |
+#ifdef _SKIA_SUPPORT_ |
+ , |
+ m_pTypeface(nullptr) |
+#endif |
+{ |
+} |
CFX_FaceCache::~CFX_FaceCache() { |
for (const auto& pair : m_SizeMap) { |
@@ -1248,7 +1274,11 @@ CFX_FaceCache::~CFX_FaceCache() { |
delete pair.second; |
} |
m_PathMap.clear(); |
+#ifdef _SKIA_SUPPORT_ |
+ SkSafeUnref(m_pTypeface); |
+#endif |
} |
+ |
#if _FXM_PLATFORM_ != _FXM_PLATFORM_APPLE_ |
void CFX_FaceCache::InitPlatform() {} |
#endif |