| Index: Source/web/LinkHighlight.cpp
|
| diff --git a/Source/web/LinkHighlight.cpp b/Source/web/LinkHighlight.cpp
|
| index e20c72f98d0b3a39357dd21c9caa9b05ebf010ba..733d34705c97cfa3aac980240c977182f6c03cde 100644
|
| --- a/Source/web/LinkHighlight.cpp
|
| +++ b/Source/web/LinkHighlight.cpp
|
| @@ -37,6 +37,7 @@
|
| #include "core/rendering/RenderPart.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"
|
| @@ -107,29 +108,11 @@ void LinkHighlight::releaseResources()
|
|
|
| RenderLayer* LinkHighlight::computeEnclosingCompositingLayer()
|
| {
|
| - 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()->enclosingLayerForPaintInvalidation();
|
| - if (!renderLayer) {
|
| - renderer = renderer->frame()->ownerRenderer();
|
| - if (!renderer)
|
| - return 0;
|
| - }
|
| - } while (!renderLayer);
|
| -
|
| - ASSERT(renderLayer->compositingState() != NotComposited);
|
| -
|
| - GraphicsLayer* newGraphicsLayer = renderLayer->graphicsLayerBacking();
|
| - if (!newGraphicsLayer->drawsContent()) {
|
| - newGraphicsLayer = renderLayer->graphicsLayerBackingForScrolling();
|
| - }
|
| -
|
| m_clipLayer->setTransform(SkMatrix44(SkMatrix44::kIdentity_Constructor));
|
|
|
| if (m_currentGraphicsLayer != newGraphicsLayer) {
|
| @@ -140,34 +123,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)
|
| @@ -223,7 +179,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
|
|
|