From 6fbafc0afa2f6489a74d62d96351744def4a822d Mon Sep 17 00:00:00 2001 From: Ben Wagner Date: Tue, 12 Jun 2018 17:52:29 -0400 Subject: Remove SkMulDiv. This removes the last use of SkMulDiv. This last use was in the conversion code for FontConfig widths and weights which is modified to use SkScaler instead of SkFixed. Change-Id: Ia20a2066cbc42e986c44fc573829edf86973846e Reviewed-on: https://skia-review.googlesource.com/134426 Reviewed-by: Hal Canary Commit-Queue: Ben Wagner --- src/ports/SkFontConfigInterface_direct.cpp | 127 ++++++++++++++--------------- src/ports/SkFontMgr_fontconfig.cpp | 127 ++++++++++++++--------------- 2 files changed, 118 insertions(+), 136 deletions(-) (limited to 'src/ports') diff --git a/src/ports/SkFontConfigInterface_direct.cpp b/src/ports/SkFontConfigInterface_direct.cpp index 875000daa5..56c8466e03 100644 --- a/src/ports/SkFontConfigInterface_direct.cpp +++ b/src/ports/SkFontConfigInterface_direct.cpp @@ -368,21 +368,21 @@ static int get_int(FcPattern* pattern, const char object[], int missing) { return value; } -static int map_range(SkFixed value, - SkFixed old_min, SkFixed old_max, - SkFixed new_min, SkFixed new_max) +static int map_range(SkScalar value, + SkScalar old_min, SkScalar old_max, + SkScalar new_min, SkScalar new_max) { SkASSERT(old_min < old_max); SkASSERT(new_min <= new_max); - return new_min + SkMulDiv(value - old_min, new_max - new_min, old_max - old_min); + return new_min + ((value - old_min) * (new_max - new_min) / (old_max - old_min)); } struct MapRanges { - SkFixed old_val; - SkFixed new_val; + SkScalar old_val; + SkScalar new_val; }; -static SkFixed map_ranges_fixed(SkFixed val, MapRanges const ranges[], int rangesCount) { +static SkScalar map_ranges(SkScalar val, MapRanges const ranges[], int rangesCount) { // -Inf to [0] if (val < ranges[0].old_val) { return ranges[0].new_val; @@ -401,15 +401,6 @@ static SkFixed map_ranges_fixed(SkFixed val, MapRanges const ranges[], int range return ranges[rangesCount-1].new_val; } -static int map_ranges(int val, MapRanges const ranges[], int rangesCount) { - return SkFixedRoundToInt(map_ranges_fixed(SkIntToFixed(val), ranges, rangesCount)); -} - -template struct SkTFixed { - static_assert(-32768 <= n && n <= 32767, "SkTFixed_n_not_in_range"); - static const SkFixed value = static_cast(n << 16); -}; - #ifndef FC_WEIGHT_DEMILIGHT #define FC_WEIGHT_DEMILIGHT 65 #endif @@ -417,36 +408,36 @@ template struct SkTFixed { static SkFontStyle skfontstyle_from_fcpattern(FcPattern* pattern) { typedef SkFontStyle SkFS; - static const MapRanges weightRanges[] = { - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed<350>::value }, - { SkTFixed::value, SkTFixed<380>::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, + static constexpr MapRanges weightRanges[] = { + { FC_WEIGHT_THIN, SkFS::kThin_Weight }, + { FC_WEIGHT_EXTRALIGHT, SkFS::kExtraLight_Weight }, + { FC_WEIGHT_LIGHT, SkFS::kLight_Weight }, + { FC_WEIGHT_DEMILIGHT, 350 }, + { FC_WEIGHT_BOOK, 380 }, + { FC_WEIGHT_REGULAR, SkFS::kNormal_Weight }, + { FC_WEIGHT_MEDIUM, SkFS::kMedium_Weight }, + { FC_WEIGHT_DEMIBOLD, SkFS::kSemiBold_Weight }, + { FC_WEIGHT_BOLD, SkFS::kBold_Weight }, + { FC_WEIGHT_EXTRABOLD, SkFS::kExtraBold_Weight }, + { FC_WEIGHT_BLACK, SkFS::kBlack_Weight }, + { FC_WEIGHT_EXTRABLACK, SkFS::kExtraBlack_Weight }, }; - int weight = map_ranges(get_int(pattern, FC_WEIGHT, FC_WEIGHT_REGULAR), - weightRanges, SK_ARRAY_COUNT(weightRanges)); - - static const MapRanges widthRanges[] = { - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, + SkScalar weight = map_ranges(get_int(pattern, FC_WEIGHT, FC_WEIGHT_REGULAR), + weightRanges, SK_ARRAY_COUNT(weightRanges)); + + static constexpr MapRanges widthRanges[] = { + { FC_WIDTH_ULTRACONDENSED, SkFS::kUltraCondensed_Width }, + { FC_WIDTH_EXTRACONDENSED, SkFS::kExtraCondensed_Width }, + { FC_WIDTH_CONDENSED, SkFS::kCondensed_Width }, + { FC_WIDTH_SEMICONDENSED, SkFS::kSemiCondensed_Width }, + { FC_WIDTH_NORMAL, SkFS::kNormal_Width }, + { FC_WIDTH_SEMIEXPANDED, SkFS::kSemiExpanded_Width }, + { FC_WIDTH_EXPANDED, SkFS::kExpanded_Width }, + { FC_WIDTH_EXTRAEXPANDED, SkFS::kExtraExpanded_Width }, + { FC_WIDTH_ULTRAEXPANDED, SkFS::kUltraExpanded_Width }, }; - int width = map_ranges(get_int(pattern, FC_WIDTH, FC_WIDTH_NORMAL), - widthRanges, SK_ARRAY_COUNT(widthRanges)); + SkScalar width = map_ranges(get_int(pattern, FC_WIDTH, FC_WIDTH_NORMAL), + widthRanges, SK_ARRAY_COUNT(widthRanges)); SkFS::Slant slant = SkFS::kUpright_Slant; switch (get_int(pattern, FC_SLANT, FC_SLANT_ROMAN)) { @@ -456,38 +447,38 @@ static SkFontStyle skfontstyle_from_fcpattern(FcPattern* pattern) { default: SkASSERT(false); break; } - return SkFontStyle(weight, width, slant); + return SkFontStyle(SkScalarRoundToInt(weight), SkScalarRoundToInt(width), slant); } static void fcpattern_from_skfontstyle(SkFontStyle style, FcPattern* pattern) { typedef SkFontStyle SkFS; - static const MapRanges weightRanges[] = { - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed<350>::value, SkTFixed::value }, - { SkTFixed<380>::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, + static constexpr MapRanges weightRanges[] = { + { SkFS::kThin_Weight, FC_WEIGHT_THIN }, + { SkFS::kExtraLight_Weight, FC_WEIGHT_EXTRALIGHT }, + { SkFS::kLight_Weight, FC_WEIGHT_LIGHT }, + { 350, FC_WEIGHT_DEMILIGHT }, + { 380, FC_WEIGHT_BOOK }, + { SkFS::kNormal_Weight, FC_WEIGHT_REGULAR }, + { SkFS::kMedium_Weight, FC_WEIGHT_MEDIUM }, + { SkFS::kSemiBold_Weight, FC_WEIGHT_DEMIBOLD }, + { SkFS::kBold_Weight, FC_WEIGHT_BOLD }, + { SkFS::kExtraBold_Weight, FC_WEIGHT_EXTRABOLD }, + { SkFS::kBlack_Weight, FC_WEIGHT_BLACK }, + { SkFS::kExtraBlack_Weight, FC_WEIGHT_EXTRABLACK }, }; int weight = map_ranges(style.weight(), weightRanges, SK_ARRAY_COUNT(weightRanges)); - static const MapRanges widthRanges[] = { - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, + static constexpr MapRanges widthRanges[] = { + { SkFS::kUltraCondensed_Width, FC_WIDTH_ULTRACONDENSED }, + { SkFS::kExtraCondensed_Width, FC_WIDTH_EXTRACONDENSED }, + { SkFS::kCondensed_Width, FC_WIDTH_CONDENSED }, + { SkFS::kSemiCondensed_Width, FC_WIDTH_SEMICONDENSED }, + { SkFS::kNormal_Width, FC_WIDTH_NORMAL }, + { SkFS::kSemiExpanded_Width, FC_WIDTH_SEMIEXPANDED }, + { SkFS::kExpanded_Width, FC_WIDTH_EXPANDED }, + { SkFS::kExtraExpanded_Width, FC_WIDTH_EXTRAEXPANDED }, + { SkFS::kUltraExpanded_Width, FC_WIDTH_ULTRAEXPANDED }, }; int width = map_ranges(style.width(), widthRanges, SK_ARRAY_COUNT(widthRanges)); diff --git a/src/ports/SkFontMgr_fontconfig.cpp b/src/ports/SkFontMgr_fontconfig.cpp index 944f8049b2..f1c2bad355 100644 --- a/src/ports/SkFontMgr_fontconfig.cpp +++ b/src/ports/SkFontMgr_fontconfig.cpp @@ -286,21 +286,21 @@ static void remove_weak(FcPattern* pattern, const char object[]) { } } -static int map_range(SkFixed value, - SkFixed old_min, SkFixed old_max, - SkFixed new_min, SkFixed new_max) +static int map_range(SkScalar value, + SkScalar old_min, SkScalar old_max, + SkScalar new_min, SkScalar new_max) { SkASSERT(old_min < old_max); SkASSERT(new_min <= new_max); - return new_min + SkMulDiv(value - old_min, new_max - new_min, old_max - old_min); + return new_min + ((value - old_min) * (new_max - new_min) / (old_max - old_min)); } struct MapRanges { - SkFixed old_val; - SkFixed new_val; + SkScalar old_val; + SkScalar new_val; }; -static SkFixed map_ranges_fixed(SkFixed val, MapRanges const ranges[], int rangesCount) { +static SkScalar map_ranges(SkScalar val, MapRanges const ranges[], int rangesCount) { // -Inf to [0] if (val < ranges[0].old_val) { return ranges[0].new_val; @@ -319,15 +319,6 @@ static SkFixed map_ranges_fixed(SkFixed val, MapRanges const ranges[], int range return ranges[rangesCount-1].new_val; } -static int map_ranges(int val, MapRanges const ranges[], int rangesCount) { - return SkFixedRoundToInt(map_ranges_fixed(SkIntToFixed(val), ranges, rangesCount)); -} - -template struct SkTFixed { - static_assert(-32768 <= n && n <= 32767, "SkTFixed_n_not_in_range"); - static const SkFixed value = static_cast(n << 16); -}; - #ifndef FC_WEIGHT_DEMILIGHT #define FC_WEIGHT_DEMILIGHT 65 #endif @@ -336,36 +327,36 @@ static SkFontStyle skfontstyle_from_fcpattern(FcPattern* pattern) { typedef SkFontStyle SkFS; // FcWeightToOpenType was buggy until 2.12.4 - static const MapRanges weightRanges[] = { - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed<350>::value }, - { SkTFixed::value, SkTFixed<380>::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, + static constexpr MapRanges weightRanges[] = { + { FC_WEIGHT_THIN, SkFS::kThin_Weight }, + { FC_WEIGHT_EXTRALIGHT, SkFS::kExtraLight_Weight }, + { FC_WEIGHT_LIGHT, SkFS::kLight_Weight }, + { FC_WEIGHT_DEMILIGHT, 350 }, + { FC_WEIGHT_BOOK, 380 }, + { FC_WEIGHT_REGULAR, SkFS::kNormal_Weight }, + { FC_WEIGHT_MEDIUM, SkFS::kMedium_Weight }, + { FC_WEIGHT_DEMIBOLD, SkFS::kSemiBold_Weight }, + { FC_WEIGHT_BOLD, SkFS::kBold_Weight }, + { FC_WEIGHT_EXTRABOLD, SkFS::kExtraBold_Weight }, + { FC_WEIGHT_BLACK, SkFS::kBlack_Weight }, + { FC_WEIGHT_EXTRABLACK, SkFS::kExtraBlack_Weight }, }; - int weight = map_ranges(get_int(pattern, FC_WEIGHT, FC_WEIGHT_REGULAR), - weightRanges, SK_ARRAY_COUNT(weightRanges)); - - static const MapRanges widthRanges[] = { - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, + SkScalar weight = map_ranges(get_int(pattern, FC_WEIGHT, FC_WEIGHT_REGULAR), + weightRanges, SK_ARRAY_COUNT(weightRanges)); + + static constexpr MapRanges widthRanges[] = { + { FC_WIDTH_ULTRACONDENSED, SkFS::kUltraCondensed_Width }, + { FC_WIDTH_EXTRACONDENSED, SkFS::kExtraCondensed_Width }, + { FC_WIDTH_CONDENSED, SkFS::kCondensed_Width }, + { FC_WIDTH_SEMICONDENSED, SkFS::kSemiCondensed_Width }, + { FC_WIDTH_NORMAL, SkFS::kNormal_Width }, + { FC_WIDTH_SEMIEXPANDED, SkFS::kSemiExpanded_Width }, + { FC_WIDTH_EXPANDED, SkFS::kExpanded_Width }, + { FC_WIDTH_EXTRAEXPANDED, SkFS::kExtraExpanded_Width }, + { FC_WIDTH_ULTRAEXPANDED, SkFS::kUltraExpanded_Width }, }; - int width = map_ranges(get_int(pattern, FC_WIDTH, FC_WIDTH_NORMAL), - widthRanges, SK_ARRAY_COUNT(widthRanges)); + SkScalar width = map_ranges(get_int(pattern, FC_WIDTH, FC_WIDTH_NORMAL), + widthRanges, SK_ARRAY_COUNT(widthRanges)); SkFS::Slant slant = SkFS::kUpright_Slant; switch (get_int(pattern, FC_SLANT, FC_SLANT_ROMAN)) { @@ -375,7 +366,7 @@ static SkFontStyle skfontstyle_from_fcpattern(FcPattern* pattern) { default: SkASSERT(false); break; } - return SkFontStyle(weight, width, slant); + return SkFontStyle(SkScalarRoundToInt(weight), SkScalarRoundToInt(width), slant); } static void fcpattern_from_skfontstyle(SkFontStyle style, FcPattern* pattern) { @@ -384,32 +375,32 @@ static void fcpattern_from_skfontstyle(SkFontStyle style, FcPattern* pattern) { typedef SkFontStyle SkFS; // FcWeightFromOpenType was buggy until 2.12.4 - static const MapRanges weightRanges[] = { - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed<350>::value, SkTFixed::value }, - { SkTFixed<380>::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, + static constexpr MapRanges weightRanges[] = { + { SkFS::kThin_Weight, FC_WEIGHT_THIN }, + { SkFS::kExtraLight_Weight, FC_WEIGHT_EXTRALIGHT }, + { SkFS::kLight_Weight, FC_WEIGHT_LIGHT }, + { 350, FC_WEIGHT_DEMILIGHT }, + { 380, FC_WEIGHT_BOOK }, + { SkFS::kNormal_Weight, FC_WEIGHT_REGULAR }, + { SkFS::kMedium_Weight, FC_WEIGHT_MEDIUM }, + { SkFS::kSemiBold_Weight, FC_WEIGHT_DEMIBOLD }, + { SkFS::kBold_Weight, FC_WEIGHT_BOLD }, + { SkFS::kExtraBold_Weight, FC_WEIGHT_EXTRABOLD }, + { SkFS::kBlack_Weight, FC_WEIGHT_BLACK }, + { SkFS::kExtraBlack_Weight, FC_WEIGHT_EXTRABLACK }, }; int weight = map_ranges(style.weight(), weightRanges, SK_ARRAY_COUNT(weightRanges)); - static const MapRanges widthRanges[] = { - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, - { SkTFixed::value, SkTFixed::value }, + static constexpr MapRanges widthRanges[] = { + { SkFS::kUltraCondensed_Width, FC_WIDTH_ULTRACONDENSED }, + { SkFS::kExtraCondensed_Width, FC_WIDTH_EXTRACONDENSED }, + { SkFS::kCondensed_Width, FC_WIDTH_CONDENSED }, + { SkFS::kSemiCondensed_Width, FC_WIDTH_SEMICONDENSED }, + { SkFS::kNormal_Width, FC_WIDTH_NORMAL }, + { SkFS::kSemiExpanded_Width, FC_WIDTH_SEMIEXPANDED }, + { SkFS::kExpanded_Width, FC_WIDTH_EXPANDED }, + { SkFS::kExtraExpanded_Width, FC_WIDTH_EXTRAEXPANDED }, + { SkFS::kUltraExpanded_Width, FC_WIDTH_ULTRAEXPANDED }, }; int width = map_ranges(style.width(), widthRanges, SK_ARRAY_COUNT(widthRanges)); -- cgit v1.2.3