Index: Source/core/rendering/RenderLayer.cpp |
diff --git a/Source/core/rendering/RenderLayer.cpp b/Source/core/rendering/RenderLayer.cpp |
index 041337f6fd6b25e64b4d608d8c43317525dc7f92..1f05fd834c852bed988f10063a40d58bb01652c5 100644 |
--- a/Source/core/rendering/RenderLayer.cpp |
+++ b/Source/core/rendering/RenderLayer.cpp |
@@ -3180,9 +3180,16 @@ RenderLayer* RenderLayer::hitTestChildLayerColumns(RenderLayer* childLayer, Rend |
return 0; |
} |
+void RenderLayer::blockSelectionGapsBoundsChanged() |
+{ |
+ if (needsCompositedScrolling() && hasCompositedLayerMapping()) |
Ian Vollick
2014/06/12 14:54:57
This looks like a chicken-and-egg thing, but I thi
hartmanng
2014/06/13 14:51:37
Done.
|
+ m_compositedLayerMapping->updateScrollingBlockSelection(); |
abarth-chromium
2014/06/13 04:31:05
Yeah, you should be able to just:
setNeedsComposi
hartmanng
2014/06/13 14:51:37
Would compositor()->setNeedsCompositingUpdate(Comp
|
+} |
+ |
void RenderLayer::addBlockSelectionGapsBounds(const LayoutRect& bounds) |
{ |
m_blockSelectionGapsBounds.unite(enclosingIntRect(bounds)); |
+ blockSelectionGapsBoundsChanged(); |
} |
void RenderLayer::clearBlockSelectionGapsBounds() |
@@ -3190,6 +3197,7 @@ void RenderLayer::clearBlockSelectionGapsBounds() |
m_blockSelectionGapsBounds = IntRect(); |
for (RenderLayer* child = firstChild(); child; child = child->nextSibling()) |
child->clearBlockSelectionGapsBounds(); |
+ blockSelectionGapsBoundsChanged(); |
} |
void RenderLayer::repaintBlockSelectionGaps() |
@@ -3213,9 +3221,20 @@ void RenderLayer::repaintBlockSelectionGaps() |
renderer()->invalidatePaintRectangle(rect); |
} |
-bool RenderLayer::hasBlockSelectionGapBounds() const |
+IntRect RenderLayer::blockSelectionGapsBounds() const |
{ |
- return !m_blockSelectionGapsBounds.isEmpty(); |
+ if (!renderer()->isRenderBlock()) |
+ return IntRect(); |
+ |
+ RenderBlock* renderBlock = toRenderBlock(renderer()); |
+ LayoutRect gapRects = renderBlock->selectionGapRectsForRepaint(renderBlock); |
+ |
+ return pixelSnappedIntRect(gapRects); |
+} |
+ |
+RenderLayer::PresenceOfBlockSelectionGaps RenderLayer::hasBlockSelectionGapBounds() const |
+{ |
+ return blockSelectionGapsBounds().isEmpty() ? LayerDoesNotHaveBlockSelectionGaps : LayerHasBlockSelectionGaps; |
} |
bool RenderLayer::intersectsDamageRect(const LayoutRect& layerBounds, const LayoutRect& damageRect, const RenderLayer* rootLayer, const LayoutPoint* offsetFromRoot) const |