https://bugs.webkit.org/show_bug.cgi?id=48246
authorhyatt@apple.com <hyatt@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 25 Oct 2010 16:05:03 +0000 (16:05 +0000)
committerhyatt@apple.com <hyatt@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 25 Oct 2010 16:05:03 +0000 (16:05 +0000)
Reviewed by Sam Weinig.

Make selectionRect() on InlineTextBox give the right value for a vertical line.  Selection is still too broken
to test anything though.

* rendering/InlineTextBox.cpp:
(WebCore::InlineTextBox::selectionRect):

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

WebCore/ChangeLog
WebCore/rendering/InlineTextBox.cpp

index 7a36ee3..f0f461b 100644 (file)
@@ -1,3 +1,15 @@
+2010-10-25  David Hyatt  <hyatt@apple.com>
+
+        Reviewed by Sam Weinig.
+
+        https://bugs.webkit.org/show_bug.cgi?id=48246
+
+        Make selectionRect() on InlineTextBox give the right value for a vertical line.  Selection is still too broken
+        to test anything though.
+
+        * rendering/InlineTextBox.cpp:
+        (WebCore::InlineTextBox::selectionRect):
+
 2010-10-25  Benjamin Poulain  <benjamin.poulain@nokia.com>
 
         Reviewed by Antonio Gomes.
index f228ea8..9c89d58 100644 (file)
@@ -154,12 +154,19 @@ IntRect InlineTextBox::selectionRect(int tx, int ty, int startPos, int endPos)
     }
 
     IntRect r = enclosingIntRect(f.selectionRectForText(TextRun(characters, len, textObj->allowTabs(), textPos(), m_toAdd, !isLeftToRightDirection(), m_dirOverride),
-                                                        IntPoint(tx + m_x, ty + selTop), selHeight, sPos, ePos));
-    if (r.x() > tx + m_x + m_logicalWidth)
-        r.setWidth(0);
-    else if (r.right() - 1 > tx + m_x + m_logicalWidth)
-        r.setWidth(tx + m_x + m_logicalWidth - r.x());
-    return r;
+                                                        IntPoint(), selHeight, sPos, ePos));
+                                                        
+    int logicalWidth = r.width();
+    if (r.x() > m_logicalWidth)
+        logicalWidth  = 0;
+    else if (r.right() > m_logicalWidth)
+        logicalWidth = m_logicalWidth - r.x();
+    
+    IntPoint topPoint = m_isVertical ? IntPoint(tx + selTop, ty + m_y + r.x()) : IntPoint(tx + m_x + r.x(), ty + selTop);
+    int width = m_isVertical ? selHeight : logicalWidth;
+    int height = m_isVertical ? logicalWidth : selHeight;
+    
+    return IntRect(topPoint, IntSize(width, height));
 }
 
 void InlineTextBox::deleteLine(RenderArena* arena)