Chromium Code Reviews| Index: third_party/WebKit/Source/modules/canvas2d/EventHitRegion.cpp |
| diff --git a/third_party/WebKit/Source/modules/canvas2d/EventHitRegion.cpp b/third_party/WebKit/Source/modules/canvas2d/EventHitRegion.cpp |
| index fe7393ff5208476568d58103af3c2c92aed56df5..647710e09626e89867ac61957967d185f41fe9c6 100644 |
| --- a/third_party/WebKit/Source/modules/canvas2d/EventHitRegion.cpp |
| +++ b/third_party/WebKit/Source/modules/canvas2d/EventHitRegion.cpp |
| @@ -6,7 +6,8 @@ |
| #include "core/dom/Document.h" |
| #include "core/html/HTMLCanvasElement.h" |
| -#include "core/layout/LayoutObject.h" |
| +#include "core/layout/LayoutBox.h" |
| +#include "core/page/Page.h" |
| #include "modules/canvas2d/CanvasRenderingContext2D.h" |
| #include "modules/canvas2d/HitRegion.h" |
| @@ -22,12 +23,22 @@ String EventHitRegion::regionIdFromAbsoluteLocation(HTMLCanvasElement& canvas, c |
| document.updateLayoutTreeForNodeIfNeeded(&canvas); |
| // Adjust offsetLocation to be relative to the canvas's position. |
| - LayoutObject* layoutObject = canvas.layoutObject(); |
| - FloatPoint localPos = layoutObject->absoluteToLocal(FloatPoint(location), UseTransforms); |
| - |
| - LocalFrame* frame = document.frame(); |
| - float zoomFactor = frame ? frame->pageZoomFactor() : 1; |
| - float scaleFactor = 1 / zoomFactor; |
| + LayoutBoxModelObject* lbmo = canvas.layoutBoxModelObject(); |
| + FloatPoint localPos = lbmo->absoluteToLocal(FloatPoint(location), UseTransforms); |
| + |
| + float width = lbmo->offsetWidth(); |
| + float height = lbmo->offsetHeight(); |
| + if (lbmo->hasBorderOrPadding()) { |
| + float borderAndPaddingLeft = lbmo->borderLeft() + lbmo->paddingLeft(); |
| + float borderAndPaddingTop = lbmo->borderTop() + lbmo->paddingTop(); |
| + localPos.move(-borderAndPaddingLeft, -borderAndPaddingTop); |
| + width -= lbmo->borderAndPaddingWidth(); |
| + height -= lbmo->borderAndPaddingHeight(); |
|
Justin Novosad
2016/01/05 16:48:39
Isn't there a method that already computes these w
zino
2016/01/06 17:22:31
Done.
|
| + } |
| + localPos.scale((canvas.width() / width), (canvas.height() / height)); |
| + |
| + Page* page = document.page(); |
| + float scaleFactor = page->deviceScaleFactor(); |
| if (scaleFactor != 1.0f) |
| localPos.scale(scaleFactor, scaleFactor); |