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

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

Issue 17502006: Add maxCharWidth and a compile flag to use old metrics (needed by Blink). (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Created 7 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 | « include/core/SkPaint.h ('k') | 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 /* 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"
(...skipping 821 matching lines...) Expand 10 before | Expand all | Expand 10 after
832 832
833 if (mx) { 833 if (mx) {
834 sk_bzero(mx, sizeof(*mx)); 834 sk_bzero(mx, sizeof(*mx));
835 } 835 }
836 if (my) { 836 if (my) {
837 sk_bzero(my, sizeof(*my)); 837 sk_bzero(my, sizeof(*my));
838 } 838 }
839 839
840 SkASSERT(fDDC); 840 SkASSERT(fDDC);
841 841
842 #ifndef SK_GDI_ALWAYS_USE_TEXTMETRICS_FOR_FONT_METRICS
842 if (fType == SkScalerContext_Windows::kBitmap_Type) { 843 if (fType == SkScalerContext_Windows::kBitmap_Type) {
844 #endif
843 if (mx) { 845 if (mx) {
844 mx->fTop = SkIntToScalar(-fTM.tmAscent); 846 mx->fTop = SkIntToScalar(-fTM.tmAscent);
845 mx->fAscent = SkIntToScalar(-fTM.tmAscent); 847 mx->fAscent = SkIntToScalar(-fTM.tmAscent);
846 mx->fDescent = -SkIntToScalar(fTM.tmDescent); 848 mx->fDescent = -SkIntToScalar(fTM.tmDescent);
847 mx->fBottom = SkIntToScalar(fTM.tmDescent); 849 mx->fBottom = SkIntToScalar(fTM.tmDescent);
848 mx->fLeading = SkIntToScalar(fTM.tmExternalLeading); 850 mx->fLeading = SkIntToScalar(fTM.tmExternalLeading);
849 } 851 }
850 852
851 if (my) { 853 if (my) {
852 my->fTop = SkIntToScalar(-fTM.tmAscent); 854 my->fTop = SkIntToScalar(-fTM.tmAscent);
853 my->fAscent = SkIntToScalar(-fTM.tmAscent); 855 my->fAscent = SkIntToScalar(-fTM.tmAscent);
854 my->fDescent = SkIntToScalar(-fTM.tmDescent); 856 my->fDescent = SkIntToScalar(-fTM.tmDescent);
855 my->fBottom = SkIntToScalar(fTM.tmDescent); 857 my->fBottom = SkIntToScalar(fTM.tmDescent);
856 my->fLeading = SkIntToScalar(fTM.tmExternalLeading); 858 my->fLeading = SkIntToScalar(fTM.tmExternalLeading);
857 my->fAvgCharWidth = SkIntToScalar(fTM.tmAveCharWidth); 859 my->fAvgCharWidth = SkIntToScalar(fTM.tmAveCharWidth);
860 my->fMaxCharWidth = SkIntToScalar(fTM.tmMaxCharWidth);
861 my->fXMin = 0;
862 my->fXMax = my->fMaxCharWidth;
863 //my->fXHeight = 0;
858 } 864 }
865 #ifndef SK_GDI_ALWAYS_USE_TEXTMETRICS_FOR_FONT_METRICS
859 return; 866 return;
860 } 867 }
868 #endif
861 869
862 OUTLINETEXTMETRIC otm; 870 OUTLINETEXTMETRIC otm;
863 871
864 uint32_t ret = GetOutlineTextMetrics(fDDC, sizeof(otm), &otm); 872 uint32_t ret = GetOutlineTextMetrics(fDDC, sizeof(otm), &otm);
865 if (GDI_ERROR == ret) { 873 if (GDI_ERROR == ret) {
866 LogFontTypeface::EnsureAccessible(this->getTypeface()); 874 LogFontTypeface::EnsureAccessible(this->getTypeface());
867 ret = GetOutlineTextMetrics(fDDC, sizeof(otm), &otm); 875 ret = GetOutlineTextMetrics(fDDC, sizeof(otm), &otm);
868 } 876 }
869 if (sizeof(otm) != ret) { 877 if (sizeof(otm) != ret) {
870 return; 878 return;
871 } 879 }
872 880
873 if (mx) { 881 if (mx) {
874 mx->fTop = -fScale * otm.otmrcFontBox.left; 882 mx->fTop = -fScale * otm.otmrcFontBox.left;
875 mx->fAscent = -fScale * otm.otmAscent; 883 mx->fAscent = -fScale * otm.otmAscent;
876 mx->fDescent = -fScale * otm.otmDescent; 884 mx->fDescent = -fScale * otm.otmDescent;
877 mx->fBottom = fScale * otm.otmrcFontBox.right; 885 mx->fBottom = fScale * otm.otmrcFontBox.right;
878 mx->fLeading = fScale * otm.otmLineGap; 886 mx->fLeading = fScale * otm.otmLineGap;
879 } 887 }
880 888
881 if (my) { 889 if (my) {
890 #ifndef SK_GDI_ALWAYS_USE_TEXTMETRICS_FOR_FONT_METRICS
882 my->fTop = -fScale * otm.otmrcFontBox.top; 891 my->fTop = -fScale * otm.otmrcFontBox.top;
883 my->fAscent = -fScale * otm.otmAscent; 892 my->fAscent = -fScale * otm.otmAscent;
884 my->fDescent = -fScale * otm.otmDescent; 893 my->fDescent = -fScale * otm.otmDescent;
885 my->fBottom = -fScale * otm.otmrcFontBox.bottom; 894 my->fBottom = -fScale * otm.otmrcFontBox.bottom;
886 my->fLeading = fScale * otm.otmLineGap; 895 my->fLeading = fScale * otm.otmLineGap;
887 my->fAvgCharWidth = fScale * otm.otmTextMetrics.tmAveCharWidth; 896 my->fAvgCharWidth = fScale * otm.otmTextMetrics.tmAveCharWidth;
897 my->fMaxCharWidth = fScale * otm.otmTextMetrics.tmMaxCharWidth;
898 my->fXMin = fScale * otm.otmrcFontBox.left;
899 my->fXMax = fScale * otm.otmrcFontBox.right;
900 #endif
888 my->fXHeight = fScale * otm.otmsXHeight; 901 my->fXHeight = fScale * otm.otmsXHeight;
889 } 902 }
890 } 903 }
891 904
892 //////////////////////////////////////////////////////////////////////////////// //////// 905 //////////////////////////////////////////////////////////////////////////////// ////////
893 906
894 static void build_power_table(uint8_t table[], float ee) { 907 static void build_power_table(uint8_t table[], float ee) {
895 for (int i = 0; i < 256; i++) { 908 for (int i = 0; i < 256; i++) {
896 float x = i / 255.f; 909 float x = i / 255.f;
897 x = sk_float_pow(x, ee); 910 x = sk_float_pow(x, ee);
(...skipping 1005 matching lines...) Expand 10 before | Expand all | Expand 10 after
1903 return this->createFromStream(stream); 1916 return this->createFromStream(stream);
1904 } 1917 }
1905 1918
1906 private: 1919 private:
1907 SkTDArray<ENUMLOGFONTEX> fLogFontArray; 1920 SkTDArray<ENUMLOGFONTEX> fLogFontArray;
1908 }; 1921 };
1909 1922
1910 SkFontMgr* SkFontMgr::Factory() { 1923 SkFontMgr* SkFontMgr::Factory() {
1911 return SkNEW(SkFontMgrGDI); 1924 return SkNEW(SkFontMgrGDI);
1912 } 1925 }
OLDNEW
« no previous file with comments | « include/core/SkPaint.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698