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

Unified Diff: third_party/WebKit/Source/core/editing/FrameCaret.cpp

Issue 2627423002: Make FrameCaret contains CaretBase instead of deriving from it (Closed)
Patch Set: 2017-01-16T16:55:39 Created 3 years, 11 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
Index: third_party/WebKit/Source/core/editing/FrameCaret.cpp
diff --git a/third_party/WebKit/Source/core/editing/FrameCaret.cpp b/third_party/WebKit/Source/core/editing/FrameCaret.cpp
index d2073529efe2d7d9646f90be25e7dc9b17de5883..a6329c58521fe84621c018d252469bdb6b5404f7 100644
--- a/third_party/WebKit/Source/core/editing/FrameCaret.cpp
+++ b/third_party/WebKit/Source/core/editing/FrameCaret.cpp
@@ -26,6 +26,7 @@
#include "core/editing/FrameCaret.h"
#include "core/dom/TaskRunnerHelper.h"
+#include "core/editing/CaretBase.h"
#include "core/editing/EditingUtilities.h"
#include "core/editing/Editor.h"
#include "core/editing/SelectionEditor.h"
@@ -46,6 +47,7 @@ FrameCaret::FrameCaret(LocalFrame& frame,
const SelectionEditor& selectionEditor)
: m_selectionEditor(&selectionEditor),
m_frame(frame),
+ m_caretBase(new CaretBase()),
m_caretVisibility(CaretVisibility::Hidden),
m_previousCaretVisibility(CaretVisibility::Hidden),
m_caretBlinkTimer(TaskRunnerHelper::get(TaskType::UnspecedTimer, &frame),
@@ -63,7 +65,6 @@ DEFINE_TRACE(FrameCaret) {
visitor->trace(m_frame);
visitor->trace(m_previousCaretNode);
visitor->trace(m_previousCaretAnchorNode);
- CaretBase::trace(visitor);
}
const PositionWithAffinity FrameCaret::caretPosition() const {
@@ -74,6 +75,10 @@ const PositionWithAffinity FrameCaret::caretPosition() const {
return PositionWithAffinity(selection.start(), selection.affinity());
}
+const DisplayItemClient& FrameCaret::displayItemClient() const {
+ return *m_caretBase;
+}
+
inline static bool shouldStopBlinkingDueToTypingCommand(LocalFrame* frame) {
return frame->editor().lastEditCommand() &&
frame->editor().lastEditCommand()->shouldStopCaretBlinking();
@@ -197,12 +202,12 @@ void FrameCaret::invalidateCaretRect(bool forceInvalidation) {
return;
if (m_previousCaretAnchorNode &&
- shouldRepaintCaret(*m_previousCaretAnchorNode)) {
- invalidateLocalCaretRect(m_previousCaretAnchorNode.get(),
- m_previousCaretRect);
+ CaretBase::shouldRepaintCaret(*m_previousCaretAnchorNode)) {
+ m_caretBase->invalidateLocalCaretRect(m_previousCaretAnchorNode.get(),
+ m_previousCaretRect);
}
- if (newAnchorNode && shouldRepaintCaret(*newAnchorNode))
- invalidateLocalCaretRect(newAnchorNode, newRect);
+ if (newAnchorNode && CaretBase::shouldRepaintCaret(*newAnchorNode))
+ m_caretBase->invalidateLocalCaretRect(newAnchorNode, newRect);
m_previousCaretNode = newNode;
m_previousCaretAnchorNode = newAnchorNode;
m_previousCaretRect = newRect;
@@ -219,16 +224,17 @@ IntRect FrameCaret::absoluteCaretBounds() {
Node* const caretNode = caretPosition().anchorNode();
if (!isActive())
- return absoluteBoundsForLocalRect(caretNode, LayoutRect());
+ return CaretBase::absoluteBoundsForLocalRect(caretNode, LayoutRect());
// TODO(yosin): We should get rid of text control short path since layout
// tree is clean.
if (enclosingTextControl(caretPosition().position()) &&
isVisuallyEquivalentCandidate(caretPosition().position())) {
- return absoluteBoundsForLocalRect(caretNode,
- computeCaretRect(caretPosition()));
+ return CaretBase::absoluteBoundsForLocalRect(
+ caretNode, CaretBase::computeCaretRect(caretPosition()));
}
- return absoluteBoundsForLocalRect(
- caretNode, computeCaretRect(createVisiblePosition(caretPosition())));
+ return CaretBase::absoluteBoundsForLocalRect(
+ caretNode,
+ CaretBase::computeCaretRect(createVisiblePosition(caretPosition())));
}
void FrameCaret::setShouldShowBlockCursor(bool shouldShowBlockCursor) {
@@ -247,8 +253,9 @@ void FrameCaret::paintCaret(GraphicsContext& context,
if (!(isActive() && m_shouldPaintCaret))
return;
- const LayoutRect caretLocalRect = computeCaretRect(caretPosition());
- CaretBase::paintCaret(caretPosition().anchorNode(), context, *this,
+ const LayoutRect caretLocalRect =
+ CaretBase::computeCaretRect(caretPosition());
+ CaretBase::paintCaret(caretPosition().anchorNode(), context, *m_caretBase,
caretLocalRect, paintOffset, DisplayItem::kCaret);
}
@@ -256,8 +263,8 @@ void FrameCaret::dataWillChange(const CharacterData& node) {
if (node == m_previousCaretNode) {
// This invalidation is eager, and intentionally uses stale state.
DisableCompositingQueryAsserts disabler;
- invalidateLocalCaretRect(m_previousCaretAnchorNode.get(),
- m_previousCaretRect);
+ m_caretBase->invalidateLocalCaretRect(m_previousCaretAnchorNode.get(),
+ m_previousCaretRect);
}
}
@@ -266,8 +273,8 @@ void FrameCaret::nodeWillBeRemoved(Node& node) {
return;
// Hits in ManualTests/caret-paint-after-last-text-is-removed.html
DisableCompositingQueryAsserts disabler;
- invalidateLocalCaretRect(m_previousCaretAnchorNode.get(),
- m_previousCaretRect);
+ m_caretBase->invalidateLocalCaretRect(m_previousCaretAnchorNode.get(),
+ m_previousCaretRect);
m_previousCaretNode = nullptr;
m_previousCaretAnchorNode = nullptr;
m_previousCaretRect = LayoutRect();
« no previous file with comments | « third_party/WebKit/Source/core/editing/FrameCaret.h ('k') | third_party/WebKit/Source/core/editing/FrameSelection.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698