Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1571)

Unified Diff: Source/web/LinkHighlight.cpp

Issue 302993003: Route selection bounds updates through WebLayerTreeView (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Factor common logic to RenderLayerCompositor Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698