Skip to content
Permalink
Browse files
2011-01-21 Levi Weintraub <leviw@chromium.org>
        Reviewed by Darin Adler.

        Adding border and padding to the calculation of the local caret rect for RenderBoxes.

        Undo moves caret to invalid position
        https://bugs.webkit.org/show_bug.cgi?id=49744

        Tests: editing/selection/caret-painting-after-paste-undo-rtl.html
               editing/selection/caret-painting-after-paste-undo.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::localCaretRect):
2011-01-21  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Darin Adler.

        Updating the expected result for 5408255 and adding tests for caret positioning at the
        beginning and end of RenderBoxes.

        Undo moves caret to invalid position
        https://bugs.webkit.org/show_bug.cgi?id=49744

        * editing/selection/caret-painting-after-paste-undo-rtl.html: Added.
        * editing/selection/caret-painting-after-paste-undo.html: Added.
        * platform/mac/editing/deleting/5408255-expected.checksum:
        * platform/mac/editing/deleting/5408255-expected.png:
        * platform/mac/editing/selection/caret-painting-after-paste-undo-expected.checksum: Added.
        * platform/mac/editing/selection/caret-painting-after-paste-undo-expected.png: Added.
        * platform/mac/editing/selection/caret-painting-after-paste-undo-expected.txt: Added.
        * platform/mac/editing/selection/caret-painting-after-paste-undo-rtl-expected.checksum: Added.
        * platform/mac/editing/selection/caret-painting-after-paste-undo-rtl-expected.png: Added.
        * platform/mac/editing/selection/caret-painting-after-paste-undo-rtl-expected.txt: Added.


Canonical link: https://commits.webkit.org/66855@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@76625 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  • Loading branch information
leviw committed Jan 25, 2011
1 parent c11458d commit 6c070734b8b6320f7c9bc6d860dd383801aca7d9
Showing 13 changed files with 153 additions and 2 deletions.
@@ -1,3 +1,24 @@
2011-01-21 Levi Weintraub <leviw@chromium.org>

Reviewed by Darin Adler.

Updating the expected result for 5408255 and adding tests for caret positioning at the
beginning and end of RenderBoxes.

Undo moves caret to invalid position
https://bugs.webkit.org/show_bug.cgi?id=49744

* editing/selection/caret-painting-after-paste-undo-rtl.html: Added.
* editing/selection/caret-painting-after-paste-undo.html: Added.
* platform/mac/editing/deleting/5408255-expected.checksum:
* platform/mac/editing/deleting/5408255-expected.png:
* platform/mac/editing/selection/caret-painting-after-paste-undo-expected.checksum: Added.
* platform/mac/editing/selection/caret-painting-after-paste-undo-expected.png: Added.
* platform/mac/editing/selection/caret-painting-after-paste-undo-expected.txt: Added.
* platform/mac/editing/selection/caret-painting-after-paste-undo-rtl-expected.checksum: Added.
* platform/mac/editing/selection/caret-painting-after-paste-undo-rtl-expected.png: Added.
* platform/mac/editing/selection/caret-painting-after-paste-undo-rtl-expected.txt: Added.

2011-01-25 Tony Chang <tony@chromium.org>

Unreviewed, add chromium-mac baselines after r76599.
@@ -0,0 +1,21 @@
<html>
<head>
<script src="../editing.js" language="JavaScript" type="text/JavaScript"></script>
<script>
function editingTest() {
doubleClick(0, 0);
copyCommand();
var editor = document.getElementById("editor");
editor.focus();
pasteCommand();
undoCommand();
}
</script>
</head>
<body onLoad="runEditingTest();">
<div>To run this test, copy some text, paste it into the box below, and then undo.
The caret should be positioned respecting the box's border and padding.</div><br>
<div id="editor" contenteditable=true style="direction: rtl; border:2px inset #eee; padding: 5px;">
</div>
</body>
</html>
@@ -0,0 +1,21 @@
<html>
<head>
<script src="../editing.js" language="JavaScript" type="text/JavaScript"></script>
<script>
function editingTest() {
doubleClick(0, 0);
copyCommand();
var editor = document.getElementById("editor");
editor.focus();
pasteCommand();
undoCommand();
}
</script>
</head>
<body onLoad="runEditingTest();">
<div>To run this test, copy some text, paste it into the box below, and then undo.
The caret should be positioned respecting the box's border and padding.</div><br>
<div id="editor" contenteditable=true style="border:2px inset #eee; padding: 5px;">
</div>
</body>
</html>
@@ -1 +1 @@
ca490445057281bd26f5cab7862bb9cb
3d62e6dd2bd0bae57beed5f1d3101ca0
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
@@ -0,0 +1 @@
c9d3f8bdb370e1321e835f10e57d0f12
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
@@ -0,0 +1,32 @@
EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 0 of DIV > BODY > HTML > #document to 0 of DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 0 of DIV > BODY > HTML > #document to 0 of DIV > BODY > HTML > #document toDOMRange:range from 0 of #text > DIV > BODY > HTML > #document to 2 of #text > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
EDITING DELEGATE: shouldBeginEditingInDOMRange:range from 0 of DIV > BODY > HTML > #document to 1 of DIV > BODY > HTML > #document
EDITING DELEGATE: webViewDidBeginEditing:WebViewDidBeginEditingNotification
EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 0 of DIV > BODY > HTML > #document to 0 of DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
EDITING DELEGATE: shouldInsertNode:#document-fragment replacingDOMRange:range from 0 of DIV > BODY > HTML > #document to 0 of DIV > BODY > HTML > #document givenAction:WebViewInsertActionPasted
EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 0 of DIV > BODY > HTML > #document to 0 of DIV > BODY > HTML > #document toDOMRange:range from 2 of #text > DIV > BODY > HTML > #document to 2 of #text > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 0 of DIV > BODY > HTML > #document to 0 of DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
layer at (0,0) size 800x600
RenderView at (0,0) size 800x600
layer at (0,0) size 800x600
RenderBlock {HTML} at (0,0) size 800x600
RenderBody {BODY} at (8,8) size 784x584
RenderBlock {DIV} at (0,0) size 784x36
RenderText {#text} at (0,0) size 761x36
text run at (0,0) width 477: "To run this test, copy some text, paste it into the box below, and then undo. "
text run at (477,0) width 284: "The caret should be positioned respecting the"
text run at (0,18) width 164: "box's border and padding."
RenderBlock (anonymous) at (0,36) size 784x18
RenderBR {BR} at (0,0) size 0x18
RenderBlock {DIV} at (0,54) size 784x32 [border: (2px inset #EEEEEE)]
RenderText {#text} at (0,0) size 0x0
caret: position 0 of child 4 {DIV} of body
@@ -0,0 +1 @@
648036b0929b7b02e5909f58dbc19196
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
@@ -0,0 +1,32 @@
EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 0 of DIV > BODY > HTML > #document to 0 of DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 0 of DIV > BODY > HTML > #document to 0 of DIV > BODY > HTML > #document toDOMRange:range from 0 of #text > DIV > BODY > HTML > #document to 2 of #text > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
EDITING DELEGATE: shouldBeginEditingInDOMRange:range from 0 of DIV > BODY > HTML > #document to 1 of DIV > BODY > HTML > #document
EDITING DELEGATE: webViewDidBeginEditing:WebViewDidBeginEditingNotification
EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 0 of DIV > BODY > HTML > #document to 0 of DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
EDITING DELEGATE: shouldInsertNode:#document-fragment replacingDOMRange:range from 0 of DIV > BODY > HTML > #document to 0 of DIV > BODY > HTML > #document givenAction:WebViewInsertActionPasted
EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 0 of DIV > BODY > HTML > #document to 0 of DIV > BODY > HTML > #document toDOMRange:range from 2 of #text > DIV > BODY > HTML > #document to 2 of #text > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 0 of DIV > BODY > HTML > #document to 0 of DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
layer at (0,0) size 800x600
RenderView at (0,0) size 800x600
layer at (0,0) size 800x600
RenderBlock {HTML} at (0,0) size 800x600
RenderBody {BODY} at (8,8) size 784x584
RenderBlock {DIV} at (0,0) size 784x36
RenderText {#text} at (0,0) size 761x36
text run at (0,0) width 477: "To run this test, copy some text, paste it into the box below, and then undo. "
text run at (477,0) width 284: "The caret should be positioned respecting the"
text run at (0,18) width 164: "box's border and padding."
RenderBlock (anonymous) at (0,36) size 784x18
RenderBR {BR} at (0,0) size 0x18
RenderBlock {DIV} at (0,54) size 784x32 [border: (2px inset #EEEEEE)]
RenderText {#text} at (0,0) size 0x0
caret: position 0 of child 4 {DIV} of body
@@ -1,3 +1,18 @@
2011-01-21 Levi Weintraub <leviw@chromium.org>

Reviewed by Darin Adler.

Adding border and padding to the calculation of the local caret rect for RenderBoxes.

Undo moves caret to invalid position
https://bugs.webkit.org/show_bug.cgi?id=49744

Tests: editing/selection/caret-painting-after-paste-undo-rtl.html
editing/selection/caret-painting-after-paste-undo.html

* rendering/RenderBox.cpp:
(WebCore::RenderBox::localCaretRect):

2011-01-25 Sam Weinig <sam@webkit.org>

Reviewed by Anders Carlsson.
@@ -2954,13 +2954,20 @@ IntRect RenderBox::localCaretRect(InlineBox* box, int caretOffset, int* extraWid
// They never refer to children.
// FIXME: Paint the carets inside empty blocks differently than the carets before/after elements.

// FIXME: What about border and padding?
IntRect rect(x(), y(), caretWidth, height());
bool ltr = box ? box->isLeftToRightDirection() : style()->isLeftToRightDirection();

if ((!caretOffset) ^ ltr)
rect.move(IntSize(width() - caretWidth, 0));

if (isTable()) {
if ((!caretOffset) ^ ltr)
rect.move(IntSize(width() - caretWidth, 0));
} else if ((!caretOffset) ^ ltr)
rect.move(IntSize(width() - caretWidth - borderRight() - paddingRight(), borderTop() + paddingTop()));
else
rect.move(IntSize(borderLeft() + paddingLeft(), borderTop() + paddingTop()));

if (box) {
RootInlineBox* rootBox = box->root();
int top = rootBox->lineTop();

0 comments on commit 6c07073

Please sign in to comment.