Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 83 : m_layer(layer) | 83 : m_layer(layer) |
| 84 , m_inResizeMode(false) | 84 , m_inResizeMode(false) |
| 85 , m_scrollsOverflow(false) | 85 , m_scrollsOverflow(false) |
| 86 , m_scrollDimensionsDirty(true) | 86 , m_scrollDimensionsDirty(true) |
| 87 , m_inOverflowRelayout(false) | 87 , m_inOverflowRelayout(false) |
| 88 , m_nextTopmostScrollChild(0) | 88 , m_nextTopmostScrollChild(0) |
| 89 , m_topmostScrollChild(0) | 89 , m_topmostScrollChild(0) |
| 90 , m_needsCompositedScrolling(false) | 90 , m_needsCompositedScrolling(false) |
| 91 , m_scrollCorner(nullptr) | 91 , m_scrollCorner(nullptr) |
| 92 , m_resizer(nullptr) | 92 , m_resizer(nullptr) |
| 93 #if ENABLE(ASSERT) | |
| 94 , m_hasBeenDisposed(false) | |
| 95 #endif | |
| 93 { | 96 { |
| 94 Node* node = box().node(); | 97 Node* node = box().node(); |
| 95 if (node && node->isElementNode()) { | 98 if (node && node->isElementNode()) { |
| 96 // We save and restore only the scrollOffset as the other scroll values are recalculated. | 99 // We save and restore only the scrollOffset as the other scroll values are recalculated. |
| 97 Element* element = toElement(node); | 100 Element* element = toElement(node); |
| 98 m_scrollOffset = element->savedLayerScrollOffset(); | 101 m_scrollOffset = element->savedLayerScrollOffset(); |
| 99 if (!m_scrollOffset.isZero()) | 102 if (!m_scrollOffset.isZero()) |
| 100 scrollAnimator()->setCurrentPosition(FloatPoint(m_scrollOffset.width (), m_scrollOffset.height())); | 103 scrollAnimator()->setCurrentPosition(FloatPoint(m_scrollOffset.width (), m_scrollOffset.height())); |
| 101 element->setSavedLayerScrollOffset(IntSize()); | 104 element->setSavedLayerScrollOffset(IntSize()); |
| 102 } | 105 } |
| 103 | 106 |
| 104 updateResizerAreaSet(); | 107 updateResizerAreaSet(); |
| 105 } | 108 } |
| 106 | 109 |
| 107 DeprecatedPaintLayerScrollableArea::~DeprecatedPaintLayerScrollableArea() | 110 DeprecatedPaintLayerScrollableArea::~DeprecatedPaintLayerScrollableArea() |
| 108 { | 111 { |
| 112 ASSERT(m_hasBeenDisposed); | |
| 113 } | |
| 114 | |
| 115 void DeprecatedPaintLayerScrollableArea::dispose() | |
| 116 { | |
| 109 if (inResizeMode() && !box().documentBeingDestroyed()) { | 117 if (inResizeMode() && !box().documentBeingDestroyed()) { |
| 110 if (LocalFrame* frame = box().frame()) | 118 if (LocalFrame* frame = box().frame()) |
| 111 frame->eventHandler().resizeScrollableAreaDestroyed(); | 119 frame->eventHandler().resizeScrollableAreaDestroyed(); |
| 112 } | 120 } |
| 113 | 121 |
| 114 if (LocalFrame* frame = box().frame()) { | 122 if (LocalFrame* frame = box().frame()) { |
| 115 if (FrameView* frameView = frame->view()) { | 123 if (FrameView* frameView = frame->view()) { |
| 116 frameView->removeScrollableArea(this); | 124 frameView->removeScrollableArea(this); |
| 117 frameView->removeAnimatingScrollableArea(this); | 125 frameView->removeAnimatingScrollableArea(this); |
| 118 } | 126 } |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 135 frameView->removeResizerArea(box()); | 143 frameView->removeResizerArea(box()); |
| 136 } | 144 } |
| 137 | 145 |
| 138 destroyScrollbar(HorizontalScrollbar); | 146 destroyScrollbar(HorizontalScrollbar); |
| 139 destroyScrollbar(VerticalScrollbar); | 147 destroyScrollbar(VerticalScrollbar); |
| 140 | 148 |
| 141 if (m_scrollCorner) | 149 if (m_scrollCorner) |
| 142 m_scrollCorner->destroy(); | 150 m_scrollCorner->destroy(); |
| 143 if (m_resizer) | 151 if (m_resizer) |
| 144 m_resizer->destroy(); | 152 m_resizer->destroy(); |
| 153 | |
| 154 clearScrollAnimators(); | |
|
haraken
2015/06/30 10:30:35
Do we need to call clearScrollAnimators() in dispo
sof
2015/06/30 11:34:09
This is what https://code.google.com/p/chromium/is
haraken
2015/06/30 14:14:24
My question is whether we need to call clearScroll
sof
2015/06/30 14:28:03
It is a problem to delay its clearing until it is
haraken
2015/06/30 14:30:24
Makes sense. Why doesn't it become a problem for S
sof
2015/06/30 14:35:48
It takes care of its owned objects via eager final
haraken
2015/06/30 14:37:21
ah, understood; thanks!
| |
| 155 | |
| 156 #if ENABLE(ASSERT) | |
| 157 m_hasBeenDisposed = true; | |
| 158 #endif | |
| 159 } | |
| 160 | |
| 161 DEFINE_TRACE(DeprecatedPaintLayerScrollableArea) | |
| 162 { | |
| 163 visitor->trace(m_hBar); | |
| 164 visitor->trace(m_vBar); | |
| 165 ScrollableArea::trace(visitor); | |
| 145 } | 166 } |
| 146 | 167 |
| 147 HostWindow* DeprecatedPaintLayerScrollableArea::hostWindow() const | 168 HostWindow* DeprecatedPaintLayerScrollableArea::hostWindow() const |
| 148 { | 169 { |
| 149 if (Page* page = box().frame()->page()) | 170 if (Page* page = box().frame()->page()) |
| 150 return &page->chromeClient(); | 171 return &page->chromeClient(); |
| 151 return nullptr; | 172 return nullptr; |
| 152 } | 173 } |
| 153 | 174 |
| 154 GraphicsLayer* DeprecatedPaintLayerScrollableArea::layerForScrolling() const | 175 GraphicsLayer* DeprecatedPaintLayerScrollableArea::layerForScrolling() const |
| (...skipping 773 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 928 didAddScrollbar(widget.get(), HorizontalScrollbar); | 949 didAddScrollbar(widget.get(), HorizontalScrollbar); |
| 929 else | 950 else |
| 930 didAddScrollbar(widget.get(), VerticalScrollbar); | 951 didAddScrollbar(widget.get(), VerticalScrollbar); |
| 931 } | 952 } |
| 932 box().document().view()->addChild(widget.get()); | 953 box().document().view()->addChild(widget.get()); |
| 933 return widget.release(); | 954 return widget.release(); |
| 934 } | 955 } |
| 935 | 956 |
| 936 void DeprecatedPaintLayerScrollableArea::destroyScrollbar(ScrollbarOrientation o rientation) | 957 void DeprecatedPaintLayerScrollableArea::destroyScrollbar(ScrollbarOrientation o rientation) |
| 937 { | 958 { |
| 938 RefPtrWillBePersistent<Scrollbar>& scrollbar = orientation == HorizontalScro llbar ? m_hBar : m_vBar; | 959 RefPtrWillBeMember<Scrollbar>& scrollbar = orientation == HorizontalScrollba r ? m_hBar : m_vBar; |
| 939 if (!scrollbar) | 960 if (!scrollbar) |
| 940 return; | 961 return; |
| 941 | 962 |
| 942 if (!scrollbar->isCustomScrollbar()) | 963 if (!scrollbar->isCustomScrollbar()) |
| 943 willRemoveScrollbar(scrollbar.get(), orientation); | 964 willRemoveScrollbar(scrollbar.get(), orientation); |
| 944 | 965 |
| 945 toFrameView(scrollbar->parent())->removeChild(scrollbar.get()); | 966 toFrameView(scrollbar->parent())->removeChild(scrollbar.get()); |
| 946 scrollbar->disconnectFromScrollableArea(); | 967 scrollbar->disconnectFromScrollableArea(); |
|
haraken
2015/06/30 10:30:35
I'd add #if !ENABLE(OILPAN).
| |
| 947 scrollbar = nullptr; | 968 scrollbar = nullptr; |
| 948 } | 969 } |
| 949 | 970 |
| 950 void DeprecatedPaintLayerScrollableArea::setHasHorizontalScrollbar(bool hasScrol lbar) | 971 void DeprecatedPaintLayerScrollableArea::setHasHorizontalScrollbar(bool hasScrol lbar) |
| 951 { | 972 { |
| 952 if (hasScrollbar == hasHorizontalScrollbar()) | 973 if (hasScrollbar == hasHorizontalScrollbar()) |
| 953 return; | 974 return; |
| 954 | 975 |
| 955 if (hasScrollbar) { | 976 if (hasScrollbar) { |
| 956 // This doesn't hit in any tests, but since the equivalent code in setHa sVerticalScrollbar | 977 // This doesn't hit in any tests, but since the equivalent code in setHa sVerticalScrollbar |
| (...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1393 void DeprecatedPaintLayerScrollableArea::setTopmostScrollChild(DeprecatedPaintLa yer* scrollChild) | 1414 void DeprecatedPaintLayerScrollableArea::setTopmostScrollChild(DeprecatedPaintLa yer* scrollChild) |
| 1394 { | 1415 { |
| 1395 // We only want to track the topmost scroll child for scrollable areas with | 1416 // We only want to track the topmost scroll child for scrollable areas with |
| 1396 // overlay scrollbars. | 1417 // overlay scrollbars. |
| 1397 if (!hasOverlayScrollbars()) | 1418 if (!hasOverlayScrollbars()) |
| 1398 return; | 1419 return; |
| 1399 m_nextTopmostScrollChild = scrollChild; | 1420 m_nextTopmostScrollChild = scrollChild; |
| 1400 } | 1421 } |
| 1401 | 1422 |
| 1402 } // namespace blink | 1423 } // namespace blink |
| OLD | NEW |