diff options
author | 2016-03-24 19:07:58 -0700 | |
---|---|---|
committer | 2016-03-24 19:07:58 -0700 | |
commit | 6b3eacb0dfaeb3374d410c8c041bd39cd066e1ea (patch) | |
tree | 1d113c36bd0c2d0921570823ca665bbef484aaac /src/ports | |
parent | c429baf7a28205a19975cfbb60db1b7bfc9c61fa (diff) |
Change type of SkGlyph::fAdvance[XY] to float.
BUG=skia:4632
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1737693006
Review URL: https://codereview.chromium.org/1737693006
Diffstat (limited to 'src/ports')
-rw-r--r-- | src/ports/SkFontHost_FreeType.cpp | 33 | ||||
-rw-r--r-- | src/ports/SkFontHost_mac.cpp | 15 | ||||
-rw-r--r-- | src/ports/SkFontHost_win.cpp | 23 | ||||
-rw-r--r-- | src/ports/SkScalerContext_win_dw.cpp | 4 |
4 files changed, 48 insertions, 27 deletions
diff --git a/src/ports/SkFontHost_FreeType.cpp b/src/ports/SkFontHost_FreeType.cpp index e7cb6d2963..5c00d1b697 100644 --- a/src/ports/SkFontHost_FreeType.cpp +++ b/src/ports/SkFontHost_FreeType.cpp @@ -1006,6 +1006,10 @@ SkUnichar SkScalerContext_FreeType::generateGlyphToChar(uint16_t glyph) { return 0; } +static SkScalar SkFT_FixedToScalar(FT_Fixed x) { + return SkFixedToScalar(x); +} + void SkScalerContext_FreeType::generateAdvance(SkGlyph* glyph) { /* unhinted and light hinted text have linearly scaled advances * which are very cheap to compute with some font formats... @@ -1027,8 +1031,9 @@ void SkScalerContext_FreeType::generateAdvance(SkGlyph* glyph) { if (0 == error) { glyph->fRsbDelta = 0; glyph->fLsbDelta = 0; - glyph->fAdvanceX = SkFixedMul(fMatrix22.xx, advance); - glyph->fAdvanceY = - SkFixedMul(fMatrix22.yx, advance); + const SkScalar advanceScalar = SkFT_FixedToScalar(advance); + glyph->fAdvanceX = SkScalarToFloat(fMatrix22Scalar.getScaleX() * advanceScalar); + glyph->fAdvanceY = -SkScalarToFloat(fMatrix22Scalar.getSkewY() * advanceScalar); return; } } @@ -1108,9 +1113,9 @@ inline void scaleGlyphMetrics(SkGlyph& glyph, SkScalar scale) { glyph.fTop *= scale; glyph.fLeft *= scale; - SkFixed fixedScale = SkScalarToFixed(scale); - glyph.fAdvanceX = SkFixedMul(glyph.fAdvanceX, fixedScale); - glyph.fAdvanceY = SkFixedMul(glyph.fAdvanceY, fixedScale); + float floatScale = SkScalarToFloat(scale); + glyph.fAdvanceX *= floatScale; + glyph.fAdvanceY *= floatScale; } void SkScalerContext_FreeType::generateMetrics(SkGlyph* glyph) { @@ -1181,19 +1186,21 @@ void SkScalerContext_FreeType::generateMetrics(SkGlyph* glyph) { if (fRec.fFlags & SkScalerContext::kVertical_Flag) { if (fDoLinearMetrics) { - glyph->fAdvanceX = -SkFixedMul(fMatrix22.xy, fFace->glyph->linearVertAdvance); - glyph->fAdvanceY = SkFixedMul(fMatrix22.yy, fFace->glyph->linearVertAdvance); + const SkScalar advanceScalar = SkFT_FixedToScalar(fFace->glyph->linearVertAdvance); + glyph->fAdvanceX = -SkScalarToFloat(fMatrix22Scalar.getSkewX() * advanceScalar); + glyph->fAdvanceY = SkScalarToFloat(fMatrix22Scalar.getScaleY() * advanceScalar); } else { - glyph->fAdvanceX = -SkFDot6ToFixed(fFace->glyph->advance.x); - glyph->fAdvanceY = SkFDot6ToFixed(fFace->glyph->advance.y); + glyph->fAdvanceX = -SkFDot6ToFloat(fFace->glyph->advance.x); + glyph->fAdvanceY = SkFDot6ToFloat(fFace->glyph->advance.y); } } else { if (fDoLinearMetrics) { - glyph->fAdvanceX = SkFixedMul(fMatrix22.xx, fFace->glyph->linearHoriAdvance); - glyph->fAdvanceY = -SkFixedMul(fMatrix22.yx, fFace->glyph->linearHoriAdvance); + const SkScalar advanceScalar = SkFT_FixedToScalar(fFace->glyph->linearHoriAdvance); + glyph->fAdvanceX = SkScalarToFloat(fMatrix22Scalar.getScaleX() * advanceScalar); + glyph->fAdvanceY = -SkScalarToFloat(fMatrix22Scalar.getSkewY() * advanceScalar); } else { - glyph->fAdvanceX = SkFDot6ToFixed(fFace->glyph->advance.x); - glyph->fAdvanceY = -SkFDot6ToFixed(fFace->glyph->advance.y); + glyph->fAdvanceX = SkFDot6ToFloat(fFace->glyph->advance.x); + glyph->fAdvanceY = -SkFDot6ToFloat(fFace->glyph->advance.y); if (fRec.fFlags & kDevKernText_Flag) { glyph->fRsbDelta = SkToS8(fFace->glyph->rsb_delta); diff --git a/src/ports/SkFontHost_mac.cpp b/src/ports/SkFontHost_mac.cpp index f47add0818..98eeaec09a 100644 --- a/src/ports/SkFontHost_mac.cpp +++ b/src/ports/SkFontHost_mac.cpp @@ -277,13 +277,22 @@ static CGFloat ScalarToCG(SkScalar scalar) { static SkScalar CGToScalar(CGFloat cgFloat) { if (sizeof(CGFloat) == sizeof(float)) { - return cgFloat; + return SkFloatToScalar(cgFloat); } else { SkASSERT(sizeof(CGFloat) == sizeof(double)); return SkDoubleToScalar(cgFloat); } } +static float CGToFloat(CGFloat cgFloat) { + if (sizeof(CGFloat) == sizeof(float)) { + return cgFloat; + } else { + SkASSERT(sizeof(CGFloat) == sizeof(double)); + return static_cast<float>(cgFloat); + } +} + static CGAffineTransform MatrixToCGAffineTransform(const SkMatrix& matrix, SkScalar sx = SK_Scalar1, SkScalar sy = SK_Scalar1) { @@ -1054,8 +1063,8 @@ void SkScalerContext_Mac::generateMetrics(SkGlyph* glyph) { &cgGlyph, &cgAdvance, 1); } cgAdvance = CGSizeApplyAffineTransform(cgAdvance, fTransform); - glyph->fAdvanceX = SkFloatToFixed_Check(cgAdvance.width); - glyph->fAdvanceY = -SkFloatToFixed_Check(cgAdvance.height); + glyph->fAdvanceX = CGToFloat(cgAdvance.width); + glyph->fAdvanceY = -CGToFloat(cgAdvance.height); // The following produces skBounds in SkGlyph units (pixels, y down), // or returns early if skBounds would be empty. diff --git a/src/ports/SkFontHost_win.cpp b/src/ports/SkFontHost_win.cpp index 8aefd1431a..f772d8c57e 100644 --- a/src/ports/SkFontHost_win.cpp +++ b/src/ports/SkFontHost_win.cpp @@ -584,6 +584,10 @@ static FIXED float2FIXED(float x) { return SkFixedToFIXED(SkFloatToFixed(x)); } +static inline float FIXED2float(FIXED x) { + return SkFixedToFloat(SkFIXEDToFixed(x)); +} + static BYTE compute_quality(const SkScalerContext::Rec& rec) { switch (rec.fMaskFormat) { case SkMask::kBW_Format: @@ -856,7 +860,7 @@ void SkScalerContext_GDI::generateMetrics(SkGlyph* glyph) { // Bitmap FON cannot underhang, but vector FON may. // There appears no means of determining underhang of vector FON. glyph->fLeft = SkToS16(0); - glyph->fAdvanceX = SkIntToFixed(glyph->fWidth); + glyph->fAdvanceX = glyph->fWidth; glyph->fAdvanceY = 0; // Vector FON will transform nicely, but bitmap FON do not. @@ -876,8 +880,8 @@ void SkScalerContext_GDI::generateMetrics(SkGlyph* glyph) { } // Apply matrix to advance. - glyph->fAdvanceY = SkFixedMul(-SkFIXEDToFixed(fMat22.eM12), glyph->fAdvanceX); - glyph->fAdvanceX = SkFixedMul(SkFIXEDToFixed(fMat22.eM11), glyph->fAdvanceX); + glyph->fAdvanceY = -FIXED2float(fMat22.eM12) * glyph->fAdvanceX; + glyph->fAdvanceX *= FIXED2float(fMat22.eM11); return; } @@ -922,8 +926,9 @@ void SkScalerContext_GDI::generateMetrics(SkGlyph* glyph) { glyph->fTop -= 2; glyph->fLeft -= 2; } - glyph->fAdvanceX = SkIntToFixed(gm.gmCellIncX); - glyph->fAdvanceY = SkIntToFixed(gm.gmCellIncY); + // TODO(benjaminwagner): What is the type of gm.gmCellInc[XY]? + glyph->fAdvanceX = (float)((int)gm.gmCellIncX); + glyph->fAdvanceY = (float)((int)gm.gmCellIncY); glyph->fRsbDelta = 0; glyph->fLsbDelta = 0; @@ -933,16 +938,16 @@ void SkScalerContext_GDI::generateMetrics(SkGlyph* glyph) { if (GDI_ERROR != status) { SkPoint advance; fHiResMatrix.mapXY(SkIntToScalar(gm.gmCellIncX), SkIntToScalar(gm.gmCellIncY), &advance); - glyph->fAdvanceX = SkScalarToFixed(advance.fX); - glyph->fAdvanceY = SkScalarToFixed(advance.fY); + glyph->fAdvanceX = SkScalarToFloat(advance.fX); + glyph->fAdvanceY = SkScalarToFloat(advance.fY); } } else if (!isAxisAligned(this->fRec)) { status = GetGlyphOutlineW(fDDC, glyphId, GGO_METRICS | GGO_GLYPH_INDEX, &gm, 0, nullptr, &fGsA); if (GDI_ERROR != status) { SkPoint advance; fG_inv.mapXY(SkIntToScalar(gm.gmCellIncX), SkIntToScalar(gm.gmCellIncY), &advance); - glyph->fAdvanceX = SkScalarToFixed(advance.fX); - glyph->fAdvanceY = SkScalarToFixed(advance.fY); + glyph->fAdvanceX = SkScalarToFloat(advance.fX); + glyph->fAdvanceY = SkScalarToFloat(advance.fY); } } } diff --git a/src/ports/SkScalerContext_win_dw.cpp b/src/ports/SkScalerContext_win_dw.cpp index 097db865e1..f276762bbf 100644 --- a/src/ports/SkScalerContext_win_dw.cpp +++ b/src/ports/SkScalerContext_win_dw.cpp @@ -388,8 +388,8 @@ void SkScalerContext_DW::generateAdvance(SkGlyph* glyph) { fSkXform.mapVectors(vecs, SK_ARRAY_COUNT(vecs)); } - glyph->fAdvanceX = SkScalarToFixed(vecs[0].fX); - glyph->fAdvanceY = SkScalarToFixed(vecs[0].fY); + glyph->fAdvanceX = SkScalarToFloat(vecs[0].fX); + glyph->fAdvanceY = SkScalarToFloat(vecs[0].fY); } HRESULT SkScalerContext_DW::getBoundingBox(SkGlyph* glyph, |