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

Side by Side Diff: third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.h

Issue 1308273010: Adapt and reland old position sticky implementation (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: WIP - fix on release, still hits CHECK in LayoutGeometryMap.cpp:156 Created 4 years, 10 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 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 enum ResizerHitTestType { 56 enum ResizerHitTestType {
57 ResizerForPointer, 57 ResizerForPointer,
58 ResizerForTouch 58 ResizerForTouch
59 }; 59 };
60 60
61 class PlatformEvent; 61 class PlatformEvent;
62 class LayoutBox; 62 class LayoutBox;
63 class PaintLayer; 63 class PaintLayer;
64 class LayoutScrollbarPart; 64 class LayoutScrollbarPart;
65 65
66 typedef WTF::HashMap<PaintLayer*, StickyPositionScrollingConstraints> StickyCons traintsMap;
67
68 struct PaintLayerScrollableAreaRareData {
69 WTF_MAKE_NONCOPYABLE(PaintLayerScrollableAreaRareData);
70 USING_FAST_MALLOC(PaintLayerScrollableAreaRareData);
71 public:
72 PaintLayerScrollableAreaRareData() {}
73
74 StickyConstraintsMap m_stickyConstraintsMap;
75 };
76
66 // PaintLayerScrollableArea represents the scrollable area of a LayoutBox. 77 // PaintLayerScrollableArea represents the scrollable area of a LayoutBox.
67 // 78 //
68 // To be scrollable, an element requires ‘overflow’ != visible. Note that this 79 // To be scrollable, an element requires ‘overflow’ != visible. Note that this
69 // doesn’t imply having scrollbars as you can always programmatically scroll 80 // doesn’t imply having scrollbars as you can always programmatically scroll
70 // when ‘overflow’ is hidden (using JavaScript's element.scrollTo or 81 // when ‘overflow’ is hidden (using JavaScript's element.scrollTo or
71 // scrollLeft). 82 // scrollLeft).
72 // 83 //
73 // The size and scroll origin of the scrollable area are based on layout 84 // The size and scroll origin of the scrollable area are based on layout
74 // dimensions. They are recomputed after layout in updateScrollDimensions. 85 // dimensions. They are recomputed after layout in updateScrollDimensions.
75 // 86 //
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after
330 const IntPoint& cachedOverlayScrollbarOffset() { return m_cachedOverlayScrol lbarOffset; } 341 const IntPoint& cachedOverlayScrollbarOffset() { return m_cachedOverlayScrol lbarOffset; }
331 void setCachedOverlayScrollbarOffset(const IntPoint& offset) { m_cachedOverl ayScrollbarOffset = offset; } 342 void setCachedOverlayScrollbarOffset(const IntPoint& offset) { m_cachedOverl ayScrollbarOffset = offset; }
332 343
333 IntRect rectForHorizontalScrollbar(const IntRect& borderBoxRect) const; 344 IntRect rectForHorizontalScrollbar(const IntRect& borderBoxRect) const;
334 IntRect rectForVerticalScrollbar(const IntRect& borderBoxRect) const; 345 IntRect rectForVerticalScrollbar(const IntRect& borderBoxRect) const;
335 346
336 Widget* widget() override; 347 Widget* widget() override;
337 ScrollAnchor& scrollAnchor() { return m_scrollAnchor; } 348 ScrollAnchor& scrollAnchor() { return m_scrollAnchor; }
338 bool isPaintLayerScrollableArea() const override { return true; } 349 bool isPaintLayerScrollableArea() const override { return true; }
339 350
351 StickyConstraintsMap& stickyConstraintsMap() { return ensureRareData().m_sti ckyConstraintsMap; }
352 void invalidateStickyConstraints();
353
340 DECLARE_VIRTUAL_TRACE(); 354 DECLARE_VIRTUAL_TRACE();
341 355
342 private: 356 private:
343 explicit PaintLayerScrollableArea(PaintLayer&); 357 explicit PaintLayerScrollableArea(PaintLayer&);
344 358
345 bool hasHorizontalOverflow() const; 359 bool hasHorizontalOverflow() const;
346 bool hasVerticalOverflow() const; 360 bool hasVerticalOverflow() const;
347 bool hasScrollableHorizontalOverflow() const; 361 bool hasScrollableHorizontalOverflow() const;
348 bool hasScrollableVerticalOverflow() const; 362 bool hasScrollableVerticalOverflow() const;
349 bool visualViewportSuppliesScrollbars() const; 363 bool visualViewportSuppliesScrollbars() const;
(...skipping 16 matching lines...) Expand all
366 380
367 // See comments on isPointInResizeControl. 381 // See comments on isPointInResizeControl.
368 void updateResizerAreaSet(); 382 void updateResizerAreaSet();
369 void updateResizerStyle(); 383 void updateResizerStyle();
370 384
371 385
372 void updateScrollableAreaSet(bool hasOverflow); 386 void updateScrollableAreaSet(bool hasOverflow);
373 387
374 void updateCompositingLayersAfterScroll(); 388 void updateCompositingLayersAfterScroll();
375 389
390 PaintLayerScrollableAreaRareData* rareData()
391 {
392 return m_rareData.get();
393 }
394
395 PaintLayerScrollableAreaRareData& ensureRareData()
396 {
397 if (!m_rareData)
398 m_rareData = adoptPtr(new PaintLayerScrollableAreaRareData());
399 return *m_rareData.get();
400 }
401
376 // PaintInvalidationCapableScrollableArea 402 // PaintInvalidationCapableScrollableArea
377 LayoutBox& boxForScrollControlPaintInvalidation() const { return box(); } 403 LayoutBox& boxForScrollControlPaintInvalidation() const { return box(); }
378 404
379 PaintLayer& m_layer; 405 PaintLayer& m_layer;
380 406
381 // Keeps track of whether the layer is currently resizing, so events can cau se resizing to start and stop. 407 // Keeps track of whether the layer is currently resizing, so events can cau se resizing to start and stop.
382 unsigned m_inResizeMode : 1; 408 unsigned m_inResizeMode : 1;
383 unsigned m_scrollsOverflow : 1; 409 unsigned m_scrollsOverflow : 1;
384 410
385 unsigned m_inOverflowRelayout : 1; 411 unsigned m_inOverflowRelayout : 1;
(...skipping 20 matching lines...) Expand all
406 IntPoint m_cachedOverlayScrollbarOffset; 432 IntPoint m_cachedOverlayScrollbarOffset;
407 433
408 // LayoutObject to hold our custom scroll corner. 434 // LayoutObject to hold our custom scroll corner.
409 LayoutScrollbarPart* m_scrollCorner; 435 LayoutScrollbarPart* m_scrollCorner;
410 436
411 // LayoutObject to hold our custom resizer. 437 // LayoutObject to hold our custom resizer.
412 LayoutScrollbarPart* m_resizer; 438 LayoutScrollbarPart* m_resizer;
413 439
414 ScrollAnchor m_scrollAnchor; 440 ScrollAnchor m_scrollAnchor;
415 441
442 OwnPtr<PaintLayerScrollableAreaRareData> m_rareData;
443
416 #if ENABLE(ASSERT) 444 #if ENABLE(ASSERT)
417 bool m_hasBeenDisposed; 445 bool m_hasBeenDisposed;
418 #endif 446 #endif
419 }; 447 };
420 448
421 DEFINE_TYPE_CASTS(PaintLayerScrollableArea, ScrollableArea, scrollableArea, 449 DEFINE_TYPE_CASTS(PaintLayerScrollableArea, ScrollableArea, scrollableArea,
422 scrollableArea->isPaintLayerScrollableArea(), 450 scrollableArea->isPaintLayerScrollableArea(),
423 scrollableArea.isPaintLayerScrollableArea()); 451 scrollableArea.isPaintLayerScrollableArea());
424 452
425 } // namespace blink 453 } // namespace blink
426 454
427 #endif // LayerScrollableArea_h 455 #endif // LayerScrollableArea_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698