Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(917)

Unified Diff: src/ports/SkFontHost_FreeType.cpp

Issue 748883005: Factor text size device mapping in SkScalerContext. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Add comments, clarify names. Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/ports/SkFontHost_FreeType.cpp
diff --git a/src/ports/SkFontHost_FreeType.cpp b/src/ports/SkFontHost_FreeType.cpp
index d5b79855281cb05ee5edda36fc9ba75d3e2c5d08..94af9ec28515440fe417426691ec33fc486b6b8f 100644
--- a/src/ports/SkFontHost_FreeType.cpp
+++ b/src/ports/SkFontHost_FreeType.cpp
@@ -817,56 +817,12 @@ SkScalerContext_FreeType::SkScalerContext_FreeType(SkTypeface* typeface,
}
fFace = fFaceRec->fFace;
- // A is the total matrix.
- SkMatrix A;
- fRec.getSingleMatrix(&A);
-
- SkScalar sx = A.getScaleX();
- SkScalar sy = A.getScaleY();
- fMatrix22Scalar.reset();
-
- // In GDI, the hinter is aware of the current transformation
- // (the transform is in some sense applied before/with the hinting).
- // The bytecode can then test if it is rotated or stretched and decide
- // to apply instructions or not.
- //
- // FreeType, however, always does the transformation strictly after hinting.
- // It just sets 'rotated' and 'stretched' to false and only applies the
- // size before hinting.
- //
- // Also, FreeType respects the head::flags::IntegerScaling flag,
- // (although this is patched out on most major distros)
- // so it is critical to get the size correct on the request.
- //
- // This also gets us the actual closest size on bitmap fonts as well.
- if (A.getSkewX() || A.getSkewY() || sx < 0 || sy < 0) {
- // h is where A maps the horizontal baseline.
- SkPoint h = SkPoint::Make(SK_Scalar1, 0);
- A.mapPoints(&h, 1);
-
- // G is the Givens Matrix for A (rotational matrix where GA[0][1] == 0).
- SkMatrix G;
- SkComputeGivensRotation(h, &G);
-
- // GA is the matrix A with rotation removed.
- SkMatrix GA(G);
- GA.preConcat(A);
-
- sx = SkScalarAbs(GA.get(SkMatrix::kMScaleX));
- sy = SkScalarAbs(GA.get(SkMatrix::kMScaleY));
-
- // sA is the total matrix A without the text scale.
- SkMatrix sA(A);
- sA.preScale(SkScalarInvert(sx), SkScalarInvert(sy)); //remove text size
-
- fMatrix22Scalar.setScaleX(sA.getScaleX());
- fMatrix22Scalar.setSkewX(-sA.getSkewX());
- fMatrix22Scalar.setSkewY(-sA.getSkewY());
- fMatrix22Scalar.setScaleY(sA.getScaleY());
- }
- fScale.set(sx, sy);
- fScaleX = SkScalarToFixed(sx);
- fScaleY = SkScalarToFixed(sy);
+ fRec.computeMatrices(SkScalerContextRec::kFull_PreMatrixScale, &fScale, &fMatrix22Scalar);
+ fMatrix22Scalar.setSkewX(-fMatrix22Scalar.getSkewX());
+ fMatrix22Scalar.setSkewY(-fMatrix22Scalar.getSkewY());
+
+ fScaleX = SkScalarToFixed(fScale.fX);
+ fScaleY = SkScalarToFixed(fScale.fY);
fMatrix22.xx = SkScalarToFixed(fMatrix22Scalar.getScaleX());
fMatrix22.xy = SkScalarToFixed(fMatrix22Scalar.getSkewX());
fMatrix22.yx = SkScalarToFixed(fMatrix22Scalar.getSkewY());

Powered by Google App Engine
This is Rietveld 408576698