Changeset 89091 in webkit


Ignore:
Timestamp:
Jun 16, 2011 5:25:42 PM (13 years ago)
Author:
rniwa@webkit.org
Message:

2011-06-16 Ryosuke Niwa <rniwa@webkit.org>

Reviewed by Darin Adler.

Support logical line movement in vertical writing mode
https://bugs.webkit.org/show_bug.cgi?id=62743

Added various tests to ensure WebKit uses a proper line direction point
when extending selection horizontally in vertical writing modes.

  • editing/selection/vertical-lr-ltr-extend-line-backward-br.html: Added.
  • editing/selection/vertical-lr-ltr-extend-line-forward-br.html: Added.
  • editing/selection/vertical-rl-ltr-extend-line-backward-br.html: Added.
  • editing/selection/vertical-rl-ltr-extend-line-backward-p.html: Added.
  • editing/selection/vertical-rl-ltr-extend-line-backward-wrap.html: Added.
  • editing/selection/vertical-rl-ltr-extend-line-forward-br.html: Added.
  • editing/selection/vertical-rl-ltr-extend-line-forward-p.html: Added.
  • editing/selection/vertical-rl-ltr-extend-line-forward-wrap.html: Added.
  • editing/selection/vertical-rl-rtl-extend-line-backward-br.html: Added.
  • editing/selection/vertical-rl-rtl-extend-line-backward-p.html: Added.
  • editing/selection/vertical-rl-rtl-extend-line-forward-br.html: Added.
  • editing/selection/vertical-rl-rtl-extend-line-forward-p.html: Added.
  • platform/mac/editing/selection/vertical-lr-ltr-extend-line-backward-br-expected.png: Added.
  • platform/mac/editing/selection/vertical-lr-ltr-extend-line-backward-br-expected.txt: Added.
  • platform/mac/editing/selection/vertical-lr-ltr-extend-line-forward-br-expected.png: Added.
  • platform/mac/editing/selection/vertical-lr-ltr-extend-line-forward-br-expected.txt: Added.
  • platform/mac/editing/selection/vertical-rl-ltr-extend-line-backward-br-expected.png: Added.
  • platform/mac/editing/selection/vertical-rl-ltr-extend-line-backward-br-expected.txt: Added.
  • platform/mac/editing/selection/vertical-rl-ltr-extend-line-backward-p-expected.png: Added.
  • platform/mac/editing/selection/vertical-rl-ltr-extend-line-backward-p-expected.txt: Added.
  • platform/mac/editing/selection/vertical-rl-ltr-extend-line-backward-wrap-expected.png: Added.
  • platform/mac/editing/selection/vertical-rl-ltr-extend-line-backward-wrap-expected.txt: Added.
  • platform/mac/editing/selection/vertical-rl-ltr-extend-line-forward-br-expected.png: Added.
  • platform/mac/editing/selection/vertical-rl-ltr-extend-line-forward-br-expected.txt: Added.
  • platform/mac/editing/selection/vertical-rl-ltr-extend-line-forward-p-expected.png: Added.
  • platform/mac/editing/selection/vertical-rl-ltr-extend-line-forward-p-expected.txt: Added.
  • platform/mac/editing/selection/vertical-rl-ltr-extend-line-forward-wrap-expected.png: Added.
  • platform/mac/editing/selection/vertical-rl-ltr-extend-line-forward-wrap-expected.txt: Added.
  • platform/mac/editing/selection/vertical-rl-rtl-extend-line-backward-br-expected.png: Added.
  • platform/mac/editing/selection/vertical-rl-rtl-extend-line-backward-br-expected.txt: Added.
  • platform/mac/editing/selection/vertical-rl-rtl-extend-line-backward-p-expected.png: Added.
  • platform/mac/editing/selection/vertical-rl-rtl-extend-line-backward-p-expected.txt: Added.
  • platform/mac/editing/selection/vertical-rl-rtl-extend-line-forward-br-expected.png: Added.
  • platform/mac/editing/selection/vertical-rl-rtl-extend-line-forward-br-expected.txt: Added.
  • platform/mac/editing/selection/vertical-rl-rtl-extend-line-forward-p-expected.png: Added.
  • platform/mac/editing/selection/vertical-rl-rtl-extend-line-forward-p-expected.txt: Added.

2011-06-16 Ryosuke Niwa <rniwa@webkit.org>

Reviewed by Darin Adler.

Support logical line movement in vertical writing mode
https://bugs.webkit.org/show_bug.cgi?id=62743

Fixed the bug by making xOffsetForVerticalNavigation (now called lineDirectionPointForVerticalNavigation)
aware of writing modes. Also extracted absoluteLineDirectionPointToLocalPointInBlock from previousLinePosition
and nextLinePosition to convert a line direction point to a physical point relative to a root inline box.

Tests: editing/selection/vertical-lr-ltr-extend-line-backward-br.html

editing/selection/vertical-lr-ltr-extend-line-forward-br.html
editing/selection/vertical-rl-ltr-extend-line-backward-br.html
editing/selection/vertical-rl-ltr-extend-line-backward-p.html
editing/selection/vertical-rl-ltr-extend-line-backward-wrap.html
editing/selection/vertical-rl-ltr-extend-line-forward-br.html
editing/selection/vertical-rl-ltr-extend-line-forward-p.html
editing/selection/vertical-rl-ltr-extend-line-forward-wrap.html
editing/selection/vertical-rl-rtl-extend-line-backward-br.html
editing/selection/vertical-rl-rtl-extend-line-backward-p.html
editing/selection/vertical-rl-rtl-extend-line-forward-br.html
editing/selection/vertical-rl-rtl-extend-line-forward-p.html

  • editing/FrameSelection.cpp: (WebCore::FrameSelection::modifyExtendingForward): Calls lineDirectionPointForBlockDirectionNavigation. (WebCore::FrameSelection::modifyMovingForward): Ditto. (WebCore::FrameSelection::modifyExtendingBackward): Ditto. (WebCore::FrameSelection::modifyMovingBackward): Ditto. (WebCore::FrameSelection::modify): Ditto. (WebCore::FrameSelection::lineDirectionPointForBlockDirectionNavigation): Renamed from xPosForVerticalArrowNavigation; calls VisiblePosition::lineDirectionPointForVerticalNavigation.
  • editing/FrameSelection.h:
  • editing/VisiblePosition.cpp: (WebCore::VisiblePosition::lineDirectionPointForBlockDirectionNavigation): Renamed from xOffsetForVerticalNavigation. Returns line direction point instead of visual x coordinate.
  • editing/VisiblePosition.h:
  • editing/visible_units.cpp: (WebCore::absoluteLineDirectionPointToLocalPointInBlock): Extracted from previousLinePosition and nextLinePosition. Takes care or writing modes. (WebCore::previousLinePosition): Calls absoluteLineDirectionPointToLocalPointInBlock. (WebCore::nextLinePosition): Ditto.
  • editing/visible_units.h:
  • rendering/RootInlineBox.cpp: (WebCore::RootInlineBox::closestLeafChildForPoint): Added; takes a physical point and calls closestLeafChildForLogicalLeftPosition with logical x.
  • rendering/RootInlineBox.h:
Location:
trunk
Files:
36 added
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r89064 r89091  
     12011-06-16  Ryosuke Niwa  <rniwa@webkit.org>
     2
     3        Reviewed by Darin Adler.
     4
     5        Support logical line movement in vertical writing mode
     6        https://bugs.webkit.org/show_bug.cgi?id=62743
     7
     8        Added various tests to ensure WebKit uses a proper line direction point
     9        when extending selection horizontally in vertical writing modes.
     10
     11        * editing/selection/vertical-lr-ltr-extend-line-backward-br.html: Added.
     12        * editing/selection/vertical-lr-ltr-extend-line-forward-br.html: Added.
     13        * editing/selection/vertical-rl-ltr-extend-line-backward-br.html: Added.
     14        * editing/selection/vertical-rl-ltr-extend-line-backward-p.html: Added.
     15        * editing/selection/vertical-rl-ltr-extend-line-backward-wrap.html: Added.
     16        * editing/selection/vertical-rl-ltr-extend-line-forward-br.html: Added.
     17        * editing/selection/vertical-rl-ltr-extend-line-forward-p.html: Added.
     18        * editing/selection/vertical-rl-ltr-extend-line-forward-wrap.html: Added.
     19        * editing/selection/vertical-rl-rtl-extend-line-backward-br.html: Added.
     20        * editing/selection/vertical-rl-rtl-extend-line-backward-p.html: Added.
     21        * editing/selection/vertical-rl-rtl-extend-line-forward-br.html: Added.
     22        * editing/selection/vertical-rl-rtl-extend-line-forward-p.html: Added.
     23        * platform/mac/editing/selection/vertical-lr-ltr-extend-line-backward-br-expected.png: Added.
     24        * platform/mac/editing/selection/vertical-lr-ltr-extend-line-backward-br-expected.txt: Added.
     25        * platform/mac/editing/selection/vertical-lr-ltr-extend-line-forward-br-expected.png: Added.
     26        * platform/mac/editing/selection/vertical-lr-ltr-extend-line-forward-br-expected.txt: Added.
     27        * platform/mac/editing/selection/vertical-rl-ltr-extend-line-backward-br-expected.png: Added.
     28        * platform/mac/editing/selection/vertical-rl-ltr-extend-line-backward-br-expected.txt: Added.
     29        * platform/mac/editing/selection/vertical-rl-ltr-extend-line-backward-p-expected.png: Added.
     30        * platform/mac/editing/selection/vertical-rl-ltr-extend-line-backward-p-expected.txt: Added.
     31        * platform/mac/editing/selection/vertical-rl-ltr-extend-line-backward-wrap-expected.png: Added.
     32        * platform/mac/editing/selection/vertical-rl-ltr-extend-line-backward-wrap-expected.txt: Added.
     33        * platform/mac/editing/selection/vertical-rl-ltr-extend-line-forward-br-expected.png: Added.
     34        * platform/mac/editing/selection/vertical-rl-ltr-extend-line-forward-br-expected.txt: Added.
     35        * platform/mac/editing/selection/vertical-rl-ltr-extend-line-forward-p-expected.png: Added.
     36        * platform/mac/editing/selection/vertical-rl-ltr-extend-line-forward-p-expected.txt: Added.
     37        * platform/mac/editing/selection/vertical-rl-ltr-extend-line-forward-wrap-expected.png: Added.
     38        * platform/mac/editing/selection/vertical-rl-ltr-extend-line-forward-wrap-expected.txt: Added.
     39        * platform/mac/editing/selection/vertical-rl-rtl-extend-line-backward-br-expected.png: Added.
     40        * platform/mac/editing/selection/vertical-rl-rtl-extend-line-backward-br-expected.txt: Added.
     41        * platform/mac/editing/selection/vertical-rl-rtl-extend-line-backward-p-expected.png: Added.
     42        * platform/mac/editing/selection/vertical-rl-rtl-extend-line-backward-p-expected.txt: Added.
     43        * platform/mac/editing/selection/vertical-rl-rtl-extend-line-forward-br-expected.png: Added.
     44        * platform/mac/editing/selection/vertical-rl-rtl-extend-line-forward-br-expected.txt: Added.
     45        * platform/mac/editing/selection/vertical-rl-rtl-extend-line-forward-p-expected.png: Added.
     46        * platform/mac/editing/selection/vertical-rl-rtl-extend-line-forward-p-expected.txt: Added.
     47
    1482011-06-16  Ryosuke Niwa  <rniwa@webkit.org>
    249
  • trunk/Source/WebCore/ChangeLog

    r89086 r89091  
     12011-06-16  Ryosuke Niwa  <rniwa@webkit.org>
     2
     3        Reviewed by Darin Adler.
     4
     5        Support logical line movement in vertical writing mode
     6        https://bugs.webkit.org/show_bug.cgi?id=62743
     7
     8        Fixed the bug by making xOffsetForVerticalNavigation (now called lineDirectionPointForVerticalNavigation)
     9        aware of writing modes. Also extracted absoluteLineDirectionPointToLocalPointInBlock from previousLinePosition
     10        and nextLinePosition to convert a line direction point to a physical point relative to a root inline box.
     11
     12        Tests: editing/selection/vertical-lr-ltr-extend-line-backward-br.html
     13               editing/selection/vertical-lr-ltr-extend-line-forward-br.html
     14               editing/selection/vertical-rl-ltr-extend-line-backward-br.html
     15               editing/selection/vertical-rl-ltr-extend-line-backward-p.html
     16               editing/selection/vertical-rl-ltr-extend-line-backward-wrap.html
     17               editing/selection/vertical-rl-ltr-extend-line-forward-br.html
     18               editing/selection/vertical-rl-ltr-extend-line-forward-p.html
     19               editing/selection/vertical-rl-ltr-extend-line-forward-wrap.html
     20               editing/selection/vertical-rl-rtl-extend-line-backward-br.html
     21               editing/selection/vertical-rl-rtl-extend-line-backward-p.html
     22               editing/selection/vertical-rl-rtl-extend-line-forward-br.html
     23               editing/selection/vertical-rl-rtl-extend-line-forward-p.html
     24
     25        * editing/FrameSelection.cpp:
     26        (WebCore::FrameSelection::modifyExtendingForward): Calls lineDirectionPointForBlockDirectionNavigation.
     27        (WebCore::FrameSelection::modifyMovingForward): Ditto.
     28        (WebCore::FrameSelection::modifyExtendingBackward): Ditto.
     29        (WebCore::FrameSelection::modifyMovingBackward): Ditto.
     30        (WebCore::FrameSelection::modify): Ditto.
     31        (WebCore::FrameSelection::lineDirectionPointForBlockDirectionNavigation): Renamed from
     32        xPosForVerticalArrowNavigation; calls VisiblePosition::lineDirectionPointForVerticalNavigation.
     33        * editing/FrameSelection.h:
     34        * editing/VisiblePosition.cpp:
     35        (WebCore::VisiblePosition::lineDirectionPointForBlockDirectionNavigation): Renamed from
     36        xOffsetForVerticalNavigation. Returns line direction point instead of visual x coordinate.
     37        * editing/VisiblePosition.h:
     38        * editing/visible_units.cpp:
     39        (WebCore::absoluteLineDirectionPointToLocalPointInBlock): Extracted from previousLinePosition and
     40        nextLinePosition. Takes care or writing modes.
     41        (WebCore::previousLinePosition): Calls absoluteLineDirectionPointToLocalPointInBlock.
     42        (WebCore::nextLinePosition): Ditto.
     43        * editing/visible_units.h:
     44        * rendering/RootInlineBox.cpp:
     45        (WebCore::RootInlineBox::closestLeafChildForPoint): Added; takes a physical point and calls
     46        closestLeafChildForLogicalLeftPosition with logical x.
     47        * rendering/RootInlineBox.h:
     48
    1492011-06-16  Nate Chapin  <japhet@chromium.org>
    250
  • trunk/Source/WebCore/editing/FrameSelection.cpp

    r88178 r89091  
    507507        break;
    508508    case LineGranularity:
    509         pos = nextLinePosition(pos, xPosForVerticalArrowNavigation(EXTENT));
     509        pos = nextLinePosition(pos, lineDirectionPointForBlockDirectionNavigation(EXTENT));
    510510        break;
    511511    case ParagraphGranularity:
    512         pos = nextParagraphPosition(pos, xPosForVerticalArrowNavigation(EXTENT));
     512        pos = nextParagraphPosition(pos, lineDirectionPointForBlockDirectionNavigation(EXTENT));
    513513        break;
    514514    case SentenceBoundary:
     
    590590        pos = endForPlatform();
    591591        if (!isRange() || !isStartOfLine(pos))
    592             pos = nextLinePosition(pos, xPosForVerticalArrowNavigation(START));
     592            pos = nextLinePosition(pos, lineDirectionPointForBlockDirectionNavigation(START));
    593593        break;
    594594    }
    595595    case ParagraphGranularity:
    596         pos = nextParagraphPosition(endForPlatform(), xPosForVerticalArrowNavigation(START));
     596        pos = nextParagraphPosition(endForPlatform(), lineDirectionPointForBlockDirectionNavigation(START));
    597597        break;
    598598    case SentenceBoundary:
     
    679679        break;
    680680    case LineGranularity:
    681         pos = previousLinePosition(pos, xPosForVerticalArrowNavigation(EXTENT));
     681        pos = previousLinePosition(pos, lineDirectionPointForBlockDirectionNavigation(EXTENT));
    682682        break;
    683683    case ParagraphGranularity:
    684         pos = previousParagraphPosition(pos, xPosForVerticalArrowNavigation(EXTENT));
     684        pos = previousParagraphPosition(pos, lineDirectionPointForBlockDirectionNavigation(EXTENT));
    685685        break;
    686686    case SentenceBoundary:
     
    756756        break;
    757757    case LineGranularity:
    758         pos = previousLinePosition(startForPlatform(), xPosForVerticalArrowNavigation(START));
     758        pos = previousLinePosition(startForPlatform(), lineDirectionPointForBlockDirectionNavigation(START));
    759759        break;
    760760    case ParagraphGranularity:
    761         pos = previousParagraphPosition(startForPlatform(), xPosForVerticalArrowNavigation(START));
     761        pos = previousParagraphPosition(startForPlatform(), lineDirectionPointForBlockDirectionNavigation(START));
    762762        break;
    763763    case SentenceBoundary:
     
    844844    // Note: the START position type is arbitrary because it is unused, it would be
    845845    // the requested position type if there were no xPosForVerticalArrowNavigation set.
    846     int x = xPosForVerticalArrowNavigation(START);
     846    int x = lineDirectionPointForBlockDirectionNavigation(START);
    847847
    848848    switch (alter) {
     
    916916    case AlterationMove:
    917917        pos = VisiblePosition(up ? m_selection.start() : m_selection.end(), m_selection.affinity());
    918         xPos = xPosForVerticalArrowNavigation(up ? START : END);
     918        xPos = lineDirectionPointForBlockDirectionNavigation(up ? START : END);
    919919        m_selection.setAffinity(up ? UPSTREAM : DOWNSTREAM);
    920920        break;
    921921    case AlterationExtend:
    922922        pos = VisiblePosition(m_selection.extent(), m_selection.affinity());
    923         xPos = xPosForVerticalArrowNavigation(EXTENT);
     923        xPos = lineDirectionPointForBlockDirectionNavigation(EXTENT);
    924924        m_selection.setAffinity(DOWNSTREAM);
    925925        break;
     
    972972}
    973973
    974 int FrameSelection::xPosForVerticalArrowNavigation(EPositionType type)
     974int FrameSelection::lineDirectionPointForBlockDirectionNavigation(EPositionType type)
    975975{
    976976    int x = 0;
     
    10031003        // VisiblePosition creation can fail here if a node containing the selection becomes visibility:hidden
    10041004        // after the selection is created and before this function is called.
    1005         x = visiblePosition.isNotNull() ? visiblePosition.xOffsetForVerticalNavigation() : 0;
     1005        x = visiblePosition.isNotNull() ? visiblePosition.lineDirectionPointForBlockDirectionNavigation() : 0;
    10061006        m_xPosForVerticalArrowNavigation = x;
    10071007    } else
  • trunk/Source/WebCore/editing/FrameSelection.h

    r88050 r89091  
    256256    VisiblePosition modifyMovingBackward(TextGranularity);
    257257
    258     int xPosForVerticalArrowNavigation(EPositionType);
     258    int lineDirectionPointForBlockDirectionNavigation(EPositionType);
    259259   
    260260    void notifyAccessibilityForSelectionChange();
  • trunk/Source/WebCore/editing/VisiblePosition.cpp

    r88685 r89091  
    3434#include "Logging.h"
    3535#include "Range.h"
     36#include "RenderBlock.h"
    3637#include "RootInlineBox.h"
    3738#include "Text.h"
     
    589590}
    590591
    591 int VisiblePosition::xOffsetForVerticalNavigation() const
     592int VisiblePosition::lineDirectionPointForBlockDirectionNavigation() const
    592593{
    593594    RenderObject* renderer;
     
    599600    // without consulting transforms, so that 'up' in transformed text is 'up'
    600601    // relative to the text, not absolute 'up'.
    601     return renderer->localToAbsolute(localRect.location()).x();
     602    FloatPoint caretPoint = renderer->localToAbsolute(localRect.location());
     603    return renderer->containingBlock()->isHorizontalWritingMode() ? caretPoint.x() : caretPoint.y();
    602604}
    603605
  • trunk/Source/WebCore/editing/VisiblePosition.h

    r80752 r89091  
    9696    // Bounds of (possibly transformed) caret in absolute coords
    9797    IntRect absoluteCaretBounds() const;
    98     // Abs x position of the caret ignoring transforms.
     98    // Abs x/y position of the caret ignoring transforms.
    9999    // FIXME: navigation with transforms should be smarter.
    100     int xOffsetForVerticalNavigation() const;
     100    int lineDirectionPointForBlockDirectionNavigation() const;
    101101   
    102102#ifndef NDEBUG
  • trunk/Source/WebCore/editing/visible_units.cpp

    r89056 r89091  
    504504}
    505505
    506 VisiblePosition previousLinePosition(const VisiblePosition &visiblePosition, int x)
     506static inline IntPoint absoluteLineDirectionPointToLocalPointInBlock(RootInlineBox* root, int lineDirectionPoint)
     507{
     508    ASSERT(root);
     509    RenderBlock* containingBlock = root->block();
     510    FloatPoint absoluteBlockPoint = containingBlock->localToAbsolute(FloatPoint());
     511    if (containingBlock->hasOverflowClip())
     512        absoluteBlockPoint -= containingBlock->layer()->scrolledContentOffset();
     513
     514    if (root->block()->isHorizontalWritingMode())
     515        return IntPoint(lineDirectionPoint - absoluteBlockPoint.x(), root->blockDirectionPointInLine());
     516
     517    return IntPoint(root->selectionTop(), lineDirectionPoint - absoluteBlockPoint.y());
     518}
     519
     520VisiblePosition previousLinePosition(const VisiblePosition &visiblePosition, int lineDirectionPoint)
    507521{
    508522    Position p = visiblePosition.deepEquivalent();
     
    518532        return VisiblePosition();
    519533
    520     RenderBlock *containingBlock = 0;
    521534    RootInlineBox *root = 0;
    522535    InlineBox* box;
     
    527540        // We want to skip zero height boxes.
    528541        // This could happen in case it is a TrailingFloatsRootInlineBox.
    529         if (root && root->logicalHeight())
    530             containingBlock = renderer->containingBlock();
    531         else
     542        if (!root || !root->logicalHeight())
    532543            root = 0;
    533544    }
     
    554565                        // previous root line box found
    555566                        root = box->root();
    556                         containingBlock = n->renderer()->containingBlock();
    557567                        break;
    558568                    }
     
    567577    if (root) {
    568578        // FIXME: Can be wrong for multi-column layout and with transforms.
    569         FloatPoint absPos = containingBlock->localToAbsolute(FloatPoint());
    570         if (containingBlock->hasOverflowClip())
    571             absPos -= containingBlock->layer()->scrolledContentOffset();
    572         RenderObject* renderer = root->closestLeafChildForLogicalLeftPosition(x - absPos.x(), isEditablePosition(p))->renderer();
     579        IntPoint pointInLine = absoluteLineDirectionPointToLocalPointInBlock(root, lineDirectionPoint);
     580        RenderObject* renderer = root->closestLeafChildForPoint(pointInLine, isEditablePosition(p))->renderer();
    573581        Node* node = renderer->node();
    574582        if (node && editingIgnoresContent(node))
    575583            return positionInParentBeforeNode(node);
    576         return renderer->positionForPoint(IntPoint(x - absPos.x(), root->blockDirectionPointInLine()));
     584        return renderer->positionForPoint(pointInLine);
    577585    }
    578586   
     
    615623}
    616624
    617 VisiblePosition nextLinePosition(const VisiblePosition &visiblePosition, int x)
     625VisiblePosition nextLinePosition(const VisiblePosition &visiblePosition, int lineDirectionPoint)
    618626{
    619627    Position p = visiblePosition.deepEquivalent();
     
    629637        return VisiblePosition();
    630638
    631     RenderBlock *containingBlock = 0;
    632639    RootInlineBox *root = 0;
    633640    InlineBox* box;
     
    638645        // We want to skip zero height boxes.
    639646        // This could happen in case it is a TrailingFloatsRootInlineBox.
    640         if (root && root->logicalHeight())
    641             containingBlock = renderer->containingBlock();
    642         else
     647        if (!root || !root->logicalHeight())
    643648            root = 0;
    644649    }
     
    662667                    // next root line box found
    663668                    root = box->root();
    664                     containingBlock = n->renderer()->containingBlock();
    665669                    break;
    666670                }
     
    674678    if (root) {
    675679        // FIXME: Can be wrong for multi-column layout and with transforms.
    676         FloatPoint absPos = containingBlock->localToAbsolute(FloatPoint());
    677         if (containingBlock->hasOverflowClip())
    678             absPos -= containingBlock->layer()->scrolledContentOffset();
    679         RenderObject* renderer = root->closestLeafChildForLogicalLeftPosition(x - absPos.x(), isEditablePosition(p))->renderer();
     680        IntPoint pointInLine = absoluteLineDirectionPointToLocalPointInBlock(root, lineDirectionPoint);
     681        RenderObject* renderer = root->closestLeafChildForPoint(pointInLine, isEditablePosition(p))->renderer();
    680682        Node* node = renderer->node();
    681683        if (node && editingIgnoresContent(node))
    682684            return positionInParentBeforeNode(node);
    683         return renderer->positionForPoint(IntPoint(x - absPos.x(), root->blockDirectionPointInLine()));
    684     }   
     685        return renderer->positionForPoint(pointInLine);
     686    }
    685687
    686688    // Could not find a next line. This means we must already be on the last line.
  • trunk/Source/WebCore/editing/visible_units.h

    r86325 r89091  
    5555VisiblePosition startOfLine(const VisiblePosition &);
    5656VisiblePosition endOfLine(const VisiblePosition &);
    57 VisiblePosition previousLinePosition(const VisiblePosition &, int x);
    58 VisiblePosition nextLinePosition(const VisiblePosition &, int x);
     57VisiblePosition previousLinePosition(const VisiblePosition &, int lineDirectionPoint);
     58VisiblePosition nextLinePosition(const VisiblePosition &, int lineDirectionPoint);
    5959bool inSameLine(const VisiblePosition &, const VisiblePosition &);
    6060bool inSameLogicalLine(const VisiblePosition &, const VisiblePosition &);
  • trunk/Source/WebCore/rendering/RootInlineBox.cpp

    r88319 r89091  
    459459}
    460460
     461InlineBox* RootInlineBox::closestLeafChildForPoint(const IntPoint& pointInContents, bool onlyEditableLeaves)
     462{
     463    return closestLeafChildForLogicalLeftPosition(block()->isHorizontalWritingMode() ? pointInContents.x() : pointInContents.y(), onlyEditableLeaves);
     464}
     465
    461466InlineBox* RootInlineBox::closestLeafChildForLogicalLeftPosition(int leftPosition, bool onlyEditableLeaves)
    462467{
  • trunk/Source/WebCore/rendering/RootInlineBox.h

    r89056 r89091  
    112112    RenderBlock* block() const;
    113113
     114    InlineBox* closestLeafChildForPoint(const IntPoint&, bool onlyEditableLeaves);
    114115    InlineBox* closestLeafChildForLogicalLeftPosition(int, bool onlyEditableLeaves = false);
    115116
Note: See TracChangeset for help on using the changeset viewer.