/* * Copyright 2010 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef GrFontScaler_DEFINED #define GrFontScaler_DEFINED #include "GrGlyph.h" #include "GrTypes.h" #include "SkDescriptor.h" class SkGlyph; class SkPath; /* * Wrapper class to turn a font cache descriptor into a key * for GrFontScaler-related lookups */ class GrFontDescKey : public SkRefCnt { public: explicit GrFontDescKey(const SkDescriptor& desc) : fDesc(desc), fHash(desc.getChecksum()) {} uint32_t getHash() const { return fHash; } bool operator==(const GrFontDescKey& rh) const { return fHash == rh.fHash && fDesc.getDesc()->equals(*rh.fDesc.getDesc()); } private: SkAutoDescriptor fDesc; uint32_t fHash; typedef SkRefCnt INHERITED; }; /* * This is Gr's interface to the host platform's font scaler. * * The client is responsible for instantiating this. The instance is created * for a specific font+size+matrix. */ class GrFontScaler : public SkRefCnt { public: explicit GrFontScaler(SkGlyphCache* strike); virtual ~GrFontScaler(); const GrFontDescKey* getKey(); GrMaskFormat getMaskFormat() const; GrMaskFormat getPackedGlyphMaskFormat(const SkGlyph&) const; bool getPackedGlyphBounds(const SkGlyph&, SkIRect* bounds); bool getPackedGlyphImage(const SkGlyph&, int width, int height, int rowBytes, GrMaskFormat expectedMaskFormat, void* image); bool getPackedGlyphDFBounds(const SkGlyph&, SkIRect* bounds); bool getPackedGlyphDFImage(const SkGlyph&, int width, int height, void* image); const SkPath* getGlyphPath(const SkGlyph&); const SkGlyph& grToSkGlyph(GrGlyph::PackedID); private: SkGlyphCache* fStrike; GrFontDescKey* fKey; typedef SkRefCnt INHERITED; }; #endif