Index: third_party/WebKit/Source/core/paint/ViewPaintInvalidator.cpp |
diff --git a/third_party/WebKit/Source/core/paint/ViewPaintInvalidator.cpp b/third_party/WebKit/Source/core/paint/ViewPaintInvalidator.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..4a68e21520bdbcadf9cfc25d94a887d64278dc1c |
--- /dev/null |
+++ b/third_party/WebKit/Source/core/paint/ViewPaintInvalidator.cpp |
@@ -0,0 +1,41 @@ |
+// Copyright 2017 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "core/paint/ViewPaintInvalidator.h" |
+ |
+#include "core/layout/LayoutView.h" |
+#include "core/paint/BoxPaintInvalidator.h" |
+#include "platform/geometry/LayoutSize.h" |
+ |
+namespace blink { |
+ |
+PaintInvalidationReason ViewPaintInvalidator::invalidatePaintIfNeeded() { |
chrishtr
2017/02/16 23:11:25
Indentation nit:
if (m_view.styleRef().hasEntirel
Xianzhu
2017/02/16 23:39:35
Done.
|
+ if (!m_view.styleRef().hasEntirelyFixedBackground()) { |
+ // LayoutView's non-fixed-attachment background is positioned in the |
+ // document element. |
chrishtr
2017/02/16 23:11:25
Please link to the spec here, for reference.
Xianzhu
2017/02/16 23:39:35
Done.
|
+ if (Element* documentElement = m_view.document().documentElement()) { |
+ const LayoutObject* backgroundObject = documentElement->layoutObject(); |
+ if (backgroundObject && backgroundObject->isBox()) { |
+ const LayoutBox& backgroundBox = toLayoutBox(*backgroundObject); |
+ LayoutSize oldSize = |
+ BoxPaintInvalidator::previousBorderBoxSize(backgroundBox); |
+ LayoutSize newSize = backgroundBox.size(); |
+ const auto& backgroundLayers = m_view.styleRef().backgroundLayers(); |
+ if ((oldSize.width() != newSize.width() && |
+ LayoutBox::mustInvalidateFillLayersPaintOnWidthChange( |
chrishtr
2017/02/16 23:11:25
This looks like mostly the same code as
LayoutView
Xianzhu
2017/02/16 23:39:35
Currently we can only reuse 4 lines of code becaus
|
+ backgroundLayers)) || |
+ (oldSize.height() != newSize.height() && |
+ LayoutBox::mustInvalidateFillLayersPaintOnHeightChange( |
+ backgroundLayers))) { |
+ m_view.getMutableForPainting().setShouldDoFullPaintInvalidation( |
+ PaintInvalidationViewBackground); |
+ } |
+ } |
+ } |
+ } |
+ |
+ return BoxPaintInvalidator(m_view, m_context).invalidatePaintIfNeeded(); |
+} |
+ |
+} // namespace blink |