Chromium Code Reviews| Index: Source/web/LinkHighlight.cpp |
| diff --git a/Source/web/LinkHighlight.cpp b/Source/web/LinkHighlight.cpp |
| index a4ef627d61bda2b6fa700847880cd83ec8648562..2b1757fcf956aa096bfc9f5ff4251076cc67699f 100644 |
| --- a/Source/web/LinkHighlight.cpp |
| +++ b/Source/web/LinkHighlight.cpp |
| @@ -36,6 +36,7 @@ |
| #include "core/rendering/RenderObject.h" |
| #include "core/rendering/RenderView.h" |
| #include "core/rendering/compositing/CompositedLayerMapping.h" |
| +#include "core/rendering/compositing/RenderLayerCompositor.h" |
| #include "core/rendering/style/ShadowData.h" |
| #include "platform/graphics/Color.h" |
| #include "public/platform/Platform.h" |
| @@ -106,34 +107,13 @@ void LinkHighlight::releaseResources() |
| RenderLayer* LinkHighlight::computeEnclosingCompositingLayer() |
|
abarth-chromium
2014/06/13 21:38:15
LinkHighlight is hacked into the system. It's not
jdduke (slow)
2014/06/20 17:15:59
OK, I was pointed to LinkHighlight as a model of h
|
| { |
| - if (!m_node || !m_node->renderer()) |
| + RenderLayer* newRenderLayer; |
| + GraphicsLayer* newGraphicsLayer; |
| + if (!RenderLayerCompositor::computeEnclosingCompositingLayer(m_node.get(), newRenderLayer, newGraphicsLayer)) |
| return 0; |
| - // Find the nearest enclosing composited layer and attach to it. We may need to cross frame boundaries |
| - // to find a suitable layer. |
| - RenderObject* renderer = m_node->renderer(); |
| - RenderLayer* renderLayer; |
| - do { |
| - renderLayer = renderer->enclosingLayer()->enclosingCompositingLayerForRepaint(); |
| - if (!renderLayer) { |
| - renderer = renderer->frame()->ownerRenderer(); |
| - if (!renderer) |
| - return 0; |
| - } |
| - } while (!renderLayer); |
| - |
| - CompositedLayerMappingPtr compositedLayerMapping = renderLayer->compositingState() == PaintsIntoGroupedBacking ? renderLayer->groupedMapping() : renderLayer->compositedLayerMapping(); |
| - GraphicsLayer* newGraphicsLayer = renderLayer->compositingState() == PaintsIntoGroupedBacking ? compositedLayerMapping->squashingLayer() : compositedLayerMapping->mainGraphicsLayer(); |
| - |
| m_clipLayer->setTransform(SkMatrix44(SkMatrix44::kIdentity_Constructor)); |
| - if (!newGraphicsLayer->drawsContent()) { |
| - if (renderLayer->scrollableArea() && renderLayer->scrollableArea()->usesCompositedScrolling()) { |
| - ASSERT(renderLayer->hasCompositedLayerMapping() && renderLayer->compositedLayerMapping()->scrollingContentsLayer()); |
| - newGraphicsLayer = compositedLayerMapping->scrollingContentsLayer(); |
| - } |
| - } |
| - |
| if (m_currentGraphicsLayer != newGraphicsLayer) { |
| if (m_currentGraphicsLayer) |
| clearGraphicsLayerLinkHighlightPointer(); |
| @@ -142,34 +122,7 @@ RenderLayer* LinkHighlight::computeEnclosingCompositingLayer() |
| m_currentGraphicsLayer->addLinkHighlight(this); |
| } |
| - return renderLayer; |
| -} |
| - |
| -static void convertTargetSpaceQuadToCompositedLayer(const FloatQuad& targetSpaceQuad, RenderObject* targetRenderer, RenderObject* compositedRenderer, FloatQuad& compositedSpaceQuad) |
| -{ |
| - ASSERT(targetRenderer); |
| - ASSERT(compositedRenderer); |
| - |
| - for (unsigned i = 0; i < 4; ++i) { |
| - IntPoint point; |
| - switch (i) { |
| - case 0: point = roundedIntPoint(targetSpaceQuad.p1()); break; |
| - case 1: point = roundedIntPoint(targetSpaceQuad.p2()); break; |
| - case 2: point = roundedIntPoint(targetSpaceQuad.p3()); break; |
| - case 3: point = roundedIntPoint(targetSpaceQuad.p4()); break; |
| - } |
| - |
| - point = targetRenderer->frame()->view()->contentsToWindow(point); |
| - point = compositedRenderer->frame()->view()->windowToContents(point); |
| - FloatPoint floatPoint = compositedRenderer->absoluteToLocal(point, UseTransforms); |
| - |
| - switch (i) { |
| - case 0: compositedSpaceQuad.setP1(floatPoint); break; |
| - case 1: compositedSpaceQuad.setP2(floatPoint); break; |
| - case 2: compositedSpaceQuad.setP3(floatPoint); break; |
| - case 3: compositedSpaceQuad.setP4(floatPoint); break; |
| - } |
| - } |
| + return newRenderLayer; |
| } |
| static void addQuadToPath(const FloatQuad& quad, Path& path) |
| @@ -225,7 +178,7 @@ bool LinkHighlight::computeHighlightLayerPathAndPosition(RenderLayer* compositin |
| // Transform node quads in target absolute coords to local coordinates in the compositor layer. |
| FloatQuad transformedQuad; |
| - convertTargetSpaceQuadToCompositedLayer(absoluteQuad, m_node->renderer(), compositingLayer->renderer(), transformedQuad); |
| + RenderLayerCompositor::convertTargetSpaceQuadToCompositedLayer(absoluteQuad, m_node->renderer(), compositingLayer->renderer(), transformedQuad); |
| // FIXME: for now, we'll only use rounded paths if we have a single node quad. The reason for this is that |
| // we may sometimes get a chain of adjacent boxes (e.g. for text nodes) which end up looking like sausage |