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

Unified Diff: third_party/WebKit/Source/core/editing/markers/RenderedDocumentMarker.h

Issue 2034363002: Update document marker rects lazily in frame (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix test Created 4 years, 6 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 | « third_party/WebKit/Source/core/editing/markers/DocumentMarkerControllerTest.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/core/editing/markers/RenderedDocumentMarker.h
diff --git a/third_party/WebKit/Source/core/editing/markers/RenderedDocumentMarker.h b/third_party/WebKit/Source/core/editing/markers/RenderedDocumentMarker.h
index 7e4148285ae43d8cf573976e3aba924c2258040a..8bda9a99b0f4060511662ad33c2f3e2524b13113 100644
--- a/third_party/WebKit/Source/core/editing/markers/RenderedDocumentMarker.h
+++ b/third_party/WebKit/Source/core/editing/markers/RenderedDocumentMarker.h
@@ -33,41 +33,54 @@
namespace blink {
class RenderedDocumentMarker final : public DocumentMarker {
+private:
+ enum class State {
+ Invalid,
+ ValidNull,
+ ValidNotNull
+ };
public:
static RenderedDocumentMarker* create(const DocumentMarker& marker)
{
return new RenderedDocumentMarker(marker);
}
- bool isRendered() const { return invalidMarkerRect() != m_renderedRect; }
- bool contains(const LayoutPoint& point) const { return isRendered() && m_renderedRect.contains(point); }
- bool setRenderedRect(const LayoutRect& r)
+ bool isRendered() const { return m_state == State::ValidNotNull; }
+ bool contains(const LayoutPoint& point) const
+ {
+ DCHECK_EQ(m_state, State::ValidNotNull);
+ return m_renderedRect.contains(point);
+ }
+ bool setRenderedRect(const LayoutRect& rect)
{
- const LayoutRect& rect = r.isEmpty() ? invalidMarkerRect() : r;
- if (rect == m_renderedRect)
+ if (m_state == State::ValidNotNull && rect == m_renderedRect)
return false;
+ m_state = State::ValidNotNull;
m_renderedRect = rect;
return true;
}
- const LayoutRect& renderedRect() const { return m_renderedRect; }
+ const LayoutRect& renderedRect() const
+ {
+ DCHECK_EQ(m_state, State::ValidNotNull);
+ return m_renderedRect;
+ }
+
+ bool nullifyRenderedRect() { return m_state == State::ValidNull; }
- bool invalidateRenderedRect() { return setRenderedRect(invalidMarkerRect()); }
+ void invalidate() { m_state = State::Invalid; }
+ bool isValid() const { return m_state != State::Invalid; }
private:
+
explicit RenderedDocumentMarker(const DocumentMarker& marker)
: DocumentMarker(marker)
- , m_renderedRect(invalidMarkerRect())
- {
- }
-
- static const LayoutRect& invalidMarkerRect()
+ , m_state(State::Invalid)
{
- static const LayoutRect rect = LayoutRect(-1, -1, -1, -1);
- return rect;
}
LayoutRect m_renderedRect;
+ State m_state;
};
DEFINE_TYPE_CASTS(RenderedDocumentMarker, DocumentMarker, marker, true, true);
« no previous file with comments | « third_party/WebKit/Source/core/editing/markers/DocumentMarkerControllerTest.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698