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

Side by Side Diff: Source/core/rendering/RenderLayer.h

Issue 16982005: Allow objects without scrollbars to be scrollable (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: CR Fixes Created 7 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2003, 2009, 2012 Apple Inc. All rights reserved. 2 * Copyright (C) 2003, 2009, 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 389 matching lines...) Expand 10 before | Expand all | Expand 10 after
400 void scrollToYOffset(int y, ScrollOffsetClamping clamp = ScrollOffsetUnclamp ed) { scrollToOffset(IntSize(scrollXOffset(), y), clamp); } 400 void scrollToYOffset(int y, ScrollOffsetClamping clamp = ScrollOffsetUnclamp ed) { scrollToOffset(IntSize(scrollXOffset(), y), clamp); }
401 401
402 int scrollXOffset() const { return m_scrollOffset.width() + scrollOrigin().x (); } 402 int scrollXOffset() const { return m_scrollOffset.width() + scrollOrigin().x (); }
403 int scrollYOffset() const { return m_scrollOffset.height() + scrollOrigin(). y(); } 403 int scrollYOffset() const { return m_scrollOffset.height() + scrollOrigin(). y(); }
404 IntSize adjustedScrollOffset() const { return IntSize(scrollXOffset(), scrol lYOffset()); } 404 IntSize adjustedScrollOffset() const { return IntSize(scrollXOffset(), scrol lYOffset()); }
405 405
406 void scrollRectToVisible(const LayoutRect&, const ScrollAlignment& alignX, c onst ScrollAlignment& alignY); 406 void scrollRectToVisible(const LayoutRect&, const ScrollAlignment& alignX, c onst ScrollAlignment& alignY);
407 407
408 LayoutRect getRectToExpose(const LayoutRect& visibleRect, const LayoutRect& exposeRect, const ScrollAlignment& alignX, const ScrollAlignment& alignY); 408 LayoutRect getRectToExpose(const LayoutRect& visibleRect, const LayoutRect& exposeRect, const ScrollAlignment& alignX, const ScrollAlignment& alignY);
409 409
410 bool scrollsOverflow() const;
411 bool hasScrollbars() const { return m_hBar || m_vBar; }
412 void setHasHorizontalScrollbar(bool);
413 void setHasVerticalScrollbar(bool);
414
415 PassRefPtr<Scrollbar> createScrollbar(ScrollbarOrientation);
416 void destroyScrollbar(ScrollbarOrientation);
417
418 bool hasHorizontalScrollbar() const { return horizontalScrollbar(); } 410 bool hasHorizontalScrollbar() const { return horizontalScrollbar(); }
419 bool hasVerticalScrollbar() const { return verticalScrollbar(); } 411 bool hasVerticalScrollbar() const { return verticalScrollbar(); }
420 412
421 // ScrollableArea overrides 413 // ScrollableArea overrides
422 virtual Scrollbar* horizontalScrollbar() const { return m_hBar.get(); } 414 virtual Scrollbar* horizontalScrollbar() const { return m_hBar.get(); }
423 virtual Scrollbar* verticalScrollbar() const { return m_vBar.get(); } 415 virtual Scrollbar* verticalScrollbar() const { return m_vBar.get(); }
424 virtual ScrollableArea* enclosingScrollableArea() const; 416 virtual ScrollableArea* enclosingScrollableArea() const;
425 417
426 int verticalScrollbarWidth(OverlayScrollbarSizeRelevancy = IgnoreOverlayScro llbarSize) const; 418 int verticalScrollbarWidth(OverlayScrollbarSizeRelevancy = IgnoreOverlayScro llbarSize) const;
427 int horizontalScrollbarHeight(OverlayScrollbarSizeRelevancy = IgnoreOverlayS crollbarSize) const; 419 int horizontalScrollbarHeight(OverlayScrollbarSizeRelevancy = IgnoreOverlayS crollbarSize) const;
428 420
429 bool hasOverflowControls() const;
430 // isPointInResizeControl() is used for testing if a pointer/touch position is in the resize control 421 // isPointInResizeControl() is used for testing if a pointer/touch position is in the resize control
431 // area. 422 // area.
432 bool isPointInResizeControl(const IntPoint& absolutePoint, ResizerHitTestTyp e resizerHitTestType) const; 423 bool isPointInResizeControl(const IntPoint& absolutePoint, ResizerHitTestTyp e resizerHitTestType) const;
433 bool hitTestOverflowControls(HitTestResult&, const IntPoint& localPoint); 424 bool hitTestOverflowControls(HitTestResult&, const IntPoint& localPoint);
434 IntSize offsetFromResizeCorner(const IntPoint& absolutePoint) const; 425 IntSize offsetFromResizeCorner(const IntPoint& absolutePoint) const;
435 426
436 void paintOverflowControls(GraphicsContext*, const IntPoint&, const IntRect& damageRect, bool paintingOverlayControls = false); 427 void paintOverflowControls(GraphicsContext*, const IntPoint&, const IntRect& damageRect, bool paintingOverlayControls = false);
437 void paintScrollCorner(GraphicsContext*, const IntPoint&, const IntRect& dam ageRect); 428 void paintScrollCorner(GraphicsContext*, const IntPoint&, const IntRect& dam ageRect);
438 void paintResizer(GraphicsContext*, const IntPoint&, const IntRect& damageRe ct); 429 void paintResizer(GraphicsContext*, const IntPoint&, const IntRect& damageRe ct);
439 430
(...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after
823 814
824 void setForceNeedsCompositedScrolling(ForceNeedsCompositedScrollingMode); 815 void setForceNeedsCompositedScrolling(ForceNeedsCompositedScrollingMode);
825 816
826 private: 817 private:
827 enum CollectLayersBehavior { 818 enum CollectLayersBehavior {
828 ForceLayerToStackingContainer, 819 ForceLayerToStackingContainer,
829 OverflowScrollCanBeStackingContainers, 820 OverflowScrollCanBeStackingContainers,
830 OnlyStackingContextsCanBeStackingContainers 821 OnlyStackingContextsCanBeStackingContainers
831 }; 822 };
832 823
824 void setHasHorizontalScrollbar(bool);
825 void setHasVerticalScrollbar(bool);
826
827 PassRefPtr<Scrollbar> createScrollbar(ScrollbarOrientation);
828 void destroyScrollbar(ScrollbarOrientation);
829
830 bool hasOverflowControls() const;
831
833 void updateZOrderLists(); 832 void updateZOrderLists();
834 void rebuildZOrderLists(); 833 void rebuildZOrderLists();
835 // See the comment for collectLayers for information about the layerToForceA sStackingContainer parameter. 834 // See the comment for collectLayers for information about the layerToForceA sStackingContainer parameter.
836 void rebuildZOrderLists(OwnPtr<Vector<RenderLayer*> >&, OwnPtr<Vector<Render Layer*> >&, const RenderLayer* layerToForceAsStackingContainer = 0, CollectLayer sBehavior = OverflowScrollCanBeStackingContainers); 835 void rebuildZOrderLists(OwnPtr<Vector<RenderLayer*> >&, OwnPtr<Vector<Render Layer*> >&, const RenderLayer* layerToForceAsStackingContainer = 0, CollectLayer sBehavior = OverflowScrollCanBeStackingContainers);
837 void clearZOrderLists(); 836 void clearZOrderLists();
838 837
839 void updateNormalFlowList(); 838 void updateNormalFlowList();
840 839
841 bool isStackingContext(const RenderStyle* style) const { return !style->hasA utoZIndex() || isRootLayer(); } 840 bool isStackingContext(const RenderStyle* style) const { return !style->hasA utoZIndex() || isRootLayer(); }
842 841
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
999 bool hasHorizontalOverflow() const; 998 bool hasHorizontalOverflow() const;
1000 bool hasVerticalOverflow() const; 999 bool hasVerticalOverflow() const;
1001 bool hasScrollableHorizontalOverflow() const; 1000 bool hasScrollableHorizontalOverflow() const;
1002 bool hasScrollableVerticalOverflow() const; 1001 bool hasScrollableVerticalOverflow() const;
1003 1002
1004 bool shouldBeNormalFlowOnly() const; 1003 bool shouldBeNormalFlowOnly() const;
1005 bool shouldBeNormalFlowOnlyIgnoringCompositedScrolling() const; 1004 bool shouldBeNormalFlowOnlyIgnoringCompositedScrolling() const;
1006 1005
1007 bool shouldBeSelfPaintingLayer() const; 1006 bool shouldBeSelfPaintingLayer() const;
1008 1007
1009 int scrollPosition(Scrollbar*) const;
1010
1011 // ScrollableArea interface 1008 // ScrollableArea interface
1012 virtual void invalidateScrollbarRect(Scrollbar*, const IntRect&); 1009 virtual void invalidateScrollbarRect(Scrollbar*, const IntRect&);
1013 virtual void invalidateScrollCornerRect(const IntRect&); 1010 virtual void invalidateScrollCornerRect(const IntRect&);
1014 virtual bool isActive() const; 1011 virtual bool isActive() const;
1015 virtual bool isScrollCornerVisible() const; 1012 virtual bool isScrollCornerVisible() const;
1016 virtual IntRect scrollCornerRect() const; 1013 virtual IntRect scrollCornerRect() const;
1017 virtual IntRect convertFromScrollbarToContainingView(const Scrollbar*, const IntRect&) const; 1014 virtual IntRect convertFromScrollbarToContainingView(const Scrollbar*, const IntRect&) const;
1018 virtual IntRect convertFromContainingViewToScrollbar(const Scrollbar*, const IntRect&) const; 1015 virtual IntRect convertFromContainingViewToScrollbar(const Scrollbar*, const IntRect&) const;
1019 virtual IntPoint convertFromScrollbarToContainingView(const Scrollbar*, cons t IntPoint&) const; 1016 virtual IntPoint convertFromScrollbarToContainingView(const Scrollbar*, cons t IntPoint&) const;
1020 virtual IntPoint convertFromContainingViewToScrollbar(const Scrollbar*, cons t IntPoint&) const; 1017 virtual IntPoint convertFromContainingViewToScrollbar(const Scrollbar*, cons t IntPoint&) const;
1021 virtual int scrollSize(ScrollbarOrientation) const; 1018 virtual int scrollSize(ScrollbarOrientation) const;
1022 virtual void setScrollOffset(const IntPoint&); 1019 virtual void setScrollOffset(const IntPoint&);
1023 virtual IntPoint scrollPosition() const; 1020 virtual IntPoint scrollPosition() const;
1024 virtual IntPoint minimumScrollPosition() const; 1021 virtual IntPoint minimumScrollPosition() const;
1025 virtual IntPoint maximumScrollPosition() const; 1022 virtual IntPoint maximumScrollPosition() const;
1026 virtual IntRect visibleContentRect(VisibleContentRectIncludesScrollbars) con st; 1023 virtual IntRect visibleContentRect(VisibleContentRectIncludesScrollbars) con st;
1027 virtual int visibleHeight() const; 1024 virtual int visibleHeight() const;
1028 virtual int visibleWidth() const; 1025 virtual int visibleWidth() const;
1029 virtual IntSize contentsSize() const; 1026 virtual IntSize contentsSize() const;
1030 virtual IntSize overhangAmount() const; 1027 virtual IntSize overhangAmount() const;
1031 virtual IntPoint lastKnownMousePosition() const; 1028 virtual IntPoint lastKnownMousePosition() const;
1032 virtual bool shouldSuspendScrollAnimations() const; 1029 virtual bool shouldSuspendScrollAnimations() const;
1033 virtual bool scrollbarsCanBeActive() const; 1030 virtual bool scrollbarsCanBeActive() const;
1034 virtual IntRect scrollableAreaBoundingBox() const OVERRIDE; 1031 virtual IntRect scrollableAreaBoundingBox() const OVERRIDE;
1032 virtual bool userInputScrollable(ScrollbarOrientation) const OVERRIDE;
1033 virtual int pageStep(ScrollbarOrientation) const OVERRIDE;
1035 1034
1036 // Rectangle encompassing the scroll corner and resizer rect. 1035 // Rectangle encompassing the scroll corner and resizer rect.
1037 IntRect scrollCornerAndResizerRect() const; 1036 IntRect scrollCornerAndResizerRect() const;
1038 1037
1039 void updateCompositingLayersAfterScroll(); 1038 void updateCompositingLayersAfterScroll();
1040 1039
1041 IntSize scrollbarOffset(const Scrollbar*) const; 1040 IntSize scrollbarOffset(const Scrollbar*) const;
1042 1041
1043 void updateResizerAreaSet(); 1042 void updateResizerAreaSet();
1044 void updateScrollableAreaSet(bool hasOverflow); 1043 void updateScrollableAreaSet(bool hasOverflow);
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
1096 // Returns true if z ordering would not change if this layer were a stacking container. 1095 // Returns true if z ordering would not change if this layer were a stacking container.
1097 bool canBeStackingContainer() const; 1096 bool canBeStackingContainer() const;
1098 1097
1099 friend class RenderLayerBacking; 1098 friend class RenderLayerBacking;
1100 friend class RenderLayerCompositor; 1099 friend class RenderLayerCompositor;
1101 friend class RenderLayerModelObject; 1100 friend class RenderLayerModelObject;
1102 1101
1103 // Only safe to call from RenderLayerModelObject::destroyLayer(RenderArena*) 1102 // Only safe to call from RenderLayerModelObject::destroyLayer(RenderArena*)
1104 void destroy(RenderArena*); 1103 void destroy(RenderArena*);
1105 1104
1106 LayoutUnit overflowTop() const;
1107 LayoutUnit overflowBottom() const;
1108 LayoutUnit overflowLeft() const;
1109 LayoutUnit overflowRight() const;
1110
1111 IntRect rectForHorizontalScrollbar(const IntRect& borderBoxRect) const; 1105 IntRect rectForHorizontalScrollbar(const IntRect& borderBoxRect) const;
1112 IntRect rectForVerticalScrollbar(const IntRect& borderBoxRect) const; 1106 IntRect rectForVerticalScrollbar(const IntRect& borderBoxRect) const;
1113 1107
1114 LayoutUnit verticalScrollbarStart(int minX, int maxX) const; 1108 LayoutUnit verticalScrollbarStart(int minX, int maxX) const;
1115 LayoutUnit horizontalScrollbarStart(int minX) const; 1109 LayoutUnit horizontalScrollbarStart(int minX) const;
1116 1110
1117 bool overflowControlsIntersectRect(const IntRect& localRect) const; 1111 bool overflowControlsIntersectRect(const IntRect& localRect) const;
1118 1112
1119 protected: 1113 protected:
1120 // The bitfields are up here so they will fall into the padding from Scrolla bleArea on 64-bit. 1114 // The bitfields are up here so they will fall into the padding from Scrolla bleArea on 64-bit.
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
1203 // Our (x,y) coordinates are in our parent layer's coordinate space. 1197 // Our (x,y) coordinates are in our parent layer's coordinate space.
1204 LayoutPoint m_topLeft; 1198 LayoutPoint m_topLeft;
1205 1199
1206 // The layer's width/height 1200 // The layer's width/height
1207 IntSize m_layerSize; 1201 IntSize m_layerSize;
1208 1202
1209 // This is the (scroll) offset from scrollOrigin(). 1203 // This is the (scroll) offset from scrollOrigin().
1210 IntSize m_scrollOffset; 1204 IntSize m_scrollOffset;
1211 1205
1212 // The width/height of our scrolled area. 1206 // The width/height of our scrolled area.
1213 LayoutSize m_scrollSize; 1207 LayoutRect m_overflowRect;
1214 1208
1215 // For layers with overflow, we have a pair of scrollbars. 1209 // For layers with overflow, we have a pair of scrollbars.
1216 RefPtr<Scrollbar> m_hBar; 1210 RefPtr<Scrollbar> m_hBar;
1217 RefPtr<Scrollbar> m_vBar; 1211 RefPtr<Scrollbar> m_vBar;
1218 1212
1219 // For layers that establish stacking contexts, m_posZOrderList holds a sort ed list of all the 1213 // For layers that establish stacking contexts, m_posZOrderList holds a sort ed list of all the
1220 // descendant layers within the stacking context that have z-indices of 0 or greater 1214 // descendant layers within the stacking context that have z-indices of 0 or greater
1221 // (auto will count as 0). m_negZOrderList holds descendants within our sta cking context with negative 1215 // (auto will count as 0). m_negZOrderList holds descendants within our sta cking context with negative
1222 // z-indices. 1216 // z-indices.
1223 OwnPtr<Vector<RenderLayer*> > m_posZOrderList; 1217 OwnPtr<Vector<RenderLayer*> > m_posZOrderList;
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
1322 1316
1323 } // namespace WebCore 1317 } // namespace WebCore
1324 1318
1325 #ifndef NDEBUG 1319 #ifndef NDEBUG
1326 // Outside the WebCore namespace for ease of invocation from gdb. 1320 // Outside the WebCore namespace for ease of invocation from gdb.
1327 void showLayerTree(const WebCore::RenderLayer*); 1321 void showLayerTree(const WebCore::RenderLayer*);
1328 void showLayerTree(const WebCore::RenderObject*); 1322 void showLayerTree(const WebCore::RenderObject*);
1329 #endif 1323 #endif
1330 1324
1331 #endif // RenderLayer_h 1325 #endif // RenderLayer_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698