Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 64 using blink::GraphicsLayer; | 64 using blink::GraphicsLayer; |
| 65 | 65 |
| 66 namespace blink { | 66 namespace blink { |
| 67 | 67 |
| 68 VisualViewport::VisualViewport(FrameHost& owner) | 68 VisualViewport::VisualViewport(FrameHost& owner) |
| 69 : m_frameHost(&owner) | 69 : m_frameHost(&owner) |
| 70 , m_scale(1) | 70 , m_scale(1) |
| 71 , m_topControlsAdjustment(0) | 71 , m_topControlsAdjustment(0) |
| 72 , m_maxPageScale(-1) | 72 , m_maxPageScale(-1) |
| 73 , m_trackPinchZoomStatsForPage(false) | 73 , m_trackPinchZoomStatsForPage(false) |
| 74 , m_scaleAndScrollOverrideEnabled(false) | |
| 75 , m_scaleAndScrollOverrideScale(0) | |
| 74 { | 76 { |
| 75 reset(); | 77 reset(); |
| 76 } | 78 } |
| 77 | 79 |
| 78 VisualViewport::~VisualViewport() | 80 VisualViewport::~VisualViewport() |
| 79 { | 81 { |
| 80 sendUMAMetrics(); | 82 sendUMAMetrics(); |
| 81 } | 83 } |
| 82 | 84 |
| 83 DEFINE_TRACE(VisualViewport) | 85 DEFINE_TRACE(VisualViewport) |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 203 void VisualViewport::move(const FloatSize& delta) | 205 void VisualViewport::move(const FloatSize& delta) |
| 204 { | 206 { |
| 205 setLocation(m_offset + delta); | 207 setLocation(m_offset + delta); |
| 206 } | 208 } |
| 207 | 209 |
| 208 void VisualViewport::setScale(float scale) | 210 void VisualViewport::setScale(float scale) |
| 209 { | 211 { |
| 210 setScaleAndLocation(scale, m_offset); | 212 setScaleAndLocation(scale, m_offset); |
| 211 } | 213 } |
| 212 | 214 |
| 215 void VisualViewport::setScaleAndScrollOverride(float scale, const FloatPoint& lo cation) | |
| 216 { | |
| 217 m_scaleAndScrollOverrideEnabled = true; | |
| 218 m_scaleAndScrollOverrideScale = scale; | |
| 219 m_scaleAndScrollOverrideLocation = location; | |
| 220 | |
| 221 setScaleAndLocation(this->scale(), this->location()); | |
| 222 } | |
| 223 | |
| 224 void VisualViewport::clearScaleAndScrollOverride() | |
| 225 { | |
| 226 m_scaleAndScrollOverrideEnabled = false; | |
| 227 reset(); | |
| 228 } | |
| 229 | |
| 213 double VisualViewport::scrollLeft() | 230 double VisualViewport::scrollLeft() |
| 214 { | 231 { |
| 215 if (!mainFrame()) | 232 if (!mainFrame()) |
| 216 return 0; | 233 return 0; |
| 217 | 234 |
| 218 updateStyleAndLayoutIgnorePendingStylesheets(); | 235 updateStyleAndLayoutIgnorePendingStylesheets(); |
| 219 | 236 |
| 220 return adjustScrollForAbsoluteZoom(visibleRect().x(), mainFrame()->pageZoomF actor()); | 237 return adjustScrollForAbsoluteZoom(visibleRect().x(), mainFrame()->pageZoomF actor()); |
| 221 } | 238 } |
| 222 | 239 |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 279 return m_scale; | 296 return m_scale; |
| 280 } | 297 } |
| 281 | 298 |
| 282 void VisualViewport::setScaleAndLocation(float scale, const FloatPoint& location ) | 299 void VisualViewport::setScaleAndLocation(float scale, const FloatPoint& location ) |
| 283 { | 300 { |
| 284 if (!mainFrame()) | 301 if (!mainFrame()) |
| 285 return; | 302 return; |
| 286 | 303 |
| 287 bool valuesChanged = false; | 304 bool valuesChanged = false; |
| 288 | 305 |
| 289 if (scale != m_scale) { | 306 float newScale = applyScaleOverrideToScale(scale); |
| 290 m_scale = scale; | 307 if (newScale != m_scale || newScale != scale) { |
| 308 m_scale = newScale; | |
| 291 valuesChanged = true; | 309 valuesChanged = true; |
| 292 frameHost().chromeClient().pageScaleFactorChanged(); | 310 frameHost().chromeClient().pageScaleFactorChanged(); |
| 293 } | 311 } |
| 294 | 312 |
| 295 FloatPoint clampedOffset(clampOffsetToBoundaries(location)); | 313 FloatPoint overriddenLocation(applyScrollOverrideToLocation(location)); |
| 314 FloatPoint clampedOffset(clampOffsetToBoundaries(overriddenLocation)); | |
| 296 | 315 |
| 297 if (clampedOffset != m_offset) { | 316 // When location was overridden, re-apply override to counteract potential s croll animations by compositor. |
| 317 if (clampedOffset != m_offset || overriddenLocation != location) { | |
| 298 m_offset = clampedOffset; | 318 m_offset = clampedOffset; |
| 299 scrollAnimator().setCurrentPosition(m_offset); | 319 scrollAnimator().setCurrentPosition(m_offset); |
| 300 | 320 |
| 301 // SVG runs with accelerated compositing disabled so no ScrollingCoordin ator. | 321 // SVG runs with accelerated compositing disabled so no ScrollingCoordin ator. |
| 302 if (ScrollingCoordinator* coordinator = frameHost().page().scrollingCoor dinator()) | 322 if (ScrollingCoordinator* coordinator = frameHost().page().scrollingCoor dinator()) |
| 303 coordinator->scrollableAreaScrollLayerDidChange(this); | 323 coordinator->scrollableAreaScrollLayerDidChange(this); |
| 304 | 324 |
| 305 if (!frameHost().settings().inertVisualViewport()) { | 325 if (!frameHost().settings().inertVisualViewport()) { |
| 306 if (Document* document = mainFrame()->document()) | 326 if (Document* document = mainFrame()->document()) |
| 307 document->enqueueScrollEventForNode(document); | 327 document->enqueueScrollEventForNode(document); |
| (...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 684 clampedOffset = clampedOffset.shrunkTo(FloatPoint(maximumScrollPositionDoubl e())); | 704 clampedOffset = clampedOffset.shrunkTo(FloatPoint(maximumScrollPositionDoubl e())); |
| 685 clampedOffset = clampedOffset.expandedTo(FloatPoint(minimumScrollPositionDou ble())); | 705 clampedOffset = clampedOffset.expandedTo(FloatPoint(minimumScrollPositionDou ble())); |
| 686 return clampedOffset; | 706 return clampedOffset; |
| 687 } | 707 } |
| 688 | 708 |
| 689 void VisualViewport::clampToBoundaries() | 709 void VisualViewport::clampToBoundaries() |
| 690 { | 710 { |
| 691 setLocation(m_offset); | 711 setLocation(m_offset); |
| 692 } | 712 } |
| 693 | 713 |
| 714 FloatPoint VisualViewport::applyScrollOverrideToLocation(const FloatPoint& locat ion) | |
| 715 { | |
| 716 FloatPoint newLocation = location; | |
| 717 if (m_scaleAndScrollOverrideEnabled) { | |
| 718 if (m_scaleAndScrollOverrideLocation.x() >= 0) | |
|
Sami
2016/06/23 17:34:03
Ditto.
| |
| 719 newLocation.setX(m_scaleAndScrollOverrideLocation.x()); | |
| 720 if (m_scaleAndScrollOverrideLocation.y() >= 0) | |
| 721 newLocation.setY(m_scaleAndScrollOverrideLocation.y()); | |
| 722 } | |
| 723 return newLocation; | |
| 724 } | |
| 725 | |
| 726 float VisualViewport::applyScaleOverrideToScale(float scale) | |
| 727 { | |
| 728 if (m_scaleAndScrollOverrideEnabled && m_scaleAndScrollOverrideScale > 0) | |
| 729 return m_scaleAndScrollOverrideScale; | |
| 730 return scale; | |
| 731 } | |
| 732 | |
| 694 FloatRect VisualViewport::viewportToRootFrame(const FloatRect& rectInViewport) c onst | 733 FloatRect VisualViewport::viewportToRootFrame(const FloatRect& rectInViewport) c onst |
| 695 { | 734 { |
| 696 FloatRect rectInRootFrame = rectInViewport; | 735 FloatRect rectInRootFrame = rectInViewport; |
| 697 rectInRootFrame.scale(1 / scale()); | 736 rectInRootFrame.scale(1 / scale()); |
| 698 rectInRootFrame.moveBy(location()); | 737 rectInRootFrame.moveBy(location()); |
| 699 return rectInRootFrame; | 738 return rectInRootFrame; |
| 700 } | 739 } |
| 701 | 740 |
| 702 IntRect VisualViewport::viewportToRootFrame(const IntRect& rectInViewport) const | 741 IntRect VisualViewport::viewportToRootFrame(const IntRect& rectInViewport) const |
| 703 { | 742 { |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 835 } else if (graphicsLayer == m_rootTransformLayer) { | 874 } else if (graphicsLayer == m_rootTransformLayer) { |
| 836 name = "Root Transform Layer"; | 875 name = "Root Transform Layer"; |
| 837 } else { | 876 } else { |
| 838 ASSERT_NOT_REACHED(); | 877 ASSERT_NOT_REACHED(); |
| 839 } | 878 } |
| 840 | 879 |
| 841 return name; | 880 return name; |
| 842 } | 881 } |
| 843 | 882 |
| 844 } // namespace blink | 883 } // namespace blink |
| OLD | NEW |