| /* |
| * Copyright 2006-2012 The Android Open Source Project |
| * Copyright 2012 Mozilla Foundation |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #ifndef SKFONTHOST_FREETYPE_COMMON_H_ |
| #define SKFONTHOST_FREETYPE_COMMON_H_ |
| |
| #include "include/core/SkColor.h" |
| #include "include/core/SkSpan.h" |
| #include "include/core/SkTypes.h" |
| #include "src/core/SkGlyph.h" |
| #include "src/core/SkScalerContext.h" |
| |
| class SkCanvas; |
| |
| // These are forward declared to avoid pimpl but also hide the FreeType implementation. |
| typedef struct FT_FaceRec_* FT_Face; |
| typedef signed long FT_Pos; |
| |
| |
| #ifdef SK_DEBUG |
| const char* SkTraceFtrGetError(int); |
| #define SK_TRACEFTR(ERR, MSG, ...) \ |
| SkDebugf("%s:%d:1: error: 0x%x '%s' " MSG "\n", __FILE__, __LINE__, (uint32_t)ERR, \ |
| SkTraceFtrGetError((int)(ERR)), __VA_ARGS__) |
| #else |
| #define SK_TRACEFTR(ERR, ...) do { sk_ignore_unused_variable(ERR); } while (false) |
| #endif |
| |
| struct SkScalerContextFTUtils { |
| SkColor fForegroundColor; |
| SkScalerContext::Flags fFlags; |
| |
| using LoadGlyphFlags = uint32_t; |
| |
| void init(SkColor fgColor, SkScalerContext::Flags); |
| |
| bool isSubpixel() const { |
| return SkToBool(fFlags & SkScalerContext::kSubpixelPositioning_Flag); |
| } |
| |
| bool isLinearMetrics() const { |
| return SkToBool(fFlags & SkScalerContext::kLinearMetrics_Flag); |
| } |
| |
| bool drawCOLRv0Glyph(FT_Face, const SkGlyph&, LoadGlyphFlags, |
| SkSpan<SkColor> palette, SkCanvas*) const; |
| bool drawCOLRv1Glyph(FT_Face, const SkGlyph&, LoadGlyphFlags, |
| SkSpan<SkColor> palette, SkCanvas*) const; |
| bool drawSVGGlyph(FT_Face, const SkGlyph&, LoadGlyphFlags, |
| SkSpan<SkColor> palette, SkCanvas*) const; |
| void generateGlyphImage(FT_Face, const SkGlyph&, void*, const SkMatrix& bitmapTransform, |
| const SkMaskGamma::PreBlend&) const; |
| bool generateGlyphPath(FT_Face, SkPath*) const; |
| |
| /** Computes a bounding box for a COLRv1 glyph. |
| * |
| * This method may change the configured size and transforms on FT_Face. Make sure to |
| * configure size, matrix and load glyphs as needed after using this function to restore the |
| * state of FT_Face. |
| */ |
| static bool computeColrV1GlyphBoundingBox(FT_Face, SkGlyphID, SkRect* bounds); |
| |
| private: |
| bool generateFacePath(FT_Face, SkGlyphID, LoadGlyphFlags, SkPath*) const; |
| }; |
| |
| #endif // SKFONTHOST_FREETYPE_COMMON_H_ |