[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc
hyatt at apple.com
hyatt at apple.com
Wed Dec 22 15:53:17 UTC 2010
The following commit has been merged in the debian/experimental branch:
commit b8c252afa6cbf76b5ab0628b75f20d6d3cfb6bc6
Author: hyatt at apple.com <hyatt at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Tue Nov 16 04:45:01 2010 +0000
https://bugs.webkit.org/show_bug.cgi?id=49570
Reviewed by Dan Bernstein.
Put italics specialization check back in CSSFontSelector. I had to back it out, since it broke
a layout test, and the issue was that local font fallback fonts should not be considered by the
specialization check (since you never want to pick a fallback over an actual @font-face rule if
the @font-face rule can handle it).
* css/CSSFontFace.h:
(WebCore::CSSFontFace::create):
(WebCore::CSSFontFace::isLocalFallback):
(WebCore::CSSFontFace::CSSFontFace):
* css/CSSFontSelector.cpp:
(WebCore::CSSFontSelector::addFontFaceRule):
(WebCore::compareFontFaces):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@72056 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 05f5d5c..527354a 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,22 @@
+2010-11-15 Dave Hyatt <hyatt at apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ https://bugs.webkit.org/show_bug.cgi?id=49570
+
+ Put italics specialization check back in CSSFontSelector. I had to back it out, since it broke
+ a layout test, and the issue was that local font fallback fonts should not be considered by the
+ specialization check (since you never want to pick a fallback over an actual @font-face rule if
+ the @font-face rule can handle it).
+
+ * css/CSSFontFace.h:
+ (WebCore::CSSFontFace::create):
+ (WebCore::CSSFontFace::isLocalFallback):
+ (WebCore::CSSFontFace::CSSFontFace):
+ * css/CSSFontSelector.cpp:
+ (WebCore::CSSFontSelector::addFontFaceRule):
+ (WebCore::compareFontFaces):
+
2010-11-15 Adele Peterson <adele at apple.com>
Reviewed by Darin Adler.
diff --git a/WebCore/css/CSSFontFace.h b/WebCore/css/CSSFontFace.h
index 4872727..55e048c 100644
--- a/WebCore/css/CSSFontFace.h
+++ b/WebCore/css/CSSFontFace.h
@@ -42,7 +42,7 @@ class SimpleFontData;
class CSSFontFace : public RefCounted<CSSFontFace> {
public:
- static PassRefPtr<CSSFontFace> create(FontTraitsMask traitsMask) { return adoptRef(new CSSFontFace(traitsMask)); }
+ static PassRefPtr<CSSFontFace> create(FontTraitsMask traitsMask, bool isLocalFallback = false) { return adoptRef(new CSSFontFace(traitsMask, isLocalFallback)); }
~CSSFontFace();
FontTraitsMask traitsMask() const { return m_traitsMask; }
@@ -58,6 +58,8 @@ public:
bool isLoaded() const;
bool isValid() const;
+ bool isLocalFallback() const { return m_isLocalFallback; }
+
void addSource(CSSFontFaceSource*);
void fontLoaded(CSSFontFaceSource*);
@@ -84,9 +86,10 @@ public:
#endif
private:
- CSSFontFace(FontTraitsMask traitsMask)
+ CSSFontFace(FontTraitsMask traitsMask, bool isLocalFallback)
: m_traitsMask(traitsMask)
, m_activeSource(0)
+ , m_isLocalFallback(isLocalFallback)
{
}
@@ -95,6 +98,7 @@ private:
HashSet<CSSSegmentedFontFace*> m_segmentedFontFaces;
Vector<CSSFontFaceSource*> m_sources;
CSSFontFaceSource* m_activeSource;
+ bool m_isLocalFallback;
};
}
diff --git a/WebCore/css/CSSFontSelector.cpp b/WebCore/css/CSSFontSelector.cpp
index cfc47e5..9c9a844 100644
--- a/WebCore/css/CSSFontSelector.cpp
+++ b/WebCore/css/CSSFontSelector.cpp
@@ -333,7 +333,7 @@ void CSSFontSelector::addFontFaceRule(const CSSFontFaceRule* fontFaceRule)
m_locallyInstalledFontFaces.set(familyName, familyLocallyInstalledFaces);
for (unsigned i = 0; i < numLocallyInstalledFaces; ++i) {
- RefPtr<CSSFontFace> locallyInstalledFontFace = CSSFontFace::create(static_cast<FontTraitsMask>(locallyInstalledFontsTraitsMasks[i]));
+ RefPtr<CSSFontFace> locallyInstalledFontFace = CSSFontFace::create(static_cast<FontTraitsMask>(locallyInstalledFontsTraitsMasks[i]), true);
locallyInstalledFontFace->addSource(new CSSFontFaceSource(familyName));
ASSERT(locallyInstalledFontFace->isValid());
familyLocallyInstalledFaces->append(locallyInstalledFontFace);
@@ -401,7 +401,7 @@ static inline bool compareFontFaces(CSSFontFace* first, CSSFontFace* second)
if (firstHasDesiredVariant != secondHasDesiredVariant)
return firstHasDesiredVariant;
- if (desiredTraitsMaskForComparison & FontVariantSmallCapsMask) {
+ if ((desiredTraitsMaskForComparison & FontVariantSmallCapsMask) && !first->isLocalFallback() && !second->isLocalFallback()) {
// Prefer a font that has indicated that it can only support small-caps to a font that claims to support
// all variants. The specialized font is more likely to be true small-caps and not require synthesis.
bool firstRequiresSmallCaps = (firstTraitsMask & FontVariantSmallCapsMask) && !(firstTraitsMask & FontVariantNormalMask);
@@ -416,6 +416,15 @@ static inline bool compareFontFaces(CSSFontFace* first, CSSFontFace* second)
if (firstHasDesiredStyle != secondHasDesiredStyle)
return firstHasDesiredStyle;
+ if ((desiredTraitsMaskForComparison & FontStyleItalicMask) && !first->isLocalFallback() && !second->isLocalFallback()) {
+ // Prefer a font that has indicated that it can only support italics to a font that claims to support
+ // all styles. The specialized font is more likely to be the one the author wants used.
+ bool firstRequiresItalics = (firstTraitsMask & FontStyleItalicMask) && !(firstTraitsMask & FontStyleNormalMask);
+ bool secondRequiresItalics = (secondTraitsMask & FontStyleItalicMask) && !(secondTraitsMask & FontStyleNormalMask);
+ if (firstRequiresItalics != secondRequiresItalics)
+ return firstRequiresItalics;
+ }
+
if (secondTraitsMask & desiredTraitsMaskForComparison & FontWeightMask)
return false;
if (firstTraitsMask & desiredTraitsMaskForComparison & FontWeightMask)
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list