| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2006 The Android Open Source Project | 2 * Copyright 2006 The Android Open Source Project |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 | 8 |
| 9 #include "SkScalerContext.h" | 9 #include "SkScalerContext.h" |
| 10 #include "SkAutoPixmapStorage.h" | 10 #include "SkAutoPixmapStorage.h" |
| (...skipping 669 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 680 | 680 |
| 681 void SkScalerContextRec::getSingleMatrix(SkMatrix* m) const { | 681 void SkScalerContextRec::getSingleMatrix(SkMatrix* m) const { |
| 682 this->getLocalMatrix(m); | 682 this->getLocalMatrix(m); |
| 683 | 683 |
| 684 // now concat the device matrix | 684 // now concat the device matrix |
| 685 SkMatrix deviceMatrix; | 685 SkMatrix deviceMatrix; |
| 686 this->getMatrixFrom2x2(&deviceMatrix); | 686 this->getMatrixFrom2x2(&deviceMatrix); |
| 687 m->postConcat(deviceMatrix); | 687 m->postConcat(deviceMatrix); |
| 688 } | 688 } |
| 689 | 689 |
| 690 void SkScalerContextRec::computeMatrices(PreMatrixScale preMatrixScale, SkVector
* s, SkMatrix* sA, | 690 bool SkScalerContextRec::computeMatrices(PreMatrixScale preMatrixScale, SkVector
* s, SkMatrix* sA, |
| 691 SkMatrix* GsA, SkMatrix* G_inv, SkMatri
x* A_out) | 691 SkMatrix* GsA, SkMatrix* G_inv, SkMatri
x* A_out) |
| 692 { | 692 { |
| 693 // A is the 'total' matrix. | 693 // A is the 'total' matrix. |
| 694 SkMatrix A; | 694 SkMatrix A; |
| 695 this->getSingleMatrix(&A); | 695 this->getSingleMatrix(&A); |
| 696 | 696 |
| 697 // The caller may find the 'total' matrix useful when dealing directly with
EM sizes. | 697 // The caller may find the 'total' matrix useful when dealing directly with
EM sizes. |
| 698 if (A_out) { | 698 if (A_out) { |
| 699 *A_out = A; | 699 *A_out = A; |
| 700 } | 700 } |
| (...skipping 15 matching lines...) Expand all Loading... |
| 716 { | 716 { |
| 717 s->fX = SK_Scalar1; | 717 s->fX = SK_Scalar1; |
| 718 s->fY = SK_Scalar1; | 718 s->fY = SK_Scalar1; |
| 719 sA->setScale(0, 0); | 719 sA->setScale(0, 0); |
| 720 if (GsA) { | 720 if (GsA) { |
| 721 GsA->setScale(0, 0); | 721 GsA->setScale(0, 0); |
| 722 } | 722 } |
| 723 if (G_inv) { | 723 if (G_inv) { |
| 724 G_inv->reset(); | 724 G_inv->reset(); |
| 725 } | 725 } |
| 726 return; | 726 return false; |
| 727 } | 727 } |
| 728 | 728 |
| 729 // GA is the matrix A with rotation removed. | 729 // GA is the matrix A with rotation removed. |
| 730 SkMatrix GA; | 730 SkMatrix GA; |
| 731 bool skewedOrFlipped = A.getSkewX() || A.getSkewY() || A.getScaleX() < 0 ||
A.getScaleY() < 0; | 731 bool skewedOrFlipped = A.getSkewX() || A.getSkewY() || A.getScaleX() < 0 ||
A.getScaleY() < 0; |
| 732 if (skewedOrFlipped) { | 732 if (skewedOrFlipped) { |
| 733 // h is where A maps the horizontal baseline. | 733 // h is where A maps the horizontal baseline. |
| 734 SkPoint h = SkPoint::Make(SK_Scalar1, 0); | 734 SkPoint h = SkPoint::Make(SK_Scalar1, 0); |
| 735 A.mapPoints(&h, 1); | 735 A.mapPoints(&h, 1); |
| 736 | 736 |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 796 *sA = A; | 796 *sA = A; |
| 797 sA->preScale(SkScalarInvert(s->fX), SkScalarInvert(s->fY)); | 797 sA->preScale(SkScalarInvert(s->fX), SkScalarInvert(s->fY)); |
| 798 } | 798 } |
| 799 | 799 |
| 800 // The 'remainingWithoutRotation' matrix GsA is the non-rotational part of A
without the scale. | 800 // The 'remainingWithoutRotation' matrix GsA is the non-rotational part of A
without the scale. |
| 801 if (GsA) { | 801 if (GsA) { |
| 802 *GsA = GA; | 802 *GsA = GA; |
| 803 // G is rotational so reorders with the scale. | 803 // G is rotational so reorders with the scale. |
| 804 GsA->preScale(SkScalarInvert(s->fX), SkScalarInvert(s->fY)); | 804 GsA->preScale(SkScalarInvert(s->fX), SkScalarInvert(s->fY)); |
| 805 } | 805 } |
| 806 |
| 807 return true; |
| 806 } | 808 } |
| 807 | 809 |
| 808 SkAxisAlignment SkScalerContext::computeAxisAlignmentForHText() { | 810 SkAxisAlignment SkScalerContext::computeAxisAlignmentForHText() { |
| 809 // Why fPost2x2 can be used here. | 811 // Why fPost2x2 can be used here. |
| 810 // getSingleMatrix multiplies in getLocalMatrix, which consists of | 812 // getSingleMatrix multiplies in getLocalMatrix, which consists of |
| 811 // * fTextSize (a scale, which has no effect) | 813 // * fTextSize (a scale, which has no effect) |
| 812 // * fPreScaleX (a scale in x, which has no effect) | 814 // * fPreScaleX (a scale in x, which has no effect) |
| 813 // * fPreSkewX (has no effect, but would on vertical text alignment). | 815 // * fPreSkewX (has no effect, but would on vertical text alignment). |
| 814 // In other words, making the text bigger, stretching it along the | 816 // In other words, making the text bigger, stretching it along the |
| 815 // horizontal axis, or fake italicizing it does not move the baseline. | 817 // horizontal axis, or fake italicizing it does not move the baseline. |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 860 SkScalerContext* SkTypeface::createScalerContext(const SkScalerContextEffects& e
ffects, | 862 SkScalerContext* SkTypeface::createScalerContext(const SkScalerContextEffects& e
ffects, |
| 861 const SkDescriptor* desc, | 863 const SkDescriptor* desc, |
| 862 bool allowFailure) const { | 864 bool allowFailure) const { |
| 863 SkScalerContext* c = this->onCreateScalerContext(effects, desc); | 865 SkScalerContext* c = this->onCreateScalerContext(effects, desc); |
| 864 | 866 |
| 865 if (!c && !allowFailure) { | 867 if (!c && !allowFailure) { |
| 866 c = new SkScalerContext_Empty(const_cast<SkTypeface*>(this), effects, de
sc); | 868 c = new SkScalerContext_Empty(const_cast<SkTypeface*>(this), effects, de
sc); |
| 867 } | 869 } |
| 868 return c; | 870 return c; |
| 869 } | 871 } |
| OLD | NEW |