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 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
69 #include "platform/scroll/ScrollbarTheme.h" | 69 #include "platform/scroll/ScrollbarTheme.h" |
70 #include "public/platform/Platform.h" | 70 #include "public/platform/Platform.h" |
71 | 71 |
72 namespace WebCore { | 72 namespace WebCore { |
73 | 73 |
74 const int ResizerControlExpandRatioForTouch = 2; | 74 const int ResizerControlExpandRatioForTouch = 2; |
75 | 75 |
76 RenderLayerScrollableArea::RenderLayerScrollableArea(RenderBox* box) | 76 RenderLayerScrollableArea::RenderLayerScrollableArea(RenderBox* box) |
77 : m_box(box) | 77 : m_box(box) |
78 , m_inResizeMode(false) | 78 , m_inResizeMode(false) |
| 79 , m_scrollsOverflow(false) |
79 , m_scrollDimensionsDirty(true) | 80 , m_scrollDimensionsDirty(true) |
80 , m_inOverflowRelayout(false) | 81 , m_inOverflowRelayout(false) |
81 , m_needsCompositedScrolling(false) | 82 , m_needsCompositedScrolling(false) |
82 , m_forceNeedsCompositedScrolling(DoNotForceCompositedScrolling) | 83 , m_forceNeedsCompositedScrolling(DoNotForceCompositedScrolling) |
83 , m_scrollCorner(0) | 84 , m_scrollCorner(0) |
84 , m_resizer(0) | 85 , m_resizer(0) |
85 { | 86 { |
86 ScrollableArea::setConstrainsScrollingToContentEdge(false); | 87 ScrollableArea::setConstrainsScrollingToContentEdge(false); |
87 | 88 |
88 Node* node = m_box->node(); | 89 Node* node = m_box->node(); |
(...skipping 871 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
960 if (m_resizer) | 961 if (m_resizer) |
961 m_resizer->setFrameRect(resizerCornerRect(borderBox, ResizerForPointer))
; | 962 m_resizer->setFrameRect(resizerCornerRect(borderBox, ResizerForPointer))
; |
962 | 963 |
963 // FIXME, this should eventually be removed, once we are certain that compos
ited | 964 // FIXME, this should eventually be removed, once we are certain that compos
ited |
964 // controls get correctly positioned on a compositor update. For now, conser
vatively | 965 // controls get correctly positioned on a compositor update. For now, conser
vatively |
965 // leaving this unchanged. | 966 // leaving this unchanged. |
966 if (m_box->hasCompositedLayerMapping()) | 967 if (m_box->hasCompositedLayerMapping()) |
967 m_box->compositedLayerMapping()->positionOverflowControlsLayers(offsetFr
omRoot); | 968 m_box->compositedLayerMapping()->positionOverflowControlsLayers(offsetFr
omRoot); |
968 } | 969 } |
969 | 970 |
970 bool RenderLayerScrollableArea::scrollsOverflow() const | |
971 { | |
972 if (FrameView* frameView = m_box->view()->frameView()) | |
973 return frameView->containsScrollableArea(this); | |
974 | |
975 return false; | |
976 } | |
977 | |
978 void RenderLayerScrollableArea::updateScrollCornerStyle() | 971 void RenderLayerScrollableArea::updateScrollCornerStyle() |
979 { | 972 { |
980 if (!m_scrollCorner && !hasScrollbar()) | 973 if (!m_scrollCorner && !hasScrollbar()) |
981 return; | 974 return; |
982 if (!m_scrollCorner && hasOverlayScrollbars()) | 975 if (!m_scrollCorner && hasOverlayScrollbars()) |
983 return; | 976 return; |
984 | 977 |
985 RenderObject* actualRenderer = rendererForScrollbar(m_box); | 978 RenderObject* actualRenderer = rendererForScrollbar(m_box); |
986 RefPtr<RenderStyle> corner = m_box->hasOverflowClip() ? actualRenderer->getU
ncachedPseudoStyle(PseudoStyleRequest(SCROLLBAR_CORNER), actualRenderer->style()
) : PassRefPtr<RenderStyle>(nullptr); | 979 RefPtr<RenderStyle> corner = m_box->hasOverflowClip() ? actualRenderer->getU
ncachedPseudoStyle(PseudoStyleRequest(SCROLLBAR_CORNER), actualRenderer->style()
) : PassRefPtr<RenderStyle>(nullptr); |
987 if (corner) { | 980 if (corner) { |
(...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1408 return; | 1401 return; |
1409 | 1402 |
1410 FrameView* frameView = frame->view(); | 1403 FrameView* frameView = frame->view(); |
1411 if (!frameView) | 1404 if (!frameView) |
1412 return; | 1405 return; |
1413 | 1406 |
1414 bool isVisibleToHitTest = m_box->visibleToHitTesting(); | 1407 bool isVisibleToHitTest = m_box->visibleToHitTesting(); |
1415 if (HTMLFrameOwnerElement* owner = frame->ownerElement()) | 1408 if (HTMLFrameOwnerElement* owner = frame->ownerElement()) |
1416 isVisibleToHitTest &= owner->renderer() && owner->renderer()->visibleToH
itTesting(); | 1409 isVisibleToHitTest &= owner->renderer() && owner->renderer()->visibleToH
itTesting(); |
1417 | 1410 |
1418 bool requiresScrollableArea = hasOverflow && isVisibleToHitTest; | 1411 m_scrollsOverflow = hasOverflow && isVisibleToHitTest; |
| 1412 |
1419 bool updatedScrollableAreaSet = false; | 1413 bool updatedScrollableAreaSet = false; |
1420 if (requiresScrollableArea) { | 1414 if (m_scrollsOverflow) { |
1421 if (frameView->addScrollableArea(this)) | 1415 if (frameView->addScrollableArea(this)) |
1422 updatedScrollableAreaSet = true; | 1416 updatedScrollableAreaSet = true; |
1423 } else { | 1417 } else { |
1424 if (frameView->removeScrollableArea(this)) | 1418 if (frameView->removeScrollableArea(this)) |
1425 updatedScrollableAreaSet = true; | 1419 updatedScrollableAreaSet = true; |
1426 } | 1420 } |
1427 | 1421 |
1428 if (updatedScrollableAreaSet) { | 1422 if (updatedScrollableAreaSet) { |
1429 // We always want composited scrolling if compositor driven accelerated | 1423 // We always want composited scrolling if compositor driven accelerated |
1430 // scrolling is enabled. Since we will not update needs composited scrol
ling | 1424 // scrolling is enabled. Since we will not update needs composited scrol
ling |
1431 // in this case, we must force our state to update. | 1425 // in this case, we must force our state to update. |
1432 RenderLayerCompositor* compositor = m_box->view()->compositor(); | 1426 RenderLayerCompositor* compositor = m_box->view()->compositor(); |
1433 if (compositor->acceleratedCompositingForOverflowScrollEnabled()) | 1427 if (compositor->acceleratedCompositingForOverflowScrollEnabled()) |
1434 layer()->didUpdateNeedsCompositedScrolling(); | 1428 layer()->didUpdateNeedsCompositedScrolling(); |
1435 else if (requiresScrollableArea) | 1429 else if (m_scrollsOverflow) |
1436 compositor->setNeedsUpdateCompositingRequirementsState(); | 1430 compositor->setNeedsUpdateCompositingRequirementsState(); |
1437 else | 1431 else |
1438 setNeedsCompositedScrolling(false); | 1432 setNeedsCompositedScrolling(false); |
1439 } | 1433 } |
1440 } | 1434 } |
1441 | 1435 |
1442 void RenderLayerScrollableArea::updateNeedsCompositedScrolling() | 1436 void RenderLayerScrollableArea::updateNeedsCompositedScrolling() |
1443 { | 1437 { |
1444 TRACE_EVENT0("comp-scroll", "RenderLayer::updateNeedsCompositedScrolling"); | 1438 TRACE_EVENT0("comp-scroll", "RenderLayer::updateNeedsCompositedScrolling"); |
1445 RenderLayerCompositor* compositor = m_box->view()->compositor(); | 1439 RenderLayerCompositor* compositor = m_box->view()->compositor(); |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1520 void RenderLayerScrollableArea::setForceNeedsCompositedScrolling(ForceNeedsCompo
sitedScrollingMode mode) | 1514 void RenderLayerScrollableArea::setForceNeedsCompositedScrolling(ForceNeedsCompo
sitedScrollingMode mode) |
1521 { | 1515 { |
1522 if (m_forceNeedsCompositedScrolling == mode) | 1516 if (m_forceNeedsCompositedScrolling == mode) |
1523 return; | 1517 return; |
1524 | 1518 |
1525 m_forceNeedsCompositedScrolling = mode; | 1519 m_forceNeedsCompositedScrolling = mode; |
1526 layer()->didUpdateNeedsCompositedScrolling(); | 1520 layer()->didUpdateNeedsCompositedScrolling(); |
1527 } | 1521 } |
1528 | 1522 |
1529 } // Namespace WebCore | 1523 } // Namespace WebCore |
OLD | NEW |