LayoutTests:
authordarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 12 Feb 2007 23:36:34 +0000 (23:36 +0000)
committerdarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 12 Feb 2007 23:36:34 +0000 (23:36 +0000)
        Reviewed by Hyatt.

        - update pixel results in cases where overline and line-through were used,
          because our old code put them 1px too low

        * css1/cascade/cascade_order-expected.checksum: Updated because this has
        line-through style.
        * css1/cascade/cascade_order-expected.png: Ditto.
        * css1/text_properties/text_decoration-expected.checksum: Updated because
        this has overline and line-through.
        * css1/text_properties/text_decoration-expected.png: Ditto.
        * css2.1/t1504-c543-txt-decor-00-d-g-expected.checksum: Ditto.
        * css2.1/t1504-c543-txt-decor-00-d-g-expected.png: Ditto.
        * fast/text/stroking-decorations-expected.checksum: Ditto.
        * fast/text/stroking-decorations-expected.png: Ditto.

        - added some missing pixel-test results

        * fast/forms/disabled-select-change-index-expected.checksum: Added.
        * fast/forms/disabled-select-change-index-expected.png: Added.

WebCore:

        Reviewed by Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12668
          <rdar://problem/4893344> REGRESSION: underline not visible for the international
          input inline hole in most text fields (12668)

        - fix bug where overline and line-through were 1px lower than we intended

        * platform/graphics/GraphicsContext.h: Removed unneeded y offset parameter.
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawLineForText): Removed bogus y offset and +1.
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawLineForText): Ditto.
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::drawLineForText): Ditto.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintTextDecorations): Added the "+1" that used to be
        inside drawLineForText to the underline-drawing code. Changed the other callers
        of drawLineForText to include the y offset in the y coordinate.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintDecoration): Ditto. Also renamed _tx and _ty to
        remove the gratuitious underscores.
        (WebCore::InlineTextBox::paintMarkedTextUnderline): Made the default thickness
        be 1px instead of 0 (which ends up being roughly 1px in the CG code path anyway).
        Fixed the code computing the position to put the underline at the bottom of the
        line (different from regular underlines which are put 1px under the baseline).
        The old code used to put the underline 1px further down in the thick case, and
        2px further down in the non-thick case. Both of those are bad, because they
        could be completely clipped out in many cases.

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

18 files changed:
LayoutTests/ChangeLog
LayoutTests/css1/cascade/cascade_order-expected.checksum
LayoutTests/css1/cascade/cascade_order-expected.png
LayoutTests/css1/text_properties/text_decoration-expected.checksum
LayoutTests/css1/text_properties/text_decoration-expected.png
LayoutTests/css2.1/t1504-c543-txt-decor-00-d-g-expected.checksum
LayoutTests/css2.1/t1504-c543-txt-decor-00-d-g-expected.png
LayoutTests/fast/forms/disabled-select-change-index-expected.checksum [new file with mode: 0644]
LayoutTests/fast/forms/disabled-select-change-index-expected.png [new file with mode: 0644]
LayoutTests/fast/text/stroking-decorations-expected.checksum
LayoutTests/fast/text/stroking-decorations-expected.png
WebCore/ChangeLog
WebCore/platform/graphics/GraphicsContext.h
WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp
WebCore/platform/graphics/cg/GraphicsContextCG.cpp
WebCore/platform/graphics/qt/GraphicsContextQt.cpp
WebCore/rendering/InlineFlowBox.cpp
WebCore/rendering/InlineTextBox.cpp

index 964c081b0d36d7411e615c9d045e800a846c5a55..c18e397cc1449df84bdd975d0f865e02e5cf9d66 100644 (file)
@@ -1,3 +1,26 @@
+2007-02-12  Darin Adler  <darin@apple.com>
+
+        Reviewed by Hyatt.
+
+        - update pixel results in cases where overline and line-through were used,
+          because our old code put them 1px too low
+
+        * css1/cascade/cascade_order-expected.checksum: Updated because this has
+        line-through style.
+        * css1/cascade/cascade_order-expected.png: Ditto.
+        * css1/text_properties/text_decoration-expected.checksum: Updated because
+        this has overline and line-through.
+        * css1/text_properties/text_decoration-expected.png: Ditto.
+        * css2.1/t1504-c543-txt-decor-00-d-g-expected.checksum: Ditto.
+        * css2.1/t1504-c543-txt-decor-00-d-g-expected.png: Ditto.
+        * fast/text/stroking-decorations-expected.checksum: Ditto.
+        * fast/text/stroking-decorations-expected.png: Ditto.
+
+        - added some missing pixel-test results
+
+        * fast/forms/disabled-select-change-index-expected.checksum: Added.
+        * fast/forms/disabled-select-change-index-expected.png: Added.
+
 2007-02-12  Anders Carlsson  <acarlsson@apple.com>
 
         Reviewed by Darin.
index 609706fb0cb685ce5253233bff12ad38efb84b94..0bbc5719b07bb55fce241e4e3c0a40f244f41f09 100644 (file)
@@ -1 +1 @@
-af9cba8c71a646c1ff30f3fc7c4fe978
\ No newline at end of file
+afc4aee25f98b78d5283cb3f187e4677
\ No newline at end of file
index acc76a8c49e27acab4becf786aa57678d7f2d746..0c4dc9a9df72d8e2884902b5ca7d596e0bd13a2d 100644 (file)
Binary files a/LayoutTests/css1/cascade/cascade_order-expected.png and b/LayoutTests/css1/cascade/cascade_order-expected.png differ
index 370414dccba00ae13df2b6635842f6bfcbe25a83..8291dcccb077c0d3a2ad064c67155f4eb893bf12 100644 (file)
@@ -1 +1 @@
-0d705b4f3c6b373b587f9fc32d0889e0
\ No newline at end of file
+747f1b244dbda5cf462b5334b785e07b
\ No newline at end of file
index 95e6db7b0ea1cbb511de55c3364e35db216466c4..11be683ab4a0842af48f88a15dc7698bb7b9f324 100644 (file)
Binary files a/LayoutTests/css1/text_properties/text_decoration-expected.png and b/LayoutTests/css1/text_properties/text_decoration-expected.png differ
index 9b8617f5846a58f4dec59aed212fc6cfb136cc5b..0d4105cee59968c54b9b39c675d163d1d8663fe6 100644 (file)
@@ -1 +1 @@
-ac50077424ab23b0774506dbee749963
\ No newline at end of file
+d47b41f69275c30099bde12b47cd725e
\ No newline at end of file
index fd34b3de3656440357fdcdf66e148a59d9fb6ab4..96b8e8b6622f6f37a3e304d7bc1e1a3eec3490fb 100644 (file)
Binary files a/LayoutTests/css2.1/t1504-c543-txt-decor-00-d-g-expected.png and b/LayoutTests/css2.1/t1504-c543-txt-decor-00-d-g-expected.png differ
diff --git a/LayoutTests/fast/forms/disabled-select-change-index-expected.checksum b/LayoutTests/fast/forms/disabled-select-change-index-expected.checksum
new file mode 100644 (file)
index 0000000..4b6c7bb
--- /dev/null
@@ -0,0 +1 @@
+612db31d3bd39c244d1d9b0f934213e9
\ No newline at end of file
diff --git a/LayoutTests/fast/forms/disabled-select-change-index-expected.png b/LayoutTests/fast/forms/disabled-select-change-index-expected.png
new file mode 100644 (file)
index 0000000..6c8e122
Binary files /dev/null and b/LayoutTests/fast/forms/disabled-select-change-index-expected.png differ
index 37daa8ac8e9cbc4769c46ba4c8a089524c41652f..6c204c059027315ea7b05e32fd4ecd49a8f814b1 100644 (file)
@@ -1 +1 @@
-15c3ca4cab3384babcd94feb89d8bc9d
\ No newline at end of file
+1e7afaa1913ebc18063b279dddd036b0
\ No newline at end of file
index 678c3b170fe55af9c9bf4530e11bfe39a0033da1..a83616efec70ae022e8eff9270a16309854545de 100644 (file)
Binary files a/LayoutTests/fast/text/stroking-decorations-expected.png and b/LayoutTests/fast/text/stroking-decorations-expected.png differ
index b9ccf994a54e294043de39dfdbc63632b5b64882..78082c1fad3eca0fe0d8c0d6951f94a946dc6753 100644 (file)
@@ -1,3 +1,36 @@
+2007-02-12  Darin Adler  <darin@apple.com>
+
+        Reviewed by Hyatt.
+
+        - fix http://bugs.webkit.org/show_bug.cgi?id=12668
+          <rdar://problem/4893344> REGRESSION: underline not visible for the international
+          input inline hole in most text fields (12668)
+
+        - fix bug where overline and line-through were 1px lower than we intended
+
+        * platform/graphics/GraphicsContext.h: Removed unneeded y offset parameter.
+        * platform/graphics/cairo/GraphicsContextCairo.cpp:
+        (WebCore::GraphicsContext::drawLineForText): Removed bogus y offset and +1.
+        * platform/graphics/cg/GraphicsContextCG.cpp:
+        (WebCore::GraphicsContext::drawLineForText): Ditto.
+        * platform/graphics/qt/GraphicsContextQt.cpp:
+        (WebCore::GraphicsContext::drawLineForText): Ditto.
+
+        * rendering/InlineFlowBox.cpp:
+        (WebCore::InlineFlowBox::paintTextDecorations): Added the "+1" that used to be
+        inside drawLineForText to the underline-drawing code. Changed the other callers
+        of drawLineForText to include the y offset in the y coordinate.
+        * rendering/InlineTextBox.cpp:
+        (WebCore::InlineTextBox::paintDecoration): Ditto. Also renamed _tx and _ty to
+        remove the gratuitious underscores.
+        (WebCore::InlineTextBox::paintMarkedTextUnderline): Made the default thickness
+        be 1px instead of 0 (which ends up being roughly 1px in the CG code path anyway).
+        Fixed the code computing the position to put the underline at the bottom of the
+        line (different from regular underlines which are put 1px under the baseline).
+        The old code used to put the underline 1px further down in the thick case, and
+        2px further down in the non-thick case. Both of those are bad, because they
+        could be completely clipped out in many cases.
+
 2007-02-12  Anders Carlsson  <acarlsson@apple.com>
 
         Reviewed by Darin.
index e25f456542df7a940fc0b465baf26a5806b50d1c..9e35e7fa4d26331b3cd6e0647ec300dbb0a74bb3 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2003, 2006 Apple Computer, Inc.  All rights reserved.
+ * Copyright (C) 2003, 2006, 2007 Apple Inc.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -147,7 +147,7 @@ namespace WebCore {
 
         FloatRect roundToDevicePixels(const FloatRect&);
         
-        void drawLineForText(const IntPoint&, int yOffset, int width, bool printing);
+        void drawLineForText(const IntPoint&, int width, bool printing);
         void drawLineForMisspellingOrBadGrammar(const IntPoint&, int width, bool grammar);
         
         bool paintingDisabled() const;
index 6099f42392a724366abe6fa811762a771288eed8..b5925f5e96664aab7933341ff6dc6df53545c89e 100644 (file)
@@ -423,12 +423,11 @@ void GraphicsContext::clearFocusRingClip()
     // to work around bugs in Mac focus ring clipping
 }
 
-void GraphicsContext::drawLineForText(const IntPoint& point, int yOffset, int width, bool printing)
+void GraphicsContext::drawLineForText(const IntPoint& origin, int width, bool printing)
 {
     if (paintingDisabled())
         return;
 
-    IntPoint origin = point + IntSize(0, yOffset + 1);
     IntPoint endPoint = origin + IntSize(width, 0);
     drawLine(origin, endPoint);
 }
index 6a3c07566168de6ad7165463bc930d1cf187587b..9d4930bde4f624feedc762379db7a45a95433c82 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2003, 2004, 2005, 2006 Apple Computer, Inc.  All rights reserved.
+ * Copyright (C) 2003, 2004, 2005, 2006, 2007 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -767,18 +767,14 @@ FloatRect GraphicsContext::roundToDevicePixels(const FloatRect& rect)
     return FloatRect(roundedOrigin, roundedLowerRight - roundedOrigin);
 }
 
-void GraphicsContext::drawLineForText(const IntPoint& point, int yOffset, int width, bool printing)
+void GraphicsContext::drawLineForText(const IntPoint& point, int width, bool printing)
 {
     if (paintingDisabled())
         return;
     
     // Note: This function assumes that point.x and point.y are integers (and that's currently always the case).
     float x = point.x();
-    float y = point.y() + yOffset;
-
-    // Leave 1.0 in user space between the baseline of the text and the top of the underline.
-    // FIXME: Is this the right distance for space above the underline? Even for thick underlines on large sized text?
-    y += 1;
+    float y = point.y();
 
     float thickness = strokeThickness();
     if (printing) {
index 5a2d7992bce40cfac08fbb9736ac4c7fd3441b6c..da3d209a57cfd14877798c4ed9de38800b9081bf 100644 (file)
@@ -569,13 +569,11 @@ void GraphicsContext::clearFocusRingClip()
     m_data->focusRingClip = IntRect();
 }
 
-void GraphicsContext::drawLineForText(const IntPoint& point, int yOffset,
-                                      int width, bool printing)
+void GraphicsContext::drawLineForText(const IntPoint& origin, int width, bool printing)
 {
     if (paintingDisabled())
         return;
 
-    IntPoint origin = point + IntSize(0, yOffset + 1);
     IntPoint endPoint = origin + IntSize(width, 0);
     drawLine(origin, endPoint);
 }
index d99fb2e49d43dd490e48adc9b8b9ca890b6ce4ff..012b7f155afef2e23eb83a25aa49a54bb25926cf 100644 (file)
@@ -1,7 +1,5 @@
-/**
-* This file is part of the html renderer for KDE.
- *
- * Copyright (C) 2003, 2006 Apple Computer, Inc.
+/*
+ * Copyright (C) 2003, 2006, 2007 Apple Inc. All rights reserved.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -793,15 +791,16 @@ void InlineFlowBox::paintTextDecorations(RenderObject::PaintInfo& paintInfo, int
         context->setStrokeThickness(1.0f); // FIXME: We should improve this rule and not always just assume 1.
         if (deco & UNDERLINE && !paintedChildren) {
             context->setStrokeColor(underline);
-            context->drawLineForText(IntPoint(tx, ty), m_baseline, w, isPrinting);
+            // Leave one pixel of white between the baseline and the underline.
+            context->drawLineForText(IntPoint(tx, ty + m_baseline + 1), w, isPrinting);
         }
         if (deco & OVERLINE && !paintedChildren) {
             context->setStrokeColor(overline);
-            context->drawLineForText(IntPoint(tx, ty), 0, w, isPrinting);
+            context->drawLineForText(IntPoint(tx, ty), w, isPrinting);
         }
         if (deco & LINE_THROUGH && paintedChildren) {
             context->setStrokeColor(linethrough);
-            context->drawLineForText(IntPoint(tx, ty), 2 * m_baseline / 3, w, isPrinting);
+            context->drawLineForText(IntPoint(tx, ty + 2 * m_baseline / 3), w, isPrinting);
         }
 
         if (setShadow)
index 80ca3b4002c4188ddb2ade7fe8da6c43797bbcd3..8b8713e9241eb4b4a81c366cd53a60febc4d6698 100644 (file)
@@ -1,9 +1,7 @@
-/**
- * This file is part of the DOM implementation for KDE.
- *
+/*
  * (C) 1999 Lars Knoll (knoll@kde.org)
  * (C) 2000 Dirk Mueller (mueller@kde.org)
- * Copyright (C) 2004, 2005, 2006 Apple Computer, Inc.
+ * Copyright (C) 2004, 2005, 2006, 2007 Apple Inc. All rights reserved.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -573,16 +571,16 @@ void InlineTextBox::paintCustomHighlight(int tx, int ty, const AtomicString& typ
 }
 #endif
 
-void InlineTextBox::paintDecoration(GraphicsContext* context, int _tx, int _ty, int deco)
+void InlineTextBox::paintDecoration(GraphicsContext* context, int tx, int ty, int deco)
 {
-    _tx += m_x;
-    _ty += m_y;
+    tx += m_x;
+    ty += m_y;
 
     if (m_truncation == cFullTruncation)
         return;
     
-    int width = (m_truncation == cNoTruncation) ? 
-                m_width : static_cast<RenderText*>(m_object)->width(m_start, m_truncation - m_start, textPos(), m_firstLine);
+    int width = (m_truncation == cNoTruncation) ? m_width
+        : static_cast<RenderText*>(m_object)->width(m_start, m_truncation - m_start, textPos(), m_firstLine);
     
     // Get the text decoration colors.
     Color underline, overline, linethrough;
@@ -593,27 +591,28 @@ void InlineTextBox::paintDecoration(GraphicsContext* context, int _tx, int _ty,
     context->setStrokeThickness(1.0f); // FIXME: We should improve this rule and not always just assume 1.
     if (deco & UNDERLINE) {
         context->setStrokeColor(underline);
-        context->drawLineForText(IntPoint(_tx, _ty), m_baseline, width, isPrinting);
+        // Leave one pixel of white between the baseline and the underline.
+        context->drawLineForText(IntPoint(tx, ty + m_baseline + 1), width, isPrinting);
     }
     if (deco & OVERLINE) {
         context->setStrokeColor(overline);
-        context->drawLineForText(IntPoint(_tx, _ty), 0, width, isPrinting);
+        context->drawLineForText(IntPoint(tx, ty), width, isPrinting);
     }
     if (deco & LINE_THROUGH) {
         context->setStrokeColor(linethrough);
-        context->drawLineForText(IntPoint(_tx, _ty), 2*m_baseline/3, width, isPrinting);
+        context->drawLineForText(IntPoint(tx, ty + 2 * m_baseline / 3), width, isPrinting);
     }
 }
 
-void InlineTextBox::paintSpellingOrGrammarMarker(GraphicsContext* pt, int _tx, int _ty, DocumentMarker marker, RenderStyle* style, const Font* f, bool grammar)
+void InlineTextBox::paintSpellingOrGrammarMarker(GraphicsContext* pt, int tx, int ty, DocumentMarker marker, RenderStyle* style, const Font* f, bool grammar)
 {
-    _tx += m_x;
-    _ty += m_y;
+    tx += m_x;
+    ty += m_y;
     
     if (m_truncation == cFullTruncation)
         return;
     
-    int start = 0;                  // start of line to draw, relative to _tx
+    int start = 0;                  // start of line to draw, relative to tx
     int width = m_width;            // how much line to draw
     bool useWholeWidth = true;
     unsigned paintStart = m_start;
@@ -639,7 +638,7 @@ void InlineTextBox::paintSpellingOrGrammarMarker(GraphicsContext* pt, int _tx, i
     // display a toolTip. We don't do this for misspelling markers.
     if (grammar) {
         int y = selectionTop();
-        IntPoint startPoint = IntPoint(m_x + _tx, y + _ty);
+        IntPoint startPoint = IntPoint(m_x + tx, y + ty);
         TextStyle textStyle = TextStyle(textObject()->tabWidth(), textPos(), m_toAdd, m_reversed, m_dirOverride || style->visuallyOrdered());
         int startPosition = max(marker.startOffset - m_start, (unsigned)0);
         int endPosition = min(marker.endOffset - m_start, (unsigned)m_len);    
@@ -664,10 +663,10 @@ void InlineTextBox::paintSpellingOrGrammarMarker(GraphicsContext* pt, int _tx, i
         // in larger fonts, tho, place the underline up near the baseline to prevent big gap
         underlineOffset = m_baseline + 2;
     }
-    pt->drawLineForMisspellingOrBadGrammar(IntPoint(_tx + start, _ty + underlineOffset), width, grammar);
+    pt->drawLineForMisspellingOrBadGrammar(IntPoint(tx + start, ty + underlineOffset), width, grammar);
 }
 
-void InlineTextBox::paintTextMatchMarker(GraphicsContext* pt, int _tx, int _ty, DocumentMarker marker, RenderStyle* style, const Font* f)
+void InlineTextBox::paintTextMatchMarker(GraphicsContext* pt, int tx, int ty, DocumentMarker marker, RenderStyle* style, const Font* f)
 {
    // Use same y positioning and height as for selection, so that when the selection and this highlight are on
    // the same word there are no pieces sticking out.
@@ -678,7 +677,7 @@ void InlineTextBox::paintTextMatchMarker(GraphicsContext* pt, int _tx, int _ty,
     int ePos = min(marker.endOffset - m_start, (unsigned)m_len);    
     TextRun run = TextRun(textObject()->text(), m_start, m_len, sPos, ePos);
     TextStyle renderStyle = TextStyle(textObject()->tabWidth(), textPos(), m_toAdd, m_reversed, m_dirOverride || style->visuallyOrdered());
-    IntPoint startPoint = IntPoint(m_x + _tx, y + _ty);
+    IntPoint startPoint = IntPoint(m_x + tx, y + ty);
     
     // Always compute and store the rect associated with this marker
     IntRect markerRect = enclosingIntRect(f->selectionRectForText(run, renderStyle, startPoint, h));
@@ -689,13 +688,13 @@ void InlineTextBox::paintTextMatchMarker(GraphicsContext* pt, int _tx, int _ty,
         Color yellow = Color(255, 255, 0);
         pt->save();
         updateGraphicsContext(pt, yellow, yellow, 0);  // Don't draw text at all!
-        pt->clip(IntRect(_tx + m_x, _ty + y, m_width, h));
+        pt->clip(IntRect(tx + m_x, ty + y, m_width, h));
         pt->drawHighlightForText(run, startPoint, h, renderStyle, yellow);
         pt->restore();
     }
 }
 
-void InlineTextBox::paintDocumentMarkers(GraphicsContext* pt, int _tx, int _ty, RenderStyle* style, const Font* f, bool background)
+void InlineTextBox::paintDocumentMarkers(GraphicsContext* pt, int tx, int ty, RenderStyle* style, const Font* f, bool background)
 {
     Vector<DocumentMarker> markers = object()->document()->markersForNode(object()->node());
     Vector<DocumentMarker>::iterator markerIt = markers.begin();
@@ -734,13 +733,13 @@ void InlineTextBox::paintDocumentMarkers(GraphicsContext* pt, int _tx, int _ty,
         // marker intersects this run.  Paint it.
         switch (marker.type) {
             case DocumentMarker::Spelling:
-                paintSpellingOrGrammarMarker(pt, _tx, _ty, marker, style, f, false);
+                paintSpellingOrGrammarMarker(pt, tx, ty, marker, style, f, false);
                 break;
             case DocumentMarker::Grammar:
-                paintSpellingOrGrammarMarker(pt, _tx, _ty, marker, style, f, true);
+                paintSpellingOrGrammarMarker(pt, tx, ty, marker, style, f, true);
                 break;
             case DocumentMarker::TextMatch:
-                paintTextMatchMarker(pt, _tx, _ty, marker, style, f);
+                paintTextMatchMarker(pt, tx, ty, marker, style, f);
                 break;
             default:
                 ASSERT_NOT_REACHED();
@@ -753,19 +752,19 @@ void InlineTextBox::paintDocumentMarkers(GraphicsContext* pt, int _tx, int _ty,
 }
 
 
-void InlineTextBox::paintMarkedTextUnderline(GraphicsContext* pt, int _tx, int _ty, const MarkedTextUnderline& underline)
+void InlineTextBox::paintMarkedTextUnderline(GraphicsContext* ctx, int tx, int ty, const MarkedTextUnderline& underline)
 {
-    _tx += m_x;
-    _ty += m_y;
+    tx += m_x;
+    ty += m_y;
 
     if (m_truncation == cFullTruncation)
         return;
     
-    int start = 0;                  // start of line to draw, relative to _tx
-    int width = m_width;            // how much line to draw
+    int start = 0;                 // start of line to draw, relative to tx
+    int width = m_width;           // how much line to draw
     bool useWholeWidth = true;
     unsigned paintStart = m_start;
-    unsigned paintEnd = end()+1;      // end points at the last char, not past it
+    unsigned paintEnd = end() + 1; // end points at the last char, not past it
     if (paintStart <= underline.startOffset) {
         paintStart = underline.startOffset;
         useWholeWidth = false;
@@ -783,13 +782,15 @@ void InlineTextBox::paintMarkedTextUnderline(GraphicsContext* pt, int _tx, int _
         width = static_cast<RenderText*>(m_object)->width(paintStart, paintEnd - paintStart, textPos() + start, m_firstLine);
     }
 
-    int lineThickness = 0;
-    if (underline.thick)
-        lineThickness = ((m_height - m_baseline) > 2) ? 2 : 1;
-    int underlineOffset = m_height - lineThickness;
-    pt->setStrokeColor(underline.color);
-    pt->setStrokeThickness(lineThickness);
-    pt->drawLineForText(IntPoint(_tx + start, _ty), underlineOffset, width, textObject()->document()->printing());
+    // Thick marked text underlines are 2px thick as long as there is room for 1px space under the baseline.
+    // All other marked text underlines are 1px thick, and if there's not enough space they will touch or overlap characters.
+    int lineThickness = 1;
+    if (underline.thick && m_height - m_baseline > 2)
+        lineThickness = 2;
+
+    ctx->setStrokeColor(underline.color);
+    ctx->setStrokeThickness(lineThickness);
+    ctx->drawLineForText(IntPoint(tx + start, ty + m_height - lineThickness), width, textObject()->document()->printing());
 }
 
 int InlineTextBox::caretMinOffset() const