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

Side by Side Diff: src/ports/SkFontHost_win_dw.cpp

Issue 309503002: Put DirectWrite bitmap fix behind the SK_IGNORE_DWRITE_BITMAP_FIX flag. (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Created 6 years, 6 months 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2011 Google Inc. 2 * Copyright 2011 Google Inc.
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 #include "SkTypes.h" 8 #include "SkTypes.h"
9 #undef GetGlyphIndices 9 #undef GetGlyphIndices
10 10
(...skipping 723 matching lines...) Expand 10 before | Expand all | Expand 10 after
734 734
735 // GA is the matrix A with rotation removed. 735 // GA is the matrix A with rotation removed.
736 SkMatrix GA(G); 736 SkMatrix GA(G);
737 GA.preConcat(A); 737 GA.preConcat(A);
738 738
739 // realTextSize is the actual device size we want (as opposed to the size th e user requested). 739 // realTextSize is the actual device size we want (as opposed to the size th e user requested).
740 // gdiTextSize is the size we request when GDI compatible. 740 // gdiTextSize is the size we request when GDI compatible.
741 // If the scale is negative, this means the matrix will do the flip anyway. 741 // If the scale is negative, this means the matrix will do the flip anyway.
742 SkScalar realTextSize = SkScalarAbs(GA.get(SkMatrix::kMScaleY)); 742 SkScalar realTextSize = SkScalarAbs(GA.get(SkMatrix::kMScaleY));
743 // Due to floating point math, the lower bits are suspect. Round carefully. 743 // Due to floating point math, the lower bits are suspect. Round carefully.
744 #ifdef SK_IGNORE_DWRITE_BITMAP_FIX
745 SkScalar roundedTextSize = SkScalarRoundToScalar(realTextSize * 64.0f) / 64. 0f;
746 SkScalar gdiTextSize = SkScalarFloorToScalar(roundedTextSize);
747 #else
744 SkScalar gdiTextSize = SkScalarRoundToScalar(realTextSize * 64.0f) / 64.0f; 748 SkScalar gdiTextSize = SkScalarRoundToScalar(realTextSize * 64.0f) / 64.0f;
749 #endif
745 if (gdiTextSize == 0) { 750 if (gdiTextSize == 0) {
746 gdiTextSize = SK_Scalar1; 751 gdiTextSize = SK_Scalar1;
747 } 752 }
748 753
754 #ifdef SK_IGNORE_DWRITE_BITMAP_FIX
755 bool hasBitmap = fRec.fFlags & SkScalerContext::kEmbeddedBitmapText_Flag &&
756 hasBitmapStrike(typeface, SkScalarTruncToInt(gdiTextSize));
757 bool axisAligned = isAxisAligned(fRec);
758 bool isBiLevel = SkMask::kBW_Format == fRec.fMaskFormat || (hasBitmap && axi sAligned);
759
760 if (isBiLevel) {
761 #else
749 bool bitmapRequested = SkToBool(fRec.fFlags & SkScalerContext::kEmbeddedBitm apText_Flag); 762 bool bitmapRequested = SkToBool(fRec.fFlags & SkScalerContext::kEmbeddedBitm apText_Flag);
750 bool hasBitmap = false; 763 bool hasBitmap = false;
751 bool axisAlignedBitmap = false; 764 bool axisAlignedBitmap = false;
752 if (bitmapRequested) { 765 if (bitmapRequested) {
753 hasBitmap = hasBitmapStrike(typeface, SkScalarTruncToInt(gdiTextSize)); 766 hasBitmap = hasBitmapStrike(typeface, SkScalarTruncToInt(gdiTextSize));
754 axisAlignedBitmap = isAxisAligned(fRec); 767 axisAlignedBitmap = isAxisAligned(fRec);
755 } 768 }
756 769
757 // If the user requested aliased, do so with aliased compatible metrics. 770 // If the user requested aliased, do so with aliased compatible metrics.
758 if (SkMask::kBW_Format == fRec.fMaskFormat) { 771 if (SkMask::kBW_Format == fRec.fMaskFormat) {
772 #endif
759 fTextSizeRender = gdiTextSize; 773 fTextSizeRender = gdiTextSize;
760 fRenderingMode = DWRITE_RENDERING_MODE_ALIASED; 774 fRenderingMode = DWRITE_RENDERING_MODE_ALIASED;
761 fTextureType = DWRITE_TEXTURE_ALIASED_1x1; 775 fTextureType = DWRITE_TEXTURE_ALIASED_1x1;
762 fTextSizeMeasure = gdiTextSize; 776 fTextSizeMeasure = gdiTextSize;
763 fMeasuringMode = DWRITE_MEASURING_MODE_GDI_CLASSIC; 777 fMeasuringMode = DWRITE_MEASURING_MODE_GDI_CLASSIC;
764 778 #ifndef SK_IGNORE_DWRITE_BITMAP_FIX
765 // If we can use a bitmap, use gdi classic rendering and measurement. 779 // If we can use a bitmap, use gdi classic rendering and measurement.
766 // This will not always provide a bitmap, but matches expected behavior. 780 // This will not always provide a bitmap, but matches expected behavior.
767 } else if (hasBitmap && axisAlignedBitmap) { 781 } else if (hasBitmap && axisAlignedBitmap) {
768 fTextSizeRender = gdiTextSize; 782 fTextSizeRender = gdiTextSize;
769 fRenderingMode = DWRITE_RENDERING_MODE_CLEARTYPE_GDI_CLASSIC; 783 fRenderingMode = DWRITE_RENDERING_MODE_CLEARTYPE_GDI_CLASSIC;
770 fTextureType = DWRITE_TEXTURE_CLEARTYPE_3x1; 784 fTextureType = DWRITE_TEXTURE_CLEARTYPE_3x1;
771 fTextSizeMeasure = gdiTextSize; 785 fTextSizeMeasure = gdiTextSize;
772 fMeasuringMode = DWRITE_MEASURING_MODE_GDI_CLASSIC; 786 fMeasuringMode = DWRITE_MEASURING_MODE_GDI_CLASSIC;
773 787 #endif
774 // If rotated but the horizontal text could have used a bitmap, 788 // If rotated but the horizontal text could have used a bitmap,
775 // render high quality rotated glyphs but measure using bitmap metrics. 789 // render high quality rotated glyphs but measure using bitmap metrics.
776 } else if (hasBitmap) { 790 } else if (hasBitmap) {
777 fTextSizeRender = gdiTextSize; 791 fTextSizeRender = gdiTextSize;
778 fRenderingMode = DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL_SYMMETRIC; 792 fRenderingMode = DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL_SYMMETRIC;
779 fTextureType = DWRITE_TEXTURE_CLEARTYPE_3x1; 793 fTextureType = DWRITE_TEXTURE_CLEARTYPE_3x1;
780 fTextSizeMeasure = gdiTextSize; 794 fTextSizeMeasure = gdiTextSize;
781 fMeasuringMode = DWRITE_MEASURING_MODE_GDI_CLASSIC; 795 fMeasuringMode = DWRITE_MEASURING_MODE_GDI_CLASSIC;
782 796
783 // The normal case is to use natural symmetric rendering and linear metrics. 797 // The normal case is to use natural symmetric rendering and linear metrics.
(...skipping 1235 matching lines...) Expand 10 before | Expand all | Expand 10 after
2019 } 2033 }
2020 2034
2021 #include "SkFontMgr_indirect.h" 2035 #include "SkFontMgr_indirect.h"
2022 SkFontMgr* SkFontMgr_New_DirectWriteRenderer(SkRemotableFontMgr* proxy) { 2036 SkFontMgr* SkFontMgr_New_DirectWriteRenderer(SkRemotableFontMgr* proxy) {
2023 SkAutoTUnref<SkFontMgr> impl(SkFontMgr_New_DirectWrite()); 2037 SkAutoTUnref<SkFontMgr> impl(SkFontMgr_New_DirectWrite());
2024 if (impl.get() == NULL) { 2038 if (impl.get() == NULL) {
2025 return NULL; 2039 return NULL;
2026 } 2040 }
2027 return SkNEW_ARGS(SkFontMgr_Indirect, (impl.get(), proxy)); 2041 return SkNEW_ARGS(SkFontMgr_Indirect, (impl.get(), proxy));
2028 } 2042 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698