To allow forward declarations, move SkScalerContext::Rec to SkScalerContextRec
Review URL: https://codereview.appspot.com/6462059 git-svn-id: http://skia.googlecode.com/svn/trunk@5090 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
parent
b5e4703b86
commit
a9d4e84c43
@ -10,10 +10,11 @@
|
||||
#ifndef SkFontHost_DEFINED
|
||||
#define SkFontHost_DEFINED
|
||||
|
||||
#include "SkScalerContext.h"
|
||||
#include "SkTypeface.h"
|
||||
|
||||
class SkDescriptor;
|
||||
class SkScalerContext;
|
||||
struct SkScalerContextRec;
|
||||
class SkStream;
|
||||
class SkWStream;
|
||||
|
||||
@ -167,7 +168,7 @@ public:
|
||||
|
||||
A lazy (but valid) fonthost can do nothing in its FilterRec routine.
|
||||
*/
|
||||
static void FilterRec(SkScalerContext::Rec* rec);
|
||||
static void FilterRec(SkScalerContextRec* rec);
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
@ -24,44 +24,11 @@ class SkMaskFilter;
|
||||
class SkPathEffect;
|
||||
class SkRasterizer;
|
||||
|
||||
//The following typedef hides from the rest of the implementation the number of
|
||||
//most significant bits to consider when creating mask gamma tables. Two bits
|
||||
//per channel was chosen as a balance between fidelity (more bits) and cache
|
||||
//sizes (fewer bits).
|
||||
typedef SkTMaskGamma<2, 2, 2> SkMaskGamma;
|
||||
|
||||
class SkScalerContext {
|
||||
public:
|
||||
enum Flags {
|
||||
kFrameAndFill_Flag = 0x0001,
|
||||
kDevKernText_Flag = 0x0002,
|
||||
kEmbeddedBitmapText_Flag = 0x0004,
|
||||
kEmbolden_Flag = 0x0008,
|
||||
kSubpixelPositioning_Flag = 0x0010,
|
||||
kAutohinting_Flag = 0x0020,
|
||||
kVertical_Flag = 0x0040,
|
||||
|
||||
// together, these two flags resulting in a two bit value which matches
|
||||
// up with the SkPaint::Hinting enum.
|
||||
kHinting_Shift = 7, // to shift into the other flags above
|
||||
kHintingBit1_Flag = 0x0080,
|
||||
kHintingBit2_Flag = 0x0100,
|
||||
|
||||
// these should only ever be set if fMaskFormat is LCD16 or LCD32
|
||||
kLCD_Vertical_Flag = 0x0200, // else Horizontal
|
||||
kLCD_BGROrder_Flag = 0x0400, // else RGB order
|
||||
|
||||
// Generate A8 from LCD source (for GDI), only meaningful if fMaskFormat is kA8
|
||||
// Perhaps we can store this (instead) in fMaskFormat, in hight bit?
|
||||
kGenA8FromLCD_Flag = 0x0800,
|
||||
};
|
||||
|
||||
// computed values
|
||||
enum {
|
||||
kHinting_Mask = kHintingBit1_Flag | kHintingBit2_Flag,
|
||||
};
|
||||
|
||||
struct Rec {
|
||||
/*
|
||||
* To allow this to be forward-declared, it must be its own typename, rather
|
||||
* than a nested struct inside SkScalerContext (where it started).
|
||||
*/
|
||||
struct SkScalerContextRec {
|
||||
uint32_t fOrigFontID;
|
||||
uint32_t fFontID;
|
||||
SkScalar fTextSize, fPreScaleX, fPreSkewX;
|
||||
@ -122,14 +89,8 @@ public:
|
||||
void getLocalMatrix(SkMatrix*) const;
|
||||
void getSingleMatrix(SkMatrix*) const;
|
||||
|
||||
SkPaint::Hinting getHinting() const {
|
||||
unsigned hint = (fFlags & kHinting_Mask) >> kHinting_Shift;
|
||||
return static_cast<SkPaint::Hinting>(hint);
|
||||
}
|
||||
|
||||
void setHinting(SkPaint::Hinting hinting) {
|
||||
fFlags = (fFlags & ~kHinting_Mask) | (hinting << kHinting_Shift);
|
||||
}
|
||||
inline SkPaint::Hinting getHinting() const;
|
||||
inline void setHinting(SkPaint::Hinting);
|
||||
|
||||
SkMask::Format getFormat() const {
|
||||
return static_cast<SkMask::Format>(fMaskFormat);
|
||||
@ -144,6 +105,46 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
//The following typedef hides from the rest of the implementation the number of
|
||||
//most significant bits to consider when creating mask gamma tables. Two bits
|
||||
//per channel was chosen as a balance between fidelity (more bits) and cache
|
||||
//sizes (fewer bits).
|
||||
typedef SkTMaskGamma<2, 2, 2> SkMaskGamma;
|
||||
|
||||
class SkScalerContext {
|
||||
public:
|
||||
typedef SkScalerContextRec Rec;
|
||||
|
||||
enum Flags {
|
||||
kFrameAndFill_Flag = 0x0001,
|
||||
kDevKernText_Flag = 0x0002,
|
||||
kEmbeddedBitmapText_Flag = 0x0004,
|
||||
kEmbolden_Flag = 0x0008,
|
||||
kSubpixelPositioning_Flag = 0x0010,
|
||||
kAutohinting_Flag = 0x0020,
|
||||
kVertical_Flag = 0x0040,
|
||||
|
||||
// together, these two flags resulting in a two bit value which matches
|
||||
// up with the SkPaint::Hinting enum.
|
||||
kHinting_Shift = 7, // to shift into the other flags above
|
||||
kHintingBit1_Flag = 0x0080,
|
||||
kHintingBit2_Flag = 0x0100,
|
||||
|
||||
// these should only ever be set if fMaskFormat is LCD16 or LCD32
|
||||
kLCD_Vertical_Flag = 0x0200, // else Horizontal
|
||||
kLCD_BGROrder_Flag = 0x0400, // else RGB order
|
||||
|
||||
// Generate A8 from LCD source (for GDI), only meaningful if fMaskFormat is kA8
|
||||
// Perhaps we can store this (instead) in fMaskFormat, in hight bit?
|
||||
kGenA8FromLCD_Flag = 0x0800,
|
||||
};
|
||||
|
||||
// computed values
|
||||
enum {
|
||||
kHinting_Mask = kHintingBit1_Flag | kHintingBit2_Flag,
|
||||
};
|
||||
|
||||
|
||||
SkScalerContext(const SkDescriptor* desc);
|
||||
virtual ~SkScalerContext();
|
||||
|
||||
@ -267,5 +268,19 @@ enum SkAxisAlignment {
|
||||
*/
|
||||
SkAxisAlignment SkComputeAxisAlignmentForHText(const SkMatrix& matrix);
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
SkPaint::Hinting SkScalerContextRec::getHinting() const {
|
||||
unsigned hint = (fFlags & SkScalerContext::kHinting_Mask) >>
|
||||
SkScalerContext::kHinting_Shift;
|
||||
return static_cast<SkPaint::Hinting>(hint);
|
||||
}
|
||||
|
||||
void SkScalerContextRec::setHinting(SkPaint::Hinting hinting) {
|
||||
fFlags = (fFlags & ~SkScalerContext::kHinting_Mask) |
|
||||
(hinting << SkScalerContext::kHinting_Shift);
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -691,7 +691,7 @@ void SkScalerContext::internalGetPath(const SkGlyph& glyph, SkPath* fillPath,
|
||||
}
|
||||
|
||||
|
||||
void SkScalerContext::Rec::getMatrixFrom2x2(SkMatrix* dst) const {
|
||||
void SkScalerContextRec::getMatrixFrom2x2(SkMatrix* dst) const {
|
||||
dst->reset();
|
||||
dst->setScaleX(fPost2x2[0][0]);
|
||||
dst->setSkewX( fPost2x2[0][1]);
|
||||
@ -699,14 +699,14 @@ void SkScalerContext::Rec::getMatrixFrom2x2(SkMatrix* dst) const {
|
||||
dst->setScaleY(fPost2x2[1][1]);
|
||||
}
|
||||
|
||||
void SkScalerContext::Rec::getLocalMatrix(SkMatrix* m) const {
|
||||
void SkScalerContextRec::getLocalMatrix(SkMatrix* m) const {
|
||||
m->setScale(SkScalarMul(fTextSize, fPreScaleX), fTextSize);
|
||||
if (fPreSkewX) {
|
||||
m->postSkew(fPreSkewX, 0);
|
||||
}
|
||||
}
|
||||
|
||||
void SkScalerContext::Rec::getSingleMatrix(SkMatrix* m) const {
|
||||
void SkScalerContextRec::getSingleMatrix(SkMatrix* m) const {
|
||||
this->getLocalMatrix(m);
|
||||
|
||||
// now concat the device matrix
|
||||
|
Loading…
Reference in New Issue
Block a user