| Index: src/fonts/SkFontMgr_indirect.cpp
|
| diff --git a/src/fonts/SkFontMgr_indirect.cpp b/src/fonts/SkFontMgr_indirect.cpp
|
| index 132130f0d869c29a897dd578a0a72e6c95792de1..2470f8a69336adb904bfdb2b3a09afc2e9989dc2 100644
|
| --- a/src/fonts/SkFontMgr_indirect.cpp
|
| +++ b/src/fonts/SkFontMgr_indirect.cpp
|
| @@ -52,102 +52,7 @@ public:
|
| return fOwner->createTypefaceFromFontId(id);
|
| }
|
|
|
| - // If this SkStyleSet was created via onMatchFamily we would need a call like
|
| - // fOwner->fProxy->matchNameStyle(fFamilyName, pattern);
|
| - // but would not activate fonts (only consider fonts which would come back from matchName).
|
| -
|
| - // CSS policy sounds good.
|
| - struct Score {
|
| - int score;
|
| - int index;
|
| - };
|
| -
|
| - // Width has the greatest priority.
|
| - // If the value of pattern.width is 5 (normal) or less,
|
| - // narrower width values are checked first, then wider values.
|
| - // If the value of pattern.width is greater than 5 (normal),
|
| - // wider values are checked first, followed by narrower values.
|
| -
|
| - // Italic/Oblique has the next highest priority.
|
| - // If italic requested and there is some italic font, use it.
|
| - // If oblique requested and there is some oblique font, use it.
|
| - // If italic requested and there is some oblique font, use it.
|
| - // If oblique requested and there is some italic font, use it.
|
| -
|
| - // Exact match.
|
| - // If pattern.weight < 400, weights below pattern.weight are checked
|
| - // in descending order followed by weights above pattern.weight
|
| - // in ascending order until a match is found.
|
| - // If pattern.weight > 500, weights above pattern.weight are checked
|
| - // in ascending order followed by weights below pattern.weight
|
| - // in descending order until a match is found.
|
| - // If pattern.weight is 400, 500 is checked first
|
| - // and then the rule for pattern.weight < 400 is used.
|
| - // If pattern.weight is 500, 400 is checked first
|
| - // and then the rule for pattern.weight < 400 is used
|
| -
|
| - Score maxScore = { 0, 0 };
|
| - for (int i = 0; i < fData->count(); ++i) {
|
| - const SkFontStyle& current = fData->at(i).fFontStyle;
|
| - Score currentScore = { 0, i };
|
| -
|
| - // CSS stretch. (This is the width.)
|
| - // This has the highest priority.
|
| - if (pattern.width() <= SkFontStyle::kNormal_Width) {
|
| - if (current.width() <= pattern.width()) {
|
| - currentScore.score += 10 - pattern.width() + current.width();
|
| - } else {
|
| - currentScore.score += 10 - current.width();
|
| - }
|
| - } else {
|
| - if (current.width() > pattern.width()) {
|
| - currentScore.score += 10 + pattern.width() - current.width();
|
| - } else {
|
| - currentScore.score += current.width();
|
| - }
|
| - }
|
| - currentScore.score *= 1002;
|
| -
|
| - // CSS style (italic/oblique)
|
| - // Being italic trumps all valid weights which are not italic.
|
| - // Note that newer specs differentiate between italic and oblique.
|
| - if (pattern.isItalic() && current.isItalic()) {
|
| - currentScore.score += 1001;
|
| - }
|
| -
|
| - // Synthetics (weight/style) [no stretch synthetic?]
|
| -
|
| - // The 'closer' to the target weight, the higher the score.
|
| - // 1000 is the 'heaviest' recognized weight
|
| - if (pattern.weight() == current.weight()) {
|
| - currentScore.score += 1000;
|
| - } else if (pattern.weight() <= 500) {
|
| - if (pattern.weight() >= 400 && pattern.weight() < 450) {
|
| - if (current.weight() >= 450 && current.weight() <= 500) {
|
| - // Artificially boost the 500 weight.
|
| - // TODO: determine correct number to use.
|
| - currentScore.score += 500;
|
| - }
|
| - }
|
| - if (current.weight() <= pattern.weight()) {
|
| - currentScore.score += 1000 - pattern.weight() + current.weight();
|
| - } else {
|
| - currentScore.score += 1000 - current.weight();
|
| - }
|
| - } else if (pattern.weight() > 500) {
|
| - if (current.weight() > pattern.weight()) {
|
| - currentScore.score += 1000 + pattern.weight() - current.weight();
|
| - } else {
|
| - currentScore.score += current.weight();
|
| - }
|
| - }
|
| -
|
| - if (currentScore.score > maxScore.score) {
|
| - maxScore = currentScore;
|
| - }
|
| - }
|
| -
|
| - return this->createTypeface(maxScore.index);
|
| + return this->matchStyleCSS3(pattern);
|
| }
|
| private:
|
| SkAutoTUnref<const SkFontMgr_Indirect> fOwner;
|
|
|