| Index: Source/core/rendering/PaintInvalidationState.cpp
|
| diff --git a/Source/core/rendering/PaintInvalidationState.cpp b/Source/core/rendering/PaintInvalidationState.cpp
|
| index 12753da0aa22a6da7771cd721d2f3fc49216b18f..933f9232b06e097d661b348a8ddee161542fd7b8 100644
|
| --- a/Source/core/rendering/PaintInvalidationState.cpp
|
| +++ b/Source/core/rendering/PaintInvalidationState.cpp
|
| @@ -13,32 +13,25 @@
|
|
|
| namespace blink {
|
|
|
| -PaintInvalidationState::PaintInvalidationState(RenderObject& renderer)
|
| +PaintInvalidationState::PaintInvalidationState(const RenderView& renderView)
|
| : m_clipped(false)
|
| , m_cachedOffsetsEnabled(true)
|
| , m_forceCheckForPaintInvalidation(false)
|
| - , m_paintInvalidationContainer(*renderer.containerForPaintInvalidation())
|
| - , m_renderer(renderer)
|
| + , m_paintInvalidationContainer(*renderView.containerForPaintInvalidation())
|
| + , m_renderer(renderView)
|
| {
|
| bool establishesPaintInvalidationContainer = &m_renderer == &m_paintInvalidationContainer;
|
| if (!establishesPaintInvalidationContainer) {
|
| - if (!renderer.supportsPaintInvalidationStateCachedOffsets()) {
|
| + if (!renderView.supportsPaintInvalidationStateCachedOffsets()) {
|
| m_cachedOffsetsEnabled = false;
|
| return;
|
| }
|
| - bool invalidationContainerSkipped;
|
| - RenderObject* container = renderer.container(&m_paintInvalidationContainer, &invalidationContainerSkipped);
|
| - if (container && !invalidationContainerSkipped) {
|
| - FloatPoint point = container->localToContainerPoint(FloatPoint(), &m_paintInvalidationContainer);
|
| - if (container->isTableRow())
|
| - point = FloatPoint(point.x() - toRenderBox(container)->x().toFloat(), point.y() - toRenderBox(container)->y().toFloat());
|
| - m_paintOffset = LayoutSize(point.x(), point.y());
|
| -
|
| - applyClipIfNeeded(*container);
|
| - }
|
| - } else {
|
| - applyClipIfNeeded(m_renderer);
|
| + FloatPoint point = renderView.localToContainerPoint(FloatPoint(), &m_paintInvalidationContainer, TraverseDocumentBoundaries);
|
| + m_paintOffset = LayoutSize(point.x(), point.y());
|
| }
|
| + m_clipRect = renderView.viewRect();
|
| + m_clipRect.move(m_paintOffset);
|
| + m_clipped = true;
|
| }
|
|
|
| PaintInvalidationState::PaintInvalidationState(const PaintInvalidationState& next, RenderLayerModelObject& renderer, const RenderLayerModelObject& paintInvalidationContainer)
|
| @@ -64,6 +57,7 @@ PaintInvalidationState::PaintInvalidationState(const PaintInvalidationState& nex
|
| LayoutSize offset = m_renderer.isBox() && !m_renderer.isTableRow() ? toRenderBox(renderer).locationOffset() : LayoutSize();
|
| if (fixed) {
|
| // FIXME: This doesn't work correctly with transforms.
|
| + // WRONG!
|
| FloatPoint fixedOffset = m_renderer.view()->localToAbsolute(FloatPoint(), IsFixed);
|
| m_paintOffset = LayoutSize(fixedOffset.x(), fixedOffset.y()) + offset;
|
| } else {
|
|
|