#include "ui/gfx/harfbuzz_font_skia.h"
#include <stddef.h>
#include <stdint.h>
#include <limits>
#include <map>
#include "base/check_op.h"
#include "base/containers/heap_array.h"
#include "base/containers/lru_cache.h"
#include "base/lazy_instance.h"
#include "base/memory/raw_ptr.h"
#include "base/no_destructor.h"
#include "build/build_config.h"
#include "third_party/skia/include/core/SkFont.h"
#include "third_party/skia/include/core/SkTypeface.h"
#include "ui/gfx/render_text.h"
#include "ui/gfx/skia_util.h"
namespace gfx {
namespace {
class TypefaceData;
GlyphCache;
struct FontData { … };
template<typename Type>
void DeleteByType(void* data) { … }
template<typename Type>
void DeleteArrayByType(void* data) { … }
void GetGlyphWidthAndExtents(const SkFont& font,
hb_codepoint_t codepoint,
hb_position_t* width,
hb_glyph_extents_t* extents) { … }
hb_bool_t GetGlyph(hb_font_t* font,
void* data,
hb_codepoint_t unicode,
hb_codepoint_t variation_selector,
hb_codepoint_t* glyph,
void* user_data) { … }
hb_bool_t GetNominalGlyph(hb_font_t* font,
void* data,
hb_codepoint_t unicode,
hb_codepoint_t* glyph,
void* user_data) { … }
hb_position_t GetGlyphHorizontalAdvance(hb_font_t* font,
void* data,
hb_codepoint_t glyph,
void* user_data) { … }
hb_bool_t GetGlyphHorizontalOrigin(hb_font_t* font,
void* data,
hb_codepoint_t glyph,
hb_position_t* x,
hb_position_t* y,
void* user_data) { … }
hb_position_t GetGlyphKerning(FontData* font_data,
hb_codepoint_t first_glyph,
hb_codepoint_t second_glyph) { … }
hb_position_t GetGlyphHorizontalKerning(hb_font_t* font,
void* data,
hb_codepoint_t left_glyph,
hb_codepoint_t right_glyph,
void* user_data) { … }
hb_position_t GetGlyphVerticalKerning(hb_font_t* font,
void* data,
hb_codepoint_t top_glyph,
hb_codepoint_t bottom_glyph,
void* user_data) { … }
hb_bool_t GetGlyphExtents(hb_font_t* font,
void* data,
hb_codepoint_t glyph,
hb_glyph_extents_t* extents,
void* user_data) { … }
class FontFuncs { … };
base::LazyInstance<FontFuncs>::Leaky g_font_funcs = …;
hb_blob_t* GetFontTable(hb_face_t* face, hb_tag_t tag, void* user_data) { … }
class TypefaceData { … };
}
hb_font_t* CreateHarfBuzzFont(sk_sp<SkTypeface> skia_face,
SkScalar text_size,
const FontRenderParams& params,
bool subpixel_rendering_suppressed) { … }
}