[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