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

Unified Diff: Source/web/RotationViewportAnchor.cpp

Issue 1003323004: Turn ViewportAnchors into stack allocated objects. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: 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/web/RotationViewportAnchor.h ('k') | Source/web/ViewportAnchor.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/web/RotationViewportAnchor.cpp
diff --git a/Source/web/RotationViewportAnchor.cpp b/Source/web/RotationViewportAnchor.cpp
index 46b87dacadeda63d6fde011413daa7aef20f12d4..bc32d1d5e5933487b0406d828e3fed17d11714dc 100644
--- a/Source/web/RotationViewportAnchor.cpp
+++ b/Source/web/RotationViewportAnchor.cpp
@@ -86,20 +86,28 @@ RotationViewportAnchor::RotationViewportAnchor(
PageScaleConstraintsSet& pageScaleConstraintsSet)
: ViewportAnchor(rootFrameView, pinchViewport)
, m_anchorInInnerViewCoords(anchorInInnerViewCoords)
- , m_pageScaleConstraintsSet(pageScaleConstraintsSet) { }
+ , m_pageScaleConstraintsSet(pageScaleConstraintsSet)
+{
+ setAnchor();
+}
+
+RotationViewportAnchor::~RotationViewportAnchor()
+{
+ restoreToAnchor();
+}
void RotationViewportAnchor::setAnchor()
{
// FIXME: Scroll offsets are now fractional (DoublePoint and FloatPoint for the FrameView and PinchViewport
// respectively. This path should be rewritten without pixel snapping.
- IntRect outerViewRect = m_rootFrameView.visibleContentRect();
- IntRect innerViewRect = enclosedIntRect(m_pinchViewport.visibleRectInDocument());
+ IntRect outerViewRect = m_rootFrameView->visibleContentRect();
+ IntRect innerViewRect = enclosedIntRect(m_pinchViewport->visibleRectInDocument());
- m_oldPageScaleFactor = m_pinchViewport.scale();
+ m_oldPageScaleFactor = m_pinchViewport->scale();
m_oldMinimumPageScaleFactor = m_pageScaleConstraintsSet.finalConstraints().minimumScale;
// Save the absolute location in case we won't find the anchor node, we'll fall back to that.
- m_pinchViewportInDocument = m_pinchViewport.visibleRectInDocument().location();
+ m_pinchViewportInDocument = m_pinchViewport->visibleRectInDocument().location();
m_anchorNode.clear();
m_anchorNodeBounds = LayoutRect();
@@ -128,7 +136,7 @@ void RotationViewportAnchor::setAnchor()
anchorOffset.scale(m_anchorInInnerViewCoords.width(), m_anchorInInnerViewCoords.height());
const FloatPoint anchorPoint = FloatPoint(innerViewRect.location()) + anchorOffset;
- Node* node = findNonEmptyAnchorNode(flooredIntPoint(anchorPoint), innerViewRect, m_rootFrameView.frame().eventHandler());
+ Node* node = findNonEmptyAnchorNode(flooredIntPoint(anchorPoint), innerViewRect, m_rootFrameView->frame().eventHandler());
if (!node)
return;
@@ -143,7 +151,7 @@ void RotationViewportAnchor::restoreToAnchor()
float newPageScaleFactor = m_oldPageScaleFactor / m_oldMinimumPageScaleFactor * m_pageScaleConstraintsSet.finalConstraints().minimumScale;
newPageScaleFactor = m_pageScaleConstraintsSet.finalConstraints().clampToConstraints(newPageScaleFactor);
- FloatSize pinchViewportSize = m_pinchViewport.size();
+ FloatSize pinchViewportSize = m_pinchViewport->size();
pinchViewportSize.scale(1 / newPageScaleFactor);
IntPoint mainFrameOrigin;
@@ -151,17 +159,16 @@ void RotationViewportAnchor::restoreToAnchor()
computeOrigins(pinchViewportSize, mainFrameOrigin, pinchViewportOrigin);
- m_rootFrameView.setScrollOffset(mainFrameOrigin);
+ m_rootFrameView->setScrollOffset(mainFrameOrigin);
// Set scale before location, since location can be clamped on setting scale.
- m_pinchViewport.setScale(newPageScaleFactor);
- m_pinchViewport.setLocation(pinchViewportOrigin);
+ m_pinchViewport->setScale(newPageScaleFactor);
+ m_pinchViewport->setLocation(pinchViewportOrigin);
}
-void RotationViewportAnchor::computeOrigins(const FloatSize& innerSize,
- IntPoint& mainFrameOffset, FloatPoint& pinchViewportOffset) const
+void RotationViewportAnchor::computeOrigins(const FloatSize& innerSize, IntPoint& mainFrameOffset, FloatPoint& pinchViewportOffset) const
{
- IntSize outerSize = m_rootFrameView.visibleContentRect().size();
+ IntSize outerSize = m_rootFrameView->visibleContentRect().size();
// Compute the viewport origins in CSS pixels relative to the document.
FloatSize absPinchViewportOffset = m_normalizedPinchViewportOffset;
@@ -175,7 +182,7 @@ void RotationViewportAnchor::computeOrigins(const FloatSize& innerSize,
moveToEncloseRect(outerRect, innerRect);
- outerRect.setLocation(m_rootFrameView.adjustScrollPositionWithinRange(outerRect.location()));
+ outerRect.setLocation(m_rootFrameView->adjustScrollPositionWithinRange(outerRect.location()));
moveIntoRect(innerRect, outerRect);
« no previous file with comments | « Source/web/RotationViewportAnchor.h ('k') | Source/web/ViewportAnchor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698