OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org> | 2 * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org> |
3 * 1999 Lars Knoll <knoll@kde.org> | 3 * 1999 Lars Knoll <knoll@kde.org> |
4 * 1999 Antti Koivisto <koivisto@kde.org> | 4 * 1999 Antti Koivisto <koivisto@kde.org> |
5 * 2000 Dirk Mueller <mueller@kde.org> | 5 * 2000 Dirk Mueller <mueller@kde.org> |
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. | 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. |
7 * (C) 2006 Graham Dennis (graham.dennis@gmail.com) | 7 * (C) 2006 Graham Dennis (graham.dennis@gmail.com) |
8 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) | 8 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) |
9 * Copyright (C) 2009 Google Inc. All rights reserved. | 9 * Copyright (C) 2009 Google Inc. All rights reserved. |
10 * | 10 * |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
146 , m_horizontalScrollbarLock(false) | 146 , m_horizontalScrollbarLock(false) |
147 , m_verticalScrollbarLock(false) | 147 , m_verticalScrollbarLock(false) |
148 , m_scrollbarsAvoidingResizer(0) | 148 , m_scrollbarsAvoidingResizer(0) |
149 , m_scrollbarsSuppressed(false) | 149 , m_scrollbarsSuppressed(false) |
150 , m_inUpdateScrollbars(false) | 150 , m_inUpdateScrollbars(false) |
151 , m_frameTimingRequestsDirty(true) | 151 , m_frameTimingRequestsDirty(true) |
152 , m_viewportIntersectionValid(false) | 152 , m_viewportIntersectionValid(false) |
153 , m_hiddenForThrottling(false) | 153 , m_hiddenForThrottling(false) |
154 , m_crossOriginForThrottling(false) | 154 , m_crossOriginForThrottling(false) |
155 , m_isUpdatingAllLifecyclePhases(false) | 155 , m_isUpdatingAllLifecyclePhases(false) |
| 156 , m_scrollAnchor(this) |
156 { | 157 { |
157 ASSERT(m_frame); | 158 ASSERT(m_frame); |
158 init(); | 159 init(); |
159 } | 160 } |
160 | 161 |
161 PassRefPtrWillBeRawPtr<FrameView> FrameView::create(LocalFrame* frame) | 162 PassRefPtrWillBeRawPtr<FrameView> FrameView::create(LocalFrame* frame) |
162 { | 163 { |
163 RefPtrWillBeRawPtr<FrameView> view = adoptRefWillBeNoop(new FrameView(frame)
); | 164 RefPtrWillBeRawPtr<FrameView> view = adoptRefWillBeNoop(new FrameView(frame)
); |
164 view->show(); | 165 view->show(); |
165 return view.release(); | 166 return view.release(); |
(...skipping 24 matching lines...) Expand all Loading... |
190 #if ENABLE(OILPAN) | 191 #if ENABLE(OILPAN) |
191 visitor->trace(m_frame); | 192 visitor->trace(m_frame); |
192 visitor->trace(m_fragmentAnchor); | 193 visitor->trace(m_fragmentAnchor); |
193 visitor->trace(m_scrollableAreas); | 194 visitor->trace(m_scrollableAreas); |
194 visitor->trace(m_animatingScrollableAreas); | 195 visitor->trace(m_animatingScrollableAreas); |
195 visitor->trace(m_autoSizeInfo); | 196 visitor->trace(m_autoSizeInfo); |
196 visitor->trace(m_horizontalScrollbar); | 197 visitor->trace(m_horizontalScrollbar); |
197 visitor->trace(m_verticalScrollbar); | 198 visitor->trace(m_verticalScrollbar); |
198 visitor->trace(m_children); | 199 visitor->trace(m_children); |
199 visitor->trace(m_viewportScrollableArea); | 200 visitor->trace(m_viewportScrollableArea); |
| 201 visitor->trace(m_scrollAnchor); |
200 #endif | 202 #endif |
201 Widget::trace(visitor); | 203 Widget::trace(visitor); |
202 ScrollableArea::trace(visitor); | 204 ScrollableArea::trace(visitor); |
203 } | 205 } |
204 | 206 |
205 void FrameView::reset() | 207 void FrameView::reset() |
206 { | 208 { |
207 m_hasPendingLayout = false; | 209 m_hasPendingLayout = false; |
208 m_doFullPaintInvalidation = false; | 210 m_doFullPaintInvalidation = false; |
209 m_layoutSchedulingEnabled = true; | 211 m_layoutSchedulingEnabled = true; |
(...skipping 577 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
787 | 789 |
788 document->updateLayoutTreeIfNeeded(); | 790 document->updateLayoutTreeIfNeeded(); |
789 lifecycle().advanceTo(DocumentLifecycle::StyleClean); | 791 lifecycle().advanceTo(DocumentLifecycle::StyleClean); |
790 | 792 |
791 if (m_frame->isMainFrame() && !m_viewportScrollableArea) { | 793 if (m_frame->isMainFrame() && !m_viewportScrollableArea) { |
792 ScrollableArea& visualViewport = m_frame->host()->visualViewport(); | 794 ScrollableArea& visualViewport = m_frame->host()->visualViewport(); |
793 ScrollableArea* layoutViewport = layoutViewportScrollableArea(); | 795 ScrollableArea* layoutViewport = layoutViewportScrollableArea(); |
794 ASSERT(layoutViewport); | 796 ASSERT(layoutViewport); |
795 m_viewportScrollableArea = RootFrameViewport::create(visualViewport, *la
youtViewport); | 797 m_viewportScrollableArea = RootFrameViewport::create(visualViewport, *la
youtViewport); |
796 } | 798 } |
| 799 |
| 800 if (scrollAnchoringEnabled()) |
| 801 m_scrollAnchor.save(); |
797 } | 802 } |
798 | 803 |
799 static inline void layoutFromRootObject(LayoutObject& root) | 804 static inline void layoutFromRootObject(LayoutObject& root) |
800 { | 805 { |
801 LayoutState layoutState(root); | 806 LayoutState layoutState(root); |
802 root.layout(); | 807 root.layout(); |
803 } | 808 } |
804 | 809 |
805 void FrameView::prepareLayoutAnalyzer() | 810 void FrameView::prepareLayoutAnalyzer() |
806 { | 811 { |
(...skipping 715 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1522 void FrameView::setScrollPosition(const DoublePoint& scrollPoint, ScrollType scr
ollType, ScrollBehavior scrollBehavior) | 1527 void FrameView::setScrollPosition(const DoublePoint& scrollPoint, ScrollType scr
ollType, ScrollBehavior scrollBehavior) |
1523 { | 1528 { |
1524 DoublePoint newScrollPosition = clampScrollPosition(scrollPoint); | 1529 DoublePoint newScrollPosition = clampScrollPosition(scrollPoint); |
1525 if (newScrollPosition == scrollPositionDouble()) | 1530 if (newScrollPosition == scrollPositionDouble()) |
1526 return; | 1531 return; |
1527 | 1532 |
1528 if (scrollBehavior == ScrollBehaviorAuto) | 1533 if (scrollBehavior == ScrollBehaviorAuto) |
1529 scrollBehavior = scrollBehaviorStyle(); | 1534 scrollBehavior = scrollBehaviorStyle(); |
1530 | 1535 |
1531 ScrollableArea::setScrollPosition(newScrollPosition, scrollType, scrollBehav
ior); | 1536 ScrollableArea::setScrollPosition(newScrollPosition, scrollType, scrollBehav
ior); |
| 1537 |
| 1538 if (scrollAnchoringEnabled() && scrollType != AnchoringScroll) |
| 1539 m_scrollAnchor.clear(); |
1532 } | 1540 } |
1533 | 1541 |
1534 void FrameView::didUpdateElasticOverscroll() | 1542 void FrameView::didUpdateElasticOverscroll() |
1535 { | 1543 { |
1536 Page* page = frame().page(); | 1544 Page* page = frame().page(); |
1537 if (!page) | 1545 if (!page) |
1538 return; | 1546 return; |
1539 FloatSize elasticOverscroll = page->chromeClient().elasticOverscroll(); | 1547 FloatSize elasticOverscroll = page->chromeClient().elasticOverscroll(); |
1540 if (m_horizontalScrollbar) { | 1548 if (m_horizontalScrollbar) { |
1541 float delta = elasticOverscroll.width() - m_horizontalScrollbar->elastic
Overscroll(); | 1549 float delta = elasticOverscroll.width() - m_horizontalScrollbar->elastic
Overscroll(); |
(...skipping 461 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2003 // Plugins could have torn down the page inside updateWidgetGeometries(). | 2011 // Plugins could have torn down the page inside updateWidgetGeometries(). |
2004 if (!layoutView()) | 2012 if (!layoutView()) |
2005 return; | 2013 return; |
2006 | 2014 |
2007 scheduleUpdateWidgetsIfNecessary(); | 2015 scheduleUpdateWidgetsIfNecessary(); |
2008 | 2016 |
2009 if (ScrollingCoordinator* scrollingCoordinator = this->scrollingCoordinator(
)) | 2017 if (ScrollingCoordinator* scrollingCoordinator = this->scrollingCoordinator(
)) |
2010 scrollingCoordinator->notifyGeometryChanged(); | 2018 scrollingCoordinator->notifyGeometryChanged(); |
2011 | 2019 |
2012 scrollToFragmentAnchor(); | 2020 scrollToFragmentAnchor(); |
| 2021 // TODO(skobes): Figure out interactions between scroll anchor, fragment anc
hor, and history restoration. |
| 2022 if (scrollAnchoringEnabled()) |
| 2023 m_scrollAnchor.restore(); |
2013 | 2024 |
2014 sendResizeEventIfNeeded(); | 2025 sendResizeEventIfNeeded(); |
2015 } | 2026 } |
2016 | 2027 |
2017 bool FrameView::wasViewportResized() | 2028 bool FrameView::wasViewportResized() |
2018 { | 2029 { |
2019 ASSERT(m_frame); | 2030 ASSERT(m_frame); |
2020 LayoutView* layoutView = this->layoutView(); | 2031 LayoutView* layoutView = this->layoutView(); |
2021 if (!layoutView) | 2032 if (!layoutView) |
2022 return false; | 2033 return false; |
(...skipping 2027 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4050 return false; | 4061 return false; |
4051 return m_hiddenForThrottling && m_crossOriginForThrottling; | 4062 return m_hiddenForThrottling && m_crossOriginForThrottling; |
4052 } | 4063 } |
4053 | 4064 |
4054 LayoutBox& FrameView::boxForScrollControlPaintInvalidation() const | 4065 LayoutBox& FrameView::boxForScrollControlPaintInvalidation() const |
4055 { | 4066 { |
4056 ASSERT(layoutView()); | 4067 ASSERT(layoutView()); |
4057 return *layoutView(); | 4068 return *layoutView(); |
4058 } | 4069 } |
4059 | 4070 |
| 4071 bool FrameView::scrollAnchoringEnabled() const |
| 4072 { |
| 4073 if (Settings* settings = frame().settings()) |
| 4074 return settings->scrollAnchoringEnabled(); |
| 4075 return false; |
| 4076 } |
| 4077 |
4060 } // namespace blink | 4078 } // namespace blink |
OLD | NEW |