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

Unified Diff: Source/core/frame/SmartClip.cpp

Issue 967213004: Removed FrameView's windowToContents and contentsToWindow methods. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebase Created 5 years, 9 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
« no previous file with comments | « Source/core/frame/SmartClip.h ('k') | Source/core/html/forms/ColorInputType.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/frame/SmartClip.cpp
diff --git a/Source/core/frame/SmartClip.cpp b/Source/core/frame/SmartClip.cpp
index 1d21000d3e734054a13832698cea4036e433ebda..9d285cb4fc03a4a614280b7c299b57b7a8b23aca 100644
--- a/Source/core/frame/SmartClip.cpp
+++ b/Source/core/frame/SmartClip.cpp
@@ -43,15 +43,14 @@
namespace blink {
-static IntRect applyScaleWithoutCollapsingToZero(const IntRect& rect, float scale)
+static IntRect convertToContentCoordinatesWithoutCollapsingToZero(const IntRect& rectInViewport, const FrameView* view)
{
- IntRect result = rect;
- result.scale(scale);
- if (rect.width() > 0 && !result.width())
- result.setWidth(1);
- if (rect.height() > 0 && !result.height())
- result.setHeight(1);
- return result;
+ IntRect rectInContents = view->viewportToContents(rectInViewport);
+ if (rectInViewport.width() > 0 && !rectInContents.width())
+ rectInContents.setWidth(1);
+ if (rectInViewport.height() > 0 && !rectInContents.height())
+ rectInContents.setHeight(1);
+ return rectInContents;
}
static Node* nodeInsideFrame(Node* node)
@@ -61,9 +60,9 @@ static Node* nodeInsideFrame(Node* node)
return nullptr;
}
-IntRect SmartClipData::rect() const
+IntRect SmartClipData::rectInViewport() const
{
- return m_rect;
+ return m_rectInViewport;
}
const String& SmartClipData::clipData() const
@@ -76,22 +75,20 @@ SmartClip::SmartClip(PassRefPtrWillBeRawPtr<LocalFrame> frame)
{
}
-SmartClipData SmartClip::dataForRect(const IntRect& cropRect)
+SmartClipData SmartClip::dataForRect(const IntRect& cropRectInViewport)
{
- IntRect resizedCropRect = applyScaleWithoutCollapsingToZero(cropRect, 1 / pageScaleFactor());
-
- Node* bestNode = findBestOverlappingNode(m_frame->document(), resizedCropRect);
+ Node* bestNode = findBestOverlappingNode(m_frame->document(), cropRectInViewport);
if (!bestNode)
return SmartClipData();
if (Node* nodeFromFrame = nodeInsideFrame(bestNode)) {
// FIXME: This code only hit-tests a single iframe. It seems like we ought support nested frames.
- if (Node* bestNodeInFrame = findBestOverlappingNode(nodeFromFrame, resizedCropRect))
+ if (Node* bestNodeInFrame = findBestOverlappingNode(nodeFromFrame, cropRectInViewport))
bestNode = bestNodeInFrame;
}
WillBeHeapVector<RawPtrWillBeMember<Node>> hitNodes;
- collectOverlappingChildNodes(bestNode, resizedCropRect, hitNodes);
+ collectOverlappingChildNodes(bestNode, cropRectInViewport, hitNodes);
if (hitNodes.isEmpty() || hitNodes.size() == bestNode->countChildren()) {
hitNodes.clear();
@@ -106,7 +103,7 @@ SmartClipData SmartClip::dataForRect(const IntRect& cropRect)
unitedRects.unite(hitNodes[i]->pixelSnappedBoundingBox());
}
- return SmartClipData(bestNode, convertRectToWindow(unitedRects), collectedText.toString());
+ return SmartClipData(bestNode, m_frame->document()->view()->contentsToViewport(unitedRects), collectedText.toString());
}
float SmartClip::pageScaleFactor()
@@ -159,12 +156,12 @@ Node* SmartClip::minNodeContainsNodes(Node* minNode, Node* newNode)
return nullptr;
}
-Node* SmartClip::findBestOverlappingNode(Node* rootNode, const IntRect& cropRect)
+Node* SmartClip::findBestOverlappingNode(Node* rootNode, const IntRect& cropRectInViewport)
{
if (!rootNode)
return nullptr;
- IntRect resizedCropRect = rootNode->document().view()->windowToContents(cropRect);
+ IntRect resizedCropRect = convertToContentCoordinatesWithoutCollapsingToZero(cropRectInViewport, rootNode->document().view());
Node* node = rootNode;
Node* minNode = nullptr;
@@ -218,11 +215,11 @@ bool SmartClip::shouldSkipBackgroundImage(Node* node)
return false;
}
-void SmartClip::collectOverlappingChildNodes(Node* parentNode, const IntRect& cropRect, WillBeHeapVector<RawPtrWillBeMember<Node>>& hitNodes)
+void SmartClip::collectOverlappingChildNodes(Node* parentNode, const IntRect& cropRectInViewport, WillBeHeapVector<RawPtrWillBeMember<Node>>& hitNodes)
{
if (!parentNode)
return;
- IntRect resizedCropRect = parentNode->document().view()->windowToContents(cropRect);
+ IntRect resizedCropRect = convertToContentCoordinatesWithoutCollapsingToZero(cropRectInViewport, parentNode->document().view());
for (Node* child = parentNode->firstChild(); child; child = child->nextSibling()) {
IntRect childRect = child->pixelSnappedBoundingBox();
if (resizedCropRect.intersects(childRect))
@@ -230,13 +227,6 @@ void SmartClip::collectOverlappingChildNodes(Node* parentNode, const IntRect& cr
}
}
-IntRect SmartClip::convertRectToWindow(const IntRect& nodeRect)
-{
- IntRect result = m_frame->document()->view()->contentsToWindow(nodeRect);
- result.scale(pageScaleFactor());
- return result;
-}
-
String SmartClip::extractTextFromNode(Node* node)
{
// Science has proven that no text nodes are ever positioned at y == -99999.
« no previous file with comments | « Source/core/frame/SmartClip.h ('k') | Source/core/html/forms/ColorInputType.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698