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

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


The following commit has been merged in the debian/unstable branch:
commit ad730ae5fb226cab81d90814291b5e1d45168fd9
Author: rjw <rjw at 268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Wed Nov 14 01:23:34 2001 +0000

    More optimizations to improve performance of font metrics.
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@450 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/kwq/KWQFontMetrics.mm b/WebCore/kwq/KWQFontMetrics.mm
index dea661f..6e00264 100644
--- a/WebCore/kwq/KWQFontMetrics.mm
+++ b/WebCore/kwq/KWQFontMetrics.mm
@@ -28,51 +28,124 @@
 #include <qfontmetrics.h>
 
 #define ROUND_TO_INT(f) ((int)rint((f)))
+const float LargeNumberForText = 1.0e7;
+
+ at interface WSMetricsInfo : NSObject
+{
+    NSFont *font;
+    NSTextContainer *textContainer;
+    NSLayoutManager *layoutManager;
+    NSDictionary *attributes;
+    NSMutableDictionary *boundingRectCache;
+}
+
++ (WSMetricsInfo *)getMetricsForFont: (NSFont *)aFont;
++ (void)setMetric: (WSMetricsInfo *)info forFont: (NSFont *)aFont;
+- initWithFont: (NSFont *)aFont;
+- (NSRect)rectForString:(NSString *)string;
+
+ at end
+
+static NSMutableDictionary *metricsCache = nil;
+
+ at implementation WSMetricsInfo
++ (WSMetricsInfo *)getMetricsForFont: (NSFont *)aFont
+{
+    WSMetricsInfo *info = (WSMetricsInfo *)[metricsCache objectForKey: aFont];
+    if (info == nil){
+        info = [[WSMetricsInfo alloc] initWithFont: aFont];
+        [WSMetricsInfo setMetric: info forFont: aFont];
+        [info release];
+    }
+    return info;
+}
++ (void)setMetric: (WSMetricsInfo *)info forFont: (NSFont *)aFont
+{
+    if (metricsCache == nil)
+        metricsCache = [[NSMutableDictionary alloc] init];
+    [metricsCache setObject: info forKey: aFont];
+}
+
+- initWithFont: (NSFont *)aFont
+{
+    [super init];
+    font = [aFont retain];
+    textContainer = [[NSTextContainer alloc] initWithContainerSize:NSMakeSize(LargeNumberForText, LargeNumberForText)];
+    layoutManager = [[NSLayoutManager alloc] init];
+    [layoutManager addTextContainer: textContainer];
+    attributes = [[NSDictionary dictionaryWithObjectsAndKeys:font, NSFontAttributeName, nil] retain];
+    return self;
+}
+
+- (NSRect)rectForString:(NSString *)string
+ {
+    NSValue *cachedValue;
+    NSTextStorage *textStorage;
+
+    if (boundingRectCache == nil){
+        boundingRectCache = [[NSMutableDictionary alloc] init];
+    }
+
+    cachedValue = [boundingRectCache objectForKey: string];
+    if (cachedValue != nil){
+        return [cachedValue rectValue];
+    }
+    
+    if (textContainer == nil){
+        textContainer = [[NSTextContainer alloc] initWithContainerSize:NSMakeSize(LargeNumberForText, LargeNumberForText)];
+        layoutManager = [[NSLayoutManager alloc] init];
+        [layoutManager addTextContainer: textContainer];
+        attributes = [[NSDictionary dictionaryWithObjectsAndKeys:font, NSFontAttributeName, nil] retain];
+    }
+
+    textStorage = [[NSTextStorage alloc] initWithString:string attributes: attributes];
+    [textStorage addLayoutManager: layoutManager];
+    
+    unsigned numberOfGlyphs = [layoutManager numberOfGlyphs];
+    NSRect glyphRect = [layoutManager boundingRectForGlyphRange: NSMakeRange (0, numberOfGlyphs) inTextContainer: textContainer];
+
+    [textStorage removeLayoutManager: layoutManager];
+    [textStorage release];
+    
+    [boundingRectCache setObject: [NSValue valueWithRect: glyphRect] forKey: string];
+        
+    return glyphRect;
+}
+ 
+- (void)dealloc
+{
+    [textContainer release];
+    [layoutManager release];
+    [attributes release];
+}
+
+ at end
+
 
 struct QFontMetricsPrivate {
 friend class QFontMetrics;
 public:
-    QFontMetricsPrivate() : 
-        font(0), 
-        textContainer(0), 
-        layoutManager(0),
-        attributes(0),
-        boundingRectCache(0),
-        lastLength(0)
+    QFontMetricsPrivate(NSFont *aFont) 
     {
+        font = [aFont retain];
+        info = [[WSMetricsInfo getMetricsForFont: aFont] retain];
     }
     
     ~QFontMetricsPrivate()
     {
+        if (info){
+            [info release];
+            info = 0;
+        }
         if (font){
             [font release];
             font = 0;
         }
-        if (textContainer){
-            [textContainer release];
-            textContainer = 0;
-        }
-        if (layoutManager){
-            [layoutManager release];
-            layoutManager = 0;
-        }
-        if (attributes){
-            [attributes release];
-            attributes = 0;
-        }
-        if (boundingRectCache){
-            [boundingRectCache release];
-            boundingRectCache = 0;
-        }
     }
     
 private:
+    WSMetricsInfo *info;
     NSFont *font;
-    NSTextContainer *textContainer;
-    NSLayoutManager *layoutManager;
-    NSDictionary *attributes;
-    NSMutableDictionary *boundingRectCache;
-    int lastLength;
 };
 
 
@@ -84,39 +157,23 @@ QFontMetrics::QFontMetrics()
 
 QFontMetrics::QFontMetrics(const QFont &withFont)
 {
-    _initializeWithData (0);
-    data->font = [withFont.font retain];
+    _initializeWithFont (withFont.font);
 }
 
 
 QFontMetrics::QFontMetrics(const QFontMetrics &copyFrom)
 {
-    _initializeWithData(copyFrom.data);
+    _initializeWithFont(copyFrom.data->font);
 }
 
 void QFontMetrics::_initialize()
 {
-    _initializeWithData (0);
+    _initializeWithFont (0);
 }
 
-void QFontMetrics::_initializeWithData (QFontMetricsPrivate *withData)
+void QFontMetrics::_initializeWithFont (NSFont *font)
 {
-    data = new QFontMetricsPrivate();
-
-    if (withData == 0){
-        data->font = [QFont::defaultNSFont() retain];
-        data->textContainer = 0;
-        data->layoutManager = 0;
-        data->attributes = 0;
-        data->boundingRectCache = 0;
-    }
-    else {
-        data->font = [withData->font retain];
-        data->textContainer = [withData->textContainer retain];
-        data->layoutManager = [withData->layoutManager retain];
-        data->attributes = [withData->attributes retain];
-        data->boundingRectCache = [withData->boundingRectCache retain];
-    }
+    data = new QFontMetricsPrivate(font);
 }
 
 void QFontMetrics::_free(){
@@ -147,51 +204,12 @@ int QFontMetrics::height() const
     return ROUND_TO_INT([data->font defaultLineHeightForFont]);
 }
 
-const float LargeNumberForText = 1.0e7;
-
-NSRect QFontMetrics::_rectOfString(NSString *string) const
- {
-    NSValue *cachedValue;
-    NSTextStorage *textStorage;
-
-    if (data->boundingRectCache == nil){
-        data->boundingRectCache = [[NSMutableDictionary alloc] init];
-    }
-
-    cachedValue = [data->boundingRectCache objectForKey: string];
-    if (cachedValue != nil){
-        return [cachedValue rectValue];
-    }
-    
-    if (data->textContainer == nil){
-        data->textContainer = [[NSTextContainer alloc] initWithContainerSize:NSMakeSize(LargeNumberForText, LargeNumberForText)];
-        data->layoutManager = [[NSLayoutManager alloc] init];
-        [data->layoutManager addTextContainer: data->textContainer];
-        data->attributes = [[NSDictionary dictionaryWithObjectsAndKeys:data->font, NSFontAttributeName, nil] retain];
-    }
-
-    textStorage = [[NSTextStorage alloc] initWithString:string attributes: data->attributes];
-    [textStorage addLayoutManager: data->layoutManager];
-    
-    unsigned numberOfGlyphs = [data->layoutManager numberOfGlyphs];
-    NSRect glyphRect = [data->layoutManager boundingRectForGlyphRange: NSMakeRange (0, numberOfGlyphs) inTextContainer: data->textContainer];
-
-    [textStorage removeLayoutManager: data->layoutManager];
-    [textStorage release];
-    
-    [data->boundingRectCache setObject: [NSValue valueWithRect: glyphRect] forKey: string];
-        
-    return glyphRect;
-}
-
-
-
 
 int QFontMetrics::width(QChar qc) const
 {
     ushort c = qc.unicode();
     NSString *string = [NSString stringWithCharacters: (const unichar *)&c length: 1];
-    int stringWidth = ROUND_TO_INT(_rectOfString(string).size.width);
+    int stringWidth = ROUND_TO_INT([data->info rectForString: string].size.width);
     return stringWidth;
 }
 
@@ -200,7 +218,7 @@ int QFontMetrics::width(QChar qc) const
 int QFontMetrics::width(char c) const
 {
     NSString *string = [NSString stringWithCString: &c length: 1];
-    int stringWidth = ROUND_TO_INT(_rectOfString(string).size.width);
+    int stringWidth = ROUND_TO_INT([data->info rectForString: string].size.width);
     return stringWidth;
 }
 
@@ -213,7 +231,7 @@ int QFontMetrics::width(const QString &qstring, int len) const
         string = QSTRING_TO_NSSTRING_LENGTH (qstring, len);
     else
         string = QSTRING_TO_NSSTRING (qstring);
-    int stringWidth = ROUND_TO_INT(_rectOfString(string).size.width);
+    int stringWidth = ROUND_TO_INT([data->info rectForString: string].size.width);
     return stringWidth;
 }
 
@@ -232,7 +250,7 @@ QRect QFontMetrics::boundingRect(const QString &qstring, int len) const
         string = QSTRING_TO_NSSTRING_LENGTH (qstring, len);
     else
         string = QSTRING_TO_NSSTRING (qstring);
-    NSRect rect = _rectOfString(string);
+    NSRect rect = [data->info rectForString: string];
 
     return QRect(ROUND_TO_INT(rect.origin.x),
             ROUND_TO_INT(rect.origin.y),
@@ -245,7 +263,7 @@ QRect QFontMetrics::boundingRect(QChar qc) const
 {
     ushort c = qc.unicode();
     NSString *string = [NSString stringWithCharacters: (const unichar *)&c length: 1];
-    NSRect rect = _rectOfString(string);
+    NSRect rect = [data->info rectForString: string];
 
     return QRect(ROUND_TO_INT(rect.origin.x),
             ROUND_TO_INT(rect.origin.y),
@@ -262,17 +280,15 @@ QSize QFontMetrics::size(int, const QString &qstring, int len, int tabstops,
     }
     
     NSLog (@"string = %@\n", QSTRING_TO_NSSTRING(qstring));
-    int w, h;
     NSString *string;
 
     if (len != -1)
         string = QSTRING_TO_NSSTRING_LENGTH (qstring, len);
     else
         string = QSTRING_TO_NSSTRING (qstring);
-    w = (int)[data->font widthOfString: string];
-    h = height();
+    NSRect rect = [data->info rectForString: string];
 
-    return QSize (w,h);
+    return QSize (ROUND_TO_INT(rect.size.width),ROUND_TO_INT(rect.size.height));
 }
 
 
@@ -293,7 +309,7 @@ int QFontMetrics::leftBearing(QChar) const
 QFontMetrics &QFontMetrics::operator=(const QFontMetrics &assignFrom)
 {
     _free();
-    _initializeWithData(assignFrom.data);
+    _initializeWithFont(assignFrom.data->font);
     return *this;    
 }
 
diff --git a/WebCore/kwq/KWQPaintDevice.mm b/WebCore/kwq/KWQPaintDevice.mm
index fa67428..925ffbc 100644
--- a/WebCore/kwq/KWQPaintDevice.mm
+++ b/WebCore/kwq/KWQPaintDevice.mm
@@ -30,7 +30,7 @@
 
 QPaintDevice::~QPaintDevice()
 {
-    _logNeverImplemented();
+    // This space intentionally left blank.
 }
 
 
diff --git a/WebCore/kwq/KWQScrollView.mm b/WebCore/kwq/KWQScrollView.mm
index 5a9eb99..4b7725c 100644
--- a/WebCore/kwq/KWQScrollView.mm
+++ b/WebCore/kwq/KWQScrollView.mm
@@ -177,7 +177,6 @@ void QScrollView::removeChild(QWidget* child)
 
 void QScrollView::resizeContents(int w, int h)
 {
-    NSLog (@"KWQScrollView resizing to w %d, h %d");
     resize (w, h);
 }
 
diff --git a/WebCore/kwq/KWQView.mm b/WebCore/kwq/KWQView.mm
index f4aa132..da4d60b 100644
--- a/WebCore/kwq/KWQView.mm
+++ b/WebCore/kwq/KWQView.mm
@@ -103,14 +103,31 @@
     return self;
 }
 
+#ifdef DELAY_LAYOUT
+- delayLayout: sender
+{
+    [NSObject cancelPreviousPerformRequestsWithTarget: self selector: @selector(delayLayout:) object: self];
+    NSLog (@"KWQHTMLView:  delayLayout called");
+    [self setNeedsLayout: YES];
+    [self setNeedsDisplay: YES];
+}
+
 -(void)notificationReceived:(NSNotification *)notification
 {
     if ([[notification name] rangeOfString: @"uri-fin-"].location == 0){
         NSLog (@"KWQHTMLView: Received notification, %@", [notification name]);
+        [self performSelector:@selector(delayLayout:) withObject:self afterDelay:(NSTimeInterval)0.5];
+    }
+}
+#else
+-(void)notificationReceived:(NSNotification *)notification
+{
+    if ([[notification name] rangeOfString: @"uri-fin-"].location == 0){
         [self setNeedsLayout: YES];
         [self setNeedsDisplay: YES];
     }
 }
+#endif
 
 - (void)layout
 {
@@ -189,6 +206,21 @@
     part->openURL (url);
 }
 
+- (void)mouseUp: (NSEvent *)event
+{
+    NSLog (@"mouseUp %@", event);
+}
+
+- (void)mouseDown: (NSEvent *)event
+{
+    NSLog (@"mouseDown %@", event);
+}
+
+- (void)mouseDragged: (NSEvent *)event
+{
+    NSLog (@"mouseDragged %@", event);
+}
+
 
 @end
 
diff --git a/WebCore/src/kwq/KWQFontMetrics.mm b/WebCore/src/kwq/KWQFontMetrics.mm
index dea661f..6e00264 100644
--- a/WebCore/src/kwq/KWQFontMetrics.mm
+++ b/WebCore/src/kwq/KWQFontMetrics.mm
@@ -28,51 +28,124 @@
 #include <qfontmetrics.h>
 
 #define ROUND_TO_INT(f) ((int)rint((f)))
+const float LargeNumberForText = 1.0e7;
+
+ at interface WSMetricsInfo : NSObject
+{
+    NSFont *font;
+    NSTextContainer *textContainer;
+    NSLayoutManager *layoutManager;
+    NSDictionary *attributes;
+    NSMutableDictionary *boundingRectCache;
+}
+
++ (WSMetricsInfo *)getMetricsForFont: (NSFont *)aFont;
++ (void)setMetric: (WSMetricsInfo *)info forFont: (NSFont *)aFont;
+- initWithFont: (NSFont *)aFont;
+- (NSRect)rectForString:(NSString *)string;
+
+ at end
+
+static NSMutableDictionary *metricsCache = nil;
+
+ at implementation WSMetricsInfo
++ (WSMetricsInfo *)getMetricsForFont: (NSFont *)aFont
+{
+    WSMetricsInfo *info = (WSMetricsInfo *)[metricsCache objectForKey: aFont];
+    if (info == nil){
+        info = [[WSMetricsInfo alloc] initWithFont: aFont];
+        [WSMetricsInfo setMetric: info forFont: aFont];
+        [info release];
+    }
+    return info;
+}
++ (void)setMetric: (WSMetricsInfo *)info forFont: (NSFont *)aFont
+{
+    if (metricsCache == nil)
+        metricsCache = [[NSMutableDictionary alloc] init];
+    [metricsCache setObject: info forKey: aFont];
+}
+
+- initWithFont: (NSFont *)aFont
+{
+    [super init];
+    font = [aFont retain];
+    textContainer = [[NSTextContainer alloc] initWithContainerSize:NSMakeSize(LargeNumberForText, LargeNumberForText)];
+    layoutManager = [[NSLayoutManager alloc] init];
+    [layoutManager addTextContainer: textContainer];
+    attributes = [[NSDictionary dictionaryWithObjectsAndKeys:font, NSFontAttributeName, nil] retain];
+    return self;
+}
+
+- (NSRect)rectForString:(NSString *)string
+ {
+    NSValue *cachedValue;
+    NSTextStorage *textStorage;
+
+    if (boundingRectCache == nil){
+        boundingRectCache = [[NSMutableDictionary alloc] init];
+    }
+
+    cachedValue = [boundingRectCache objectForKey: string];
+    if (cachedValue != nil){
+        return [cachedValue rectValue];
+    }
+    
+    if (textContainer == nil){
+        textContainer = [[NSTextContainer alloc] initWithContainerSize:NSMakeSize(LargeNumberForText, LargeNumberForText)];
+        layoutManager = [[NSLayoutManager alloc] init];
+        [layoutManager addTextContainer: textContainer];
+        attributes = [[NSDictionary dictionaryWithObjectsAndKeys:font, NSFontAttributeName, nil] retain];
+    }
+
+    textStorage = [[NSTextStorage alloc] initWithString:string attributes: attributes];
+    [textStorage addLayoutManager: layoutManager];
+    
+    unsigned numberOfGlyphs = [layoutManager numberOfGlyphs];
+    NSRect glyphRect = [layoutManager boundingRectForGlyphRange: NSMakeRange (0, numberOfGlyphs) inTextContainer: textContainer];
+
+    [textStorage removeLayoutManager: layoutManager];
+    [textStorage release];
+    
+    [boundingRectCache setObject: [NSValue valueWithRect: glyphRect] forKey: string];
+        
+    return glyphRect;
+}
+ 
+- (void)dealloc
+{
+    [textContainer release];
+    [layoutManager release];
+    [attributes release];
+}
+
+ at end
+
 
 struct QFontMetricsPrivate {
 friend class QFontMetrics;
 public:
-    QFontMetricsPrivate() : 
-        font(0), 
-        textContainer(0), 
-        layoutManager(0),
-        attributes(0),
-        boundingRectCache(0),
-        lastLength(0)
+    QFontMetricsPrivate(NSFont *aFont) 
     {
+        font = [aFont retain];
+        info = [[WSMetricsInfo getMetricsForFont: aFont] retain];
     }
     
     ~QFontMetricsPrivate()
     {
+        if (info){
+            [info release];
+            info = 0;
+        }
         if (font){
             [font release];
             font = 0;
         }
-        if (textContainer){
-            [textContainer release];
-            textContainer = 0;
-        }
-        if (layoutManager){
-            [layoutManager release];
-            layoutManager = 0;
-        }
-        if (attributes){
-            [attributes release];
-            attributes = 0;
-        }
-        if (boundingRectCache){
-            [boundingRectCache release];
-            boundingRectCache = 0;
-        }
     }
     
 private:
+    WSMetricsInfo *info;
     NSFont *font;
-    NSTextContainer *textContainer;
-    NSLayoutManager *layoutManager;
-    NSDictionary *attributes;
-    NSMutableDictionary *boundingRectCache;
-    int lastLength;
 };
 
 
@@ -84,39 +157,23 @@ QFontMetrics::QFontMetrics()
 
 QFontMetrics::QFontMetrics(const QFont &withFont)
 {
-    _initializeWithData (0);
-    data->font = [withFont.font retain];
+    _initializeWithFont (withFont.font);
 }
 
 
 QFontMetrics::QFontMetrics(const QFontMetrics &copyFrom)
 {
-    _initializeWithData(copyFrom.data);
+    _initializeWithFont(copyFrom.data->font);
 }
 
 void QFontMetrics::_initialize()
 {
-    _initializeWithData (0);
+    _initializeWithFont (0);
 }
 
-void QFontMetrics::_initializeWithData (QFontMetricsPrivate *withData)
+void QFontMetrics::_initializeWithFont (NSFont *font)
 {
-    data = new QFontMetricsPrivate();
-
-    if (withData == 0){
-        data->font = [QFont::defaultNSFont() retain];
-        data->textContainer = 0;
-        data->layoutManager = 0;
-        data->attributes = 0;
-        data->boundingRectCache = 0;
-    }
-    else {
-        data->font = [withData->font retain];
-        data->textContainer = [withData->textContainer retain];
-        data->layoutManager = [withData->layoutManager retain];
-        data->attributes = [withData->attributes retain];
-        data->boundingRectCache = [withData->boundingRectCache retain];
-    }
+    data = new QFontMetricsPrivate(font);
 }
 
 void QFontMetrics::_free(){
@@ -147,51 +204,12 @@ int QFontMetrics::height() const
     return ROUND_TO_INT([data->font defaultLineHeightForFont]);
 }
 
-const float LargeNumberForText = 1.0e7;
-
-NSRect QFontMetrics::_rectOfString(NSString *string) const
- {
-    NSValue *cachedValue;
-    NSTextStorage *textStorage;
-
-    if (data->boundingRectCache == nil){
-        data->boundingRectCache = [[NSMutableDictionary alloc] init];
-    }
-
-    cachedValue = [data->boundingRectCache objectForKey: string];
-    if (cachedValue != nil){
-        return [cachedValue rectValue];
-    }
-    
-    if (data->textContainer == nil){
-        data->textContainer = [[NSTextContainer alloc] initWithContainerSize:NSMakeSize(LargeNumberForText, LargeNumberForText)];
-        data->layoutManager = [[NSLayoutManager alloc] init];
-        [data->layoutManager addTextContainer: data->textContainer];
-        data->attributes = [[NSDictionary dictionaryWithObjectsAndKeys:data->font, NSFontAttributeName, nil] retain];
-    }
-
-    textStorage = [[NSTextStorage alloc] initWithString:string attributes: data->attributes];
-    [textStorage addLayoutManager: data->layoutManager];
-    
-    unsigned numberOfGlyphs = [data->layoutManager numberOfGlyphs];
-    NSRect glyphRect = [data->layoutManager boundingRectForGlyphRange: NSMakeRange (0, numberOfGlyphs) inTextContainer: data->textContainer];
-
-    [textStorage removeLayoutManager: data->layoutManager];
-    [textStorage release];
-    
-    [data->boundingRectCache setObject: [NSValue valueWithRect: glyphRect] forKey: string];
-        
-    return glyphRect;
-}
-
-
-
 
 int QFontMetrics::width(QChar qc) const
 {
     ushort c = qc.unicode();
     NSString *string = [NSString stringWithCharacters: (const unichar *)&c length: 1];
-    int stringWidth = ROUND_TO_INT(_rectOfString(string).size.width);
+    int stringWidth = ROUND_TO_INT([data->info rectForString: string].size.width);
     return stringWidth;
 }
 
@@ -200,7 +218,7 @@ int QFontMetrics::width(QChar qc) const
 int QFontMetrics::width(char c) const
 {
     NSString *string = [NSString stringWithCString: &c length: 1];
-    int stringWidth = ROUND_TO_INT(_rectOfString(string).size.width);
+    int stringWidth = ROUND_TO_INT([data->info rectForString: string].size.width);
     return stringWidth;
 }
 
@@ -213,7 +231,7 @@ int QFontMetrics::width(const QString &qstring, int len) const
         string = QSTRING_TO_NSSTRING_LENGTH (qstring, len);
     else
         string = QSTRING_TO_NSSTRING (qstring);
-    int stringWidth = ROUND_TO_INT(_rectOfString(string).size.width);
+    int stringWidth = ROUND_TO_INT([data->info rectForString: string].size.width);
     return stringWidth;
 }
 
@@ -232,7 +250,7 @@ QRect QFontMetrics::boundingRect(const QString &qstring, int len) const
         string = QSTRING_TO_NSSTRING_LENGTH (qstring, len);
     else
         string = QSTRING_TO_NSSTRING (qstring);
-    NSRect rect = _rectOfString(string);
+    NSRect rect = [data->info rectForString: string];
 
     return QRect(ROUND_TO_INT(rect.origin.x),
             ROUND_TO_INT(rect.origin.y),
@@ -245,7 +263,7 @@ QRect QFontMetrics::boundingRect(QChar qc) const
 {
     ushort c = qc.unicode();
     NSString *string = [NSString stringWithCharacters: (const unichar *)&c length: 1];
-    NSRect rect = _rectOfString(string);
+    NSRect rect = [data->info rectForString: string];
 
     return QRect(ROUND_TO_INT(rect.origin.x),
             ROUND_TO_INT(rect.origin.y),
@@ -262,17 +280,15 @@ QSize QFontMetrics::size(int, const QString &qstring, int len, int tabstops,
     }
     
     NSLog (@"string = %@\n", QSTRING_TO_NSSTRING(qstring));
-    int w, h;
     NSString *string;
 
     if (len != -1)
         string = QSTRING_TO_NSSTRING_LENGTH (qstring, len);
     else
         string = QSTRING_TO_NSSTRING (qstring);
-    w = (int)[data->font widthOfString: string];
-    h = height();
+    NSRect rect = [data->info rectForString: string];
 
-    return QSize (w,h);
+    return QSize (ROUND_TO_INT(rect.size.width),ROUND_TO_INT(rect.size.height));
 }
 
 
@@ -293,7 +309,7 @@ int QFontMetrics::leftBearing(QChar) const
 QFontMetrics &QFontMetrics::operator=(const QFontMetrics &assignFrom)
 {
     _free();
-    _initializeWithData(assignFrom.data);
+    _initializeWithFont(assignFrom.data->font);
     return *this;    
 }
 
diff --git a/WebCore/src/kwq/KWQPaintDevice.mm b/WebCore/src/kwq/KWQPaintDevice.mm
index fa67428..925ffbc 100644
--- a/WebCore/src/kwq/KWQPaintDevice.mm
+++ b/WebCore/src/kwq/KWQPaintDevice.mm
@@ -30,7 +30,7 @@
 
 QPaintDevice::~QPaintDevice()
 {
-    _logNeverImplemented();
+    // This space intentionally left blank.
 }
 
 
diff --git a/WebCore/src/kwq/KWQScrollView.mm b/WebCore/src/kwq/KWQScrollView.mm
index 5a9eb99..4b7725c 100644
--- a/WebCore/src/kwq/KWQScrollView.mm
+++ b/WebCore/src/kwq/KWQScrollView.mm
@@ -177,7 +177,6 @@ void QScrollView::removeChild(QWidget* child)
 
 void QScrollView::resizeContents(int w, int h)
 {
-    NSLog (@"KWQScrollView resizing to w %d, h %d");
     resize (w, h);
 }
 
diff --git a/WebCore/src/kwq/KWQView.mm b/WebCore/src/kwq/KWQView.mm
index f4aa132..da4d60b 100644
--- a/WebCore/src/kwq/KWQView.mm
+++ b/WebCore/src/kwq/KWQView.mm
@@ -103,14 +103,31 @@
     return self;
 }
 
+#ifdef DELAY_LAYOUT
+- delayLayout: sender
+{
+    [NSObject cancelPreviousPerformRequestsWithTarget: self selector: @selector(delayLayout:) object: self];
+    NSLog (@"KWQHTMLView:  delayLayout called");
+    [self setNeedsLayout: YES];
+    [self setNeedsDisplay: YES];
+}
+
 -(void)notificationReceived:(NSNotification *)notification
 {
     if ([[notification name] rangeOfString: @"uri-fin-"].location == 0){
         NSLog (@"KWQHTMLView: Received notification, %@", [notification name]);
+        [self performSelector:@selector(delayLayout:) withObject:self afterDelay:(NSTimeInterval)0.5];
+    }
+}
+#else
+-(void)notificationReceived:(NSNotification *)notification
+{
+    if ([[notification name] rangeOfString: @"uri-fin-"].location == 0){
         [self setNeedsLayout: YES];
         [self setNeedsDisplay: YES];
     }
 }
+#endif
 
 - (void)layout
 {
@@ -189,6 +206,21 @@
     part->openURL (url);
 }
 
+- (void)mouseUp: (NSEvent *)event
+{
+    NSLog (@"mouseUp %@", event);
+}
+
+- (void)mouseDown: (NSEvent *)event
+{
+    NSLog (@"mouseDown %@", event);
+}
+
+- (void)mouseDragged: (NSEvent *)event
+{
+    NSLog (@"mouseDragged %@", event);
+}
+
 
 @end
 

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list