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

Side by Side Diff: third_party/WebKit/Source/core/frame/VisualViewport.cpp

Issue 2387883002: Use float for scroll offset. (Closed)
Patch Set: tweaks and docs Created 4 years, 2 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 } 149 }
150 150
151 FloatSize VisualViewport::visibleSize() const { 151 FloatSize VisualViewport::visibleSize() const {
152 FloatSize scaledSize(m_size); 152 FloatSize scaledSize(m_size);
153 scaledSize.expand(0, m_topControlsAdjustment); 153 scaledSize.expand(0, m_topControlsAdjustment);
154 scaledSize.scale(1 / m_scale); 154 scaledSize.scale(1 / m_scale);
155 return scaledSize; 155 return scaledSize;
156 } 156 }
157 157
158 FloatRect VisualViewport::visibleRect() const { 158 FloatRect VisualViewport::visibleRect() const {
159 return FloatRect(location(), visibleSize()); 159 return FloatRect(FloatPoint(scrollOffset()), visibleSize());
160 } 160 }
161 161
162 FloatRect VisualViewport::visibleRectInDocument() const { 162 FloatRect VisualViewport::visibleRectInDocument() const {
163 if (!mainFrame() || !mainFrame()->view()) 163 if (!mainFrame() || !mainFrame()->view())
164 return FloatRect(); 164 return FloatRect();
165 165
166 FloatPoint viewLocation = FloatPoint( 166 FloatPoint viewLocation =
167 mainFrame()->view()->getScrollableArea()->scrollPositionDouble()); 167 FloatPoint(mainFrame()->view()->getScrollableArea()->scrollOffset());
168 return FloatRect(viewLocation, visibleSize()); 168 return FloatRect(viewLocation, visibleSize());
169 } 169 }
170 170
171 FloatRect VisualViewport::mainViewToViewportCSSPixels( 171 FloatRect VisualViewport::mainViewToViewportCSSPixels(
172 const FloatRect& rect) const { 172 const FloatRect& rect) const {
173 // Note, this is in CSS Pixels so we don't apply scale. 173 // Note, this is in CSS Pixels so we don't apply scale.
174 FloatRect rectInViewport = rect; 174 FloatRect rectInViewport = rect;
175 rectInViewport.moveBy(-location()); 175 rectInViewport.move(-scrollOffset());
176 return rectInViewport; 176 return rectInViewport;
177 } 177 }
178 178
179 FloatPoint VisualViewport::viewportCSSPixelsToRootFrame( 179 FloatPoint VisualViewport::viewportCSSPixelsToRootFrame(
180 const FloatPoint& point) const { 180 const FloatPoint& point) const {
181 // Note, this is in CSS Pixels so we don't apply scale. 181 // Note, this is in CSS Pixels so we don't apply scale.
182 FloatPoint pointInRootFrame = point; 182 FloatPoint pointInRootFrame = point;
183 pointInRootFrame.moveBy(location()); 183 pointInRootFrame.move(scrollOffset());
184 return pointInRootFrame; 184 return pointInRootFrame;
185 } 185 }
186 186
187 void VisualViewport::setLocation(const FloatPoint& newLocation) { 187 void VisualViewport::setLocation(const FloatPoint& newLocation) {
188 setScaleAndLocation(m_scale, newLocation); 188 setScaleAndLocation(m_scale, newLocation);
189 } 189 }
190 190
191 void VisualViewport::move(const FloatPoint& delta) { 191 void VisualViewport::move(const ScrollOffset& delta) {
192 setLocation(m_offset + delta); 192 setLocation(FloatPoint(m_offset + delta));
193 }
194
195 void VisualViewport::move(const FloatSize& delta) {
196 setLocation(m_offset + delta);
197 } 193 }
198 194
199 void VisualViewport::setScale(float scale) { 195 void VisualViewport::setScale(float scale) {
200 setScaleAndLocation(scale, m_offset); 196 setScaleAndLocation(scale, FloatPoint(m_offset));
201 } 197 }
202 198
203 double VisualViewport::scrollLeft() { 199 double VisualViewport::scrollLeft() {
204 if (!mainFrame()) 200 if (!mainFrame())
205 return 0; 201 return 0;
206 202
207 updateStyleAndLayoutIgnorePendingStylesheets(); 203 updateStyleAndLayoutIgnorePendingStylesheets();
208 204
209 return adjustScrollForAbsoluteZoom(visibleRect().x(), 205 return adjustScrollForAbsoluteZoom(visibleRect().x(),
210 mainFrame()->pageZoomFactor()); 206 mainFrame()->pageZoomFactor());
211 } 207 }
212 208
213 double VisualViewport::scrollTop() { 209 double VisualViewport::scrollTop() {
214 if (!mainFrame()) 210 if (!mainFrame())
215 return 0; 211 return 0;
216 212
217 updateStyleAndLayoutIgnorePendingStylesheets(); 213 updateStyleAndLayoutIgnorePendingStylesheets();
218 214
219 return adjustScrollForAbsoluteZoom(visibleRect().y(), 215 return adjustScrollForAbsoluteZoom(visibleRect().y(),
220 mainFrame()->pageZoomFactor()); 216 mainFrame()->pageZoomFactor());
221 } 217 }
222 218
223 double VisualViewport::clientWidth() { 219 double VisualViewport::clientWidth() {
224 if (!mainFrame()) 220 if (!mainFrame())
225 return 0; 221 return 0;
226 222
227 updateStyleAndLayoutIgnorePendingStylesheets(); 223 updateStyleAndLayoutIgnorePendingStylesheets();
228 224
229 double width = adjustScrollForAbsoluteZoom(visibleSize().width(), 225 float width = adjustScrollForAbsoluteZoom(visibleSize().width(),
230 mainFrame()->pageZoomFactor()); 226 mainFrame()->pageZoomFactor());
231 return width - mainFrame()->view()->verticalScrollbarWidth() / m_scale; 227 return width - mainFrame()->view()->verticalScrollbarWidth() / m_scale;
232 } 228 }
233 229
234 double VisualViewport::clientHeight() { 230 double VisualViewport::clientHeight() {
235 if (!mainFrame()) 231 if (!mainFrame())
236 return 0; 232 return 0;
237 233
238 updateStyleAndLayoutIgnorePendingStylesheets(); 234 updateStyleAndLayoutIgnorePendingStylesheets();
239 235
240 double height = adjustScrollForAbsoluteZoom(visibleSize().height(), 236 float height = adjustScrollForAbsoluteZoom(visibleSize().height(),
241 mainFrame()->pageZoomFactor()); 237 mainFrame()->pageZoomFactor());
242 return height - mainFrame()->view()->horizontalScrollbarHeight() / m_scale; 238 return height - mainFrame()->view()->horizontalScrollbarHeight() / m_scale;
243 } 239 }
244 240
245 double VisualViewport::pageScale() { 241 double VisualViewport::pageScale() {
246 updateStyleAndLayoutIgnorePendingStylesheets(); 242 updateStyleAndLayoutIgnorePendingStylesheets();
247 243
248 return m_scale; 244 return m_scale;
249 } 245 }
250 246
251 void VisualViewport::setScaleAndLocation(float scale, 247 void VisualViewport::setScaleAndLocation(float scale,
252 const FloatPoint& location) { 248 const FloatPoint& location) {
253 if (didSetScaleOrLocation(scale, location)) 249 if (didSetScaleOrLocation(scale, location))
254 notifyRootFrameViewport(); 250 notifyRootFrameViewport();
255 } 251 }
256 252
257 bool VisualViewport::didSetScaleOrLocation(float scale, 253 bool VisualViewport::didSetScaleOrLocation(float scale,
258 const FloatPoint& location) { 254 const FloatPoint& location) {
259 if (!mainFrame()) 255 if (!mainFrame())
260 return false; 256 return false;
261 257
262 bool valuesChanged = false; 258 bool valuesChanged = false;
263 259
264 if (scale != m_scale) { 260 if (scale != m_scale) {
265 m_scale = scale; 261 m_scale = scale;
266 valuesChanged = true; 262 valuesChanged = true;
267 frameHost().chromeClient().pageScaleFactorChanged(); 263 frameHost().chromeClient().pageScaleFactorChanged();
268 enqueueResizeEvent(); 264 enqueueResizeEvent();
269 } 265 }
270 266
271 FloatPoint clampedOffset(clampOffsetToBoundaries(location)); 267 ScrollOffset clampedOffset = clampScrollOffset(toScrollOffset(location));
272 268
273 if (clampedOffset != m_offset) { 269 if (clampedOffset != m_offset) {
274 m_offset = clampedOffset; 270 m_offset = clampedOffset;
275 scrollAnimator().setCurrentPosition(m_offset); 271 scrollAnimator().setCurrentOffset(m_offset);
276 272
277 // SVG runs with accelerated compositing disabled so no ScrollingCoordinator . 273 // SVG runs with accelerated compositing disabled so no ScrollingCoordinator .
278 if (ScrollingCoordinator* coordinator = 274 if (ScrollingCoordinator* coordinator =
279 frameHost().page().scrollingCoordinator()) 275 frameHost().page().scrollingCoordinator())
280 coordinator->scrollableAreaScrollLayerDidChange(this); 276 coordinator->scrollableAreaScrollLayerDidChange(this);
281 277
282 if (!frameHost().settings().inertVisualViewport()) { 278 if (!frameHost().settings().inertVisualViewport()) {
283 if (Document* document = mainFrame()->document()) 279 if (Document* document = mainFrame()->document())
284 document->enqueueScrollEventForNode(document); 280 document->enqueueScrollEventForNode(document);
285 } 281 }
(...skipping 29 matching lines...) Expand all
315 // Keep the center-of-pinch anchor in a stable position over the course 311 // Keep the center-of-pinch anchor in a stable position over the course
316 // of the magnify. 312 // of the magnify.
317 FloatPoint anchorAtOldScale = anchor.scaledBy(1.f / oldPageScale); 313 FloatPoint anchorAtOldScale = anchor.scaledBy(1.f / oldPageScale);
318 FloatPoint anchorAtNewScale = anchor.scaledBy(1.f / newPageScale); 314 FloatPoint anchorAtNewScale = anchor.scaledBy(1.f / newPageScale);
319 FloatSize anchorDelta = anchorAtOldScale - anchorAtNewScale; 315 FloatSize anchorDelta = anchorAtOldScale - anchorAtNewScale;
320 316
321 // First try to use the anchor's delta to scroll the FrameView. 317 // First try to use the anchor's delta to scroll the FrameView.
322 FloatSize anchorDeltaUnusedByScroll = anchorDelta; 318 FloatSize anchorDeltaUnusedByScroll = anchorDelta;
323 319
324 // Manually bubble any remaining anchor delta up to the visual viewport. 320 // Manually bubble any remaining anchor delta up to the visual viewport.
325 FloatPoint newLocation(location() + anchorDeltaUnusedByScroll); 321 FloatPoint newLocation(FloatPoint(scrollOffset()) +
322 anchorDeltaUnusedByScroll);
326 setScaleAndLocation(newPageScale, newLocation); 323 setScaleAndLocation(newPageScale, newLocation);
327 return true; 324 return true;
328 } 325 }
329 326
330 // Modifies the top of the graphics layer tree to add layers needed to support 327 // Modifies the top of the graphics layer tree to add layers needed to support
331 // the inner/outer viewport fixed-position model for pinch zoom. When finished, 328 // the inner/outer viewport fixed-position model for pinch zoom. When finished,
332 // the tree will look like this (with * denoting added layers): 329 // the tree will look like this (with * denoting added layers):
333 // 330 //
334 // *rootTransformLayer 331 // *rootTransformLayer
335 // +- *innerViewportContainerLayer (fixed pos container) 332 // +- *innerViewportContainerLayer (fixed pos container)
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
495 } 492 }
496 493
497 bool VisualViewport::scrollAnimatorEnabled() const { 494 bool VisualViewport::scrollAnimatorEnabled() const {
498 return frameHost().settings().scrollAnimatorEnabled(); 495 return frameHost().settings().scrollAnimatorEnabled();
499 } 496 }
500 497
501 HostWindow* VisualViewport::getHostWindow() const { 498 HostWindow* VisualViewport::getHostWindow() const {
502 return &frameHost().chromeClient(); 499 return &frameHost().chromeClient();
503 } 500 }
504 501
505 DoubleRect VisualViewport::visibleContentRectDouble(
506 IncludeScrollbarsInRect) const {
507 return visibleRect();
508 }
509
510 IntRect VisualViewport::visibleContentRect(
511 IncludeScrollbarsInRect scrollbarInclusion) const {
512 return enclosingIntRect(visibleContentRectDouble(scrollbarInclusion));
513 }
514
515 bool VisualViewport::shouldUseIntegerScrollOffset() const { 502 bool VisualViewport::shouldUseIntegerScrollOffset() const {
516 LocalFrame* frame = mainFrame(); 503 LocalFrame* frame = mainFrame();
517 if (frame && frame->settings() && 504 if (frame && frame->settings() &&
518 !frame->settings()->preferCompositingToLCDTextEnabled()) 505 !frame->settings()->preferCompositingToLCDTextEnabled())
519 return true; 506 return true;
520 507
521 return ScrollableArea::shouldUseIntegerScrollOffset(); 508 return ScrollableArea::shouldUseIntegerScrollOffset();
522 } 509 }
523 510
524 void VisualViewport::setScrollPosition(const DoublePoint& scrollPoint, 511 void VisualViewport::setScrollOffset(const ScrollOffset& offset,
525 ScrollType scrollType, 512 ScrollType scrollType,
526 ScrollBehavior scrollBehavior) { 513 ScrollBehavior scrollBehavior) {
527 // We clamp the position here, because the ScrollAnimator may otherwise be 514 // We clamp the offset here, because the ScrollAnimator may otherwise be
528 // set to a non-clamped position by ScrollableArea::setScrollPosition, 515 // set to a non-clamped offset by ScrollableArea::setScrollOffset,
529 // which may lead to incorrect scrolling behavior in RootFrameViewport down 516 // which may lead to incorrect scrolling behavior in RootFrameViewport down
530 // the line. 517 // the line.
531 // TODO(eseckler): Solve this instead by ensuring that ScrollableArea and 518 // TODO(eseckler): Solve this instead by ensuring that ScrollableArea and
532 // ScrollAnimator are kept in sync. This requires that ScrollableArea always 519 // ScrollAnimator are kept in sync. This requires that ScrollableArea always
533 // stores fractional offsets and that truncation happens elsewhere, see 520 // stores fractional offsets and that truncation happens elsewhere, see
534 // crbug.com/626315. 521 // crbug.com/626315.
535 DoublePoint newScrollPosition = clampScrollPosition(scrollPoint); 522 ScrollOffset newScrollOffset = clampScrollOffset(offset);
536 ScrollableArea::setScrollPosition(newScrollPosition, scrollType, 523 ScrollableArea::setScrollOffset(newScrollOffset, scrollType, scrollBehavior);
537 scrollBehavior);
538 } 524 }
539 525
540 int VisualViewport::scrollSize(ScrollbarOrientation orientation) const { 526 int VisualViewport::scrollSize(ScrollbarOrientation orientation) const {
541 IntSize scrollDimensions = maximumScrollPosition() - minimumScrollPosition(); 527 IntSize scrollDimensions =
528 maximumScrollOffsetInt() - minimumScrollOffsetInt();
542 return (orientation == HorizontalScrollbar) ? scrollDimensions.width() 529 return (orientation == HorizontalScrollbar) ? scrollDimensions.width()
543 : scrollDimensions.height(); 530 : scrollDimensions.height();
544 } 531 }
545 532
546 IntPoint VisualViewport::minimumScrollPosition() const { 533 IntSize VisualViewport::minimumScrollOffsetInt() const {
547 return IntPoint(); 534 return IntSize();
548 } 535 }
549 536
550 IntPoint VisualViewport::maximumScrollPosition() const { 537 IntSize VisualViewport::maximumScrollOffsetInt() const {
551 return flooredIntPoint(maximumScrollPositionDouble()); 538 return flooredIntSize(maximumScrollOffset());
552 } 539 }
553 540
554 DoublePoint VisualViewport::maximumScrollPositionDouble() const { 541 ScrollOffset VisualViewport::maximumScrollOffset() const {
555 if (!mainFrame()) 542 if (!mainFrame())
556 return IntPoint(); 543 return ScrollOffset();
557 544
558 // TODO(bokan): We probably shouldn't be storing the bounds in a float. crbug. com/470718. 545 // TODO(bokan): We probably shouldn't be storing the bounds in a float. crbug. com/470718.
559 FloatSize frameViewSize(contentsSize()); 546 FloatSize frameViewSize(contentsSize());
560 547
561 if (m_topControlsAdjustment) { 548 if (m_topControlsAdjustment) {
562 float minScale = 549 float minScale =
563 frameHost().pageScaleConstraintsSet().finalConstraints().minimumScale; 550 frameHost().pageScaleConstraintsSet().finalConstraints().minimumScale;
564 frameViewSize.expand(0, m_topControlsAdjustment / minScale); 551 frameViewSize.expand(0, m_topControlsAdjustment / minScale);
565 } 552 }
566 553
567 frameViewSize.scale(m_scale); 554 frameViewSize.scale(m_scale);
568 frameViewSize = FloatSize(flooredIntSize(frameViewSize)); 555 frameViewSize = FloatSize(flooredIntSize(frameViewSize));
569 556
570 FloatSize viewportSize(m_size); 557 FloatSize viewportSize(m_size);
571 viewportSize.expand(0, ceilf(m_topControlsAdjustment)); 558 viewportSize.expand(0, ceilf(m_topControlsAdjustment));
572 559
573 FloatSize maxPosition = frameViewSize - viewportSize; 560 FloatSize maxPosition = frameViewSize - viewportSize;
574 maxPosition.scale(1 / m_scale); 561 maxPosition.scale(1 / m_scale);
575 return DoublePoint(maxPosition); 562 return ScrollOffset(maxPosition);
576 } 563 }
577 564
578 IntPoint VisualViewport::clampDocumentOffsetAtScale(const IntPoint& offset, 565 IntPoint VisualViewport::clampDocumentOffsetAtScale(const IntPoint& offset,
579 float scale) { 566 float scale) {
580 if (!mainFrame() || !mainFrame()->view()) 567 if (!mainFrame() || !mainFrame()->view())
581 return IntPoint(); 568 return IntPoint();
582 569
583 FrameView* view = mainFrame()->view(); 570 FrameView* view = mainFrame()->view();
584 571
585 FloatSize scaledSize(m_size); 572 FloatSize scaledSize(m_size);
586 scaledSize.scale(1 / scale); 573 scaledSize.scale(1 / scale);
587 574
588 IntPoint visualViewportMax = 575 IntSize visualViewportMax =
589 flooredIntPoint(FloatSize(contentsSize()) - scaledSize); 576 flooredIntSize(FloatSize(contentsSize()) - scaledSize);
590 IntPoint max = view->maximumScrollPosition() + visualViewportMax; 577 IntSize max = view->maximumScrollOffsetInt() + visualViewportMax;
591 IntPoint min = 578 IntSize min =
592 view->minimumScrollPosition(); // VisualViewportMin should be (0, 0) 579 view->minimumScrollOffsetInt(); // VisualViewportMin should be (0, 0)
593 580
594 IntPoint clamped = offset; 581 IntSize clamped = toIntSize(offset);
595 clamped = clamped.shrunkTo(max); 582 clamped = clamped.shrunkTo(max);
596 clamped = clamped.expandedTo(min); 583 clamped = clamped.expandedTo(min);
597 return clamped; 584 return IntPoint(clamped);
598 } 585 }
599 586
600 void VisualViewport::setTopControlsAdjustment(float adjustment) { 587 void VisualViewport::setTopControlsAdjustment(float adjustment) {
601 m_topControlsAdjustment = adjustment; 588 m_topControlsAdjustment = adjustment;
602 } 589 }
603 590
604 IntRect VisualViewport::scrollableAreaBoundingBox() const { 591 IntRect VisualViewport::scrollableAreaBoundingBox() const {
605 // This method should return the bounding box in the parent view's coordinate 592 // This method should return the bounding box in the parent view's coordinate
606 // space; however, VisualViewport technically isn't a child of any Frames. 593 // space; however, VisualViewport technically isn't a child of any Frames.
607 // Nonetheless, the VisualViewport always occupies the entire main frame so ju st 594 // Nonetheless, the VisualViewport always occupies the entire main frame so ju st
608 // return that. 595 // return that.
609 LocalFrame* frame = mainFrame(); 596 LocalFrame* frame = mainFrame();
610 597
611 if (!frame || !frame->view()) 598 if (!frame || !frame->view())
612 return IntRect(); 599 return IntRect();
613 600
614 return frame->view()->frameRect(); 601 return frame->view()->frameRect();
615 } 602 }
616 603
617 IntSize VisualViewport::contentsSize() const { 604 IntSize VisualViewport::contentsSize() const {
618 LocalFrame* frame = mainFrame(); 605 LocalFrame* frame = mainFrame();
619 606
620 if (!frame || !frame->view()) 607 if (!frame || !frame->view())
621 return IntSize(); 608 return IntSize();
622 609
623 return frame->view()->visibleContentRect(IncludeScrollbars).size(); 610 return frame->view()->visibleContentRect(IncludeScrollbars).size();
624 } 611 }
625 612
626 void VisualViewport::setScrollOffset(const DoublePoint& offset, 613 void VisualViewport::updateScrollOffset(const ScrollOffset& position,
627 ScrollType scrollType) { 614 ScrollType scrollType) {
628 if (didSetScaleOrLocation(m_scale, toFloatPoint(offset)) && 615 if (didSetScaleOrLocation(m_scale, FloatPoint(position)) &&
629 scrollType != AnchoringScroll) 616 scrollType != AnchoringScroll)
630 notifyRootFrameViewport(); 617 notifyRootFrameViewport();
631 } 618 }
632 619
633 GraphicsLayer* VisualViewport::layerForContainer() const { 620 GraphicsLayer* VisualViewport::layerForContainer() const {
634 return m_innerViewportContainerLayer.get(); 621 return m_innerViewportContainerLayer.get();
635 } 622 }
636 623
637 GraphicsLayer* VisualViewport::layerForScrolling() const { 624 GraphicsLayer* VisualViewport::layerForScrolling() const {
638 return m_innerViewportScrollLayer.get(); 625 return m_innerViewportScrollLayer.get();
(...skipping 21 matching lines...) Expand all
660 return frameHost().page().mainFrame() && 647 return frameHost().page().mainFrame() &&
661 frameHost().page().mainFrame()->isLocalFrame() 648 frameHost().page().mainFrame()->isLocalFrame()
662 ? frameHost().page().deprecatedLocalMainFrame() 649 ? frameHost().page().deprecatedLocalMainFrame()
663 : 0; 650 : 0;
664 } 651 }
665 652
666 Widget* VisualViewport::getWidget() { 653 Widget* VisualViewport::getWidget() {
667 return mainFrame()->view(); 654 return mainFrame()->view();
668 } 655 }
669 656
670 FloatPoint VisualViewport::clampOffsetToBoundaries(const FloatPoint& offset) {
671 FloatPoint clampedOffset(offset);
672 clampedOffset =
673 clampedOffset.shrunkTo(FloatPoint(maximumScrollPositionDouble()));
674 clampedOffset =
675 clampedOffset.expandedTo(FloatPoint(minimumScrollPositionDouble()));
676 return clampedOffset;
677 }
678
679 void VisualViewport::clampToBoundaries() { 657 void VisualViewport::clampToBoundaries() {
680 setLocation(m_offset); 658 setLocation(FloatPoint(m_offset));
681 } 659 }
682 660
683 FloatRect VisualViewport::viewportToRootFrame( 661 FloatRect VisualViewport::viewportToRootFrame(
684 const FloatRect& rectInViewport) const { 662 const FloatRect& rectInViewport) const {
685 FloatRect rectInRootFrame = rectInViewport; 663 FloatRect rectInRootFrame = rectInViewport;
686 rectInRootFrame.scale(1 / scale()); 664 rectInRootFrame.scale(1 / scale());
687 rectInRootFrame.moveBy(location()); 665 rectInRootFrame.move(scrollOffset());
688 return rectInRootFrame; 666 return rectInRootFrame;
689 } 667 }
690 668
691 IntRect VisualViewport::viewportToRootFrame( 669 IntRect VisualViewport::viewportToRootFrame(
692 const IntRect& rectInViewport) const { 670 const IntRect& rectInViewport) const {
693 // FIXME: How to snap to pixels? 671 // FIXME: How to snap to pixels?
694 return enclosingIntRect(viewportToRootFrame(FloatRect(rectInViewport))); 672 return enclosingIntRect(viewportToRootFrame(FloatRect(rectInViewport)));
695 } 673 }
696 674
697 FloatRect VisualViewport::rootFrameToViewport( 675 FloatRect VisualViewport::rootFrameToViewport(
698 const FloatRect& rectInRootFrame) const { 676 const FloatRect& rectInRootFrame) const {
699 FloatRect rectInViewport = rectInRootFrame; 677 FloatRect rectInViewport = rectInRootFrame;
700 rectInViewport.moveBy(-location()); 678 rectInViewport.move(-scrollOffset());
701 rectInViewport.scale(scale()); 679 rectInViewport.scale(scale());
702 return rectInViewport; 680 return rectInViewport;
703 } 681 }
704 682
705 IntRect VisualViewport::rootFrameToViewport( 683 IntRect VisualViewport::rootFrameToViewport(
706 const IntRect& rectInRootFrame) const { 684 const IntRect& rectInRootFrame) const {
707 // FIXME: How to snap to pixels? 685 // FIXME: How to snap to pixels?
708 return enclosingIntRect(rootFrameToViewport(FloatRect(rectInRootFrame))); 686 return enclosingIntRect(rootFrameToViewport(FloatRect(rectInRootFrame)));
709 } 687 }
710 688
711 FloatPoint VisualViewport::viewportToRootFrame( 689 FloatPoint VisualViewport::viewportToRootFrame(
712 const FloatPoint& pointInViewport) const { 690 const FloatPoint& pointInViewport) const {
713 FloatPoint pointInRootFrame = pointInViewport; 691 FloatPoint pointInRootFrame = pointInViewport;
714 pointInRootFrame.scale(1 / scale(), 1 / scale()); 692 pointInRootFrame.scale(1 / scale(), 1 / scale());
715 pointInRootFrame.moveBy(location()); 693 pointInRootFrame.move(scrollOffset());
716 return pointInRootFrame; 694 return pointInRootFrame;
717 } 695 }
718 696
719 FloatPoint VisualViewport::rootFrameToViewport( 697 FloatPoint VisualViewport::rootFrameToViewport(
720 const FloatPoint& pointInRootFrame) const { 698 const FloatPoint& pointInRootFrame) const {
721 FloatPoint pointInViewport = pointInRootFrame; 699 FloatPoint pointInViewport = pointInRootFrame;
722 pointInViewport.moveBy(-location()); 700 pointInViewport.move(-scrollOffset());
723 pointInViewport.scale(scale(), scale()); 701 pointInViewport.scale(scale(), scale());
724 return pointInViewport; 702 return pointInViewport;
725 } 703 }
726 704
727 IntPoint VisualViewport::viewportToRootFrame( 705 IntPoint VisualViewport::viewportToRootFrame(
728 const IntPoint& pointInViewport) const { 706 const IntPoint& pointInViewport) const {
729 // FIXME: How to snap to pixels? 707 // FIXME: How to snap to pixels?
730 return flooredIntPoint( 708 return flooredIntPoint(
731 FloatPoint(viewportToRootFrame(FloatPoint(pointInViewport)))); 709 FloatPoint(viewportToRootFrame(FloatPoint(pointInViewport))));
732 } 710 }
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
838 } else if (graphicsLayer == m_rootTransformLayer.get()) { 816 } else if (graphicsLayer == m_rootTransformLayer.get()) {
839 name = "Root Transform Layer"; 817 name = "Root Transform Layer";
840 } else { 818 } else {
841 ASSERT_NOT_REACHED(); 819 ASSERT_NOT_REACHED();
842 } 820 }
843 821
844 return name; 822 return name;
845 } 823 }
846 824
847 } // namespace blink 825 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698