diff options
Diffstat (limited to 'src/fonts/SkGScalerContext.cpp')
-rw-r--r-- | src/fonts/SkGScalerContext.cpp | 76 |
1 files changed, 40 insertions, 36 deletions
diff --git a/src/fonts/SkGScalerContext.cpp b/src/fonts/SkGScalerContext.cpp index 0a9601bd7e..9766e34ff0 100644 --- a/src/fonts/SkGScalerContext.cpp +++ b/src/fonts/SkGScalerContext.cpp @@ -5,46 +5,15 @@ * found in the LICENSE file. */ -#include "SkDescriptor.h" #include "SkGScalerContext.h" #include "SkGlyph.h" #include "SkPath.h" #include "SkCanvas.h" -#define STD_SIZE 1 - class SkGScalerContext : public SkScalerContext { public: - SkGScalerContext(SkGTypeface* face, const SkScalerContextEffects& effects, - const SkDescriptor* desc) - : SkScalerContext(face, effects, desc) - , fFace(face) - { - - size_t descSize = SkDescriptor::ComputeOverhead(1) + sizeof(SkScalerContext::Rec); - SkAutoDescriptor ad(descSize); - SkDescriptor* newDesc = ad.getDesc(); - - newDesc->init(); - void* entry = newDesc->addEntry(kRec_SkDescriptorTag, - sizeof(SkScalerContext::Rec), &fRec); - { - SkScalerContext::Rec* rec = (SkScalerContext::Rec*)entry; - rec->fTextSize = STD_SIZE; - rec->fPreScaleX = SK_Scalar1; - rec->fPreSkewX = 0; - rec->fPost2x2[0][0] = rec->fPost2x2[1][1] = SK_Scalar1; - rec->fPost2x2[1][0] = rec->fPost2x2[0][1] = 0; - } - SkASSERT(descSize == newDesc->getLength()); - newDesc->computeChecksum(); - - fProxy = face->proxy()->createScalerContext(effects, newDesc); - - fRec.getSingleMatrix(&fMatrix); - fMatrix.preScale(SK_Scalar1 / STD_SIZE, SK_Scalar1 / STD_SIZE); - } - virtual ~SkGScalerContext() { delete fProxy; } + SkGScalerContext(SkGTypeface*, const SkDescriptor*); + virtual ~SkGScalerContext(); protected: unsigned generateGlyphCount() override; @@ -61,6 +30,41 @@ private: SkMatrix fMatrix; }; +#define STD_SIZE 1 + +#include "SkDescriptor.h" + +SkGScalerContext::SkGScalerContext(SkGTypeface* face, const SkDescriptor* desc) + : SkScalerContext(face, desc) + , fFace(face) +{ + + size_t descSize = SkDescriptor::ComputeOverhead(1) + sizeof(SkScalerContext::Rec); + SkAutoDescriptor ad(descSize); + SkDescriptor* newDesc = ad.getDesc(); + + newDesc->init(); + void* entry = newDesc->addEntry(kRec_SkDescriptorTag, + sizeof(SkScalerContext::Rec), &fRec); + { + SkScalerContext::Rec* rec = (SkScalerContext::Rec*)entry; + rec->fTextSize = STD_SIZE; + rec->fPreScaleX = SK_Scalar1; + rec->fPreSkewX = 0; + rec->fPost2x2[0][0] = rec->fPost2x2[1][1] = SK_Scalar1; + rec->fPost2x2[1][0] = rec->fPost2x2[0][1] = 0; + } + SkASSERT(descSize == newDesc->getLength()); + newDesc->computeChecksum(); + + fProxy = face->proxy()->createScalerContext(newDesc); + + fRec.getSingleMatrix(&fMatrix); + fMatrix.preScale(SK_Scalar1 / STD_SIZE, SK_Scalar1 / STD_SIZE); +} + +SkGScalerContext::~SkGScalerContext() { delete fProxy; } + unsigned SkGScalerContext::generateGlyphCount() { return fProxy->getGlyphCount(); } @@ -160,9 +164,9 @@ SkGTypeface::~SkGTypeface() { fProxy->unref(); } -SkScalerContext* SkGTypeface::onCreateScalerContext(const SkScalerContextEffects& effects, - const SkDescriptor* desc) const { - return new SkGScalerContext(const_cast<SkGTypeface*>(this), effects, desc); +SkScalerContext* SkGTypeface::onCreateScalerContext( + const SkDescriptor* desc) const { + return new SkGScalerContext(const_cast<SkGTypeface*>(this), desc); } void SkGTypeface::onFilterRec(SkScalerContextRec* rec) const { |