Home | History | Annotate | Download | only in text
      1 /*
      2  * Copyright 2010 Google Inc.
      3  *
      4  * Use of this source code is governed by a BSD-style license that can be
      5  * found in the LICENSE file.
      6  */
      7 
      8 #ifndef GrFontScaler_DEFINED
      9 #define GrFontScaler_DEFINED
     10 
     11 #include "GrGlyph.h"
     12 #include "GrTypes.h"
     13 
     14 #include "SkDescriptor.h"
     15 
     16 class SkGlyph;
     17 class SkPath;
     18 
     19 /*
     20  *  Wrapper class to turn a font cache descriptor into a key
     21  *  for GrFontScaler-related lookups
     22  */
     23 class GrFontDescKey : public SkRefCnt {
     24 public:
     25     explicit GrFontDescKey(const SkDescriptor& desc) : fDesc(desc), fHash(desc.getChecksum()) {}
     26 
     27     uint32_t getHash() const { return fHash; }
     28 
     29     bool operator==(const GrFontDescKey& rh) const {
     30         return fHash == rh.fHash && fDesc.getDesc()->equals(*rh.fDesc.getDesc());
     31     }
     32 
     33 private:
     34     SkAutoDescriptor fDesc;
     35     uint32_t fHash;
     36 
     37     typedef SkRefCnt INHERITED;
     38 };
     39 
     40 /*
     41  *  This is Gr's interface to the host platform's font scaler.
     42  *
     43  *  The client is responsible for instantiating this. The instance is created
     44  *  for a specific font+size+matrix.
     45  */
     46 class GrFontScaler : public SkRefCnt {
     47 public:
     48     explicit GrFontScaler(SkGlyphCache* strike);
     49     virtual ~GrFontScaler();
     50 
     51     const GrFontDescKey* getKey();
     52     GrMaskFormat getMaskFormat() const;
     53     GrMaskFormat getPackedGlyphMaskFormat(const SkGlyph&) const;
     54     bool getPackedGlyphBounds(const SkGlyph&, SkIRect* bounds);
     55     bool getPackedGlyphImage(const SkGlyph&, int width, int height, int rowBytes,
     56                              GrMaskFormat expectedMaskFormat, void* image);
     57     bool getPackedGlyphDFBounds(const SkGlyph&, SkIRect* bounds);
     58     bool getPackedGlyphDFImage(const SkGlyph&, int width, int height, void* image);
     59     const SkPath* getGlyphPath(const SkGlyph&);
     60     const SkGlyph& grToSkGlyph(GrGlyph::PackedID);
     61 
     62 private:
     63     SkGlyphCache*  fStrike;
     64     GrFontDescKey* fKey;
     65 
     66     typedef SkRefCnt INHERITED;
     67 };
     68 
     69 #endif
     70