Index: tools/viewer/sk_app/Window.h |
diff --git a/tools/viewer/sk_app/Window.h b/tools/viewer/sk_app/Window.h |
index 63d5e19e5594716c9bc95742b0fac51fe8b9af75..4e21f2280e2d2458251d2253427e6dd3ea4ca695 100644 |
--- a/tools/viewer/sk_app/Window.h |
+++ b/tools/viewer/sk_app/Window.h |
@@ -27,7 +27,9 @@ public: |
virtual void setTitle(const char*) = 0; |
virtual void show() = 0; |
- virtual void inval() = 0; |
+ |
+ // Check if the current window has any pending inval; call inval if not. |
+ void invalIfNeeded(); |
djsollen
2016/05/23 16:48:51
if a client should never call anything other than
|
virtual bool scaleContentToFit() const { return false; } |
virtual bool supportsContentRect() const { return false; } |
@@ -164,6 +166,16 @@ protected: |
void* fPaintUserData; |
WindowContext* fWindowContext = nullptr; |
+ |
+ // Make sure that either onPaint or markInvalReceived is called in the subclasses' |
+ // implementations of inval. They unset fIsContentInvalided which allow invalIfNeeded |
+ // to invalidate the content in the future. |
+ virtual void inval() = 0; |
+ |
+ // Uncheck fIsContentInvalided to allow future inval/onInval. |
+ void markInvalProcessed(); |
+ |
+ bool fIsContentInvalidated = false; // use this to avoid duplicate invalidate events |
}; |
} // namespace sk_app |