Chromium Code Reviews| Index: third_party/WebKit/Source/core/layout/LayoutBlock.h |
| diff --git a/third_party/WebKit/Source/core/layout/LayoutBlock.h b/third_party/WebKit/Source/core/layout/LayoutBlock.h |
| index d2014ceca0ec4cc5096d16ab95235954deaecd7b..12154475ec18c10caf224b424869c15ac2513a42 100644 |
| --- a/third_party/WebKit/Source/core/layout/LayoutBlock.h |
| +++ b/third_party/WebKit/Source/core/layout/LayoutBlock.h |
| @@ -490,12 +490,60 @@ class CORE_EXPORT LayoutBlock : public LayoutBox { |
| bool hasDragCaret() const; |
| bool hasCaret() const { return hasCursorCaret() || hasDragCaret(); } |
| + class MutableForPainting : public LayoutBox::MutableForPainting { |
| + public: |
| + void setHasPreviousCaretVisualRects(bool b) { |
| + static_cast<LayoutBlock&>(m_layoutObject).m_hasPreviousCaretVisualRects = |
| + b; |
| + } |
| + |
| + protected: |
| + friend class LayoutBlock; |
| + MutableForPainting(const LayoutBlock& layoutBlock) |
| + : LayoutBox::MutableForPainting(layoutBlock) {} |
| + }; |
| + |
| + MutableForPainting getMutableForPainting() const { |
| + return MutableForPainting(*this); |
| + } |
| + |
| + // Called when a cursor caret or drag caret in this LayoutBlock need paint |
|
chrishtr
2017/01/31 22:51:04
Nit: "needs"
|
| + // invalidation, e.g. when its color or visibility changes. When a caret |
| + // just changes location, use setMayNeedPaintInvalidation() instead. |
| + void setCaretsNeedPaintInvalidation() { |
| + if (m_caretsNeedPaintInvalidation) |
| + return; |
| + m_caretsNeedPaintInvalidation = true; |
| + setMayNeedPaintInvalidation(); |
| + } |
| + bool caretsNeedPaintInvalidation() const { |
| + return m_caretsNeedPaintInvalidation; |
| + } |
| + |
| + bool hasPreviousCaretVisualRects() const { |
| + return m_hasPreviousCaretVisualRects; |
| + } |
| + |
| protected: |
| PaintInvalidationReason invalidatePaintIfNeeded( |
| const PaintInvalidationState&) override; |
| PaintInvalidationReason invalidatePaintIfNeeded( |
| const PaintInvalidatorContext&) const override; |
| + void clearPaintInvalidationFlags() override { |
| + LayoutBox::clearPaintInvalidationFlags(); |
| + m_caretsNeedPaintInvalidation = false; |
| + } |
| + |
| + void clearPreviousVisualRects() override; |
| + |
| +#if DCHECK_IS_ON() |
| + bool paintInvalidationStateIsDirty() const override { |
| + return LayoutBox::paintInvalidationStateIsDirty() || |
| + m_caretsNeedPaintInvalidation; |
| + } |
| +#endif |
| + |
| private: |
| LayoutRect localCaretRect(InlineBox*, |
| int caretOffset, |
| @@ -552,6 +600,12 @@ class CORE_EXPORT LayoutBlock : public LayoutBox { |
| // to, for all we know. |
| unsigned m_paginationStateChanged : 1; |
| + // Indicates if we have saved previous cursor and/or drag caret visual rects |
| + // for the LayoutBlock in BlockPaintInvalidator. |
| + unsigned m_hasPreviousCaretVisualRects : 1; |
| + |
| + unsigned m_caretsNeedPaintInvalidation : 1; |
| + |
| // FIXME: This is temporary as we move code that accesses block flow |
| // member variables out of LayoutBlock and into LayoutBlockFlow. |
| friend class LayoutBlockFlow; |