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

Unified Diff: third_party/WebKit/Source/core/frame/FrameView.cpp

Issue 1516723003: [Element / Autofill] Add boundsInViewportFloat() to fix <input> popup misalignment. Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Refator to use boundsInViewportFloat() eventually, but keep boundsInViewportInt(). Created 5 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/core/frame/FrameView.cpp
diff --git a/third_party/WebKit/Source/core/frame/FrameView.cpp b/third_party/WebKit/Source/core/frame/FrameView.cpp
index 143a285cec09eff55cdb35f7bca6233e0eb36fbd..1c409e51aebacd77645f6856f0e5ce2f625c9f0b 100644
--- a/third_party/WebKit/Source/core/frame/FrameView.cpp
+++ b/third_party/WebKit/Source/core/frame/FrameView.cpp
@@ -2687,6 +2687,16 @@ IntRect FrameView::convertToLayoutObject(const LayoutObject& layoutObject, const
return rectInContent;
}
+FloatRect FrameView::convertFromLayoutObject(const LayoutObject& layoutObject, const FloatRect& layoutObjectRect) const
+{
+ FloatRect rect = layoutObject.localToAbsoluteQuad(layoutObjectRect).boundingBox();
+
+ // Convert from page ("absolute") to FrameView coordinates.
+ rect.moveBy(-scrollPosition());
+
+ return rect;
+}
+
IntPoint FrameView::convertFromLayoutObject(const LayoutObject& layoutObject, const IntPoint& layoutObjectPoint) const
{
IntPoint point = roundedIntPoint(layoutObject.localToAbsolute(layoutObjectPoint, UseTransforms));
@@ -2724,6 +2734,24 @@ IntRect FrameView::convertToContainingWidget(const IntRect& localRect) const
return localRect;
}
+FloatRect FrameView::convertToContainingWidget(const FloatRect& localRect) const
+{
+ if (const FrameView* parentView = toFrameView(parent())) {
+ // Get our layoutObject in the parent view
+ LayoutPart* layoutObject = m_frame->ownerLayoutObject();
+ if (!layoutObject)
+ return localRect;
+
+ FloatRect rect(localRect);
+ // Add borders and padding??
+ rect.move(layoutObject->borderLeft() + layoutObject->paddingLeft(),
+ layoutObject->borderTop() + layoutObject->paddingTop());
+ return parentView->convertFromLayoutObject(*layoutObject, rect);
+ }
+
+ return localRect;
+}
+
IntRect FrameView::convertFromContainingWidget(const IntRect& parentRect) const
{
if (const FrameView* parentView = toFrameView(parent())) {
@@ -3412,11 +3440,21 @@ IntPoint FrameView::contentsToFrame(const IntPoint& pointInContentSpace) const
return pointInContentSpace - scrollOffset();
}
+FloatPoint FrameView::contentsToFrame(const FloatPoint& pointInContentSpace) const
+{
+ return FloatPoint(pointInContentSpace - scrollOffset());
+}
+
IntRect FrameView::contentsToFrame(const IntRect& rectInContentSpace) const
{
return IntRect(contentsToFrame(rectInContentSpace.location()), rectInContentSpace.size());
}
+FloatRect FrameView::contentsToFrame(const FloatRect& rectInContentSpace) const
+{
+ return FloatRect(contentsToFrame(rectInContentSpace.location()), rectInContentSpace.size());
+}
+
FloatPoint FrameView::frameToContents(const FloatPoint& pointInFrame) const
{
return pointInFrame + scrollOffset();
@@ -3482,6 +3520,13 @@ IntRect FrameView::contentsToViewport(const IntRect& rectInContents) const
return m_frame->host()->visualViewport().rootFrameToViewport(rectInRootFrame);
}
+FloatRect FrameView::contentsToViewport(const FloatRect& rectInContents) const
+{
+ FloatRect rectInFrame = contentsToFrame(rectInContents);
+ FloatRect rectInRootFrame = convertToRootFrame(rectInFrame);
+ return m_frame->host()->visualViewport().rootFrameToViewport(rectInRootFrame);
+}
+
IntPoint FrameView::contentsToViewport(const IntPoint& pointInContents) const
{
IntPoint pointInFrame = contentsToFrame(pointInContents);
@@ -3725,6 +3770,14 @@ IntRect FrameView::convertFromContainingWidgetToScrollbar(const Scrollbar* scrol
return newRect;
}
+FloatRect FrameView::convertFromScrollbarToContainingWidget(const Scrollbar* scrollbar, const FloatRect& localRect) const
+{
+ // Scrollbars won't be transformed within us
+ FloatRect newRect = localRect;
+ newRect.moveBy(scrollbar->location());
+ return newRect;
+}
+
// FIXME: test these on windows
IntPoint FrameView::convertFromScrollbarToContainingWidget(const Scrollbar* scrollbar, const IntPoint& localPoint) const
{
« no previous file with comments | « third_party/WebKit/Source/core/frame/FrameView.h ('k') | third_party/WebKit/Source/core/input/EventHandler.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698