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 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
71 #include "core/rendering/svg/RenderSVGRoot.h" | 71 #include "core/rendering/svg/RenderSVGRoot.h" |
72 #include "core/svg/SVGDocumentExtensions.h" | 72 #include "core/svg/SVGDocumentExtensions.h" |
73 #include "core/svg/SVGSVGElement.h" | 73 #include "core/svg/SVGSVGElement.h" |
74 #include "platform/RuntimeEnabledFeatures.h" | 74 #include "platform/RuntimeEnabledFeatures.h" |
75 #include "platform/ScriptForbiddenScope.h" | 75 #include "platform/ScriptForbiddenScope.h" |
76 #include "platform/TraceEvent.h" | 76 #include "platform/TraceEvent.h" |
77 #include "platform/fonts/FontCache.h" | 77 #include "platform/fonts/FontCache.h" |
78 #include "platform/geometry/FloatRect.h" | 78 #include "platform/geometry/FloatRect.h" |
79 #include "platform/graphics/GraphicsContext.h" | 79 #include "platform/graphics/GraphicsContext.h" |
80 #include "platform/graphics/GraphicsLayerDebugInfo.h" | 80 #include "platform/graphics/GraphicsLayerDebugInfo.h" |
| 81 #include "platform/scroll/ProgrammaticScrollAnimator.h" |
81 #include "platform/scroll/ScrollAnimator.h" | 82 #include "platform/scroll/ScrollAnimator.h" |
82 #include "platform/scroll/ScrollbarTheme.h" | 83 #include "platform/scroll/ScrollbarTheme.h" |
83 #include "platform/text/TextStream.h" | 84 #include "platform/text/TextStream.h" |
84 #include "wtf/CurrentTime.h" | 85 #include "wtf/CurrentTime.h" |
85 #include "wtf/TemporaryChange.h" | 86 #include "wtf/TemporaryChange.h" |
86 | 87 |
87 namespace WebCore { | 88 namespace WebCore { |
88 | 89 |
89 using namespace HTMLNames; | 90 using namespace HTMLNames; |
90 | 91 |
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
256 setCanHaveScrollbars(false); | 257 setCanHaveScrollbars(false); |
257 } | 258 } |
258 } | 259 } |
259 | 260 |
260 void FrameView::prepareForDetach() | 261 void FrameView::prepareForDetach() |
261 { | 262 { |
262 RELEASE_ASSERT(!isInPerformLayout()); | 263 RELEASE_ASSERT(!isInPerformLayout()); |
263 | 264 |
264 if (ScrollAnimator* scrollAnimator = existingScrollAnimator()) | 265 if (ScrollAnimator* scrollAnimator = existingScrollAnimator()) |
265 scrollAnimator->cancelAnimations(); | 266 scrollAnimator->cancelAnimations(); |
| 267 cancelProgrammaticScrollAnimation(); |
266 | 268 |
267 detachCustomScrollbars(); | 269 detachCustomScrollbars(); |
268 // When the view is no longer associated with a frame, it needs to be remove
d from the ax object cache | 270 // When the view is no longer associated with a frame, it needs to be remove
d from the ax object cache |
269 // right now, otherwise it won't be able to reach the topDocument()'s axObje
ct cache later. | 271 // right now, otherwise it won't be able to reach the topDocument()'s axObje
ct cache later. |
270 removeFromAXObjectCache(); | 272 removeFromAXObjectCache(); |
271 | 273 |
272 if (m_frame->page()) { | 274 if (m_frame->page()) { |
273 if (ScrollingCoordinator* scrollingCoordinator = m_frame->page()->scroll
ingCoordinator()) | 275 if (ScrollingCoordinator* scrollingCoordinator = m_frame->page()->scroll
ingCoordinator()) |
274 scrollingCoordinator->willDestroyScrollableArea(this); | 276 scrollingCoordinator->willDestroyScrollableArea(this); |
275 } | 277 } |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
383 | 385 |
384 bool FrameView::scheduleAnimation() | 386 bool FrameView::scheduleAnimation() |
385 { | 387 { |
386 if (HostWindow* window = hostWindow()) { | 388 if (HostWindow* window = hostWindow()) { |
387 window->scheduleAnimation(); | 389 window->scheduleAnimation(); |
388 return true; | 390 return true; |
389 } | 391 } |
390 return false; | 392 return false; |
391 } | 393 } |
392 | 394 |
| 395 void FrameView::serviceScrollAnimations(double monotonicTime) |
| 396 { |
| 397 ScrollableArea::serviceScrollAnimations(monotonicTime); |
| 398 |
| 399 if (!m_animatingScrollableAreas || m_animatingScrollableAreas->isEmpty()) |
| 400 return; |
| 401 |
| 402 // We need to iterate over a copy of m_animatingScrollableAreas, since Scrol
lableAreas |
| 403 // may deregister themselves during the iteration. |
| 404 Vector<ScrollableArea*> animatingScrollableAreas; |
| 405 copyToVector(*m_animatingScrollableAreas, animatingScrollableAreas); |
| 406 for (size_t i = 0; i < animatingScrollableAreas.size(); ++i) |
| 407 animatingScrollableAreas[i]->serviceScrollAnimations(monotonicTime); |
| 408 } |
| 409 |
393 Page* FrameView::page() const | 410 Page* FrameView::page() const |
394 { | 411 { |
395 return frame().page(); | 412 return frame().page(); |
396 } | 413 } |
397 | 414 |
398 RenderView* FrameView::renderView() const | 415 RenderView* FrameView::renderView() const |
399 { | 416 { |
400 return frame().contentRenderer(); | 417 return frame().contentRenderer(); |
401 } | 418 } |
402 | 419 |
(...skipping 1159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1562 bounds.y() - centeringOffsetY - targetRect.y()); | 1579 bounds.y() - centeringOffsetY - targetRect.y()); |
1563 | 1580 |
1564 setScrollPosition(targetOffset); | 1581 setScrollPosition(targetOffset); |
1565 | 1582 |
1566 if (pinchVirtualViewportEnabled) { | 1583 if (pinchVirtualViewportEnabled) { |
1567 IntPoint remainder = IntPoint(targetOffset - scrollPosition()); | 1584 IntPoint remainder = IntPoint(targetOffset - scrollPosition()); |
1568 m_frame->page()->frameHost().pinchViewport().move(remainder); | 1585 m_frame->page()->frameHost().pinchViewport().move(remainder); |
1569 } | 1586 } |
1570 } | 1587 } |
1571 | 1588 |
1572 void FrameView::setScrollPosition(const IntPoint& scrollPoint) | 1589 void FrameView::setScrollPosition(const IntPoint& scrollPoint, ScrollBehavior sc
rollBehavior) |
1573 { | 1590 { |
| 1591 cancelProgrammaticScrollAnimation(); |
1574 TemporaryChange<bool> changeInProgrammaticScroll(m_inProgrammaticScroll, tru
e); | 1592 TemporaryChange<bool> changeInProgrammaticScroll(m_inProgrammaticScroll, tru
e); |
1575 m_maintainScrollPositionAnchor = nullptr; | 1593 m_maintainScrollPositionAnchor = nullptr; |
1576 | 1594 |
1577 IntPoint newScrollPosition = adjustScrollPositionWithinRange(scrollPoint); | 1595 IntPoint newScrollPosition = adjustScrollPositionWithinRange(scrollPoint); |
1578 | 1596 |
1579 if (newScrollPosition == scrollPosition()) | 1597 if (newScrollPosition == scrollPosition()) |
1580 return; | 1598 return; |
1581 | 1599 |
1582 ScrollView::setScrollPosition(newScrollPosition); | 1600 if (scrollBehavior == ScrollBehaviorAuto) |
| 1601 scrollBehavior = m_frame->document()->documentElement()->renderer()->sty
le()->scrollBehavior(); |
| 1602 ScrollView::setScrollPosition(newScrollPosition, scrollBehavior); |
1583 } | 1603 } |
1584 | 1604 |
1585 void FrameView::setScrollPositionNonProgrammatically(const IntPoint& scrollPoint
) | 1605 void FrameView::setScrollPositionNonProgrammatically(const IntPoint& scrollPoint
) |
1586 { | 1606 { |
1587 IntPoint newScrollPosition = adjustScrollPositionWithinRange(scrollPoint); | 1607 IntPoint newScrollPosition = adjustScrollPositionWithinRange(scrollPoint); |
1588 | 1608 |
1589 if (newScrollPosition == scrollPosition()) | 1609 if (newScrollPosition == scrollPosition()) |
1590 return; | 1610 return; |
1591 | 1611 |
1592 TemporaryChange<bool> changeInProgrammaticScroll(m_inProgrammaticScroll, fal
se); | 1612 TemporaryChange<bool> changeInProgrammaticScroll(m_inProgrammaticScroll, fal
se); |
(...skipping 1586 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3179 m_scrollableAreas->add(scrollableArea); | 3199 m_scrollableAreas->add(scrollableArea); |
3180 } | 3200 } |
3181 | 3201 |
3182 void FrameView::removeScrollableArea(ScrollableArea* scrollableArea) | 3202 void FrameView::removeScrollableArea(ScrollableArea* scrollableArea) |
3183 { | 3203 { |
3184 if (!m_scrollableAreas) | 3204 if (!m_scrollableAreas) |
3185 return; | 3205 return; |
3186 m_scrollableAreas->remove(scrollableArea); | 3206 m_scrollableAreas->remove(scrollableArea); |
3187 } | 3207 } |
3188 | 3208 |
| 3209 bool FrameView::addAnimatingScrollableArea(ScrollableArea* scrollableArea) |
| 3210 { |
| 3211 ASSERT(scrollableArea); |
| 3212 if (!m_animatingScrollableAreas) |
| 3213 m_animatingScrollableAreas = adoptPtr(new ScrollableAreaSet); |
| 3214 return m_animatingScrollableAreas->add(scrollableArea).isNewEntry; |
| 3215 } |
| 3216 |
| 3217 bool FrameView::removeAnimatingScrollableArea(ScrollableArea* scrollableArea) |
| 3218 { |
| 3219 if (!m_animatingScrollableAreas) |
| 3220 return false; |
| 3221 |
| 3222 ScrollableAreaSet::iterator it = m_animatingScrollableAreas->find(scrollable
Area); |
| 3223 if (it == m_animatingScrollableAreas->end()) |
| 3224 return false; |
| 3225 |
| 3226 m_animatingScrollableAreas->remove(it); |
| 3227 return true; |
| 3228 } |
| 3229 |
3189 void FrameView::removeChild(Widget* widget) | 3230 void FrameView::removeChild(Widget* widget) |
3190 { | 3231 { |
3191 if (widget->isFrameView()) | 3232 if (widget->isFrameView()) |
3192 removeScrollableArea(toFrameView(widget)); | 3233 removeScrollableArea(toFrameView(widget)); |
3193 | 3234 |
3194 ScrollView::removeChild(widget); | 3235 ScrollView::removeChild(widget); |
3195 } | 3236 } |
3196 | 3237 |
3197 bool FrameView::wheelEvent(const PlatformWheelEvent& wheelEvent) | 3238 bool FrameView::wheelEvent(const PlatformWheelEvent& wheelEvent) |
3198 { | 3239 { |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3276 void FrameView::willRemoveScrollbar(Scrollbar* scrollbar, ScrollbarOrientation o
rientation) | 3317 void FrameView::willRemoveScrollbar(Scrollbar* scrollbar, ScrollbarOrientation o
rientation) |
3277 { | 3318 { |
3278 ScrollableArea::willRemoveScrollbar(scrollbar, orientation); | 3319 ScrollableArea::willRemoveScrollbar(scrollbar, orientation); |
3279 if (AXObjectCache* cache = axObjectCache()) { | 3320 if (AXObjectCache* cache = axObjectCache()) { |
3280 cache->remove(scrollbar); | 3321 cache->remove(scrollbar); |
3281 cache->handleScrollbarUpdate(this); | 3322 cache->handleScrollbarUpdate(this); |
3282 } | 3323 } |
3283 } | 3324 } |
3284 | 3325 |
3285 } // namespace WebCore | 3326 } // namespace WebCore |
OLD | NEW |