123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- /*
- * Copyright 2019 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
- #ifndef SkStrikeSpec_DEFINED
- #define SkStrikeSpec_DEFINED
- #include "src/core/SkDescriptor.h"
- #include "src/core/SkStrikeCache.h"
- #include "src/core/SkStrikeInterface.h"
- #if SK_SUPPORT_GPU
- #include "src/gpu/text/GrStrikeCache.h"
- #include "src/gpu/text/GrTextContext.h"
- #endif
- class SkFont;
- class SkPaint;
- class SkStrikeCache;
- class SkSurfaceProps;
- class SkStrikeSpec {
- public:
- // Create a strike spec for mask style cache entries.
- static SkStrikeSpec MakeMask(
- const SkFont& font,
- const SkPaint& paint,
- const SkSurfaceProps& surfaceProps,
- SkScalerContextFlags scalerContextFlags,
- const SkMatrix& deviceMatrix);
- // Create a strike spec for path style cache entries.
- static SkStrikeSpec MakePath(
- const SkFont& font,
- const SkPaint& paint,
- const SkSurfaceProps& surfaceProps,
- SkScalerContextFlags scalerContextFlags);
- static SkStrikeSpec MakeSourceFallback(const SkFont& font,
- const SkPaint& paint,
- const SkSurfaceProps& surfaceProps,
- SkScalerContextFlags scalerContextFlags,
- SkScalar maxSourceGlyphDimension);
- // Create a canonical strike spec for device-less measurements.
- static SkStrikeSpec MakeCanonicalized(
- const SkFont& font, const SkPaint* paint = nullptr);
- // Create a strike spec without a device, and does not switch over to path for large sizes.
- // This means that strikeToSourceRatio() is always 1.
- static SkStrikeSpec MakeWithNoDevice(const SkFont& font, const SkPaint* paint = nullptr);
- // Make a canonical strike spec for device-less measurements using default typeface and size.
- static SkStrikeSpec MakeDefault();
- // Make a strike spec for PDF Vector strikes
- static SkStrikeSpec MakePDFVector(const SkTypeface& typeface, int* size);
- #if SK_SUPPORT_GPU
- // Create a strike spec for scaled distance field text.
- static std::tuple<SkStrikeSpec, SkScalar, SkScalar> MakeSDFT(
- const SkFont& font,
- const SkPaint& paint,
- const SkSurfaceProps& surfaceProps,
- const SkMatrix& deviceMatrix,
- const GrTextContext::Options& options);
- sk_sp<GrTextStrike> findOrCreateGrStrike(GrStrikeCache* cache) const;
- #endif
- SkScopedStrike findOrCreateScopedStrike(SkStrikeCacheInterface* cache) const;
- SkExclusiveStrikePtr findOrCreateExclusiveStrike(
- SkStrikeCache* cache = SkStrikeCache::GlobalStrikeCache()) const;
- SkScalar strikeToSourceRatio() const { return fStrikeToSourceRatio; }
- const SkDescriptor& descriptor() const { return *fAutoDescriptor.getDesc(); }
- static bool ShouldDrawAsPath(const SkPaint& paint, const SkFont& font, const SkMatrix& matrix);
- private:
- void commonSetup(
- const SkFont& font,
- const SkPaint& paint,
- const SkSurfaceProps& surfaceProps,
- SkScalerContextFlags scalerContextFlags,
- const SkMatrix& deviceMatrix);
- SkAutoDescriptor fAutoDescriptor;
- sk_sp<SkMaskFilter> fMaskFilter;
- sk_sp<SkPathEffect> fPathEffect;
- sk_sp<SkTypeface> fTypeface;
- SkScalar fStrikeToSourceRatio{1.0f};
- };
- class SkBulkGlyphMetrics {
- public:
- explicit SkBulkGlyphMetrics(const SkStrikeSpec& spec);
- SkSpan<const SkGlyph*> glyphs(SkSpan<const SkGlyphID> glyphIDs);
- private:
- static constexpr int kTypicalGlyphCount = 20;
- SkAutoSTArray<kTypicalGlyphCount, const SkGlyph*> fGlyphs;
- SkExclusiveStrikePtr fStrike;
- };
- class SkBulkGlyphMetricsAndPaths {
- public:
- explicit SkBulkGlyphMetricsAndPaths(const SkStrikeSpec& spec);
- SkSpan<const SkGlyph*> glyphs(SkSpan<const SkGlyphID> glyphIDs);
- private:
- static constexpr int kTypicalGlyphCount = 20;
- SkAutoSTArray<kTypicalGlyphCount, const SkGlyph*> fGlyphs;
- SkExclusiveStrikePtr fStrike;
- };
- class SkBulkGlyphMetricsAndImages {
- public:
- explicit SkBulkGlyphMetricsAndImages(const SkStrikeSpec& spec);
- SkSpan<const SkGlyph*> glyphs(SkSpan<const SkPackedGlyphID> glyphIDs);
- private:
- static constexpr int kTypicalGlyphCount = 20;
- SkAutoSTArray<kTypicalGlyphCount, const SkGlyph*> fGlyphs;
- SkExclusiveStrikePtr fStrike;
- };
- #endif // SkStrikeSpec_DEFINED
|