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

kocienda kocienda at 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Sat Sep 26 05:52:04 UTC 2009


The following commit has been merged in the debian/unstable branch:
commit 4f4b67ab2c0fb66125579ebb7b2db731c81a0410
Author: kocienda <kocienda at 268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Fri Nov 9 18:12:42 2001 +0000

    Cleaned up some table rendering issues.
    Added some better support for named colors in QColor.
    Some cleanups in QBrush and QPen.
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@428 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/khtml/css/html4.css b/WebCore/khtml/css/html4.css
index 4b97b7e..3c4c44f 100644
--- a/WebCore/khtml/css/html4.css
+++ b/WebCore/khtml/css/html4.css
@@ -181,6 +181,7 @@ TABLE {
 	vertical-align: middle;
 	text-align: justify;
 	border-spacing: 2px;
+	border-color: gray;
 	border-style: outset;
 	border-width: 0px;
 	padding: 1px;
diff --git a/WebCore/kwq/KWQColor.h b/WebCore/kwq/KWQColor.h
index 4f1882f..471a449 100644
--- a/WebCore/kwq/KWQColor.h
+++ b/WebCore/kwq/KWQColor.h
@@ -84,6 +84,7 @@ public:
     void setRgb(int);
 
     void hsv(int *, int *, int *) const;
+    void setHsv(int h, int s, int v);
 
     QColor light(int f = 150) const;
     QColor dark(int f = 200) const;
diff --git a/WebCore/kwq/KWQColor.mm b/WebCore/kwq/KWQColor.mm
index dec0cd5..db15a4b 100644
--- a/WebCore/kwq/KWQColor.mm
+++ b/WebCore/kwq/KWQColor.mm
@@ -28,6 +28,9 @@
 
 #include <kwqdebug.h>
 
+static NSDictionary *namedColors;
+
+
 QRgb qRgb(int r, int g, int b)
 {
     return r << 16 | g << 8 | b;
@@ -119,57 +122,104 @@ static int hex2int( QChar hexchar )
     return v;
 }
 
+static bool looksLikeSixLetterHexColorString(const QString &string)
+{
+    bool result;
+    
+    result = TRUE;
+    
+    for (int i = 0; i < 6; i++) {
+        QChar c = string.at(i);
+        if ((c >= '0' && c <= '9') ||
+            (c >= 'a' && c <= 'f') ||
+            (c >= 'A' && c <= 'F')) {
+            continue;
+        }
+        else {
+            result = FALSE;
+            break;   
+        }
+    }
+    
+    return result;
+}
 
-void QColor::setNamedColor(const QString&name)
+static bool decodeColorFromHexColorString(const QString &string, int *r, int *g, int *b)
+{
+    bool decoded;
+    
+    decoded = FALSE;
+
+    if ((string.length() == 7 && string[0] == '#') ||
+        (string.length() == 6 && looksLikeSixLetterHexColorString(string))) {
+        int offset = 0;
+        int len;
+        if (string[0] == '#') {
+            offset = 1;
+            len = string.length() - 1;
+        }
+        else {
+            len = string.length();
+        }
+        const QChar *p = string.unicode() + offset;
+        if (len == 12) {
+            *r = (hex2int(p[0]) << 4) + hex2int(p[1]);
+            *g = (hex2int(p[4]) << 4) + hex2int(p[5]);
+            *b = (hex2int(p[8]) << 4) + hex2int(p[9]);
+            decoded = TRUE;    
+        } else if (len == 9) {
+            *r = (hex2int(p[0]) << 4) + hex2int(p[1]);
+            *g = (hex2int(p[3]) << 4) + hex2int(p[4]);
+            *b = (hex2int(p[6]) << 4) + hex2int(p[7]);
+            decoded = TRUE;    
+        } else if (len == 6) {
+            *r = (hex2int(p[0]) << 4) + hex2int(p[1]);
+            *g = (hex2int(p[2]) << 4) + hex2int(p[3]);
+            *b = (hex2int(p[4]) << 4) + hex2int(p[5]);
+            decoded = TRUE;    
+        } else if (len == 3) {
+            *r = (hex2int(p[0]) << 4) + hex2int(p[0]);
+            *g = (hex2int(p[1]) << 4) + hex2int(p[1]);
+            *b = (hex2int(p[2]) << 4) + hex2int(p[2]);
+            decoded = TRUE;    
+        }
+	}
+	    
+    return decoded;
+}
+
+void QColor::setNamedColor(const QString &name)
 {
     // FIXME: The combination of this code with the code that
     // is in khtml/misc/helper.cpp makes setting colors by
     // name a real crock. We need to look at the process
     // of mapping names to colors and figure out something
     // better.
+    // 
+    // [kocienda: 2001-11-08]: I've made some improvements
+    // but it's still a crock.
+    
+    int r, g, b;
+    
+    r = g = b = 0;
+    
     if ( name.isEmpty() ) {
-	setRgb( 0 );
+	    setRgb( 0 );
     } 
-    else if ((name.length() == 7 && name[0] == '#') || name.length() == 6) {
-        int offset = 0;
-        int len;
-        if (name[0] == '#') {
-            offset = 1;
-            len = name.length() - 1;
+    else if (decodeColorFromHexColorString(name, &r, &g, &b)) {
+	    setRgb(r, g, b);
+    } 
+    else {
+        NSString *hexString;
+        
+        hexString = [namedColors objectForKey:[QSTRING_TO_NSSTRING(name) lowercaseString]];
+        
+        if (hexString && decodeColorFromHexColorString(NSSTRING_TO_QSTRING(hexString), &r, &g, &b)) {
+            setRgb(r, g, b);
         }
         else {
-            len = name.length();
-        }
-        const QChar *p = name.unicode() + offset;
-        int r, g, b;
-        if ( len == 12 ) {
-            r = (hex2int(p[0]) << 4) + hex2int(p[1]);
-            g = (hex2int(p[4]) << 4) + hex2int(p[5]);
-            b = (hex2int(p[8]) << 4) + hex2int(p[9]);
-        } else if ( len == 9 ) {
-            r = (hex2int(p[0]) << 4) + hex2int(p[1]);
-            g = (hex2int(p[3]) << 4) + hex2int(p[4]);
-            b = (hex2int(p[6]) << 4) + hex2int(p[7]);
-        } else if ( len == 6 ) {
-            r = (hex2int(p[0]) << 4) + hex2int(p[1]);
-            g = (hex2int(p[2]) << 4) + hex2int(p[3]);
-            b = (hex2int(p[4]) << 4) + hex2int(p[5]);
-        } else if ( len == 3 ) {
-            r = (hex2int(p[0]) << 4) + hex2int(p[0]);
-            g = (hex2int(p[1]) << 4) + hex2int(p[1]);
-            b = (hex2int(p[2]) << 4) + hex2int(p[2]);
-        } else {
-            r = g = b = 0;
-	}
-	setRgb( r, g, b );
-
-    } else {
-	if (color != nil)
-            [color release];
-        color = [NSColor colorWithCatalogName: @"Apple" colorName: QSTRING_TO_NSSTRING(name)];
-        if (color == nil) {
             NSLog (@"WARNING %s:%d %s couldn't create color using name %s\n", __FILE__, __LINE__, __FUNCTION__, name.ascii());
-            color = [NSColor colorWithCalibratedRed:0 green:0 blue:0 alpha:1];
+            setRgb(0, 0, 0);
         }
     }
 }
@@ -279,41 +329,100 @@ void QColor::hsv(int *h, int *s, int *v) const
     }
 }
 
-QColor QColor::light(int f = 150) const
+void QColor::setHsv(int h, int s, int v)
 {
-    _logNotYetImplemented();
-    return *this;
+    int i, f, p, q, t;
+    
+    if( s == 0 ) {
+        // achromatic (gray)
+        setRgb(v, v, v);
+        return;
+    }
+    
+    h /= 60;			// sector 0 to 5
+    i = (int)floor(h);
+    f = h - i;			// factorial part of h
+    p = v * (1 - s);
+    q = v * (1 - s * f);
+    t = v * (1 - s * (1 - f));
+    
+    switch( i ) {
+        case 0:
+            setRgb(v, t, p);
+            break;
+        case 1:
+            setRgb(q, v, p);
+            break;
+        case 2:
+            setRgb(p, v, t);
+            break;
+        case 3:
+            setRgb(p, q, v);
+            break;
+        case 4:
+            setRgb(t, p, v);
+            break;
+        default:		// case 5:
+            setRgb(v, p, q);
+            break;
+    }
 }
 
 
-QColor QColor::dark(int f = 200) const
+QColor QColor::light(int factor) const
 {
-    QColor result;
     NSColor *newColor;
-    float factor;
 
-    if (f <= 0) {
-        result.setRgb(red(), green(), blue());
-        return result;
+    if (factor <= 0) {
+        return QColor(*this);
     }
-    else if (f < 100) {
-        // NOTE: this is actually a lighten operation
-        factor = 10000.0f / (float)f; 
-        newColor = [color highlightWithLevel:factor];    
+    else if (factor < 100) {
+        // NOTE: this is actually a darken operation
+        return dark(10000 / factor); 
     }
-    else if (f > 10000) {
-        newColor = [color shadowWithLevel:1.0f];    
+
+    int h, s, v;
+    
+    hsv(&h, &s, &v);
+    v = (factor * v) / 100;
+
+    if (v > 255) {
+        s -= (v - 255);
+        if (s < 0) {
+            s = 0;
+        }
+        v = 255;
     }
-    else {
-        factor = (float)f / 10000.0f;
-        newColor = [color shadowWithLevel:factor];    
+
+    QColor result;
+    
+    result.setHsv(h, s, v);
+    
+    return result;
+}
+
+
+QColor QColor::dark(int factor) const
+{
+    NSColor *newColor;
+
+    if (factor <= 0) {
+        return QColor(*this);
+    }
+    else if (factor < 100) {
+        // NOTE: this is actually a lighten operation
+        return light(10000 / factor); 
     }
 
-    result.setRgb(
-        (int)([color redComponent] * 255),
-        (int)([color greenComponent] * 255),
-        (int)([color blueComponent] * 255)
-    );
+    int h, s, v;
+    
+    hsv(&h, &s, &v);
+    v = (v * 100) / factor;
+
+    QColor result;
+    
+    result.setHsv(h, s, v);
+    
     return result;
 }
 
@@ -404,5 +513,152 @@ void QColor::initGlobalColors()
     stdcol[16].setRgb(   0, 128, 128 );
     stdcol[17].setRgb( 128,   0, 128 );
     stdcol[18].setRgb( 128, 128,   0 );
+
+    namedColors = [NSDictionary dictionaryWithObjectsAndKeys: \
+        @"#f0f8ff",@"aliceblue", \
+        @"#faebd7",@"antiquewhite", \
+        @"#00ffff",@"aqua", \
+        @"#7fffd4",@"aquamarine", \
+        @"#f0ffff",@"azure", \
+        @"#f5f5dc",@"beige", \
+        @"#ffe4c4",@"bisque", \
+        @"#000000",@"black", \
+        @"#ffebcd",@"blanchedalmond", \
+        @"#0000ff",@"blue", \
+        @"#8a2be2",@"blueviolet", \
+        @"#a52a2a",@"brown", \
+        @"#deb887",@"burlywood", \
+        @"#5f9ea0",@"cadetblue", \
+        @"#7fff00",@"chartreuse", \
+        @"#d2691e",@"chocolate", \
+        @"#ff7f50",@"coral", \
+        @"#6495ed",@"cornflowerblue", \
+        @"#fff8dc",@"cornsilk", \
+        @"#dc143c",@"crimson", \
+        @"#00ffff",@"cyan", \
+        @"#00008b",@"darkblue", \
+        @"#008b8b",@"darkcyan", \
+        @"#b8860b",@"darkgoldenrod", \
+        @"#a9a9a9",@"darkgray", \
+        @"#006400",@"darkgreen", \
+        @"#bdb76b",@"darkkhaki", \
+        @"#8b008b",@"darkmagenta", \
+        @"#556b2f",@"darkolivegreen", \
+        @"#ff8c00",@"darkorange", \
+        @"#9932cc",@"darkorchid", \
+        @"#8b0000",@"darkred", \
+        @"#e9967a",@"darksalmon", \
+        @"#8fbc8f",@"darkseagreen", \
+        @"#483d8b",@"darkslateblue", \
+        @"#2f4f4f",@"darkslategray", \
+        @"#00ced1",@"darkturquoise", \
+        @"#9400d3",@"darkviolet", \
+        @"#ff1493",@"deeppink", \
+        @"#00bfff",@"deepskyblue", \
+        @"#696969",@"dimgray", \
+        @"#1e90ff",@"dodgerblue", \
+        @"#b22222",@"firebrick", \
+        @"#fffaf0",@"floralwhite", \
+        @"#228b22",@"forestgreen", \
+        @"#ff00ff",@"fuchsia", \
+        @"#dcdcdc",@"gainsboro", \
+        @"#f8f8ff",@"ghostwhite", \
+        @"#ffd700",@"gold", \
+        @"#daa520",@"goldenrod", \
+        @"#808080",@"gray", \
+        @"#008000",@"green", \
+        @"#adff2f",@"greenyellow", \
+        @"#f0fff0",@"honeydew", \
+        @"#ff69b4",@"hotpink", \
+        @"#cd5c5c",@"indianred ", \
+        @"#4b0082",@"indigo ", \
+        @"#fffff0",@"ivory", \
+        @"#f0e68c",@"khaki", \
+        @"#e6e6fa",@"lavender", \
+        @"#fff0f5",@"lavenderblush", \
+        @"#7cfc00",@"lawngreen", \
+        @"#fffacd",@"lemonchiffon", \
+        @"#add8e6",@"lightblue", \
+        @"#f08080",@"lightcoral", \
+        @"#e0ffff",@"lightcyan", \
+        @"#fafad2",@"lightgoldenrodyellow", \
+        @"#d3d3d3",@"lightgray", \
+        @"#90ee90",@"lightgreen", \
+        @"#ffb6c1",@"lightpink", \
+        @"#ffa07a",@"lightsalmon", \
+        @"#20b2aa",@"lightseagreen", \
+        @"#87cefa",@"lightskyblue", \
+        @"#8470ff",@"lightslateblue", \
+        @"#778899",@"lightslategray", \
+        @"#b0c4de",@"lightsteelblue", \
+        @"#ffffe0",@"lightyellow", \
+        @"#00ff00",@"lime", \
+        @"#32cd32",@"limegreen", \
+        @"#faf0e6",@"linen", \
+        @"#ff00ff",@"magenta", \
+        @"#800000",@"maroon", \
+        @"#66cdaa",@"mediumaquamarine", \
+        @"#0000cd",@"mediumblue", \
+        @"#ba55d3",@"mediumorchid", \
+        @"#9370d8",@"mediumpurple", \
+        @"#3cb371",@"mediumseagreen", \
+        @"#7b68ee",@"mediumslateblue", \
+        @"#00fa9a",@"mediumspringgreen", \
+        @"#48d1cc",@"mediumturquoise", \
+        @"#c71585",@"mediumvioletred", \
+        @"#191970",@"midnightblue", \
+        @"#f5fffa",@"mintcream", \
+        @"#ffe4e1",@"mistyrose", \
+        @"#ffe4b5",@"moccasin", \
+        @"#ffdead",@"navajowhite", \
+        @"#000080",@"navy", \
+        @"#fdf5e6",@"oldlace", \
+        @"#808000",@"olive", \
+        @"#6b8e23",@"olivedrab", \
+        @"#ffa500",@"orange", \
+        @"#ff4500",@"orangered", \
+        @"#da70d6",@"orchid", \
+        @"#eee8aa",@"palegoldenrod", \
+        @"#98fb98",@"palegreen", \
+        @"#afeeee",@"paleturquoise", \
+        @"#d87093",@"palevioletred", \
+        @"#ffefd5",@"papayawhip", \
+        @"#ffdab9",@"peachpuff", \
+        @"#cd853f",@"peru", \
+        @"#ffc0cb",@"pink", \
+        @"#dda0dd",@"plum", \
+        @"#b0e0e6",@"powderblue", \
+        @"#800080",@"purple", \
+        @"#ff0000",@"red", \
+        @"#bc8f8f",@"rosybrown", \
+        @"#4169e1",@"royalblue", \
+        @"#8b4513",@"saddlebrown", \
+        @"#fa8072",@"salmon", \
+        @"#f4a460",@"sandybrown", \
+        @"#2e8b57",@"seagreen", \
+        @"#fff5ee",@"seashell", \
+        @"#a0522d",@"sienna", \
+        @"#c0c0c0",@"silver", \
+        @"#87ceeb",@"skyblue", \
+        @"#6a5acd",@"slateblue", \
+        @"#708090",@"slategray", \
+        @"#fffafa",@"snow", \
+        @"#00ff7f",@"springgreen", \
+        @"#4682b4",@"steelblue", \
+        @"#d2b48c",@"tan", \
+        @"#008080",@"teal", \
+        @"#d8bfd8",@"thistle", \
+        @"#ff6347",@"tomato", \
+        @"#40e0d0",@"turquoise", \
+        @"#ee82ee",@"violet", \
+        @"#d02090",@"violetred", \
+        @"#f5deb3",@"wheat", \
+        @"#ffffff",@"white", \
+        @"#f5f5f5",@"whitesmoke", \
+        @"#ffff00",@"yellow", \
+        @"#9acd32",@"yellowgreen", \
+        NULL \
+    ];        
+    [namedColors retain];
 }
 
diff --git a/WebCore/kwq/KWQPainter.mm b/WebCore/kwq/KWQPainter.mm
index fb6fd53..5365b29 100644
--- a/WebCore/kwq/KWQPainter.mm
+++ b/WebCore/kwq/KWQPainter.mm
@@ -132,9 +132,15 @@ void QPainter::setPen(const QPen &pen)
 }
 
 
-void QPainter::setPen(PenStyle ps)
+void QPainter::setPen(PenStyle style)
 {
-    data->qpen.setStyle(ps);
+    QPen::QPenData *d = data->qpen.data;
+    if (d->count != 1) {
+        data->qpen.detach();
+        d = data->qpen.data;  
+    }
+
+    data->qpen.setStyle(style);
     data->qpen.setColor(Qt::black);
     data->qpen.setWidth(0);
 }
@@ -147,8 +153,14 @@ void QPainter::setBrush(const QBrush &brush)
 
 void QPainter::setBrush(BrushStyle style)
 {
-    // Either NoBrush or SolidPattern.
+    QBrush::QBrushData *d = data->qbrush.data;
+    if (d->count != 1) {
+        data->qbrush.detach();
+        d = data->qbrush.data;  
+    }
+
     data->qbrush.setStyle(style);
+    data->qbrush.setColor(Qt::black);
 }
 
 const QBrush &QPainter::brush() const
@@ -205,12 +217,14 @@ void QPainter::restore()
 void QPainter::drawRect(int x, int y, int w, int h)
 {
     _lockFocus();
-    if (data->qbrush.style() == SolidPattern){
-        //_setColorFromBrush();
-        //[NSBezierPath fillRect:NSMakeRect(x, y, w, h)];
+    if (data->qbrush.style() != NoBrush){
+        _setColorFromBrush();
+        [NSBezierPath fillRect:NSMakeRect(x, y, w, h)];
+    }
+    if (data->qpen.style() != NoPen){
+        _setColorFromPen();
+        [NSBezierPath strokeRect:NSMakeRect(x, y, w, h)];
     }
-    _setColorFromPen();
-    [NSBezierPath strokeRect:NSMakeRect(x, y, w, h)];
     _unlockFocus();
 }
 
@@ -252,12 +266,14 @@ void QPainter::drawEllipse(int x, int y, int w, int h)
     path = [NSBezierPath bezierPathWithOvalInRect: NSMakeRect (x, y, w, h)];
     
     _lockFocus();
-    if (data->qbrush.style() == SolidPattern){
+    if (data->qbrush.style() != NoBrush){
         _setColorFromBrush();
         [path fill];
     }
-    _setColorFromPen();
-    [path stroke];
+    if (data->qpen.style() != NoPen){
+        _setColorFromPen();
+        [path stroke];
+    }
     _unlockFocus();
 }
 
@@ -265,28 +281,31 @@ void QPainter::drawEllipse(int x, int y, int w, int h)
 // Only supports arc on circles.  That's all khtml needs.
 void QPainter::drawArc (int x, int y, int w, int h, int a, int alen)
 {
-    NSBezierPath *path;
-    float fa, falen;
+    if (data->qpen.style() != NoPen){
+
+        NSBezierPath *path;
+        float fa, falen;
     
-    if (w != h){
-        NSLog (@"ERROR (INCOMPLETE IMPLEMENTATION) void QPainter::drawArc (int x, int y, int w, int h, int a, int alen)\nOnly supports drawing arcs on a circle.\n");
-    }
+        if (w != h){
+            NSLog (@"ERROR (INCOMPLETE IMPLEMENTATION) void QPainter::drawArc (int x, int y, int w, int h, int a, int alen)\nOnly supports drawing arcs on a circle.\n");
+        }
+        
+        path = [[[NSBezierPath alloc] init] autorelease];
+        fa = (float)(a/16);
+        falen =  fa + (float)(alen/16);
+        [path appendBezierPathWithArcWithCenter: NSMakePoint(x + w/2, y + h/2) 
+                    radius: (float)(w/2) 
+                    startAngle: -fa
+                    endAngle: -falen
+                    clockwise: YES];
     
-    path = [[[NSBezierPath alloc] init] autorelease];
-    fa = (float)(a/16);
-    falen =  fa + (float)(alen/16);
-    [path appendBezierPathWithArcWithCenter: NSMakePoint(x + w/2, y + h/2) 
-                radius: (float)(w/2) 
-                startAngle: -fa
-                endAngle: -falen
-                clockwise: YES];
-
-    _lockFocus();
-
-    _setColorFromPen();
-    [path stroke];
-
-    _unlockFocus();
+        _lockFocus();
+    
+        _setColorFromPen();
+        [path stroke];
+    
+        _unlockFocus();
+    }
 }
 
 void QPainter::drawLineSegments(const QPointArray &points, int index, int nlines)
@@ -300,49 +319,49 @@ void QPainter::drawPolyline(const QPointArray &points, int index, int npoints)
 }
 
 
-void QPainter::drawPolygon(const QPointArray &points, bool winding, int index,
+void QPainter::drawPolygon(const QPointArray &points, bool winding, int index, 
     int npoints)
 {
     _drawPoints (points, winding, index, npoints, TRUE);
 }
 
 
-void QPainter::_drawPoints (const QPointArray &_points, bool winding, int index, int _npoints, bool fill)
+void QPainter::_drawPoints (const QPointArray &_points, bool winding, int index, 
+    int _npoints, bool fill)
 {
     NSBezierPath *path;
     float fa, falen;
     int i;
     int npoints = _npoints != -1 ? _npoints : _points.size()-index;
 
-        
-    {
-        NSPoint points[npoints];
-        
-        for (i = 0; i < npoints; i++){
-            points[i].x = _points[index+i].x();
-            points[i].y = _points[index+i].y();
-        }
-        
-        
-        path = [[[NSBezierPath alloc] init] autorelease];
-        [path appendBezierPathWithPoints: &points[0] count: npoints];
-        [path closePath];	// Qt always closes the path.  Determined empirically.
-        
-        _lockFocus();
+    NSPoint points[npoints];
+    
+    for (i = 0; i < npoints; i++){
+        points[i].x = _points[index+i].x();
+        points[i].y = _points[index+i].y();
+    }
+            
+    path = [[[NSBezierPath alloc] init] autorelease];
+    [path appendBezierPathWithPoints: &points[0] count: npoints];
+    [path closePath];	// Qt always closes the path.  Determined empirically.
+    
+    _lockFocus();
 
-        if (fill == TRUE && data->qbrush.style() == SolidPattern){
-            if (winding == TRUE)
-                [path setWindingRule: NSNonZeroWindingRule];
-            else
-                [path setWindingRule: NSEvenOddWindingRule];
-            _setColorFromBrush();
-            [path fill];
-        }
+    if (fill == TRUE && data->qbrush.style() != NoBrush){
+        if (winding == TRUE)
+            [path setWindingRule: NSNonZeroWindingRule];
+        else
+            [path setWindingRule: NSEvenOddWindingRule];
+        _setColorFromBrush();
+        [path fill];
+    }
+
+    if (data->qpen.style() != NoPen){
         _setColorFromPen();
         [path stroke];
-        
-        _unlockFocus();
     }
+    
+    _unlockFocus();
 }
 
 
diff --git a/WebCore/kwq/KWQPen.h b/WebCore/kwq/KWQPen.h
index 96eecca..dd09ac6 100644
--- a/WebCore/kwq/KWQPen.h
+++ b/WebCore/kwq/KWQPen.h
@@ -33,11 +33,13 @@
 #include <qnamespace.h>
 #include <qcolor.h>
 
+class QPainter;
 class QPenPrivate;
 
 // class QPen ==================================================================
 
 class QPen : public Qt {
+friend class QPainter;
 public:
 
     // typedefs ----------------------------------------------------------------
diff --git a/WebCore/kwq/qt/qcolor.h b/WebCore/kwq/qt/qcolor.h
index 4f1882f..471a449 100644
--- a/WebCore/kwq/qt/qcolor.h
+++ b/WebCore/kwq/qt/qcolor.h
@@ -84,6 +84,7 @@ public:
     void setRgb(int);
 
     void hsv(int *, int *, int *) const;
+    void setHsv(int h, int s, int v);
 
     QColor light(int f = 150) const;
     QColor dark(int f = 200) const;
diff --git a/WebCore/kwq/qt/qpen.h b/WebCore/kwq/qt/qpen.h
index 96eecca..dd09ac6 100644
--- a/WebCore/kwq/qt/qpen.h
+++ b/WebCore/kwq/qt/qpen.h
@@ -33,11 +33,13 @@
 #include <qnamespace.h>
 #include <qcolor.h>
 
+class QPainter;
 class QPenPrivate;
 
 // class QPen ==================================================================
 
 class QPen : public Qt {
+friend class QPainter;
 public:
 
     // typedefs ----------------------------------------------------------------
diff --git a/WebCore/src/kdelibs/khtml/css/html4.css b/WebCore/src/kdelibs/khtml/css/html4.css
index 4b97b7e..3c4c44f 100644
--- a/WebCore/src/kdelibs/khtml/css/html4.css
+++ b/WebCore/src/kdelibs/khtml/css/html4.css
@@ -181,6 +181,7 @@ TABLE {
 	vertical-align: middle;
 	text-align: justify;
 	border-spacing: 2px;
+	border-color: gray;
 	border-style: outset;
 	border-width: 0px;
 	padding: 1px;
diff --git a/WebCore/src/kwq/KWQColor.mm b/WebCore/src/kwq/KWQColor.mm
index dec0cd5..db15a4b 100644
--- a/WebCore/src/kwq/KWQColor.mm
+++ b/WebCore/src/kwq/KWQColor.mm
@@ -28,6 +28,9 @@
 
 #include <kwqdebug.h>
 
+static NSDictionary *namedColors;
+
+
 QRgb qRgb(int r, int g, int b)
 {
     return r << 16 | g << 8 | b;
@@ -119,57 +122,104 @@ static int hex2int( QChar hexchar )
     return v;
 }
 
+static bool looksLikeSixLetterHexColorString(const QString &string)
+{
+    bool result;
+    
+    result = TRUE;
+    
+    for (int i = 0; i < 6; i++) {
+        QChar c = string.at(i);
+        if ((c >= '0' && c <= '9') ||
+            (c >= 'a' && c <= 'f') ||
+            (c >= 'A' && c <= 'F')) {
+            continue;
+        }
+        else {
+            result = FALSE;
+            break;   
+        }
+    }
+    
+    return result;
+}
 
-void QColor::setNamedColor(const QString&name)
+static bool decodeColorFromHexColorString(const QString &string, int *r, int *g, int *b)
+{
+    bool decoded;
+    
+    decoded = FALSE;
+
+    if ((string.length() == 7 && string[0] == '#') ||
+        (string.length() == 6 && looksLikeSixLetterHexColorString(string))) {
+        int offset = 0;
+        int len;
+        if (string[0] == '#') {
+            offset = 1;
+            len = string.length() - 1;
+        }
+        else {
+            len = string.length();
+        }
+        const QChar *p = string.unicode() + offset;
+        if (len == 12) {
+            *r = (hex2int(p[0]) << 4) + hex2int(p[1]);
+            *g = (hex2int(p[4]) << 4) + hex2int(p[5]);
+            *b = (hex2int(p[8]) << 4) + hex2int(p[9]);
+            decoded = TRUE;    
+        } else if (len == 9) {
+            *r = (hex2int(p[0]) << 4) + hex2int(p[1]);
+            *g = (hex2int(p[3]) << 4) + hex2int(p[4]);
+            *b = (hex2int(p[6]) << 4) + hex2int(p[7]);
+            decoded = TRUE;    
+        } else if (len == 6) {
+            *r = (hex2int(p[0]) << 4) + hex2int(p[1]);
+            *g = (hex2int(p[2]) << 4) + hex2int(p[3]);
+            *b = (hex2int(p[4]) << 4) + hex2int(p[5]);
+            decoded = TRUE;    
+        } else if (len == 3) {
+            *r = (hex2int(p[0]) << 4) + hex2int(p[0]);
+            *g = (hex2int(p[1]) << 4) + hex2int(p[1]);
+            *b = (hex2int(p[2]) << 4) + hex2int(p[2]);
+            decoded = TRUE;    
+        }
+	}
+	    
+    return decoded;
+}
+
+void QColor::setNamedColor(const QString &name)
 {
     // FIXME: The combination of this code with the code that
     // is in khtml/misc/helper.cpp makes setting colors by
     // name a real crock. We need to look at the process
     // of mapping names to colors and figure out something
     // better.
+    // 
+    // [kocienda: 2001-11-08]: I've made some improvements
+    // but it's still a crock.
+    
+    int r, g, b;
+    
+    r = g = b = 0;
+    
     if ( name.isEmpty() ) {
-	setRgb( 0 );
+	    setRgb( 0 );
     } 
-    else if ((name.length() == 7 && name[0] == '#') || name.length() == 6) {
-        int offset = 0;
-        int len;
-        if (name[0] == '#') {
-            offset = 1;
-            len = name.length() - 1;
+    else if (decodeColorFromHexColorString(name, &r, &g, &b)) {
+	    setRgb(r, g, b);
+    } 
+    else {
+        NSString *hexString;
+        
+        hexString = [namedColors objectForKey:[QSTRING_TO_NSSTRING(name) lowercaseString]];
+        
+        if (hexString && decodeColorFromHexColorString(NSSTRING_TO_QSTRING(hexString), &r, &g, &b)) {
+            setRgb(r, g, b);
         }
         else {
-            len = name.length();
-        }
-        const QChar *p = name.unicode() + offset;
-        int r, g, b;
-        if ( len == 12 ) {
-            r = (hex2int(p[0]) << 4) + hex2int(p[1]);
-            g = (hex2int(p[4]) << 4) + hex2int(p[5]);
-            b = (hex2int(p[8]) << 4) + hex2int(p[9]);
-        } else if ( len == 9 ) {
-            r = (hex2int(p[0]) << 4) + hex2int(p[1]);
-            g = (hex2int(p[3]) << 4) + hex2int(p[4]);
-            b = (hex2int(p[6]) << 4) + hex2int(p[7]);
-        } else if ( len == 6 ) {
-            r = (hex2int(p[0]) << 4) + hex2int(p[1]);
-            g = (hex2int(p[2]) << 4) + hex2int(p[3]);
-            b = (hex2int(p[4]) << 4) + hex2int(p[5]);
-        } else if ( len == 3 ) {
-            r = (hex2int(p[0]) << 4) + hex2int(p[0]);
-            g = (hex2int(p[1]) << 4) + hex2int(p[1]);
-            b = (hex2int(p[2]) << 4) + hex2int(p[2]);
-        } else {
-            r = g = b = 0;
-	}
-	setRgb( r, g, b );
-
-    } else {
-	if (color != nil)
-            [color release];
-        color = [NSColor colorWithCatalogName: @"Apple" colorName: QSTRING_TO_NSSTRING(name)];
-        if (color == nil) {
             NSLog (@"WARNING %s:%d %s couldn't create color using name %s\n", __FILE__, __LINE__, __FUNCTION__, name.ascii());
-            color = [NSColor colorWithCalibratedRed:0 green:0 blue:0 alpha:1];
+            setRgb(0, 0, 0);
         }
     }
 }
@@ -279,41 +329,100 @@ void QColor::hsv(int *h, int *s, int *v) const
     }
 }
 
-QColor QColor::light(int f = 150) const
+void QColor::setHsv(int h, int s, int v)
 {
-    _logNotYetImplemented();
-    return *this;
+    int i, f, p, q, t;
+    
+    if( s == 0 ) {
+        // achromatic (gray)
+        setRgb(v, v, v);
+        return;
+    }
+    
+    h /= 60;			// sector 0 to 5
+    i = (int)floor(h);
+    f = h - i;			// factorial part of h
+    p = v * (1 - s);
+    q = v * (1 - s * f);
+    t = v * (1 - s * (1 - f));
+    
+    switch( i ) {
+        case 0:
+            setRgb(v, t, p);
+            break;
+        case 1:
+            setRgb(q, v, p);
+            break;
+        case 2:
+            setRgb(p, v, t);
+            break;
+        case 3:
+            setRgb(p, q, v);
+            break;
+        case 4:
+            setRgb(t, p, v);
+            break;
+        default:		// case 5:
+            setRgb(v, p, q);
+            break;
+    }
 }
 
 
-QColor QColor::dark(int f = 200) const
+QColor QColor::light(int factor) const
 {
-    QColor result;
     NSColor *newColor;
-    float factor;
 
-    if (f <= 0) {
-        result.setRgb(red(), green(), blue());
-        return result;
+    if (factor <= 0) {
+        return QColor(*this);
     }
-    else if (f < 100) {
-        // NOTE: this is actually a lighten operation
-        factor = 10000.0f / (float)f; 
-        newColor = [color highlightWithLevel:factor];    
+    else if (factor < 100) {
+        // NOTE: this is actually a darken operation
+        return dark(10000 / factor); 
     }
-    else if (f > 10000) {
-        newColor = [color shadowWithLevel:1.0f];    
+
+    int h, s, v;
+    
+    hsv(&h, &s, &v);
+    v = (factor * v) / 100;
+
+    if (v > 255) {
+        s -= (v - 255);
+        if (s < 0) {
+            s = 0;
+        }
+        v = 255;
     }
-    else {
-        factor = (float)f / 10000.0f;
-        newColor = [color shadowWithLevel:factor];    
+
+    QColor result;
+    
+    result.setHsv(h, s, v);
+    
+    return result;
+}
+
+
+QColor QColor::dark(int factor) const
+{
+    NSColor *newColor;
+
+    if (factor <= 0) {
+        return QColor(*this);
+    }
+    else if (factor < 100) {
+        // NOTE: this is actually a lighten operation
+        return light(10000 / factor); 
     }
 
-    result.setRgb(
-        (int)([color redComponent] * 255),
-        (int)([color greenComponent] * 255),
-        (int)([color blueComponent] * 255)
-    );
+    int h, s, v;
+    
+    hsv(&h, &s, &v);
+    v = (v * 100) / factor;
+
+    QColor result;
+    
+    result.setHsv(h, s, v);
+    
     return result;
 }
 
@@ -404,5 +513,152 @@ void QColor::initGlobalColors()
     stdcol[16].setRgb(   0, 128, 128 );
     stdcol[17].setRgb( 128,   0, 128 );
     stdcol[18].setRgb( 128, 128,   0 );
+
+    namedColors = [NSDictionary dictionaryWithObjectsAndKeys: \
+        @"#f0f8ff",@"aliceblue", \
+        @"#faebd7",@"antiquewhite", \
+        @"#00ffff",@"aqua", \
+        @"#7fffd4",@"aquamarine", \
+        @"#f0ffff",@"azure", \
+        @"#f5f5dc",@"beige", \
+        @"#ffe4c4",@"bisque", \
+        @"#000000",@"black", \
+        @"#ffebcd",@"blanchedalmond", \
+        @"#0000ff",@"blue", \
+        @"#8a2be2",@"blueviolet", \
+        @"#a52a2a",@"brown", \
+        @"#deb887",@"burlywood", \
+        @"#5f9ea0",@"cadetblue", \
+        @"#7fff00",@"chartreuse", \
+        @"#d2691e",@"chocolate", \
+        @"#ff7f50",@"coral", \
+        @"#6495ed",@"cornflowerblue", \
+        @"#fff8dc",@"cornsilk", \
+        @"#dc143c",@"crimson", \
+        @"#00ffff",@"cyan", \
+        @"#00008b",@"darkblue", \
+        @"#008b8b",@"darkcyan", \
+        @"#b8860b",@"darkgoldenrod", \
+        @"#a9a9a9",@"darkgray", \
+        @"#006400",@"darkgreen", \
+        @"#bdb76b",@"darkkhaki", \
+        @"#8b008b",@"darkmagenta", \
+        @"#556b2f",@"darkolivegreen", \
+        @"#ff8c00",@"darkorange", \
+        @"#9932cc",@"darkorchid", \
+        @"#8b0000",@"darkred", \
+        @"#e9967a",@"darksalmon", \
+        @"#8fbc8f",@"darkseagreen", \
+        @"#483d8b",@"darkslateblue", \
+        @"#2f4f4f",@"darkslategray", \
+        @"#00ced1",@"darkturquoise", \
+        @"#9400d3",@"darkviolet", \
+        @"#ff1493",@"deeppink", \
+        @"#00bfff",@"deepskyblue", \
+        @"#696969",@"dimgray", \
+        @"#1e90ff",@"dodgerblue", \
+        @"#b22222",@"firebrick", \
+        @"#fffaf0",@"floralwhite", \
+        @"#228b22",@"forestgreen", \
+        @"#ff00ff",@"fuchsia", \
+        @"#dcdcdc",@"gainsboro", \
+        @"#f8f8ff",@"ghostwhite", \
+        @"#ffd700",@"gold", \
+        @"#daa520",@"goldenrod", \
+        @"#808080",@"gray", \
+        @"#008000",@"green", \
+        @"#adff2f",@"greenyellow", \
+        @"#f0fff0",@"honeydew", \
+        @"#ff69b4",@"hotpink", \
+        @"#cd5c5c",@"indianred ", \
+        @"#4b0082",@"indigo ", \
+        @"#fffff0",@"ivory", \
+        @"#f0e68c",@"khaki", \
+        @"#e6e6fa",@"lavender", \
+        @"#fff0f5",@"lavenderblush", \
+        @"#7cfc00",@"lawngreen", \
+        @"#fffacd",@"lemonchiffon", \
+        @"#add8e6",@"lightblue", \
+        @"#f08080",@"lightcoral", \
+        @"#e0ffff",@"lightcyan", \
+        @"#fafad2",@"lightgoldenrodyellow", \
+        @"#d3d3d3",@"lightgray", \
+        @"#90ee90",@"lightgreen", \
+        @"#ffb6c1",@"lightpink", \
+        @"#ffa07a",@"lightsalmon", \
+        @"#20b2aa",@"lightseagreen", \
+        @"#87cefa",@"lightskyblue", \
+        @"#8470ff",@"lightslateblue", \
+        @"#778899",@"lightslategray", \
+        @"#b0c4de",@"lightsteelblue", \
+        @"#ffffe0",@"lightyellow", \
+        @"#00ff00",@"lime", \
+        @"#32cd32",@"limegreen", \
+        @"#faf0e6",@"linen", \
+        @"#ff00ff",@"magenta", \
+        @"#800000",@"maroon", \
+        @"#66cdaa",@"mediumaquamarine", \
+        @"#0000cd",@"mediumblue", \
+        @"#ba55d3",@"mediumorchid", \
+        @"#9370d8",@"mediumpurple", \
+        @"#3cb371",@"mediumseagreen", \
+        @"#7b68ee",@"mediumslateblue", \
+        @"#00fa9a",@"mediumspringgreen", \
+        @"#48d1cc",@"mediumturquoise", \
+        @"#c71585",@"mediumvioletred", \
+        @"#191970",@"midnightblue", \
+        @"#f5fffa",@"mintcream", \
+        @"#ffe4e1",@"mistyrose", \
+        @"#ffe4b5",@"moccasin", \
+        @"#ffdead",@"navajowhite", \
+        @"#000080",@"navy", \
+        @"#fdf5e6",@"oldlace", \
+        @"#808000",@"olive", \
+        @"#6b8e23",@"olivedrab", \
+        @"#ffa500",@"orange", \
+        @"#ff4500",@"orangered", \
+        @"#da70d6",@"orchid", \
+        @"#eee8aa",@"palegoldenrod", \
+        @"#98fb98",@"palegreen", \
+        @"#afeeee",@"paleturquoise", \
+        @"#d87093",@"palevioletred", \
+        @"#ffefd5",@"papayawhip", \
+        @"#ffdab9",@"peachpuff", \
+        @"#cd853f",@"peru", \
+        @"#ffc0cb",@"pink", \
+        @"#dda0dd",@"plum", \
+        @"#b0e0e6",@"powderblue", \
+        @"#800080",@"purple", \
+        @"#ff0000",@"red", \
+        @"#bc8f8f",@"rosybrown", \
+        @"#4169e1",@"royalblue", \
+        @"#8b4513",@"saddlebrown", \
+        @"#fa8072",@"salmon", \
+        @"#f4a460",@"sandybrown", \
+        @"#2e8b57",@"seagreen", \
+        @"#fff5ee",@"seashell", \
+        @"#a0522d",@"sienna", \
+        @"#c0c0c0",@"silver", \
+        @"#87ceeb",@"skyblue", \
+        @"#6a5acd",@"slateblue", \
+        @"#708090",@"slategray", \
+        @"#fffafa",@"snow", \
+        @"#00ff7f",@"springgreen", \
+        @"#4682b4",@"steelblue", \
+        @"#d2b48c",@"tan", \
+        @"#008080",@"teal", \
+        @"#d8bfd8",@"thistle", \
+        @"#ff6347",@"tomato", \
+        @"#40e0d0",@"turquoise", \
+        @"#ee82ee",@"violet", \
+        @"#d02090",@"violetred", \
+        @"#f5deb3",@"wheat", \
+        @"#ffffff",@"white", \
+        @"#f5f5f5",@"whitesmoke", \
+        @"#ffff00",@"yellow", \
+        @"#9acd32",@"yellowgreen", \
+        NULL \
+    ];        
+    [namedColors retain];
 }
 
diff --git a/WebCore/src/kwq/KWQPainter.mm b/WebCore/src/kwq/KWQPainter.mm
index fb6fd53..5365b29 100644
--- a/WebCore/src/kwq/KWQPainter.mm
+++ b/WebCore/src/kwq/KWQPainter.mm
@@ -132,9 +132,15 @@ void QPainter::setPen(const QPen &pen)
 }
 
 
-void QPainter::setPen(PenStyle ps)
+void QPainter::setPen(PenStyle style)
 {
-    data->qpen.setStyle(ps);
+    QPen::QPenData *d = data->qpen.data;
+    if (d->count != 1) {
+        data->qpen.detach();
+        d = data->qpen.data;  
+    }
+
+    data->qpen.setStyle(style);
     data->qpen.setColor(Qt::black);
     data->qpen.setWidth(0);
 }
@@ -147,8 +153,14 @@ void QPainter::setBrush(const QBrush &brush)
 
 void QPainter::setBrush(BrushStyle style)
 {
-    // Either NoBrush or SolidPattern.
+    QBrush::QBrushData *d = data->qbrush.data;
+    if (d->count != 1) {
+        data->qbrush.detach();
+        d = data->qbrush.data;  
+    }
+
     data->qbrush.setStyle(style);
+    data->qbrush.setColor(Qt::black);
 }
 
 const QBrush &QPainter::brush() const
@@ -205,12 +217,14 @@ void QPainter::restore()
 void QPainter::drawRect(int x, int y, int w, int h)
 {
     _lockFocus();
-    if (data->qbrush.style() == SolidPattern){
-        //_setColorFromBrush();
-        //[NSBezierPath fillRect:NSMakeRect(x, y, w, h)];
+    if (data->qbrush.style() != NoBrush){
+        _setColorFromBrush();
+        [NSBezierPath fillRect:NSMakeRect(x, y, w, h)];
+    }
+    if (data->qpen.style() != NoPen){
+        _setColorFromPen();
+        [NSBezierPath strokeRect:NSMakeRect(x, y, w, h)];
     }
-    _setColorFromPen();
-    [NSBezierPath strokeRect:NSMakeRect(x, y, w, h)];
     _unlockFocus();
 }
 
@@ -252,12 +266,14 @@ void QPainter::drawEllipse(int x, int y, int w, int h)
     path = [NSBezierPath bezierPathWithOvalInRect: NSMakeRect (x, y, w, h)];
     
     _lockFocus();
-    if (data->qbrush.style() == SolidPattern){
+    if (data->qbrush.style() != NoBrush){
         _setColorFromBrush();
         [path fill];
     }
-    _setColorFromPen();
-    [path stroke];
+    if (data->qpen.style() != NoPen){
+        _setColorFromPen();
+        [path stroke];
+    }
     _unlockFocus();
 }
 
@@ -265,28 +281,31 @@ void QPainter::drawEllipse(int x, int y, int w, int h)
 // Only supports arc on circles.  That's all khtml needs.
 void QPainter::drawArc (int x, int y, int w, int h, int a, int alen)
 {
-    NSBezierPath *path;
-    float fa, falen;
+    if (data->qpen.style() != NoPen){
+
+        NSBezierPath *path;
+        float fa, falen;
     
-    if (w != h){
-        NSLog (@"ERROR (INCOMPLETE IMPLEMENTATION) void QPainter::drawArc (int x, int y, int w, int h, int a, int alen)\nOnly supports drawing arcs on a circle.\n");
-    }
+        if (w != h){
+            NSLog (@"ERROR (INCOMPLETE IMPLEMENTATION) void QPainter::drawArc (int x, int y, int w, int h, int a, int alen)\nOnly supports drawing arcs on a circle.\n");
+        }
+        
+        path = [[[NSBezierPath alloc] init] autorelease];
+        fa = (float)(a/16);
+        falen =  fa + (float)(alen/16);
+        [path appendBezierPathWithArcWithCenter: NSMakePoint(x + w/2, y + h/2) 
+                    radius: (float)(w/2) 
+                    startAngle: -fa
+                    endAngle: -falen
+                    clockwise: YES];
     
-    path = [[[NSBezierPath alloc] init] autorelease];
-    fa = (float)(a/16);
-    falen =  fa + (float)(alen/16);
-    [path appendBezierPathWithArcWithCenter: NSMakePoint(x + w/2, y + h/2) 
-                radius: (float)(w/2) 
-                startAngle: -fa
-                endAngle: -falen
-                clockwise: YES];
-
-    _lockFocus();
-
-    _setColorFromPen();
-    [path stroke];
-
-    _unlockFocus();
+        _lockFocus();
+    
+        _setColorFromPen();
+        [path stroke];
+    
+        _unlockFocus();
+    }
 }
 
 void QPainter::drawLineSegments(const QPointArray &points, int index, int nlines)
@@ -300,49 +319,49 @@ void QPainter::drawPolyline(const QPointArray &points, int index, int npoints)
 }
 
 
-void QPainter::drawPolygon(const QPointArray &points, bool winding, int index,
+void QPainter::drawPolygon(const QPointArray &points, bool winding, int index, 
     int npoints)
 {
     _drawPoints (points, winding, index, npoints, TRUE);
 }
 
 
-void QPainter::_drawPoints (const QPointArray &_points, bool winding, int index, int _npoints, bool fill)
+void QPainter::_drawPoints (const QPointArray &_points, bool winding, int index, 
+    int _npoints, bool fill)
 {
     NSBezierPath *path;
     float fa, falen;
     int i;
     int npoints = _npoints != -1 ? _npoints : _points.size()-index;
 
-        
-    {
-        NSPoint points[npoints];
-        
-        for (i = 0; i < npoints; i++){
-            points[i].x = _points[index+i].x();
-            points[i].y = _points[index+i].y();
-        }
-        
-        
-        path = [[[NSBezierPath alloc] init] autorelease];
-        [path appendBezierPathWithPoints: &points[0] count: npoints];
-        [path closePath];	// Qt always closes the path.  Determined empirically.
-        
-        _lockFocus();
+    NSPoint points[npoints];
+    
+    for (i = 0; i < npoints; i++){
+        points[i].x = _points[index+i].x();
+        points[i].y = _points[index+i].y();
+    }
+            
+    path = [[[NSBezierPath alloc] init] autorelease];
+    [path appendBezierPathWithPoints: &points[0] count: npoints];
+    [path closePath];	// Qt always closes the path.  Determined empirically.
+    
+    _lockFocus();
 
-        if (fill == TRUE && data->qbrush.style() == SolidPattern){
-            if (winding == TRUE)
-                [path setWindingRule: NSNonZeroWindingRule];
-            else
-                [path setWindingRule: NSEvenOddWindingRule];
-            _setColorFromBrush();
-            [path fill];
-        }
+    if (fill == TRUE && data->qbrush.style() != NoBrush){
+        if (winding == TRUE)
+            [path setWindingRule: NSNonZeroWindingRule];
+        else
+            [path setWindingRule: NSEvenOddWindingRule];
+        _setColorFromBrush();
+        [path fill];
+    }
+
+    if (data->qpen.style() != NoPen){
         _setColorFromPen();
         [path stroke];
-        
-        _unlockFocus();
     }
+    
+    _unlockFocus();
 }
 
 
diff --git a/WebCore/src/kwq/qt/qcolor.h b/WebCore/src/kwq/qt/qcolor.h
index 4f1882f..471a449 100644
--- a/WebCore/src/kwq/qt/qcolor.h
+++ b/WebCore/src/kwq/qt/qcolor.h
@@ -84,6 +84,7 @@ public:
     void setRgb(int);
 
     void hsv(int *, int *, int *) const;
+    void setHsv(int h, int s, int v);
 
     QColor light(int f = 150) const;
     QColor dark(int f = 200) const;
diff --git a/WebCore/src/kwq/qt/qpen.h b/WebCore/src/kwq/qt/qpen.h
index 96eecca..dd09ac6 100644
--- a/WebCore/src/kwq/qt/qpen.h
+++ b/WebCore/src/kwq/qt/qpen.h
@@ -33,11 +33,13 @@
 #include <qnamespace.h>
 #include <qcolor.h>
 
+class QPainter;
 class QPenPrivate;
 
 // class QPen ==================================================================
 
 class QPen : public Qt {
+friend class QPainter;
 public:
 
     // typedefs ----------------------------------------------------------------
diff --git a/WebKit/WebKit.pbproj/kocienda.pbxuser b/WebKit/WebKit.pbproj/kocienda.pbxuser
index a236a49..223994d 100644
--- a/WebKit/WebKit.pbproj/kocienda.pbxuser
+++ b/WebKit/WebKit.pbproj/kocienda.pbxuser
@@ -15,9 +15,10 @@
 					ActiveTab = 0;
 					Frame = "{{0, 23}, {1207, 1005}}";
 					Split0 = {
+						ActiveTab = 2;
 						Frame = "{{313, 0}, {894, 1005}}";
 						Split0 = {
-							Frame = "{{0, 25}, {894, 980}}";
+							Frame = "{{0, 663}, {894, 342}}";
 						};
 						SplitCount = 1;
 						Tab0 = {

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list