Remove the misspelling drawing code from Font and FontData. Implement it
authorhyatt <hyatt@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 12 May 2006 00:23:05 +0000 (00:23 +0000)
committerhyatt <hyatt@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 12 May 2006 00:23:05 +0000 (00:23 +0000)
        natively in GraphicContext instead.

        Reviewed by maciej

        * platform/FontData.h:
        * platform/GraphicsContext.cpp:
        * platform/GraphicsContext.h:
        * platform/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawLineForMisspelling):
        * platform/mac/FontData.mm:
        * platform/mac/FontMac.mm:
        * platform/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::drawLineForMisspelling):
        * platform/win/FontWin.cpp:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintSpellingMarker):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@14318 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog
WebCore/platform/FontData.h
WebCore/platform/GraphicsContext.cpp
WebCore/platform/GraphicsContext.h
WebCore/platform/cairo/GraphicsContextCairo.cpp
WebCore/platform/mac/FontData.mm
WebCore/platform/mac/FontMac.mm
WebCore/platform/mac/GraphicsContextMac.mm
WebCore/platform/win/FontWin.cpp
WebCore/rendering/InlineTextBox.cpp

index c8b953a..4aae221 100644 (file)
@@ -1,5 +1,25 @@
 2006-05-11  David Hyatt  <hyatt@apple.com>
 
+        Remove the misspelling drawing code from Font and FontData.  Implement it
+        natively in GraphicContext instead.
+
+        Reviewed by maciej
+
+        * platform/FontData.h:
+        * platform/GraphicsContext.cpp:
+        * platform/GraphicsContext.h:
+        * platform/cairo/GraphicsContextCairo.cpp:
+        (WebCore::GraphicsContext::drawLineForMisspelling):
+        * platform/mac/FontData.mm:
+        * platform/mac/FontMac.mm:
+        * platform/mac/GraphicsContextMac.mm:
+        (WebCore::GraphicsContext::drawLineForMisspelling):
+        * platform/win/FontWin.cpp:
+        * rendering/InlineTextBox.cpp:
+        (WebCore::InlineTextBox::paintSpellingMarker):
+
+2006-05-11  David Hyatt  <hyatt@apple.com>
+
         Remove drawLineForText from the Font API.  Implement it natively in
         the two GraphicsContexts (CG and Cairo) instead.
 
index 81b835e..89b6ef8 100644 (file)
@@ -112,8 +112,6 @@ public:
     // drawing
     void drawRun(const WebCoreTextRun* run, const WebCoreTextStyle* style, const WebCoreTextGeometry* geometry);
     FloatRect selectionRectForRun(const WebCoreTextRun* run, const WebCoreTextStyle* style, const WebCoreTextGeometry* geometry);
-    void drawLineForMisspelling(const FloatPoint& point, int width);
-    int misspellingLineThickness() const { return 3; }
 
     // selection point check 
     int pointToOffset(const WebCoreTextRun* run, const WebCoreTextStyle* style, int x, bool includePartialGlyphs);
@@ -125,10 +123,6 @@ public:
     // End temporary API
 
     float widthForGlyph(Glyph glyph) const;
-    
-private:
-    int misspellingLinePatternWidth() const { return 4; }
-    int misspellingLinePatternGapWidth() const { return 1; } // the number of transparent pixels after the dot
 
 public:
     int m_ascent;
index a1be8cb..dcb9c54 100644 (file)
@@ -210,19 +210,6 @@ void GraphicsContext::drawHighlightForText(const TextRun& run, const IntPoint& p
     fillRect(font().selectionRectForText(run, point, h, tabWidth, xpos, toAdd, d == RTL, visuallyOrdered), backgroundColor);
 }
 
-void GraphicsContext::drawLineForMisspelling(const IntPoint& point, int width)
-{
-    if (paintingDisabled())
-        return;
-
-    return font().drawLineForMisspelling(this, point, width);
-}
-
-int GraphicsContext::misspellingLineThickness()
-{
-    return font().misspellingLineThickness(this);
-}
-
 void GraphicsContext::initFocusRing(int width, int offset)
 {
     if (paintingDisabled())
index ed5d16c..82dd516 100644 (file)
@@ -43,6 +43,10 @@ typedef struct _cairo PlatformGraphicsContext;
 typedef void PlatformGraphicsContext;
 #endif
 
+static const int cMisspellingLineThickness = 3;
+static const int cMisspellingLinePatternWidth = 4;
+static const int cMisspellingLinePatternGapWidth = 1;
+
 class DeprecatedString;
 
 namespace WebCore {
@@ -116,7 +120,6 @@ namespace WebCore {
         
         void drawLineForText(const IntPoint&, int yOffset, int width, bool printing);
         void drawLineForMisspelling(const IntPoint&, int width);
-        int misspellingLineThickness();
 
         Color selectedTextBackgroundColor() const;
         void setUsesInactiveTextBackgroundColor(bool);
index 9865c27..6ef28b1 100644 (file)
@@ -404,4 +404,9 @@ void GraphicsContext::drawLineForText(const IntPoint& point, int yOffset, int wi
     drawLine(origin, endPoint);
 }
 
+void GraphicsContext::drawLineForMisspelling(const IntPoint& point, int width)
+{
+    // FIXME: Implement.
+}
+
 }
index 3a382d7..ffeac45 100644 (file)
@@ -520,53 +520,6 @@ FloatRect FontData::selectionRectForRun(const WebCoreTextRun* run, const WebCore
         return CG_selectionRect(this, run, style, geometry);
 }
 
-void FontData::drawLineForMisspelling(const FloatPoint& point, int width)
-{
-    // Constants for pattern color
-    static NSColor *spellingPatternColor = nil;
-    static bool usingDot = false;
-    int patternHeight = misspellingLineThickness();
-    int patternWidth = misspellingLinePatternWidth();
-    // Initialize pattern color if needed
-    if (!spellingPatternColor) {
-        NSImage *image = [NSImage imageNamed:@"SpellingDot"];
-        assert(image); // if image is not available, we want to know
-        NSColor *color = (image ? [NSColor colorWithPatternImage:image] : nil);
-        if (color)
-            usingDot = true;
-        else
-            color = [NSColor redColor];
-        spellingPatternColor = [color retain];
-    }
-
-    // Make sure to draw only complete dots.
-    // NOTE: Code here used to shift the underline to the left and increase the width
-    // to make sure everything gets underlined, but that results in drawing out of
-    // bounds (e.g. when at the edge of a view) and could make it appear that the
-    // space between adjacent misspelled words was underlined.
-    if (usingDot) {
-        // allow slightly more considering that the pattern ends with a transparent pixel
-        int widthMod = width % patternWidth;
-        if (patternWidth - widthMod > misspellingLinePatternGapWidth())
-            width -= widthMod;
-    }
-    
-    // Draw underline
-    NSGraphicsContext *currentContext = [NSGraphicsContext currentContext];
-    CGContextRef context = (CGContextRef)[currentContext graphicsPort];
-    CGContextSaveGState(context);
-
-    [spellingPatternColor set];
-
-    CGPoint transformedOrigin = CGPointApplyAffineTransform(point, CGContextGetCTM(context));
-    CGContextSetPatternPhase(context, CGSizeMake(transformedOrigin.x, transformedOrigin.y));
-
-    NSRectFillUsingOperation(NSMakeRect(point.x(), point.y(), width, patternHeight), NSCompositeSourceOver);
-    
-    CGContextRestoreGState(context);
-}
-
 int FontData::pointToOffset(const WebCoreTextRun* run, const WebCoreTextStyle* style, int x, bool includePartialGlyphs)
 {
     if (shouldUseATSU(run))
index 2934f9f..9ac12f5 100644 (file)
@@ -544,16 +544,6 @@ void Font::drawComplexText(GraphicsContext* graphicsContext, const TextRun& run,
         delete []adjustedRun.characters();
 }
 
-void Font::drawLineForMisspelling(GraphicsContext* context, const IntPoint& point, int width) const
-{
-    m_fontList->primaryFont(fontDescription())->drawLineForMisspelling(point, width);
-}
-
-int Font::misspellingLineThickness(GraphicsContext* context) const
-{
-    return m_fontList->primaryFont(fontDescription())->misspellingLineThickness();
-}
-
 float Font::floatWidthForComplexText(const TextRun& run, int tabWidth, int xpos, bool runRounding) const
 {
     ATSULayoutParameters params(run, 0, LTR, true, runRounding);
index 2937de7..b8fb6e1 100644 (file)
@@ -174,4 +174,51 @@ void GraphicsContext::setCompositeOperation(CompositeOperator op)
     [pool release];
 }
 
+void GraphicsContext::drawLineForMisspelling(const IntPoint& point, int width)
+{
+    // Constants for pattern color
+    static NSColor *spellingPatternColor = nil;
+    static bool usingDot = false;
+    int patternHeight = cMisspellingLineThickness;
+    int patternWidth = cMisspellingLinePatternWidth;
+    // Initialize pattern color if needed
+    if (!spellingPatternColor) {
+        NSImage *image = [NSImage imageNamed:@"SpellingDot"];
+        assert(image); // if image is not available, we want to know
+        NSColor *color = (image ? [NSColor colorWithPatternImage:image] : nil);
+        if (color)
+            usingDot = true;
+        else
+            color = [NSColor redColor];
+        spellingPatternColor = [color retain];
+    }
+
+    // Make sure to draw only complete dots.
+    // NOTE: Code here used to shift the underline to the left and increase the width
+    // to make sure everything gets underlined, but that results in drawing out of
+    // bounds (e.g. when at the edge of a view) and could make it appear that the
+    // space between adjacent misspelled words was underlined.
+    if (usingDot) {
+        // allow slightly more considering that the pattern ends with a transparent pixel
+        int widthMod = width % patternWidth;
+        if (patternWidth - widthMod > cMisspellingLinePatternGapWidth)
+            width -= widthMod;
+    }
+    
+    // Draw underline
+    NSGraphicsContext *currentContext = [NSGraphicsContext currentContext];
+    CGContextRef context = (CGContextRef)[currentContext graphicsPort];
+    CGContextSaveGState(context);
+
+    [spellingPatternColor set];
+
+    CGPoint transformedOrigin = CGPointApplyAffineTransform(point, CGContextGetCTM(context));
+    CGContextSetPatternPhase(context, CGSizeMake(transformedOrigin.x, transformedOrigin.y));
+
+    NSRectFillUsingOperation(NSMakeRect(point.x(), point.y(), width, patternHeight), NSCompositeSourceOver);
+    
+    CGContextRestoreGState(context);
+}
+
 }
index e54063d..5a1f2a0 100644 (file)
@@ -259,17 +259,4 @@ int Font::checkSelectionPoint(const TextRun& run, int toAdd, int tabWidth, int x
     return selectionOffset;
 }
 
-void Font::drawLineForText(GraphicsContext* context, const IntPoint& point, int yOffset, int width) const
-{
-}
-
-void Font::drawLineForMisspelling(GraphicsContext* context, const IntPoint& point, int width) const
-{
-}
-
-int Font::misspellingLineThickness(GraphicsContext* context) const
-{
-    return 1;
-}
-
 }
index bf9b4c1..119a3b6 100644 (file)
@@ -544,7 +544,7 @@ void InlineTextBox::paintSpellingMarker(GraphicsContext* pt, int _tx, int _ty, D
     // or decrease the underline thickness.  The overlap is actually the most useful, and matches what AppKit does.
     // So, we generally place the underline at the bottom of the text, but in larger fonts that's not so good so
     // we pin to two pixels under the baseline.
-    int lineThickness = pt->misspellingLineThickness();
+    int lineThickness = cMisspellingLineThickness;
     int descent = m_height - m_baseline;
     int underlineOffset;
     if (descent <= (2 + lineThickness)) {