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

Side by Side Diff: Source/core/rendering/RenderLayerScrollableArea.cpp

Issue 792513004: Implement CSSOM smooth scroll for Elements (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years 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 | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserved. 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserved.
3 * 3 *
4 * Portions are Copyright (C) 1998 Netscape Communications Corporation. 4 * Portions are Copyright (C) 1998 Netscape Communications Corporation.
5 * 5 *
6 * Other contributors: 6 * Other contributors:
7 * Robert O'Callahan <roc+@cs.cmu.edu> 7 * Robert O'Callahan <roc+@cs.cmu.edu>
8 * David Baron <dbaron@fas.harvard.edu> 8 * David Baron <dbaron@fas.harvard.edu>
9 * Christian Biesinger <cbiesinger@web.de> 9 * Christian Biesinger <cbiesinger@web.de>
10 * Randall Jesup <rjesup@wgate.com> 10 * Randall Jesup <rjesup@wgate.com>
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 RenderLayerScrollableArea::~RenderLayerScrollableArea() 108 RenderLayerScrollableArea::~RenderLayerScrollableArea()
109 { 109 {
110 if (inResizeMode() && !box().documentBeingDestroyed()) { 110 if (inResizeMode() && !box().documentBeingDestroyed()) {
111 if (LocalFrame* frame = box().frame()) 111 if (LocalFrame* frame = box().frame())
112 frame->eventHandler().resizeScrollableAreaDestroyed(); 112 frame->eventHandler().resizeScrollableAreaDestroyed();
113 } 113 }
114 114
115 if (LocalFrame* frame = box().frame()) { 115 if (LocalFrame* frame = box().frame()) {
116 if (FrameView* frameView = frame->view()) { 116 if (FrameView* frameView = frame->view()) {
117 frameView->removeScrollableArea(this); 117 frameView->removeScrollableArea(this);
118 frameView->removeAnimatingScrollableArea(this);
118 } 119 }
119 } 120 }
120 121
121 if (box().frame() && box().frame()->page()) { 122 if (box().frame() && box().frame()->page()) {
122 if (ScrollingCoordinator* scrollingCoordinator = box().frame()->page()-> scrollingCoordinator()) 123 if (ScrollingCoordinator* scrollingCoordinator = box().frame()->page()-> scrollingCoordinator())
123 scrollingCoordinator->willDestroyScrollableArea(this); 124 scrollingCoordinator->willDestroyScrollableArea(this);
124 } 125 }
125 126
126 if (!box().documentBeingDestroyed()) { 127 if (!box().documentBeingDestroyed()) {
127 Node* node = box().node(); 128 Node* node = box().node();
(...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after
494 if (!view) 495 if (!view)
495 return false; 496 return false;
496 return view->frameView()->scrollbarsCanBeActive(); 497 return view->frameView()->scrollbarsCanBeActive();
497 } 498 }
498 499
499 IntRect RenderLayerScrollableArea::scrollableAreaBoundingBox() const 500 IntRect RenderLayerScrollableArea::scrollableAreaBoundingBox() const
500 { 501 {
501 return box().absoluteBoundingBoxRect(); 502 return box().absoluteBoundingBoxRect();
502 } 503 }
503 504
505 void RenderLayerScrollableArea::registerForAnimation()
506 {
507 if (LocalFrame* frame = box().frame()) {
508 if (FrameView* frameView = frame->view())
509 frameView->addAnimatingScrollableArea(this);
510 }
511 }
512
513 void RenderLayerScrollableArea::deregisterForAnimation()
514 {
515 if (LocalFrame* frame = box().frame()) {
516 if (FrameView* frameView = frame->view())
517 frameView->removeAnimatingScrollableArea(this);
518 }
519 }
520
504 bool RenderLayerScrollableArea::userInputScrollable(ScrollbarOrientation orienta tion) const 521 bool RenderLayerScrollableArea::userInputScrollable(ScrollbarOrientation orienta tion) const
505 { 522 {
506 if (box().isIntristicallyScrollable(orientation)) 523 if (box().isIntristicallyScrollable(orientation))
507 return true; 524 return true;
508 525
509 EOverflow overflowStyle = (orientation == HorizontalScrollbar) ? 526 EOverflow overflowStyle = (orientation == HorizontalScrollbar) ?
510 box().style()->overflowX() : box().style()->overflowY(); 527 box().style()->overflowX() : box().style()->overflowY();
511 return (overflowStyle == OSCROLL || overflowStyle == OAUTO || overflowStyle == OOVERLAY); 528 return (overflowStyle == OSCROLL || overflowStyle == OAUTO || overflowStyle == OOVERLAY);
512 } 529 }
513 530
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
565 m_scrollDimensionsDirty = false; 582 m_scrollDimensionsDirty = false;
566 583
567 m_overflowRect = box().layoutOverflowRect(); 584 m_overflowRect = box().layoutOverflowRect();
568 box().flipForWritingMode(m_overflowRect); 585 box().flipForWritingMode(m_overflowRect);
569 586
570 int scrollableLeftOverflow = m_overflowRect.x() - box().borderLeft() - (box( ).style()->shouldPlaceBlockDirectionScrollbarOnLogicalLeft() ? box().verticalScr ollbarWidth() : 0); 587 int scrollableLeftOverflow = m_overflowRect.x() - box().borderLeft() - (box( ).style()->shouldPlaceBlockDirectionScrollbarOnLogicalLeft() ? box().verticalScr ollbarWidth() : 0);
571 int scrollableTopOverflow = m_overflowRect.y() - box().borderTop(); 588 int scrollableTopOverflow = m_overflowRect.y() - box().borderTop();
572 setScrollOrigin(IntPoint(-scrollableLeftOverflow, -scrollableTopOverflow)); 589 setScrollOrigin(IntPoint(-scrollableLeftOverflow, -scrollableTopOverflow));
573 } 590 }
574 591
575 void RenderLayerScrollableArea::scrollToOffset(const DoubleSize& scrollOffset, S crollOffsetClamping clamp) 592 void RenderLayerScrollableArea::scrollToOffset(const DoubleSize& scrollOffset, S crollOffsetClamping clamp, ScrollBehavior scrollBehavior)
576 { 593 {
594 cancelProgrammaticScrollAnimation();
577 DoubleSize newScrollOffset = clamp == ScrollOffsetClamped ? clampScrollOffse t(scrollOffset) : scrollOffset; 595 DoubleSize newScrollOffset = clamp == ScrollOffsetClamped ? clampScrollOffse t(scrollOffset) : scrollOffset;
578 if (newScrollOffset != adjustedScrollOffset()) { 596 if (newScrollOffset != adjustedScrollOffset()) {
597 if (scrollBehavior == ScrollBehaviorAuto)
598 scrollBehavior = box().style()->scrollBehavior();
579 DoublePoint origin(scrollOrigin()); 599 DoublePoint origin(scrollOrigin());
580 // FIXME: Make scrollToOffsetWithoutAnimation take DoublePoint. crbug.co m/414283. 600 if (scrollBehavior == ScrollBehaviorSmooth) {
581 scrollToOffsetWithoutAnimation(toFloatPoint(-origin + newScrollOffset)); 601 // FIXME: Make programmaticallyScrollSmoothlyToOffset take DoublePoi nt. crbug.com/243871.
602 programmaticallyScrollSmoothlyToOffset(toFloatPoint(-origin + newScr ollOffset));
603 } else {
604 // FIXME: Make scrollToOffsetWithoutAnimation take DoublePoint. crbu g.com/414283.
605 scrollToOffsetWithoutAnimation(toFloatPoint(-origin + newScrollOffse t));
606 }
582 } 607 }
583 } 608 }
584 609
585 void RenderLayerScrollableArea::updateAfterLayout() 610 void RenderLayerScrollableArea::updateAfterLayout()
586 { 611 {
587 m_scrollDimensionsDirty = true; 612 m_scrollDimensionsDirty = true;
588 DoubleSize originalScrollOffset = adjustedScrollOffset(); 613 DoubleSize originalScrollOffset = adjustedScrollOffset();
589 614
590 computeScrollDimensions(); 615 computeScrollDimensions();
591 616
(...skipping 738 matching lines...) Expand 10 before | Expand all | Expand 10 after
1330 void RenderLayerScrollableArea::setTopmostScrollChild(RenderLayer* scrollChild) 1355 void RenderLayerScrollableArea::setTopmostScrollChild(RenderLayer* scrollChild)
1331 { 1356 {
1332 // We only want to track the topmost scroll child for scrollable areas with 1357 // We only want to track the topmost scroll child for scrollable areas with
1333 // overlay scrollbars. 1358 // overlay scrollbars.
1334 if (!hasOverlayScrollbars()) 1359 if (!hasOverlayScrollbars())
1335 return; 1360 return;
1336 m_nextTopmostScrollChild = scrollChild; 1361 m_nextTopmostScrollChild = scrollChild;
1337 } 1362 }
1338 1363
1339 } // namespace blink 1364 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/rendering/RenderLayerScrollableArea.h ('k') | Source/platform/scroll/ProgrammaticScrollAnimator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698