| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2006 The Android Open Source Project | 3 * Copyright 2006 The Android Open Source Project |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 #include "SkAdvancedTypefaceMetrics.h" | 9 #include "SkAdvancedTypefaceMetrics.h" |
| 10 #include "SkBase64.h" | 10 #include "SkBase64.h" |
| 11 #include "SkColorPriv.h" | 11 #include "SkColorPriv.h" |
| 12 #include "SkData.h" | 12 #include "SkData.h" |
| 13 #include "SkDescriptor.h" | 13 #include "SkDescriptor.h" |
| 14 #include "SkFontDescriptor.h" | 14 #include "SkFontDescriptor.h" |
| 15 #include "SkFontHost.h" | 15 #include "SkFontHost.h" |
| 16 #include "SkGlyph.h" | 16 #include "SkGlyph.h" |
| 17 #include "SkHRESULT.h" | 17 #include "SkHRESULT.h" |
| 18 #include "SkMaskGamma.h" | 18 #include "SkMaskGamma.h" |
| 19 #include "SkMatrix22.h" |
| 19 #include "SkOTTable_maxp.h" | 20 #include "SkOTTable_maxp.h" |
| 20 #include "SkOTTable_name.h" | 21 #include "SkOTTable_name.h" |
| 21 #include "SkOTUtils.h" | 22 #include "SkOTUtils.h" |
| 22 #include "SkPath.h" | 23 #include "SkPath.h" |
| 23 #include "SkSFNTHeader.h" | 24 #include "SkSFNTHeader.h" |
| 24 #include "SkStream.h" | 25 #include "SkStream.h" |
| 25 #include "SkString.h" | 26 #include "SkString.h" |
| 26 #include "SkTemplates.h" | 27 #include "SkTemplates.h" |
| 27 #include "SkThread.h" | 28 #include "SkThread.h" |
| 28 #include "SkTypeface_win.h" | 29 #include "SkTypeface_win.h" |
| (...skipping 600 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 629 } | 630 } |
| 630 SetGraphicsMode(fDDC, GM_ADVANCED); | 631 SetGraphicsMode(fDDC, GM_ADVANCED); |
| 631 SetBkMode(fDDC, TRANSPARENT); | 632 SetBkMode(fDDC, TRANSPARENT); |
| 632 | 633 |
| 633 SkPoint h = SkPoint::Make(SK_Scalar1, 0); | 634 SkPoint h = SkPoint::Make(SK_Scalar1, 0); |
| 634 // A is the total matrix. | 635 // A is the total matrix. |
| 635 SkMatrix A; | 636 SkMatrix A; |
| 636 fRec.getSingleMatrix(&A); | 637 fRec.getSingleMatrix(&A); |
| 637 A.mapPoints(&h, 1); | 638 A.mapPoints(&h, 1); |
| 638 | 639 |
| 639 // Find the Given's matrix [[c, -s],[s, c]] which rotates the baseline vecto
r h | 640 // G is the Givens Matrix for A (rotational matrix where GA[0][1] == 0). |
| 640 // (where the baseline is mapped to) to the positive horizontal axis. | |
| 641 const SkScalar& a = h.fX; | |
| 642 const SkScalar& b = h.fY; | |
| 643 SkScalar c, s; | |
| 644 if (0 == b) { | |
| 645 c = SkDoubleToScalar(_copysign(SK_Scalar1, a)); | |
| 646 s = 0; | |
| 647 } else if (0 == a) { | |
| 648 c = 0; | |
| 649 s = SkDoubleToScalar(-_copysign(SK_Scalar1, b)); | |
| 650 } else if (SkScalarAbs(b) > SkScalarAbs(a)) { | |
| 651 SkScalar t = a / b; | |
| 652 SkScalar u = SkDoubleToScalar(_copysign(SkScalarSqrt(SK_Scalar1 + t*t),
b)); | |
| 653 s = -1 / u; | |
| 654 c = -s * t; | |
| 655 } else { | |
| 656 SkScalar t = b / a; | |
| 657 SkScalar u = SkDoubleToScalar(_copysign(SkScalarSqrt(SK_Scalar1 + t*t),
a)); | |
| 658 c = 1 / u; | |
| 659 s = -c * t; | |
| 660 } | |
| 661 | |
| 662 // G is the Given's Matrix for A (rotational matrix such that GA[0][1] == 0)
. | |
| 663 SkMatrix G; | 641 SkMatrix G; |
| 664 G.setAll(c, -s, 0, | 642 SkComputeGivensRotation(h, &G); |
| 665 s, c, 0, | |
| 666 0, 0, SkScalarToPersp(SK_Scalar1)); | |
| 667 | 643 |
| 668 // GA is the matrix A with rotation removed. | 644 // GA is the matrix A with rotation removed. |
| 669 SkMatrix GA(G); | 645 SkMatrix GA(G); |
| 670 GA.preConcat(A); | 646 GA.preConcat(A); |
| 671 | 647 |
| 672 // realTextSize is the actual device size we want (as opposed to the size th
e user requested). | 648 // realTextSize is the actual device size we want (as opposed to the size th
e user requested). |
| 673 // gdiTextSide is the size we request from GDI. | 649 // gdiTextSide is the size we request from GDI. |
| 674 // If the scale is negative, this means the matrix will do the flip anyway. | 650 // If the scale is negative, this means the matrix will do the flip anyway. |
| 675 SkScalar realTextSize = SkScalarAbs(GA.get(SkMatrix::kMScaleY)); | 651 SkScalar realTextSize = SkScalarAbs(GA.get(SkMatrix::kMScaleY)); |
| 676 SkScalar gdiTextSize = SkScalarRoundToScalar(realTextSize); | 652 SkScalar gdiTextSize = SkScalarRoundToScalar(realTextSize); |
| (...skipping 1962 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2639 | 2615 |
| 2640 private: | 2616 private: |
| 2641 SkTDArray<ENUMLOGFONTEX> fLogFontArray; | 2617 SkTDArray<ENUMLOGFONTEX> fLogFontArray; |
| 2642 }; | 2618 }; |
| 2643 | 2619 |
| 2644 /////////////////////////////////////////////////////////////////////////////// | 2620 /////////////////////////////////////////////////////////////////////////////// |
| 2645 | 2621 |
| 2646 SkFontMgr* SkFontMgr_New_GDI() { | 2622 SkFontMgr* SkFontMgr_New_GDI() { |
| 2647 return SkNEW(SkFontMgrGDI); | 2623 return SkNEW(SkFontMgrGDI); |
| 2648 } | 2624 } |
| OLD | NEW |