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

Side by Side Diff: third_party/WebKit/Source/core/layout/LayoutBox.cpp

Issue 2911103002: Revert of Implement Element.scrollIntoView for scroll-behavior: smooth. (Closed)
Patch Set: Created 3 years, 6 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com) 4 * (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com)
5 * (C) 2005, 2006 Samuel Weinig (sam.weinig@gmail.com) 5 * (C) 2005, 2006 Samuel Weinig (sam.weinig@gmail.com)
6 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. 6 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc.
7 * All rights reserved. 7 * All rights reserved.
8 * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved. 8 * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved.
9 * 9 *
10 * This library is free software; you can redistribute it and/or 10 * This library is free software; you can redistribute it and/or
(...skipping 644 matching lines...) Expand 10 before | Expand all | Expand 10 after
655 frame_element_base->ScrollingMode() == kScrollbarAlwaysOff; 655 frame_element_base->ScrollingMode() == kScrollbarAlwaysOff;
656 } 656 }
657 } 657 }
658 return false; 658 return false;
659 } 659 }
660 660
661 void LayoutBox::ScrollRectToVisible(const LayoutRect& rect, 661 void LayoutBox::ScrollRectToVisible(const LayoutRect& rect,
662 const ScrollAlignment& align_x, 662 const ScrollAlignment& align_x,
663 const ScrollAlignment& align_y, 663 const ScrollAlignment& align_y,
664 ScrollType scroll_type, 664 ScrollType scroll_type,
665 bool make_visible_in_visual_viewport, 665 bool make_visible_in_visual_viewport) {
666 ScrollBehavior scroll_behavior) {
667 DCHECK(scroll_type == kProgrammaticScroll || scroll_type == kUserScroll); 666 DCHECK(scroll_type == kProgrammaticScroll || scroll_type == kUserScroll);
668 // Presumably the same issue as in setScrollTop. See crbug.com/343132. 667 // Presumably the same issue as in setScrollTop. See crbug.com/343132.
669 DisableCompositingQueryAsserts disabler; 668 DisableCompositingQueryAsserts disabler;
670 669
671 LayoutRect rect_to_scroll = rect; 670 LayoutRect rect_to_scroll = rect;
672 if (rect_to_scroll.Width() <= 0) 671 if (rect_to_scroll.Width() <= 0)
673 rect_to_scroll.SetWidth(LayoutUnit(1)); 672 rect_to_scroll.SetWidth(LayoutUnit(1));
674 if (rect_to_scroll.Height() <= 0) 673 if (rect_to_scroll.Height() <= 0)
675 rect_to_scroll.SetHeight(LayoutUnit(1)); 674 rect_to_scroll.SetHeight(LayoutUnit(1));
676 675
677 LayoutBox* parent_box = nullptr; 676 LayoutBox* parent_box = nullptr;
678 LayoutRect new_rect = rect_to_scroll; 677 LayoutRect new_rect = rect_to_scroll;
679 678
680 bool restricted_by_line_clamp = false; 679 bool restricted_by_line_clamp = false;
681 if (ContainingBlock()) { 680 if (ContainingBlock()) {
682 parent_box = ContainingBlock(); 681 parent_box = ContainingBlock();
683 restricted_by_line_clamp = 682 restricted_by_line_clamp =
684 !ContainingBlock()->Style()->LineClamp().IsNone(); 683 !ContainingBlock()->Style()->LineClamp().IsNone();
685 } 684 }
686 685
687 bool is_smooth = scroll_behavior == kScrollBehaviorSmooth ||
688 (scroll_behavior == kScrollBehaviorAuto &&
689 Style()->GetScrollBehavior() == kScrollBehaviorSmooth);
690
691 if (HasOverflowClip() && !restricted_by_line_clamp) { 686 if (HasOverflowClip() && !restricted_by_line_clamp) {
692 // Don't scroll to reveal an overflow layer that is restricted by the 687 // Don't scroll to reveal an overflow layer that is restricted by the
693 // -webkit-line-clamp property. This will prevent us from revealing text 688 // -webkit-line-clamp property. This will prevent us from revealing text
694 // hidden by the slider in Safari RSS. 689 // hidden by the slider in Safari RSS.
695 // TODO(eae): We probably don't need this any more as we don't share any 690 // TODO(eae): We probably don't need this any more as we don't share any
696 // code with the Safari RSS reeder. 691 // code with the Safari RSS reeder.
697 new_rect = GetScrollableArea()->ScrollIntoView( 692 new_rect = GetScrollableArea()->ScrollIntoView(rect_to_scroll, align_x,
698 rect_to_scroll, align_x, align_y, is_smooth, scroll_type); 693 align_y, scroll_type);
699 if (new_rect.IsEmpty()) 694 if (new_rect.IsEmpty())
700 return; 695 return;
701 } else if (!parent_box && CanBeProgramaticallyScrolled()) { 696 } else if (!parent_box && CanBeProgramaticallyScrolled()) {
702 if (LocalFrameView* frame_view = this->GetFrameView()) { 697 if (LocalFrameView* frame_view = this->GetFrameView()) {
703 HTMLFrameOwnerElement* owner_element = GetDocument().LocalOwner(); 698 HTMLFrameOwnerElement* owner_element = GetDocument().LocalOwner();
704 if (!IsDisallowedAutoscroll(owner_element, frame_view)) { 699 if (!IsDisallowedAutoscroll(owner_element, frame_view)) {
705 if (make_visible_in_visual_viewport) { 700 if (make_visible_in_visual_viewport) {
706 frame_view->GetScrollableArea()->ScrollIntoView( 701 frame_view->GetScrollableArea()->ScrollIntoView(
707 rect_to_scroll, align_x, align_y, is_smooth, scroll_type); 702 rect_to_scroll, align_x, align_y, scroll_type);
708 } else { 703 } else {
709 frame_view->LayoutViewportScrollableArea()->ScrollIntoView( 704 frame_view->LayoutViewportScrollableArea()->ScrollIntoView(
710 rect_to_scroll, align_x, align_y, is_smooth, scroll_type); 705 rect_to_scroll, align_x, align_y, scroll_type);
711 } 706 }
712 if (owner_element && owner_element->GetLayoutObject()) { 707 if (owner_element && owner_element->GetLayoutObject()) {
713 if (frame_view->SafeToPropagateScrollToParent()) { 708 if (frame_view->SafeToPropagateScrollToParent()) {
714 parent_box = owner_element->GetLayoutObject()->EnclosingBox(); 709 parent_box = owner_element->GetLayoutObject()->EnclosingBox();
715 LayoutView* parent_view = owner_element->GetLayoutObject()->View(); 710 LayoutView* parent_view = owner_element->GetLayoutObject()->View();
716 new_rect = EnclosingLayoutRect( 711 new_rect = EnclosingLayoutRect(
717 View() 712 View()
718 ->LocalToAncestorQuad( 713 ->LocalToAncestorQuad(
719 FloatRect(rect_to_scroll), parent_view, 714 FloatRect(rect_to_scroll), parent_view,
720 kUseTransforms | kTraverseDocumentBoundaries) 715 kUseTransforms | kTraverseDocumentBoundaries)
721 .BoundingBox()); 716 .BoundingBox());
722 } else { 717 } else {
723 parent_box = nullptr; 718 parent_box = nullptr;
724 } 719 }
725 } 720 }
726 } 721 }
727 } 722 }
728 } 723 }
729 724
730 // If we are fixed-position and stick to the viewport, it is useless to 725 // If we are fixed-position and stick to the viewport, it is useless to
731 // scroll the parent. 726 // scroll the parent.
732 if (Style()->GetPosition() == EPosition::kFixed && 727 if (Style()->GetPosition() == EPosition::kFixed &&
733 ContainerForFixedPosition() == View()) { 728 ContainerForFixedPosition() == View()) {
734 return; 729 return;
735 } 730 }
736 731
737 if (GetFrame()->GetPage()->GetAutoscrollController().AutoscrollInProgress()) 732 if (GetFrame()->GetPage()->GetAutoscrollController().AutoscrollInProgress())
738 parent_box = EnclosingScrollableBox(); 733 parent_box = EnclosingScrollableBox();
739 734
740 if (parent_box) { 735 if (parent_box)
741 parent_box->ScrollRectToVisible(new_rect, align_x, align_y, scroll_type, 736 parent_box->ScrollRectToVisible(new_rect, align_x, align_y, scroll_type,
742 make_visible_in_visual_viewport, 737 make_visible_in_visual_viewport);
743 scroll_behavior);
744 }
745 } 738 }
746 739
747 void LayoutBox::AbsoluteRects(Vector<IntRect>& rects, 740 void LayoutBox::AbsoluteRects(Vector<IntRect>& rects,
748 const LayoutPoint& accumulated_offset) const { 741 const LayoutPoint& accumulated_offset) const {
749 rects.push_back(PixelSnappedIntRect(accumulated_offset, Size())); 742 rects.push_back(PixelSnappedIntRect(accumulated_offset, Size()));
750 } 743 }
751 744
752 void LayoutBox::AbsoluteQuads(Vector<FloatQuad>& quads, 745 void LayoutBox::AbsoluteQuads(Vector<FloatQuad>& quads,
753 MapCoordinatesFlags mode) const { 746 MapCoordinatesFlags mode) const {
754 if (LayoutFlowThread* flow_thread = FlowThreadContainingBlock()) { 747 if (LayoutFlowThread* flow_thread = FlowThreadContainingBlock()) {
(...skipping 5145 matching lines...) Expand 10 before | Expand all | Expand 10 after
5900 void LayoutBox::MutableForPainting:: 5893 void LayoutBox::MutableForPainting::
5901 SavePreviousContentBoxSizeAndLayoutOverflowRect() { 5894 SavePreviousContentBoxSizeAndLayoutOverflowRect() {
5902 auto& rare_data = GetLayoutBox().EnsureRareData(); 5895 auto& rare_data = GetLayoutBox().EnsureRareData();
5903 rare_data.has_previous_content_box_size_and_layout_overflow_rect_ = true; 5896 rare_data.has_previous_content_box_size_and_layout_overflow_rect_ = true;
5904 rare_data.previous_content_box_size_ = GetLayoutBox().ContentBoxRect().Size(); 5897 rare_data.previous_content_box_size_ = GetLayoutBox().ContentBoxRect().Size();
5905 rare_data.previous_layout_overflow_rect_ = 5898 rare_data.previous_layout_overflow_rect_ =
5906 GetLayoutBox().LayoutOverflowRect(); 5899 GetLayoutBox().LayoutOverflowRect();
5907 } 5900 }
5908 5901
5909 } // namespace blink 5902 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/layout/LayoutBox.h ('k') | third_party/WebKit/Source/core/layout/LayoutListBox.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698