Index: third_party/WebKit/Source/core/editing/FrameCaret.h |
diff --git a/third_party/WebKit/Source/core/editing/FrameCaret.h b/third_party/WebKit/Source/core/editing/FrameCaret.h |
index cbe7ead1804cc3b831d1a45a04d6299c70f24b72..b546a8082bddb9e160d52a19651becfc3d4986dc 100644 |
--- a/third_party/WebKit/Source/core/editing/FrameCaret.h |
+++ b/third_party/WebKit/Source/core/editing/FrameCaret.h |
@@ -26,33 +26,31 @@ |
#ifndef FrameCaret_h |
#define FrameCaret_h |
+#include <memory> |
#include "core/CoreExport.h" |
-#include "core/dom/SynchronousMutationObserver.h" |
#include "core/editing/PositionWithAffinity.h" |
#include "platform/Timer.h" |
#include "platform/geometry/LayoutRect.h" |
+#include "platform/graphics/PaintInvalidationReason.h" |
#include "platform/heap/GarbageCollected.h" |
#include "platform/heap/Member.h" |
-#include <memory> |
namespace blink { |
class CaretDisplayItemClient; |
-class CharacterData; |
class DisplayItemClient; |
class Document; |
+class FrameCaret; |
class GraphicsContext; |
-class Node; |
+class LayoutBlock; |
class LocalFrame; |
class SelectionEditor; |
+struct PaintInvalidatorContext; |
enum class CaretVisibility { Visible, Hidden }; |
class CORE_EXPORT FrameCaret final |
- : public GarbageCollectedFinalized<FrameCaret>, |
- public SynchronousMutationObserver { |
- USING_GARBAGE_COLLECTED_MIXIN(FrameCaret); |
- |
+ : public GarbageCollectedFinalized<FrameCaret> { |
public: |
FrameCaret(LocalFrame&, const SelectionEditor&); |
~FrameCaret(); |
@@ -60,7 +58,6 @@ class CORE_EXPORT FrameCaret final |
const DisplayItemClient& displayItemClient() const; |
bool isActive() const { return caretPosition().isNotNull(); } |
- void documentAttached(Document*); |
void updateAppearance(); |
// Used to suspend caret blinking while the mouse is down. |
@@ -70,24 +67,27 @@ class CORE_EXPORT FrameCaret final |
bool isCaretBlinkingSuspended() const { return m_isCaretBlinkingSuspended; } |
void stopCaretBlinkTimer(); |
void startBlinkCaret(); |
- |
void setCaretVisibility(CaretVisibility); |
- void setCaretRectNeedsUpdate(); |
- // If |forceInvalidation| is true the caret's previous and new rectangles |
- // are forcibly invalidated regardless of the state of the blink timer. |
- void invalidateCaretRect(bool forceInvalidation); |
IntRect absoluteCaretBounds() const; |
bool shouldShowBlockCursor() const { return m_shouldShowBlockCursor; } |
void setShouldShowBlockCursor(bool); |
- void paintCaret(GraphicsContext&, const LayoutPoint&); |
+ // Paint invalidation methods delegating to DisplayItemClient. |
+ void clearPreviousVisualRect(const LayoutBlock&); |
+ void layoutBlockWillBeDestroyed(const LayoutBlock&); |
+ void updateStyleAndLayoutIfNeeded(); |
+ void invalidatePaintIfNeeded(const LayoutBlock&, |
+ const PaintInvalidatorContext&, |
+ PaintInvalidationReason); |
- void dataWillChange(const CharacterData&); |
+ bool shouldPaintCaret(const LayoutBlock&) const; |
+ void paintCaret(GraphicsContext&, const LayoutPoint&) const; |
- // For unittests |
+ // For unit tests. |
+ const DisplayItemClient& caretDisplayItemClientForTesting() const; |
+ const LayoutBlock* caretLayoutBlockForTesting() const; |
bool shouldPaintCaretForTesting() const { return m_shouldPaintCaret; } |
- bool isPreviousCaretDirtyForTesting() const { return m_previousCaretNode; } |
DECLARE_TRACE(); |
@@ -100,23 +100,14 @@ class CORE_EXPORT FrameCaret final |
void caretBlinkTimerFired(TimerBase*); |
bool caretPositionIsValidForDocument(const Document&) const; |
- // Implementation of |SynchronousMutationObserver| member functions. |
- void contextDestroyed(Document*) final; |
- void nodeWillBeRemoved(Node&) final; |
+ void scheduleVisualUpdateForPaintInvalidationIfNeeded(); |
const Member<const SelectionEditor> m_selectionEditor; |
const Member<LocalFrame> m_frame; |
const std::unique_ptr<CaretDisplayItemClient> m_caretBase; |
- // The last node which painted the caret. Retained for clearing the old |
- // caret when it moves. |
- Member<Node> m_previousCaretNode; |
- Member<Node> m_previousCaretAnchorNode; |
- LayoutRect m_previousCaretRect; |
CaretVisibility m_caretVisibility; |
- CaretVisibility m_previousCaretVisibility; |
// TODO(https://crbug.com/668758): Consider using BeginFrame update for this. |
TaskRunnerTimer<FrameCaret> m_caretBlinkTimer; |
- bool m_caretRectDirty : 1; |
bool m_shouldPaintCaret : 1; |
bool m_isCaretBlinkingSuspended : 1; |
bool m_shouldShowBlockCursor : 1; |