Index: Source/core/rendering/RenderObject.h |
diff --git a/Source/core/rendering/RenderObject.h b/Source/core/rendering/RenderObject.h |
index 3e12f3b4e963608cda77d4e40ce0ce4a99a4e3c2..10f50c12833045b291a9503cf30dd255560a910e 100644 |
--- a/Source/core/rendering/RenderObject.h |
+++ b/Source/core/rendering/RenderObject.h |
@@ -129,6 +129,7 @@ struct AnnotatedRegionValue { |
}; |
typedef WTF::HashSet<const RenderObject*> RenderObjectAncestorLineboxDirtySet; |
+typedef WTF::HashMap<const RenderLayer*, Vector<IntRect> > LayerHitTestRects; |
#ifndef NDEBUG |
const int showTreeCharacterOffset = 39; |
@@ -940,6 +941,9 @@ public: |
virtual void addFocusRingRects(Vector<IntRect>&, const LayoutPoint& /* additionalOffset */, const RenderLayerModelObject* /* paintContainer */ = 0) { }; |
+ // Compute a list of hit-test rectangles per composited layer rooted at this renderer. |
+ virtual void computeLayerHitTestRects(LayerHitTestRects&) const; |
+ |
LayoutRect absoluteOutlineBounds() const |
{ |
return outlineBoundsForRepaint(0); |
@@ -953,6 +957,8 @@ public: |
protected: |
inline bool layerCreationAllowedForSubtree() const; |
+ void enclosingCompositedLayerAndOffset(const RenderLayer**, LayoutPoint&) const; |
+ |
// Overrides should call the superclass at the end |
virtual void styleWillChange(StyleDifference, const RenderStyle* newStyle); |
// Overrides should call the superclass at the start |
@@ -981,6 +987,17 @@ protected: |
void setDocumentForAnonymous(Document* document) { ASSERT(isAnonymous()); m_node = document; } |
+ // Add hit-test rects for the render tree rooted at this node to the provided collection on a |
+ // per-composited-layer basis. CurrentCompositedLayer must be the enclosing composited layer, |
+ // and layerOffset is the current offset within this layer. Subclass implementations will add |
+ // any offset for this renderer within it's container, so callers should provide only the |
+ // offset of the container within it's layer. |
+ virtual void addLayerHitTestRects(LayerHitTestRects&, const RenderLayer* currentCompositedLayer, const LayoutPoint& layerOffset) const; |
+ |
+ // Add hit-test rects for this renderer only to the provided list. layerOffset is the offset of this renderer within |
+ // the current composited layer that should be used for each result. |
+ virtual void computeOwnHitTestRects(Vector<IntRect>&, const LayoutPoint& layerOffset) const { }; |
+ |
private: |
RenderFlowThread* locateFlowThreadContainingBlock() const; |
void removeFromRenderFlowThread(); |