Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(918)

Unified Diff: Source/core/editing/Caret.cpp

Issue 275563003: Change caret to show language direction (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/editing/Caret.cpp
diff --git a/Source/core/editing/Caret.cpp b/Source/core/editing/Caret.cpp
index 2b3c1d6ccf2ebb25d5d785e3293dcadc09b02066..c320c0a35d887be68467ca0395c525d5f4268cb2 100644
--- a/Source/core/editing/Caret.cpp
+++ b/Source/core/editing/Caret.cpp
@@ -190,6 +190,12 @@ void CaretBase::repaintCaretForLocalRect(Node* node, const LayoutRect& rect)
LayoutRect inflatedRect = rect;
inflatedRect.inflate(1);
+ // as extra rect are draw so need to refresh more area
Inactive 2014/05/22 14:15:05 Comments should start with a capital letter and en
h.joshi 2014/05/23 13:26:31 Okey, will fix this
+ TextDirection containerDirection = toRenderBoxModelObject(caretRenderer(node))->style()->direction();
Inactive 2014/05/22 14:15:05 You likely want to use caretPainter variable here.
h.joshi 2014/05/23 13:26:31 Okey, will fix this
+ inflatedRect.setWidth(inflatedRect.width() + LayoutUnit(2));
+ if (containerDirection == RTL)
+ inflatedRect.setX(inflatedRect.x() - LayoutUnit(2));
+
caretPainter->repaintRectangle(inflatedRect);
}
@@ -223,8 +229,16 @@ void CaretBase::invalidateCaretRect(Node* node, bool caretRectChanged)
return;
if (RenderView* view = node->document().renderView()) {
- if (shouldRepaintCaret(view, node->isContentEditable(Node::UserSelectAllIsAlwaysNonEditable)))
- repaintCaretForLocalRect(node, localCaretRectWithoutUpdate());
+ if (shouldRepaintCaret(view, node->isContentEditable(Node::UserSelectAllIsAlwaysNonEditable))) {
+ // as extra rect are draw so need to refresh more area
Inactive 2014/05/22 14:15:05 Ditto.
+ LayoutRect drawingRect = localCaretRectWithoutUpdate();
+ TextDirection containerDirection = toRenderBoxModelObject(caretRenderer(node))->style()->direction();
Inactive 2014/05/22 14:15:05 Code duplication, you should probably move the cod
h.joshi 2014/05/23 13:26:31 Okey, will make new utility method
+ drawingRect.setWidth(drawingRect.width() + LayoutUnit(2));
+
+ if (containerDirection == RTL)
+ drawingRect.setX(drawingRect.x() - LayoutUnit(2));
+ repaintCaretForLocalRect(node, drawingRect);
+ }
}
}
@@ -242,6 +256,18 @@ void CaretBase::paintCaret(Node* node, GraphicsContext* context, const LayoutPoi
if (caret.isEmpty())
return;
+ TextDirection containerDirection = toRenderBoxModelObject(renderer)->style()->direction();
+ LayoutRect ptrCaret = caret;
Inactive 2014/05/22 14:15:05 please no not use abbreviations in variable names.
+
+ // drawing different Caret which shows editing style similar to IE
+ if (containerDirection == LTR) {
Inactive 2014/05/22 14:15:05 No {} for one-liners.
h.joshi 2014/05/23 13:26:31 Okey, will update condition
+ ptrCaret.setX(ptrCaret.x() + 1);
Inactive 2014/05/22 14:15:05 identation problem
+ } else {
Inactive 2014/05/22 14:15:05 ditto
+ ptrCaret.setX(ptrCaret.x() - 2);
Inactive 2014/05/22 14:15:05 ditto.
+ }
+ ptrCaret.setWidth(LayoutUnit(2));
+ ptrCaret.setHeight(LayoutUnit(1));
+
Color caretColor = Color::black;
Element* element;
@@ -254,6 +280,14 @@ void CaretBase::paintCaret(Node* node, GraphicsContext* context, const LayoutPoi
caretColor = element->renderer()->resolveColor(CSSPropertyColor);
context->fillRect(caret, caretColor);
+ context->fillRect(ptrCaret, caretColor);
+
+ // Update ptrCaret points and lets draw one more small rect to match IE
Inactive 2014/05/22 14:15:05 end with a '.'
h.joshi 2014/05/23 13:26:31 Okey, will update comment
+ ptrCaret.setY(caret.y() + LayoutUnit(1));
+ ptrCaret.setWidth(LayoutUnit(1));
+ if (containerDirection == RTL)
+ ptrCaret.setX(ptrCaret.x() + 1);
+ context->fillRect(ptrCaret, caretColor);
}
void DragCaretController::paintDragCaret(LocalFrame* frame, GraphicsContext* p, const LayoutPoint& paintOffset, const LayoutRect& clipRect) const
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698