Changeset 112919 in webkit
- Timestamp:
- Apr 2, 2012, 12:37:59 PM (14 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 6 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/fast/overflow/scroll-div-hide-show-expected.txt (added)
-
LayoutTests/fast/overflow/scroll-div-hide-show.html (added)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/dom/Element.cpp (modified) (2 diffs)
-
Source/WebCore/dom/Element.h (modified) (1 diff)
-
Source/WebCore/dom/ElementRareData.h (modified) (1 diff)
-
Source/WebCore/rendering/RenderLayer.cpp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r112918 r112919 1 2012-04-02 Rakesh KN <rakesh.kn@motorola.com> 2 3 Scroll position is lost after hide/show element 4 https://bugs.webkit.org/show_bug.cgi?id=72852 5 6 Reviewed by Julien Chaffraix. 7 8 * fast/overflow/scroll-div-hide-show-expected.txt: Added. 9 * fast/overflow/scroll-div-hide-show.html: Added. 10 1 11 2012-04-02 Stephen Chenney <schenney@chromium.org> 2 12 -
trunk/Source/WebCore/ChangeLog
r112914 r112919 1 2012-04-02 Rakesh KN <rakesh.kn@motorola.com> 2 3 Scroll position is lost after hide/show element 4 https://bugs.webkit.org/show_bug.cgi?id=72852 5 6 Maintain the scroll position of an overflowing element in the ElementRareData when the scrollable 7 RenderLayer is destroyed, which can be used to restore the scroll position if the same element gets 8 back a RenderLayer. 9 10 WebKit behaviour will be the same as Firefox and IE. It differs from Opera as it does not reset the 11 scroll position when an element is moved to another location in the same document. However Opera resets 12 the scroll position for elements moved to another document, which matches other browsers. 13 14 Reviewed by Julien Chaffraix. 15 16 Test: fast/overflow/scroll-div-hide-show.html 17 18 * dom/Element.cpp: 19 (WebCore::Element::removedFromDocument): 20 Reset the saved scroll offset if the node is moved to another location in the same document or another one. 21 22 (WebCore::Element::savedLayerScrollOffset): 23 (WebCore::Element::setSavedLayerScrollOffset): 24 * dom/Element.h: 25 Add helper functions to access the layer scroll offset from the element's rare data. 26 27 * dom/ElementRareData.h: 28 (ElementRareData): 29 Add the scroll offset book-keeping. 30 31 * rendering/RenderLayer.cpp: 32 (WebCore::RenderLayer::RenderLayer): 33 Restore the scroll offset. 34 (WebCore::RenderLayer::~RenderLayer): 35 Store the scroll offset if document is not being destroyed. 36 1 37 2012-04-02 Alexis Menard <alexis.menard@openbossa.org> 2 38 -
trunk/Source/WebCore/dom/Element.cpp
r112765 r112919 904 904 void Element::removedFromDocument() 905 905 { 906 setSavedLayerScrollOffset(IntSize()); 907 906 908 if (m_attributeData) { 907 909 if (hasID()) { … … 2067 2069 } 2068 2070 2071 IntSize Element::savedLayerScrollOffset() const 2072 { 2073 return hasRareData() ? rareData()->m_savedLayerScrollOffset : IntSize(); 2074 } 2075 2076 void Element::setSavedLayerScrollOffset(const IntSize& size) 2077 { 2078 if (size.isZero() && !hasRareData()) 2079 return; 2080 ensureRareData()->m_savedLayerScrollOffset = size; 2081 } 2082 2069 2083 } // namespace WebCore -
trunk/Source/WebCore/dom/Element.h
r112170 r112919 403 403 bool hasClass() const; 404 404 405 IntSize savedLayerScrollOffset() const; 406 void setSavedLayerScrollOffset(const IntSize&); 407 405 408 protected: 406 409 Element(const QualifiedName& tagName, Document* document, ConstructionType type) -
trunk/Source/WebCore/dom/ElementRareData.h
r112170 r112919 75 75 bool m_styleAffectedByEmpty; 76 76 77 IntSize m_savedLayerScrollOffset; 78 77 79 #if ENABLE(FULLSCREEN_API) 78 80 bool m_containsFullScreenElement; -
trunk/Source/WebCore/rendering/RenderLayer.cpp
r112745 r112919 195 195 m_hasVisibleContent = renderer->style()->visibility() == VISIBLE; 196 196 } 197 198 Node* node = renderer->node(); 199 if (node && node->isElementNode()) { 200 // We save and restore only the scrollOffset as the other scroll values are recalculated. 201 Element* element = toElement(node); 202 m_scrollOffset = element->savedLayerScrollOffset(); 203 element->setSavedLayerScrollOffset(IntSize()); 204 } 197 205 } 198 206 … … 207 215 if (FrameView* frameView = frame->view()) 208 216 frameView->removeScrollableArea(this); 217 } 218 219 if (!m_renderer->documentBeingDestroyed()) { 220 Node* node = m_renderer->node(); 221 if (node && node->isElementNode()) 222 toElement(node)->setSavedLayerScrollOffset(m_scrollOffset); 209 223 } 210 224
Note:
See TracChangeset
for help on using the changeset viewer.