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

Side by Side Diff: third_party/WebKit/Source/core/frame/FrameView.cpp

Issue 2900513002: Move CalculateScrollbarModes from FrameView to LayoutView. (Closed)
Patch Set: Created 3 years, 7 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) 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 764 matching lines...) Expand 10 before | Expand all | Expand 10 after
775 775
776 void FrameView::AdjustViewSizeAndLayout() { 776 void FrameView::AdjustViewSizeAndLayout() {
777 AdjustViewSize(); 777 AdjustViewSize();
778 if (NeedsLayout()) { 778 if (NeedsLayout()) {
779 AutoReset<bool> suppress_adjust_view_size(&suppress_adjust_view_size_, 779 AutoReset<bool> suppress_adjust_view_size(&suppress_adjust_view_size_,
780 true); 780 true);
781 UpdateLayout(); 781 UpdateLayout();
782 } 782 }
783 } 783 }
784 784
785 void FrameView::CalculateScrollbarModesFromOverflowStyle(
786 const ComputedStyle* style,
787 ScrollbarMode& h_mode,
788 ScrollbarMode& v_mode) const {
789 h_mode = v_mode = kScrollbarAuto;
790
791 EOverflow overflow_x = style->OverflowX();
792 EOverflow overflow_y = style->OverflowY();
793
794 if (!ShouldIgnoreOverflowHidden()) {
795 if (overflow_x == EOverflow::kHidden)
796 h_mode = kScrollbarAlwaysOff;
797 if (overflow_y == EOverflow::kHidden)
798 v_mode = kScrollbarAlwaysOff;
799 }
800
801 if (overflow_x == EOverflow::kScroll)
802 h_mode = kScrollbarAlwaysOn;
803 if (overflow_y == EOverflow::kScroll)
804 v_mode = kScrollbarAlwaysOn;
805 }
806
807 void FrameView::CalculateScrollbarModes(ScrollbarMode& h_mode,
808 ScrollbarMode& v_mode) const {
809 #define RETURN_SCROLLBAR_MODE(mode) \
810 { \
811 h_mode = v_mode = mode; \
812 return; \
813 }
814
815 // Setting scrolling="no" on an iframe element disables scrolling.
816 if (frame_->Owner() &&
817 frame_->Owner()->ScrollingMode() == kScrollbarAlwaysOff)
818 RETURN_SCROLLBAR_MODE(kScrollbarAlwaysOff);
819
820 // Framesets can't scroll.
821 Node* body = frame_->GetDocument()->body();
822 if (isHTMLFrameSetElement(body) && body->GetLayoutObject())
823 RETURN_SCROLLBAR_MODE(kScrollbarAlwaysOff);
824
825 // Scrollbars can be disabled by FrameView::setCanHaveScrollbars.
826 if (!can_have_scrollbars_)
827 RETURN_SCROLLBAR_MODE(kScrollbarAlwaysOff);
828
829 // This will be the LayoutObject for either the body element or the html
830 // element (see Document::viewportDefiningElement).
831 LayoutObject* viewport = ViewportLayoutObject();
832 if (!viewport || !viewport->Style())
833 RETURN_SCROLLBAR_MODE(kScrollbarAuto);
834
835 if (viewport->IsSVGRoot()) {
836 // Don't allow overflow to affect <img> and css backgrounds
837 if (ToLayoutSVGRoot(viewport)->IsEmbeddedThroughSVGImage())
838 RETURN_SCROLLBAR_MODE(kScrollbarAuto);
839
840 // FIXME: evaluate if we can allow overflow for these cases too.
841 // Overflow is always hidden when stand-alone SVG documents are embedded.
842 if (ToLayoutSVGRoot(viewport)
843 ->IsEmbeddedThroughFrameContainingSVGDocument())
844 RETURN_SCROLLBAR_MODE(kScrollbarAlwaysOff);
845 }
846
847 CalculateScrollbarModesFromOverflowStyle(viewport->Style(), h_mode, v_mode);
848
849 #undef RETURN_SCROLLBAR_MODE
850 }
851
852 void FrameView::UpdateAcceleratedCompositingSettings() { 785 void FrameView::UpdateAcceleratedCompositingSettings() {
853 if (LayoutViewItem layout_view_item = this->GetLayoutViewItem()) 786 if (LayoutViewItem layout_view_item = this->GetLayoutViewItem())
854 layout_view_item.Compositor()->UpdateAcceleratedCompositingSettings(); 787 layout_view_item.Compositor()->UpdateAcceleratedCompositingSettings();
855 } 788 }
856 789
857 void FrameView::RecalcOverflowAfterStyleChange() { 790 void FrameView::RecalcOverflowAfterStyleChange() {
858 LayoutViewItem layout_view_item = this->GetLayoutViewItem(); 791 LayoutViewItem layout_view_item = this->GetLayoutViewItem();
859 CHECK(!layout_view_item.IsNull()); 792 CHECK(!layout_view_item.IsNull());
860 if (!layout_view_item.NeedsOverflowRecalcAfterStyleChange()) 793 if (!layout_view_item.NeedsOverflowRecalcAfterStyleChange())
861 return; 794 return;
(...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after
1264 body->GetLayoutObject()->SetChildNeedsLayout(); 1197 body->GetLayoutObject()->SetChildNeedsLayout();
1265 } else if (isHTMLBodyElement(*body)) { 1198 } else if (isHTMLBodyElement(*body)) {
1266 if (!first_layout_ && size_.Height() != GetLayoutSize().Height() && 1199 if (!first_layout_ && size_.Height() != GetLayoutSize().Height() &&
1267 body->GetLayoutObject()->EnclosingBox()->StretchesToViewport()) 1200 body->GetLayoutObject()->EnclosingBox()->StretchesToViewport())
1268 body->GetLayoutObject()->SetChildNeedsLayout(); 1201 body->GetLayoutObject()->SetChildNeedsLayout();
1269 } 1202 }
1270 } 1203 }
1271 1204
1272 ScrollbarMode h_mode; 1205 ScrollbarMode h_mode;
1273 ScrollbarMode v_mode; 1206 ScrollbarMode v_mode;
1274 CalculateScrollbarModes(h_mode, v_mode); 1207 GetLayoutView()->CalculateScrollbarModes(h_mode, v_mode);
1275 1208
1276 // Now set our scrollbar state for the layout. 1209 // Now set our scrollbar state for the layout.
1277 ScrollbarMode current_h_mode = HorizontalScrollbarMode(); 1210 ScrollbarMode current_h_mode = HorizontalScrollbarMode();
1278 ScrollbarMode current_v_mode = VerticalScrollbarMode(); 1211 ScrollbarMode current_v_mode = VerticalScrollbarMode();
1279 1212
1280 if (first_layout_) { 1213 if (first_layout_) {
1281 SetScrollbarsSuppressed(true); 1214 SetScrollbarsSuppressed(true);
1282 1215
1283 first_layout_ = false; 1216 first_layout_ = false;
1284 last_viewport_size_ = GetLayoutSize(kIncludeScrollbars); 1217 last_viewport_size_ = GetLayoutSize(kIncludeScrollbars);
(...skipping 1485 matching lines...) Expand 10 before | Expand all | Expand 10 after
2770 // Covers #2. 2703 // Covers #2.
2771 // FIXME: Do we need to fix this for OOPI? 2704 // FIXME: Do we need to fix this for OOPI?
2772 HTMLFrameOwnerElement* owner = frame_->DeprecatedLocalOwner(); 2705 HTMLFrameOwnerElement* owner = frame_->DeprecatedLocalOwner();
2773 if (owner && (!owner->GetLayoutObject() || 2706 if (owner && (!owner->GetLayoutObject() ||
2774 !owner->GetLayoutObject()->VisibleToHitTesting())) 2707 !owner->GetLayoutObject()->VisibleToHitTesting()))
2775 return kNotScrollableNotVisible; 2708 return kNotScrollableNotVisible;
2776 2709
2777 // Cover #3 and #4. 2710 // Cover #3 and #4.
2778 ScrollbarMode horizontal_mode; 2711 ScrollbarMode horizontal_mode;
2779 ScrollbarMode vertical_mode; 2712 ScrollbarMode vertical_mode;
2780 CalculateScrollbarModes(horizontal_mode, vertical_mode); 2713 GetLayoutView()->CalculateScrollbarModes(horizontal_mode, vertical_mode);
2781 if (horizontal_mode == kScrollbarAlwaysOff && 2714 if (horizontal_mode == kScrollbarAlwaysOff &&
2782 vertical_mode == kScrollbarAlwaysOff) 2715 vertical_mode == kScrollbarAlwaysOff)
2783 return kNotScrollableExplicitlyDisabled; 2716 return kNotScrollableExplicitlyDisabled;
2784 2717
2785 return kScrollable; 2718 return kScrollable;
2786 } 2719 }
2787 2720
2788 void FrameView::UpdateParentScrollableAreaSet() { 2721 void FrameView::UpdateParentScrollableAreaSet() {
2789 if (RuntimeEnabledFeatures::rootLayerScrollingEnabled()) 2722 if (RuntimeEnabledFeatures::rootLayerScrollingEnabled())
2790 return; 2723 return;
(...skipping 2643 matching lines...) Expand 10 before | Expand all | Expand 10 after
5434 void FrameView::SetAnimationHost( 5367 void FrameView::SetAnimationHost(
5435 std::unique_ptr<CompositorAnimationHost> host) { 5368 std::unique_ptr<CompositorAnimationHost> host) {
5436 animation_host_ = std::move(host); 5369 animation_host_ = std::move(host);
5437 } 5370 }
5438 5371
5439 LayoutUnit FrameView::CaretWidth() const { 5372 LayoutUnit FrameView::CaretWidth() const {
5440 return LayoutUnit(GetChromeClient()->WindowToViewportScalar(1)); 5373 return LayoutUnit(GetChromeClient()->WindowToViewportScalar(1));
5441 } 5374 }
5442 5375
5443 } // namespace blink 5376 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698