Reviewed by Maciej.
authorzimmermann@webkit.org <zimmermann@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 15 Nov 2007 21:22:57 +0000 (21:22 +0000)
committerzimmermann@webkit.org <zimmermann@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 15 Nov 2007 21:22:57 +0000 (21:22 +0000)
Fix logic error: calculateGlyphBoundaries takes RTL text into account itself, no need to adjust offsets before.

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

WebCore/ChangeLog
WebCore/rendering/SVGInlineTextBox.cpp

index d69d9c5..38f62a3 100644 (file)
@@ -1,3 +1,13 @@
+2007-11-15  Nikolas Zimmermann  <zimmermann@kde.org>
+
+        Reviewed by Maciej.
+
+        Fix logic error: calculateGlyphBoundaries takes RTL text into account itself, no need to adjust offsets before.
+
+        * rendering/SVGInlineTextBox.cpp:
+        (WebCore::SVGInlineTextBoxClosestCharacterToPositionWalker::chunkPortionCallback):
+        (WebCore::SVGInlineTextBoxSelectionRectWalker::chunkPortionCallback):
+
 2007-11-15  Anders Carlsson  <andersca@apple.com>
 
         Reviewed by Brady.
index a573fe2..9ef0c0b 100644 (file)
@@ -135,13 +135,13 @@ struct SVGInlineTextBoxClosestCharacterToPositionWalker {
 
         for (Vector<SVGChar>::iterator it = start; it != end; ++it) {
             unsigned int newOffset = textBox->start() + (it - start) + startOffset;
+            FloatRect glyphRect = chunkCtm.mapRect(textBox->calculateGlyphBoundaries(style, newOffset, *it));
 
             // Take RTL text into account and pick right glyph width/height.
+            // NOTE: This offset has to be corrected _after_ calling calculateGlyphBoundaries
             if (textBox->m_reversed)
                 newOffset = textBox->start() + textBox->end() - newOffset;
 
-            FloatRect glyphRect = chunkCtm.mapRect(textBox->calculateGlyphBoundaries(style, newOffset, *it));
-
             // Calculate distances relative to the glyph mid-point. I hope this is accurate enough.
             float xDistance = glyphRect.x() + glyphRect.width() / 2.0f - m_x;
             float yDistance = glyphRect.y() - glyphRect.height() / 2.0f - m_y;
@@ -196,11 +196,6 @@ struct SVGInlineTextBoxSelectionRectWalker {
 
         for (Vector<SVGChar>::iterator it = start; it != end; ++it) {
             unsigned int newOffset = textBox->start() + (it - start) + startOffset;
-
-            // Take RTL text into account and pick right glyph width/height.
-            if (textBox->m_reversed)
-                newOffset = textBox->start() + textBox->end() - newOffset;
-
             m_selectionRect.unite(textBox->calculateGlyphBoundaries(style, newOffset, *it));
         }