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

Unified Diff: third_party/WebKit/Source/web/LinkHighlightImpl.cpp

Issue 2604073002: Apply offset from the correct graphics layer; simplify code for link highlights. (Closed)
Patch Set: Created 4 years 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: third_party/WebKit/Source/web/LinkHighlightImpl.cpp
diff --git a/third_party/WebKit/Source/web/LinkHighlightImpl.cpp b/third_party/WebKit/Source/web/LinkHighlightImpl.cpp
index 9d0d5e8bf405f804404c633c163c1c1eefb76f06..c9879e52efb017c713f375183076466965515fc9 100644
--- a/third_party/WebKit/Source/web/LinkHighlightImpl.cpp
+++ b/third_party/WebKit/Source/web/LinkHighlightImpl.cpp
@@ -157,56 +157,6 @@ void LinkHighlightImpl::attachLinkHighlightToCompositingLayer(
}
}
-static void convertTargetSpaceQuadToCompositedLayer(
- const FloatQuad& targetSpaceQuad,
- LayoutObject* targetLayoutObject,
- const LayoutBoxModelObject& paintInvalidationContainer,
- FloatQuad& compositedSpaceQuad) {
- DCHECK(targetLayoutObject);
- 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;
- }
-
- // FIXME: this does not need to be absolute, just in the paint invalidation
- // container's space.
- point = targetLayoutObject->frame()->view()->contentsToRootFrame(point);
- point =
- paintInvalidationContainer.frame()->view()->rootFrameToContents(point);
- FloatPoint floatPoint =
- paintInvalidationContainer.absoluteToLocal(point, UseTransforms);
- PaintLayer::mapPointInPaintInvalidationContainerToBacking(
- paintInvalidationContainer, floatPoint);
-
- 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;
- }
- }
-}
-
static void addQuadToPath(const FloatQuad& quad, Path& path) {
// FIXME: Make this create rounded quad-paths, just like the axis-aligned
// case.
@@ -236,7 +186,7 @@ void LinkHighlightImpl::computeQuads(const Node& node,
} else {
// FIXME: this does not need to be absolute, just in the paint invalidation
// container's space.
- layoutObject->absoluteQuads(outQuads);
+ layoutObject->absoluteQuads(outQuads, TraverseDocumentBoundaries);
}
}
@@ -270,12 +220,24 @@ bool LinkHighlightImpl::computeHighlightLayerPathAndPosition(
absoluteQuad.move(toScrollOffset(scrollPosition));
}
- // Transform node quads in target absolute coords to local coordinates in
- // the compositor layer.
- FloatQuad transformedQuad;
- convertTargetSpaceQuadToCompositedLayer(
- absoluteQuad, m_node->layoutObject(), paintInvalidationContainer,
- transformedQuad);
+ absoluteQuad.setP1(roundedIntPoint(absoluteQuad.p1()));
+ absoluteQuad.setP2(roundedIntPoint(absoluteQuad.p2()));
+ absoluteQuad.setP3(roundedIntPoint(absoluteQuad.p3()));
+ absoluteQuad.setP4(roundedIntPoint(absoluteQuad.p4()));
+ FloatQuad transformedQuad = paintInvalidationContainer.absoluteToLocalQuad(
+ absoluteQuad, UseTransforms | TraverseDocumentBoundaries);
+ FloatPoint offsetToBacking;
+
+ // Adjust for squashing.
+ if (paintInvalidationContainer.layer()->groupedMapping()) {
+ PaintLayer::mapPointInPaintInvalidationContainerToBacking(
+ paintInvalidationContainer, offsetToBacking);
+ }
+
+ // Adjust for offset from LayoutObject.
+ offsetToBacking.move(-m_currentGraphicsLayer->offsetFromLayoutObject());
+
+ transformedQuad.move(toFloatSize(offsetToBacking));
// 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

Powered by Google App Engine
This is Rietveld 408576698