Index: Source/core/rendering/RenderObject.h |
diff --git a/Source/core/rendering/RenderObject.h b/Source/core/rendering/RenderObject.h |
index 663713313b1f60cc7004468919e7d955be23800a..22430e73293bc17ef1ee0fb1cde05de23edf64e0 100644 |
--- a/Source/core/rendering/RenderObject.h |
+++ b/Source/core/rendering/RenderObject.h |
@@ -108,7 +108,8 @@ enum MarkingBehavior { |
enum MapCoordinatesMode { |
IsFixed = 1 << 0, |
UseTransforms = 1 << 1, |
- ApplyContainerFlip = 1 << 2 |
+ ApplyContainerFlip = 1 << 2, |
+ TraverseDocumentBoundaries = 1 << 3, |
}; |
typedef unsigned MapCoordinatesFlags; |
@@ -129,6 +130,7 @@ struct AnnotatedRegionValue { |
}; |
typedef WTF::HashSet<const RenderObject*> RenderObjectAncestorLineboxDirtySet; |
+typedef WTF::HashMap<const RenderLayer*, Vector<LayoutRect> > LayerHitTestRects; |
#ifndef NDEBUG |
const int showTreeCharacterOffset = 39; |
@@ -930,6 +932,9 @@ public: |
virtual void addFocusRingRects(Vector<IntRect>&, const LayoutPoint& /* additionalOffset */, const RenderLayerModelObject* /* paintContainer */ = 0) { }; |
+ // Compute a list of hit-test rectangles per layer rooted at this renderer. |
+ virtual void computeLayerHitTestRects(LayerHitTestRects&) const; |
+ |
LayoutRect absoluteOutlineBounds() const |
{ |
return outlineBoundsForRepaint(0); |
@@ -971,6 +976,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-RenderLayer basis. CurrentLayer must be the enclosing 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* currentLayer, 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 layer that should be used for each result. |
+ virtual void computeSelfHitTestRects(Vector<LayoutRect>&, const LayoutPoint& layerOffset) const { }; |
+ |
private: |
RenderFlowThread* locateFlowThreadContainingBlock() const; |
void removeFromRenderFlowThread(); |