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

Side by Side Diff: Source/core/paint/DeprecatedPaintLayerScrollableArea.cpp

Issue 1295933003: Add overflow:auto scrollbars to child flex basis. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Add all tests, even failing ones Created 5 years, 4 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 | 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 624 matching lines...) Expand 10 before | Expand all | Expand 10 after
635 void DeprecatedPaintLayerScrollableArea::scrollToOffset(const DoubleSize& scroll Offset, ScrollOffsetClamping clamp, ScrollBehavior scrollBehavior) 635 void DeprecatedPaintLayerScrollableArea::scrollToOffset(const DoubleSize& scroll Offset, ScrollOffsetClamping clamp, ScrollBehavior scrollBehavior)
636 { 636 {
637 cancelProgrammaticScrollAnimation(); 637 cancelProgrammaticScrollAnimation();
638 DoubleSize newScrollOffset = clamp == ScrollOffsetClamped ? clampScrollOffse t(scrollOffset) : scrollOffset; 638 DoubleSize newScrollOffset = clamp == ScrollOffsetClamped ? clampScrollOffse t(scrollOffset) : scrollOffset;
639 if (newScrollOffset != adjustedScrollOffset()) { 639 if (newScrollOffset != adjustedScrollOffset()) {
640 DoublePoint origin(scrollOrigin()); 640 DoublePoint origin(scrollOrigin());
641 ScrollableArea::setScrollPosition(-origin + newScrollOffset, Programmati cScroll, scrollBehavior); 641 ScrollableArea::setScrollPosition(-origin + newScrollOffset, Programmati cScroll, scrollBehavior);
642 } 642 }
643 } 643 }
644 644
645 void DeprecatedPaintLayerScrollableArea::updateAfterLayout() 645 void DeprecatedPaintLayerScrollableArea::updateScrollDimensions(DoubleSize& scro llOffset, bool& autoHorizontalScrollBarChanged, bool& autoVerticalScrollBarChang ed)
646 { 646 {
647 ASSERT(box().hasOverflowClip()); 647 ASSERT(box().hasOverflowClip());
648 648
649 DoubleSize originalScrollOffset = adjustedScrollOffset(); 649 scrollOffset = adjustedScrollOffset();
650 computeScrollDimensions(); 650 computeScrollDimensions();
651 bool hasHorizontalOverflow = this->hasHorizontalOverflow();
652 bool hasVerticalOverflow = this->hasVerticalOverflow();
653 if (hasOverlayScrollbars()) {
654 if (!scrollSize(HorizontalScrollbar))
655 setHasHorizontalScrollbar(false);
656 if (!scrollSize(VerticalScrollbar))
657 setHasVerticalScrollbar(false);
658 }
659
660 // overflow:auto may need to lay out again if scrollbars got added/removed.
661 autoHorizontalScrollBarChanged = box().hasAutoHorizontalScrollbar() && (hasH orizontalScrollbar() != hasHorizontalOverflow);
662 autoVerticalScrollBarChanged = box().hasAutoVerticalScrollbar() && (hasVerti calScrollbar() != hasVerticalOverflow);
663 if (!visualViewportSuppliesScrollbars() && (autoHorizontalScrollBarChanged | | autoVerticalScrollBarChanged)) {
664 if (box().hasAutoHorizontalScrollbar())
665 setHasHorizontalScrollbar(hasHorizontalOverflow);
666 if (box().hasAutoVerticalScrollbar())
667 setHasVerticalScrollbar(hasVerticalOverflow);
668 }
669 }
670
671 void DeprecatedPaintLayerScrollableArea::finalizeScrollDimensions(const DoubleSi ze& originalScrollOffset, bool autoHorizontalScrollBarChanged, bool autoVertical ScrollBarChanged)
672 {
673 ASSERT(box().hasOverflowClip());
651 674
652 // Layout may cause us to be at an invalid scroll position. In this case we need 675 // Layout may cause us to be at an invalid scroll position. In this case we need
653 // to pull our scroll offsets back to the max (or push them up to the min). 676 // to pull our scroll offsets back to the max (or push them up to the min).
654 DoubleSize clampedScrollOffset = clampScrollOffset(adjustedScrollOffset()); 677 DoubleSize clampedScrollOffset = clampScrollOffset(adjustedScrollOffset());
655 if (clampedScrollOffset != adjustedScrollOffset()) 678 if (clampedScrollOffset != adjustedScrollOffset())
656 scrollToOffset(clampedScrollOffset); 679 scrollToOffset(clampedScrollOffset);
657 680
658 if (originalScrollOffset != adjustedScrollOffset()) { 681 if (originalScrollOffset != adjustedScrollOffset()) {
659 DoublePoint origin(scrollOrigin()); 682 DoublePoint origin(scrollOrigin());
660 scrollPositionChanged(-origin + adjustedScrollOffset(), ProgrammaticScro ll); 683 scrollPositionChanged(-origin + adjustedScrollOffset(), ProgrammaticScro ll);
661 } 684 }
662 685
663 bool hasHorizontalOverflow = this->hasHorizontalOverflow(); 686 bool hasHorizontalOverflow = this->hasHorizontalOverflow();
664 bool hasVerticalOverflow = this->hasVerticalOverflow(); 687 bool hasVerticalOverflow = this->hasVerticalOverflow();
665 688
666 { 689 {
667 // Hits in compositing/overflow/automatically-opt-into-composited-scroll ing-after-style-change.html. 690 // Hits in compositing/overflow/automatically-opt-into-composited-scroll ing-after-style-change.html.
668 DisableCompositingQueryAsserts disabler; 691 DisableCompositingQueryAsserts disabler;
669 692
670 // overflow:scroll should just enable/disable. 693 // overflow:scroll should just enable/disable.
671 if (box().style()->overflowX() == OSCROLL && horizontalScrollbar()) 694 if (box().style()->overflowX() == OSCROLL && horizontalScrollbar())
672 horizontalScrollbar()->setEnabled(hasHorizontalOverflow); 695 horizontalScrollbar()->setEnabled(hasHorizontalOverflow);
673 if (box().style()->overflowY() == OSCROLL && verticalScrollbar()) 696 if (box().style()->overflowY() == OSCROLL && verticalScrollbar())
674 verticalScrollbar()->setEnabled(hasVerticalOverflow); 697 verticalScrollbar()->setEnabled(hasVerticalOverflow);
675 } 698 }
676 if (hasOverlayScrollbars()) {
677 if (!scrollSize(HorizontalScrollbar))
678 setHasHorizontalScrollbar(false);
679 if (!scrollSize(VerticalScrollbar))
680 setHasVerticalScrollbar(false);
681 }
682 // overflow:auto may need to lay out again if scrollbars got added/removed.
683 bool autoHorizontalScrollBarChanged = box().hasAutoHorizontalScrollbar() && (hasHorizontalScrollbar() != hasHorizontalOverflow);
684 bool autoVerticalScrollBarChanged = box().hasAutoVerticalScrollbar() && (has VerticalScrollbar() != hasVerticalOverflow);
685 699
686 if (!visualViewportSuppliesScrollbars() && (autoHorizontalScrollBarChanged | | autoVerticalScrollBarChanged)) { 700 if (!visualViewportSuppliesScrollbars() && (autoHorizontalScrollBarChanged | | autoVerticalScrollBarChanged)) {
687 if (box().hasAutoHorizontalScrollbar())
688 setHasHorizontalScrollbar(hasHorizontalOverflow);
689 if (box().hasAutoVerticalScrollbar())
690 setHasVerticalScrollbar(hasVerticalOverflow);
691
692 if (hasVerticalOverflow || hasHorizontalOverflow) 701 if (hasVerticalOverflow || hasHorizontalOverflow)
693 updateScrollCornerStyle(); 702 updateScrollCornerStyle();
694 703
695 layer()->updateSelfPaintingLayer(); 704 layer()->updateSelfPaintingLayer();
696 705
697 // Force an update since we know the scrollbars have changed things. 706 // Force an update since we know the scrollbars have changed things.
698 if (box().document().hasAnnotatedRegions()) 707 if (box().document().hasAnnotatedRegions())
699 box().document().setAnnotatedRegionsDirty(true); 708 box().document().setAnnotatedRegionsDirty(true);
700 709
701 if (box().style()->overflowX() == OAUTO || box().style()->overflowY() == OAUTO) { 710 if (box().style()->overflowX() == OAUTO || box().style()->overflowY() == OAUTO) {
(...skipping 29 matching lines...) Expand all
731 } 740 }
732 } 741 }
733 742
734 bool hasOverflow = hasScrollableHorizontalOverflow() || hasScrollableVertica lOverflow(); 743 bool hasOverflow = hasScrollableHorizontalOverflow() || hasScrollableVertica lOverflow();
735 updateScrollableAreaSet(hasOverflow); 744 updateScrollableAreaSet(hasOverflow);
736 745
737 DisableCompositingQueryAsserts disabler; 746 DisableCompositingQueryAsserts disabler;
738 positionOverflowControls(); 747 positionOverflowControls();
739 } 748 }
740 749
750 void DeprecatedPaintLayerScrollableArea::updateAfterLayout()
751 {
752 DoubleSize originalScrollOffset;
753 bool autoHorizontalScrollBarChanged;
leviw_travelin_and_unemployed 2015/08/20 18:53:06 Kinda sucks that these are necessary and un-used h
szager1 2015/08/20 21:53:29 But they are used: updateScrollDimensions will pop
754 bool autoVerticalScrollBarChanged;
755 updateScrollDimensions(originalScrollOffset, autoHorizontalScrollBarChanged, autoVerticalScrollBarChanged);
756 finalizeScrollDimensions(originalScrollOffset, autoHorizontalScrollBarChange d, autoVerticalScrollBarChanged);
757 }
758
741 ScrollBehavior DeprecatedPaintLayerScrollableArea::scrollBehaviorStyle() const 759 ScrollBehavior DeprecatedPaintLayerScrollableArea::scrollBehaviorStyle() const
742 { 760 {
743 return box().style()->scrollBehavior(); 761 return box().style()->scrollBehavior();
744 } 762 }
745 763
746 bool DeprecatedPaintLayerScrollableArea::hasHorizontalOverflow() const 764 bool DeprecatedPaintLayerScrollableArea::hasHorizontalOverflow() const
747 { 765 {
748 return pixelSnappedScrollWidth() > box().pixelSnappedClientWidth(); 766 return pixelSnappedScrollWidth() > box().pixelSnappedClientWidth();
749 } 767 }
750 768
(...skipping 700 matching lines...) Expand 10 before | Expand all | Expand 10 after
1451 return false; 1469 return false;
1452 1470
1453 LocalFrame* frame = box().frame(); 1471 LocalFrame* frame = box().frame();
1454 if (!frame || !frame->isMainFrame() || !frame->settings()) 1472 if (!frame || !frame->isMainFrame() || !frame->settings())
1455 return false; 1473 return false;
1456 1474
1457 return frame->settings()->viewportMetaEnabled(); 1475 return frame->settings()->viewportMetaEnabled();
1458 } 1476 }
1459 1477
1460 } // namespace blink 1478 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698