diff --git a/gn/core.gni b/gn/core.gni index b0fd3d8430cc..3fec48581984 100644 --- a/gn/core.gni +++ b/gn/core.gni @@ -913,8 +913,6 @@ skia_core_sources += [ "$_src/c/sk_surface.cpp", "$_src/c/sk_svg.cpp", "$_src/c/sk_textblob.cpp", - "$_src/c/sk_default_fontmgr.cpp", - "$_src/c/sk_default_fontmgr.h", "$_src/c/sk_typeface.cpp", "$_src/c/sk_types_priv.h", "$_src/c/sk_vertices.cpp", diff --git a/include/c/sk_font.h b/include/c/sk_font.h index ed71500a7b6b..ee6e13e30adc 100644 --- a/include/c/sk_font.h +++ b/include/c/sk_font.h @@ -16,7 +16,6 @@ SK_C_PLUS_PLUS_BEGIN_GUARD // sk_font_t -SK_C_API sk_font_t* sk_font_new(void); SK_C_API sk_font_t* sk_font_new_with_values(sk_typeface_t* typeface, float size, float scaleX, float skewX); SK_C_API void sk_font_delete(sk_font_t* font); SK_C_API bool sk_font_is_force_auto_hinting(const sk_font_t* font); diff --git a/include/c/sk_typeface.h b/include/c/sk_typeface.h index 5cf2dca694b7..9dd80d4955e0 100644 --- a/include/c/sk_typeface.h +++ b/include/c/sk_typeface.h @@ -22,12 +22,7 @@ SK_C_API int sk_typeface_get_font_weight(const sk_typeface_t* typeface); SK_C_API int sk_typeface_get_font_width(const sk_typeface_t* typeface); SK_C_API sk_font_style_slant_t sk_typeface_get_font_slant(const sk_typeface_t* typeface); SK_C_API bool sk_typeface_is_fixed_pitch(const sk_typeface_t* typeface); -SK_C_API sk_typeface_t* sk_typeface_create_default(void); -SK_C_API sk_typeface_t* sk_typeface_ref_default(void); -SK_C_API sk_typeface_t* sk_typeface_create_from_name(const char* familyName, const sk_fontstyle_t* style); -SK_C_API sk_typeface_t* sk_typeface_create_from_file(const char* path, int index); -SK_C_API sk_typeface_t* sk_typeface_create_from_stream(sk_stream_asset_t* stream, int index); -SK_C_API sk_typeface_t* sk_typeface_create_from_data(sk_data_t* data, int index); +SK_C_API sk_typeface_t* sk_typeface_create_empty(void); SK_C_API void sk_typeface_unichars_to_glyphs(const sk_typeface_t* typeface, const int32_t unichars[], int count, uint16_t glyphs[]); SK_C_API uint16_t sk_typeface_unichar_to_glyph(const sk_typeface_t* typeface, const int32_t unichar); SK_C_API int sk_typeface_count_glyphs(const sk_typeface_t* typeface); @@ -47,7 +42,6 @@ SK_C_API sk_stream_asset_t* sk_typeface_open_stream(const sk_typeface_t* typefac // font manager SK_C_API sk_fontmgr_t* sk_fontmgr_create_default(void); -SK_C_API sk_fontmgr_t* sk_fontmgr_ref_default(void); SK_C_API void sk_fontmgr_unref(sk_fontmgr_t*); SK_C_API int sk_fontmgr_count_families(sk_fontmgr_t*); SK_C_API void sk_fontmgr_get_family_name(sk_fontmgr_t*, int index, sk_string_t* familyName); diff --git a/include/xamarin/SkCompatPaint.h b/include/xamarin/SkCompatPaint.h index 45ef7d82ad41..c5fb866f02e7 100644 --- a/include/xamarin/SkCompatPaint.h +++ b/include/xamarin/SkCompatPaint.h @@ -24,13 +24,12 @@ enum class SkFilterQuality class SkCompatPaint : public SkPaint { public: - SkCompatPaint(); SkCompatPaint(const SkCompatPaint& paint); SkCompatPaint(const SkFont* font); ~SkCompatPaint(); public: - void reset(); + void reset(const SkFont* font); SkFont* makeFont(); diff --git a/include/xamarin/sk_compatpaint.h b/include/xamarin/sk_compatpaint.h index ed31dea0d918..8ab9f44a8a9d 100644 --- a/include/xamarin/sk_compatpaint.h +++ b/include/xamarin/sk_compatpaint.h @@ -17,11 +17,10 @@ SK_C_PLUS_PLUS_BEGIN_GUARD typedef struct sk_compatpaint_t sk_compatpaint_t; -SK_X_API sk_compatpaint_t* sk_compatpaint_new(void); SK_X_API sk_compatpaint_t* sk_compatpaint_new_with_font(const sk_font_t* font); SK_X_API void sk_compatpaint_delete(sk_compatpaint_t* paint); SK_X_API sk_compatpaint_t* sk_compatpaint_clone(const sk_compatpaint_t* paint); -SK_X_API void sk_compatpaint_reset(sk_compatpaint_t* paint); +SK_X_API void sk_compatpaint_reset(sk_compatpaint_t* paint, const sk_font_t* font); SK_X_API sk_font_t* sk_compatpaint_make_font(sk_compatpaint_t* paint); SK_X_API sk_font_t* sk_compatpaint_get_font(sk_compatpaint_t* paint); SK_X_API void sk_compatpaint_set_text_align(sk_compatpaint_t* paint, sk_text_align_t align); diff --git a/src/c/sk_default_fontmgr.cpp b/src/c/sk_default_fontmgr.cpp deleted file mode 100644 index 4bc32d71cd83..000000000000 --- a/src/c/sk_default_fontmgr.cpp +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2026 Microsoft Corporation. All rights reserved. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include "src/c/sk_default_fontmgr.h" - -// Platform-specific font manager includes (m132: SkFontMgr::MakeDefault removed) -#if defined(__EMSCRIPTEN__) -#include "include/ports/SkFontMgr_data.h" -struct SkEmbeddedResource { const uint8_t* data; size_t size; }; -struct SkEmbeddedResourceHeader { const SkEmbeddedResource* entries; int count; }; -extern "C" const SkEmbeddedResourceHeader SK_EMBEDDED_FONTS; -extern sk_sp SkFontMgr_New_Custom_Embedded(const SkEmbeddedResourceHeader*); -#elif defined(SK_BUILD_FOR_ANDROID) -#include "include/ports/SkFontMgr_android.h" -#elif defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS) -#include "include/ports/SkFontMgr_mac_ct.h" -#elif defined(SK_BUILD_FOR_WIN) -#include "include/ports/SkTypeface_win.h" -#elif defined(SK_FONTMGR_FONTCONFIG_AVAILABLE) -#include "include/ports/SkFontMgr_fontconfig.h" -#else -#include "include/ports/SkFontMgr_empty.h" -#endif - -static sk_sp create_platform_fontmgr() { -#if defined(__EMSCRIPTEN__) - return SkFontMgr_New_Custom_Embedded(&SK_EMBEDDED_FONTS); -#elif defined(SK_BUILD_FOR_ANDROID) - return SkFontMgr_New_Android(nullptr); -#elif defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS) - return SkFontMgr_New_CoreText(nullptr); -#elif defined(SK_BUILD_FOR_WIN) - return SkFontMgr_New_DirectWrite(); -#elif defined(SK_FONTMGR_FONTCONFIG_AVAILABLE) - return SkFontMgr_New_FontConfig(nullptr); -#else - return SkFontMgr_New_Custom_Empty(); -#endif -} - -sk_sp sk_create_default_fontmgr() { - return create_platform_fontmgr(); -} - -sk_sp sk_get_default_fontmgr() { - static sk_sp mgr = create_platform_fontmgr(); - return mgr; -} diff --git a/src/c/sk_default_fontmgr.h b/src/c/sk_default_fontmgr.h deleted file mode 100644 index 265937256a77..000000000000 --- a/src/c/sk_default_fontmgr.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2026 Microsoft Corporation. All rights reserved. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#ifndef sk_default_fontmgr_DEFINED -#define sk_default_fontmgr_DEFINED - -#include "include/core/SkFontMgr.h" -#include "include/core/SkFontStyle.h" -#include "include/core/SkRefCnt.h" -#include "include/core/SkTypeface.h" - -// Creates a new platform-appropriate font manager instance. -sk_sp sk_create_default_fontmgr(); - -// Returns a cached, thread-safe, platform-appropriate default font manager. -sk_sp sk_get_default_fontmgr(); - -// Returns a default typeface from the cached default font manager. -inline sk_sp sk_get_default_typeface() { - return sk_get_default_fontmgr()->legacyMakeTypeface("", SkFontStyle::Normal()); -} - -#endif // sk_default_fontmgr_DEFINED diff --git a/src/c/sk_font.cpp b/src/c/sk_font.cpp index 0c7cc7a5ef1b..1fa464b68363 100644 --- a/src/c/sk_font.cpp +++ b/src/c/sk_font.cpp @@ -16,19 +16,11 @@ #include "include/c/sk_font.h" #include "src/c/sk_types_priv.h" -#include "src/c/sk_default_fontmgr.h" // sk_font_t -sk_font_t* sk_font_new(void) { - return ToFont(new SkFont(sk_get_default_typeface())); -} - sk_font_t* sk_font_new_with_values(sk_typeface_t* typeface, float size, float scaleX, float skewX) { - sk_sp tf = typeface - ? sk_ref_sp(AsTypeface(typeface)) - : sk_get_default_typeface(); - return ToFont(new SkFont(std::move(tf), size, scaleX, skewX)); + return ToFont(new SkFont(sk_ref_sp(AsTypeface(typeface)), size, scaleX, skewX)); } void sk_font_delete(sk_font_t* font) { diff --git a/src/c/sk_typeface.cpp b/src/c/sk_typeface.cpp index 4b82d6e5e04a..b934812c10b2 100644 --- a/src/c/sk_typeface.cpp +++ b/src/c/sk_typeface.cpp @@ -14,10 +14,28 @@ #include +// Platform-specific font manager includes (m132: SkFontMgr::MakeDefault removed) +#if defined(__EMSCRIPTEN__) +#include "include/ports/SkFontMgr_data.h" +struct SkEmbeddedResource { const uint8_t* data; size_t size; }; +struct SkEmbeddedResourceHeader { const SkEmbeddedResource* entries; int count; }; +extern "C" const SkEmbeddedResourceHeader SK_EMBEDDED_FONTS; +extern sk_sp SkFontMgr_New_Custom_Embedded(const SkEmbeddedResourceHeader*); +#elif defined(SK_BUILD_FOR_ANDROID) +#include "include/ports/SkFontMgr_android.h" +#elif defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS) +#include "include/ports/SkFontMgr_mac_ct.h" +#elif defined(SK_BUILD_FOR_WIN) +#include "include/ports/SkTypeface_win.h" +#elif defined(SK_FONTMGR_FONTCONFIG_AVAILABLE) +#include "include/ports/SkFontMgr_fontconfig.h" +#else +#include "include/ports/SkFontMgr_empty.h" +#endif + #include "include/c/sk_typeface.h" #include "src/c/sk_types_priv.h" -#include "src/c/sk_default_fontmgr.h" // typeface @@ -46,32 +64,8 @@ bool sk_typeface_is_fixed_pitch(const sk_typeface_t* typeface) { return AsTypeface(typeface)->isFixedPitch(); } -sk_typeface_t* sk_typeface_create_default(void) { - return ToTypeface(sk_get_default_typeface().release()); -} - -sk_typeface_t* sk_typeface_ref_default(void) { - // Cache a default typeface to preserve the singleton behavior of the old RefDefault() - static sk_sp defaultTf = sk_get_default_typeface(); - defaultTf->ref(); - return ToTypeface(defaultTf.get()); -} - -sk_typeface_t* sk_typeface_create_from_name(const char* familyName, const sk_fontstyle_t* style) { - return ToTypeface(sk_get_default_fontmgr()->legacyMakeTypeface(familyName, *AsFontStyle(style)).release()); -} - -sk_typeface_t* sk_typeface_create_from_file(const char* path, int index) { - return ToTypeface(sk_get_default_fontmgr()->makeFromFile(path, index).release()); -} - -sk_typeface_t* sk_typeface_create_from_stream(sk_stream_asset_t* stream, int index) { - std::unique_ptr skstream(AsStreamAsset(stream)); - return ToTypeface(sk_get_default_fontmgr()->makeFromStream(std::move(skstream), index).release()); -} - -sk_typeface_t* sk_typeface_create_from_data(sk_data_t* data, int index) { - return ToTypeface(sk_get_default_fontmgr()->makeFromData(sk_ref_sp(AsData(data)), index).release()); +sk_typeface_t* sk_typeface_create_empty(void) { + return ToTypeface(SkTypeface::MakeEmpty().release()); } void sk_typeface_unichars_to_glyphs(const sk_typeface_t* typeface, const int32_t unichars[], int count, uint16_t glyphs[]) { @@ -134,12 +128,19 @@ sk_stream_asset_t* sk_typeface_open_stream(const sk_typeface_t* typeface, int* t // font manager sk_fontmgr_t* sk_fontmgr_create_default(void) { - return ToFontMgr(sk_create_default_fontmgr().release()); -} - -sk_fontmgr_t* sk_fontmgr_ref_default(void) { - sk_sp mgr = sk_get_default_fontmgr(); - return ToFontMgr(mgr.release()); +#if defined(__EMSCRIPTEN__) + return ToFontMgr(SkFontMgr_New_Custom_Embedded(&SK_EMBEDDED_FONTS).release()); +#elif defined(SK_BUILD_FOR_ANDROID) + return ToFontMgr(SkFontMgr_New_Android(nullptr).release()); +#elif defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS) + return ToFontMgr(SkFontMgr_New_CoreText(nullptr).release()); +#elif defined(SK_BUILD_FOR_WIN) + return ToFontMgr(SkFontMgr_New_DirectWrite().release()); +#elif defined(SK_FONTMGR_FONTCONFIG_AVAILABLE) + return ToFontMgr(SkFontMgr_New_FontConfig(nullptr).release()); +#else + return ToFontMgr(SkFontMgr_New_Custom_Empty().release()); +#endif } void sk_fontmgr_unref(sk_fontmgr_t* fontmgr) { diff --git a/src/xamarin/SkCompatPaint.cpp b/src/xamarin/SkCompatPaint.cpp index e7f822e3bced..3201b17f5afa 100644 --- a/src/xamarin/SkCompatPaint.cpp +++ b/src/xamarin/SkCompatPaint.cpp @@ -10,18 +10,6 @@ #include "include/core/SkFont.h" #include "include/utils/SkTextUtils.h" #include "include/xamarin/SkCompatPaint.h" -#include "src/c/sk_default_fontmgr.h" - -SkCompatPaint::SkCompatPaint() - : fFont(SkFont(sk_get_default_typeface())) - , fTextAlign(SkTextUtils::Align::kLeft_Align) - , fTextEncoding(SkTextEncoding::kUTF8) - , fFilterQuality(SkFilterQuality::None) - , fLcdRenderText(false) -{ - fFont.setLinearMetrics(true); - fFont.setEdging(SkFont::Edging::kAlias); -} SkCompatPaint::SkCompatPaint(const SkCompatPaint& paint) = default; @@ -37,8 +25,8 @@ SkCompatPaint::SkCompatPaint(const SkFont* font) SkCompatPaint::~SkCompatPaint() = default; -void SkCompatPaint::reset() { - *this = SkCompatPaint(); +void SkCompatPaint::reset(const SkFont* font) { + *this = SkCompatPaint(font); } SkFont* SkCompatPaint::makeFont() { diff --git a/src/xamarin/SkiaKeeper.c b/src/xamarin/SkiaKeeper.c index 61cb2786669a..0e427b5516e4 100644 --- a/src/xamarin/SkiaKeeper.c +++ b/src/xamarin/SkiaKeeper.c @@ -74,7 +74,7 @@ void** KeepSkiaCSymbols (void) (void*)sk_data_new_empty, (void*)sk_document_unref, (void*)sk_drawable_unref, - (void*)sk_font_new, + (void*)sk_font_new_with_values, (void*)sk_image_ref, (void*)sk_imagefilter_unref, (void*)sk_maskfilter_ref, @@ -103,7 +103,7 @@ void** KeepSkiaCSymbols (void) (void*)skresources_resource_provider_ref, // Xamarin - (void*)sk_compatpaint_new, + (void*)sk_compatpaint_new_with_font, (void*)sk_managedstream_new, (void*)sk_manageddrawable_new, (void*)sk_managedtracememorydump_new, diff --git a/src/xamarin/sk_compatpaint.cpp b/src/xamarin/sk_compatpaint.cpp index c8b61cdb6a73..33a466d524c1 100644 --- a/src/xamarin/sk_compatpaint.cpp +++ b/src/xamarin/sk_compatpaint.cpp @@ -23,10 +23,6 @@ static inline sk_compatpaint_t* ToCompatPaint(SkCompatPaint* c) { } -sk_compatpaint_t* sk_compatpaint_new(void) { - return ToCompatPaint(new SkCompatPaint()); -} - sk_compatpaint_t* sk_compatpaint_new_with_font(const sk_font_t* font) { return ToCompatPaint(new SkCompatPaint(AsFont(font))); } @@ -39,8 +35,8 @@ sk_compatpaint_t* sk_compatpaint_clone(const sk_compatpaint_t* paint) { return ToCompatPaint(new SkCompatPaint(*AsCompatPaint(paint))); } -void sk_compatpaint_reset(sk_compatpaint_t* paint) { - AsCompatPaint(paint)->reset(); +void sk_compatpaint_reset(sk_compatpaint_t* paint, const sk_font_t* font) { + AsCompatPaint(paint)->reset(AsFont(font)); } sk_font_t* sk_compatpaint_make_font(sk_compatpaint_t* paint) {