[Webkit-unassigned] [Bug 61344] --webkit-visual-word does not work in multi-line

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Thu Jul 14 18:42:59 PDT 2011


https://bugs.webkit.org/show_bug.cgi?id=61344


Ryosuke Niwa <rniwa at webkit.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
 Attachment #100723|review?                     |review-
               Flag|                            |




--- Comment #15 from Ryosuke Niwa <rniwa at webkit.org>  2011-07-14 18:42:59 PST ---
(From update of attachment 100723)
View in context: https://bugs.webkit.org/attachment.cgi?id=100723&action=review

I've got a feeling that previousBlockWithLineBoxes/nextBlockWithLineBoxes are broken for flex boxes.  Please look into it.

> Source/WebCore/ChangeLog:15
> +        Reviewed by NOBODY (OOPS!).

This should appear before the long description.

> Source/WebCore/editing/htmlediting.h:150
> +    return Position(node, offset, Position::PositionIsOffsetInAnchor);

Can this node be non-text?  If so, we'll be introducing new blocker for https://bugs.webkit.org/show_bug.cgi?id=63040.  If not , you should use the one that doesn't take the anchor type. r- due to this change.

To give you some background, we're trying to avoid instantiating a position with (node, offset) pair when the node is not a text.  Instead, we use positions before/after node or positions before/after children.

> Source/WebCore/editing/visible_units.cpp:1325
> +                                createPositionAvoidingIgnoredNode(box->renderer()->node(), box->caretMinOffset());

Nit: should be intended by 4 spaces.

> Source/WebCore/editing/visible_units.cpp:1481
> +static const RenderBlock* previousBlockWithLineBoxes(const RenderBlock* root)

I'm not sure if root is a good name for this.  I'd call it startingBlock.

> Source/WebCore/editing/visible_units.cpp:1483
> +    for (const RenderBlock* previous = root; previous; previous = toRenderBlock(previous->previousSibling())) {

"previous" is a relative term.  I get confused by its use in this function.  Can we just call it block or currentBlock?

> Source/WebCore/editing/visible_units.cpp:1485
> +        // Renderer having inline children with contents has root line boxes. 
> +        if (previous->childrenInline() && previous->firstRootBox())

I don't think this comment adds any new information because you're indeed checking that the first root box isn't null.  Please remove it.

> Source/WebCore/editing/visible_units.cpp:1509
> +    while (renderer) {
> +        while (renderer && !renderer->isRenderBlock())
> +            renderer = renderer->parent();
> +
> +        if (!renderer)
> +            return 0;
> +
> +        if (const RenderBlock* blockWithLineBoxes = previousBlockWithLineBoxes(toRenderBlock(renderer->previousSibling())))
> +            return blockWithLineBoxes->lastRootBox();
> +
> +        renderer = renderer->parent();
> +    }

I started to think that these nested loops can be flattened as follows:

for (RenderObject* renderer = node->renderer(); renderer; renderer = renderer->parent()) {
    if (renderer->isRenderBlock()) {
        if (const RenderBlock* blockWithLineBoxes = previousBlockWithLineBoxes(toRenderBlock(renderer->previousSibling()))
            return blockWithLineBoxes->lastRootBox();
    }
}

no?

> Source/WebCore/editing/visible_units.cpp:1516
> +        // Renderer having inline children with contents has root line boxes. 

Ditto about the comment.

> Source/WebCore/editing/visible_units.cpp:1532
> +    while (renderer) {
> +        while (renderer && !renderer->isRenderBlock())
> +            renderer = renderer->parent();

Ditto about flattening the nested loop.

> Source/WebCore/editing/visible_units.cpp:1552
> +                                                                 rootBox->nextLineBox();

Nit: indentation.

> Source/WebCore/editing/visible_units.cpp:1564
> +    if (leftRootInlineBox)
> +        return leftRootInlineBox->lastLeafChild();
> +    return 0;

I'd use tertiary here.

> Source/WebCore/editing/visible_units.cpp:1574
> +                                                                  rootBox->prevLineBox();

Nit: indentation.

> Source/WebCore/editing/visible_units.cpp:1586
> +    if (rightRootInlineBox)
> +        return rightRootInlineBox->firstLeafChild();
> +    return 0;

Nit: tertiary.

> Source/WebCore/editing/visible_units.cpp:1704
> +    VisiblePosition rightWordBreak = rightWordPositionAcrossBoundary(visiblePosition);

You should check the nullity of visiblePosition here.

> LayoutTests/editing/selection/move-by-word-visually-others.html:94
> +<div contenteditable dir=ltr id="multi_line_1" class="test_move_by_word fix_width" style="width:50px" title="[multi_line_1, 0][multi_line_1, 4][multi_line_1, 8][multi_line_1, 12][multi_line_1, 16][multi_line_1, 0, 5][multi_line_1, 4, 5][multi_line_1, 8, 5][multi_line_1, 12, 5]|[multi_line_1, 15, 5][multi_line_1, 12, 5][multi_line_1, 8, 5][multi_line_1, 4, 5][multi_line_1, 0, 5][multi_line_1, 16][multi_line_1, 12][multi_line_1, 8][multi_line_1, 4][multi_line_1, 0]">abc def ghi jkl mn <br/><br/><br/>opq rst uvw xyz</div>

Can we give a shorter id to make the expected result shorter?

-- 
Configure bugmail: https://bugs.webkit.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.



More information about the webkit-unassigned mailing list