[SCM] WebKit Debian packaging branch, debian/unstable, updated. debian/1.1.15-1-40151-g37bb677

hyatt hyatt at 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Sat Sep 26 07:08:18 UTC 2009


The following commit has been merged in the debian/unstable branch:
commit bee19159de5d306434cb9d57cf2e1a9483655cb0
Author: hyatt <hyatt at 268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Mon Nov 25 22:38:23 2002 +0000

    	Add support to QFont for multiple families.  NOw all that's left
    	is getting the multiple families out of the font and down into
    	WebKit.
    
            * khtml/css/cssstyleselector.cpp:
            * khtml/rendering/font.cpp:
            (Font::update):
            * khtml/rendering/font.h:
            * khtml/xml/dom_docimpl.cpp:
            (DocumentImpl::recalcStyle):
            * kwq/KWQFont.h:
            * kwq/KWQFont.mm:
            (QFontFamily::QFontFamily):
            (QFontFamily::operator=):
            (QFontFamily::family):
            (QFontFamily::setFamily):
            (QFontFamily::operator==):
            (QFont::QFont):
            (QFont::family):
            (QFont::setFamily):
            (QFont::getNSFontWithFamily):
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@2866 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog-2002-12-03 b/WebCore/ChangeLog-2002-12-03
index ce2e0b2..c0293c7 100644
--- a/WebCore/ChangeLog-2002-12-03
+++ b/WebCore/ChangeLog-2002-12-03
@@ -1,3 +1,27 @@
+2002-11-25  David Hyatt  <hyatt at apple.com>
+
+	Add support to QFont for multiple families.  NOw all that's left
+	is getting the multiple families out of the font and down into
+	WebKit.
+	
+        * khtml/css/cssstyleselector.cpp:
+        * khtml/rendering/font.cpp:
+        (Font::update):
+        * khtml/rendering/font.h:
+        * khtml/xml/dom_docimpl.cpp:
+        (DocumentImpl::recalcStyle):
+        * kwq/KWQFont.h:
+        * kwq/KWQFont.mm:
+        (QFontFamily::QFontFamily):
+        (QFontFamily::operator=):
+        (QFontFamily::family):
+        (QFontFamily::setFamily):
+        (QFontFamily::operator==):
+        (QFont::QFont):
+        (QFont::family):
+        (QFont::setFamily):
+        (QFont::getNSFontWithFamily):
+
 2002-11-25  Richard Williamson   <rjw at apple.com>
 
         Changes for back/forward.  Currently disabled.
diff --git a/WebCore/ChangeLog-2003-10-25 b/WebCore/ChangeLog-2003-10-25
index ce2e0b2..c0293c7 100644
--- a/WebCore/ChangeLog-2003-10-25
+++ b/WebCore/ChangeLog-2003-10-25
@@ -1,3 +1,27 @@
+2002-11-25  David Hyatt  <hyatt at apple.com>
+
+	Add support to QFont for multiple families.  NOw all that's left
+	is getting the multiple families out of the font and down into
+	WebKit.
+	
+        * khtml/css/cssstyleselector.cpp:
+        * khtml/rendering/font.cpp:
+        (Font::update):
+        * khtml/rendering/font.h:
+        * khtml/xml/dom_docimpl.cpp:
+        (DocumentImpl::recalcStyle):
+        * kwq/KWQFont.h:
+        * kwq/KWQFont.mm:
+        (QFontFamily::QFontFamily):
+        (QFontFamily::operator=):
+        (QFontFamily::family):
+        (QFontFamily::setFamily):
+        (QFontFamily::operator==):
+        (QFont::QFont):
+        (QFont::family):
+        (QFont::setFamily):
+        (QFont::getNSFontWithFamily):
+
 2002-11-25  Richard Williamson   <rjw at apple.com>
 
         Changes for back/forward.  Currently disabled.
diff --git a/WebCore/ChangeLog-2005-08-23 b/WebCore/ChangeLog-2005-08-23
index ce2e0b2..c0293c7 100644
--- a/WebCore/ChangeLog-2005-08-23
+++ b/WebCore/ChangeLog-2005-08-23
@@ -1,3 +1,27 @@
+2002-11-25  David Hyatt  <hyatt at apple.com>
+
+	Add support to QFont for multiple families.  NOw all that's left
+	is getting the multiple families out of the font and down into
+	WebKit.
+	
+        * khtml/css/cssstyleselector.cpp:
+        * khtml/rendering/font.cpp:
+        (Font::update):
+        * khtml/rendering/font.h:
+        * khtml/xml/dom_docimpl.cpp:
+        (DocumentImpl::recalcStyle):
+        * kwq/KWQFont.h:
+        * kwq/KWQFont.mm:
+        (QFontFamily::QFontFamily):
+        (QFontFamily::operator=):
+        (QFontFamily::family):
+        (QFontFamily::setFamily):
+        (QFontFamily::operator==):
+        (QFont::QFont):
+        (QFont::family):
+        (QFont::setFamily):
+        (QFont::getNSFontWithFamily):
+
 2002-11-25  Richard Williamson   <rjw at apple.com>
 
         Changes for back/forward.  Currently disabled.
diff --git a/WebCore/khtml/css/cssstyleselector.cpp b/WebCore/khtml/css/cssstyleselector.cpp
index 4fda0f7..1f5fb0f 100644
--- a/WebCore/khtml/css/cssstyleselector.cpp
+++ b/WebCore/khtml/css/cssstyleselector.cpp
@@ -2517,55 +2517,68 @@ void CSSStyleSelector::applyRule( DOM::CSSProperty *prop )
         // list of strings and ids
     {
         if(!value->isValueList()) return;
-	FontDef fontDef = style->htmlFont().fontDef;
+        FontDef fontDef = style->htmlFont().fontDef;
         CSSValueListImpl *list = static_cast<CSSValueListImpl *>(value);
         int len = list->length();
-	QString family;
+        QString family;
+        QFontFamily& firstFamily = fontDef.firstFamily();
+        QFontFamily* currFamily = 0;
+        
         for(int i = 0; i < len; i++) {
             CSSValueImpl *item = list->item(i);
             if(!item->isPrimitiveValue()) continue;
             CSSPrimitiveValueImpl *val = static_cast<CSSPrimitiveValueImpl *>(item);
             if(!val->primitiveType() == CSSPrimitiveValue::CSS_STRING) return;
             QString face = static_cast<FontFamilyValueImpl *>(val)->fontName();
-	    if ( !face.isEmpty() ) {
-	        if(face == "serif") {
-		    face = settings->serifFontName();
-		    fontDef.setGenericFamily(FontDef::eSerif);
-		}
-		else if(face == "sans-serif") {
-		    face = settings->sansSerifFontName();
-		    fontDef.setGenericFamily(FontDef::eSansSerif);
-		}
-		else if( face == "cursive") {
-		    face = settings->cursiveFontName();
-		    fontDef.setGenericFamily(FontDef::eCursive);
-		}
-		else if( face == "fantasy") {
-		    face = settings->fantasyFontName();
-		    fontDef.setGenericFamily(FontDef::eFantasy);
-		}
-		else if( face == "monospace") {
-		    face = settings->fixedFontName();
-		    fontDef.setGenericFamily(FontDef::eMonospace);
-		}
-		else if( face == "konq_default") {
-		    // Treat this as though it's a generic family, since we will want
-		    // to reset to default sizes when we encounter this (and inherit
-		    // from an enclosing different family like monospace.
-		    face = settings->stdFontName();
-		    fontDef.setGenericFamily(FontDef::eStandard);
-		}
-
-		if ( !face.isEmpty() ) {
-		    fontDef.family = face;
-		    if (style->setFontDef( fontDef )) {
-		      fontDirty = true;
-		    }
-		}
-                return;
-	    }
+            if ( !face.isEmpty() ) {
+                if(face == "serif") {
+                    face = settings->serifFontName();
+                    fontDef.setGenericFamily(FontDef::eSerif);
+                }
+                else if(face == "sans-serif") {
+                    face = settings->sansSerifFontName();
+                    fontDef.setGenericFamily(FontDef::eSansSerif);
+                }
+                else if( face == "cursive") {
+                    face = settings->cursiveFontName();
+                    fontDef.setGenericFamily(FontDef::eCursive);
+                }
+                else if( face == "fantasy") {
+                    face = settings->fantasyFontName();
+                    fontDef.setGenericFamily(FontDef::eFantasy);
+                }
+                else if( face == "monospace") {
+                    face = settings->fixedFontName();
+                    fontDef.setGenericFamily(FontDef::eMonospace);
+                }
+                else if( face == "konq_default") {
+                    // Treat this as though it's a generic family, since we will want
+                    // to reset to default sizes when we encounter this (and inherit
+                    // from an enclosing different family like monospace.
+                    face = settings->stdFontName();
+                    fontDef.setGenericFamily(FontDef::eStandard);
+                }
+    
+                if ( !face.isEmpty() ) {
+                    if (!currFamily) {
+                        // Filling in the first family.
+                        firstFamily.setFamily(face);
+                        currFamily = &firstFamily;
+                    }
+                    else {
+                        QFontFamily* newFamily = new QFontFamily;
+                        newFamily->setFamily(face);
+                        currFamily->appendFamily(newFamily);
+                        currFamily = newFamily;
+                    }
+                    
+                    if (style->setFontDef( fontDef )) {
+                        fontDirty = true;
+                    }
+                }
+            }
         }
-        break;
+      break;
     }
     case CSS_PROP_QUOTES:
         // list of strings or i
diff --git a/WebCore/khtml/rendering/font.cpp b/WebCore/khtml/rendering/font.cpp
index 55ea0ef..62f6e1f 100644
--- a/WebCore/khtml/rendering/font.cpp
+++ b/WebCore/khtml/rendering/font.cpp
@@ -176,7 +176,10 @@ int Font::width( QChar *chs, int slen, int pos ) const
 
 void Font::update( QPaintDeviceMetrics* devMetrics ) const
 {
-    f.setFamily( fontDef.family.isEmpty() ? KHTMLFactory::defaultHTMLSettings()->stdFontName() : fontDef.family );
+    if (fontDef.family.family().isEmpty())
+        f.setFamily(KHTMLFactory::defaultHTMLSettings()->stdFontName());
+    else
+        f.setFirstFamily(fontDef.family);
     f.setItalic( fontDef.italic );
     f.setWeight( fontDef.weight );
 
diff --git a/WebCore/khtml/rendering/font.h b/WebCore/khtml/rendering/font.h
index 99df338..e4ac506 100644
--- a/WebCore/khtml/rendering/font.h
+++ b/WebCore/khtml/rendering/font.h
@@ -43,6 +43,7 @@ public:
     FontDef()
         : size( 0 ), italic( false ), smallCaps( false ), weight( 50 ), 
           genericFamily(0), hasNbsp( true ) {}
+    
     bool operator == ( const FontDef &other ) const {
         return ( family == other.family &&
                  size == other.size &&
@@ -55,7 +56,9 @@ public:
 
     void setGenericFamily(unsigned int aGenericFamily) { genericFamily = aGenericFamily; }
     
-    QString family;
+    QFontFamily& firstFamily() { return family; }
+    
+    QFontFamily family;
     short int size;
     bool italic 		: 1;
     bool smallCaps 		: 1;
diff --git a/WebCore/khtml/xml/dom_docimpl.cpp b/WebCore/khtml/xml/dom_docimpl.cpp
index 7a2afc8..3da2eb2 100644
--- a/WebCore/khtml/xml/dom_docimpl.cpp
+++ b/WebCore/khtml/xml/dom_docimpl.cpp
@@ -892,17 +892,18 @@ void DocumentImpl::recalcStyle( StyleChange change )
 
 	khtml::FontDef fontDef;
 	QFont f = KGlobalSettings::generalFont();
-	fontDef.family = f.family();
+	fontDef.family = *(f.firstFamily());
 	fontDef.italic = f.italic();
 	fontDef.weight = f.weight();
-        if (m_view) {
-            const KHTMLSettings *settings = m_view->part()->settings();
-	    QString stdfont = settings->stdFontName();
-	    if ( !stdfont.isEmpty() )
-		fontDef.family = stdfont;
-
-            fontDef.size = m_styleSelector->fontSizes()[3];
+    if (m_view) {
+        const KHTMLSettings *settings = m_view->part()->settings();
+        QString stdfont = settings->stdFontName();
+        if ( !stdfont.isEmpty() ) {
+            fontDef.family.setFamily(stdfont);
+            fontDef.family.appendFamily(0);
         }
+        fontDef.size = m_styleSelector->fontSizes()[3];
+    }
 
         //kdDebug() << "DocumentImpl::attach: setting to charset " << settings->charset() << endl;
         _style->setFontDef(fontDef);
diff --git a/WebCore/kwq/KWQFont.h b/WebCore/kwq/KWQFont.h
index e7dab03..ee3fd08 100644
--- a/WebCore/kwq/KWQFont.h
+++ b/WebCore/kwq/KWQFont.h
@@ -36,6 +36,30 @@ class NSFont;
 class NSString;
 #endif
 
+class QFontFamily {
+public:
+    QFontFamily();
+    ~QFontFamily() { delete _next; }
+    
+    QFontFamily(const QFontFamily& other);    
+    QFontFamily& operator=(const QFontFamily& other);
+        
+    void setFamily(const QString&);
+    QString family() const;
+    
+    NSString* getNSFamily() const { return _family; }
+
+    QFontFamily* next() { return _next; }
+    void appendFamily(QFontFamily* family) { delete _next; _next = family; }
+    
+    bool operator==(const QFontFamily &compareFontFamily) const;
+    bool operator!=(const QFontFamily &x) const { return !(*this == x); }
+    
+private:
+    NSString* _family;
+    QFontFamily* _next;
+};
+
 class QFont {
 public:
     enum Weight { Normal = 50, Bold = 63 };
@@ -45,6 +69,9 @@ public:
     void setFamily(const QString &);
     QString family() const;
 
+    QFontFamily* firstFamily() { return &_family; }
+    void setFirstFamily(const QFontFamily& family) { _family = family; }
+    
     void setWeight(int);
     int weight() const;
     bool bold() const;
@@ -58,14 +85,15 @@ public:
     bool operator==(const QFont &x) const;
     bool operator!=(const QFont &x) const { return !(*this == x); }
     
-    NSString *getNSFamily() const { return _family; }
+    NSString *getNSFamily() const { return _family.getNSFamily(); }
     int getNSTraits() const { return _trait; }
     float getNSSize() const { return _size; }
     
     NSFont *getNSFont() const;
-
+    NSFont* getNSFontWithFamily(QFontFamily* fontFamily) const;
+    
 private:
-    NSString *_family;
+    QFontFamily _family;
     int _trait;
     float _size;
 };
diff --git a/WebCore/kwq/KWQFont.mm b/WebCore/kwq/KWQFont.mm
index 0789696..86b850f 100644
--- a/WebCore/kwq/KWQFont.mm
+++ b/WebCore/kwq/KWQFont.mm
@@ -29,19 +29,39 @@
 #import <Cocoa/Cocoa.h>
 #import "WebCoreTextRendererFactory.h"
 
-QFont::QFont()
+QFontFamily::QFontFamily()
     : _family(@"")
-    , _trait(0)
-    , _size(12.0)
+    , _next(0)
 {
 }
 
-QString QFont::family() const
+QFontFamily::QFontFamily(const QFontFamily& other) 
+{
+    if (other._next)
+        _next = new QFontFamily(*(other._next));
+    else
+        _next = 0;
+    _family = other._family;
+}
+
+QFontFamily& QFontFamily::operator=(const QFontFamily& other) {
+    if (this != &other) {
+        delete _next;
+        if (other._next)
+            _next = new QFontFamily(*(other._next));
+        else 
+            _next = 0;
+        _family = other._family;
+    }
+    return *this;
+}
+
+QString QFontFamily::family() const
 {
     return QString::fromNSString(_family);
 }
 
-void QFont::setFamily(const QString &qfamilyName)
+void QFontFamily::setFamily(const QString &qfamilyName)
 {
     // Use an immutable copy of the name, but keep a set of
     // all family names so we don't end up with too many objects.
@@ -57,6 +77,32 @@ void QFont::setFamily(const QString &qfamilyName)
     }
 }
 
+bool QFontFamily::operator==(const QFontFamily &compareFontFamily) const
+{
+    if ((!_next && compareFontFamily._next) || 
+        (_next && !compareFontFamily._next) ||
+        ((_next && compareFontFamily._next) && (*_next != *(compareFontFamily._next))))
+        return false;
+    
+    return _family == compareFontFamily._family;
+}
+
+QFont::QFont()
+    : _trait(0)
+    , _size(12.0)
+{
+}
+
+QString QFont::family() const
+{
+    return _family.family();
+}
+
+void QFont::setFamily(const QString &qfamilyName)
+{
+    _family.setFamily(qfamilyName);
+}
+
 void QFont::setWeight(int weight)
 {
     if (weight == Bold) {
@@ -104,3 +150,12 @@ NSFont *QFont::getNSFont() const
                 traits:getNSTraits() 
                   size:getNSSize()];
 }
+
+NSFont *QFont::getNSFontWithFamily(QFontFamily* family) const
+{
+    return [[WebCoreTextRendererFactory sharedFactory] 
+    	fontWithFamily:family->getNSFamily()
+                traits:getNSTraits() 
+                  size:getNSSize()];
+}
+

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list