| Index: third_party/WebKit/Source/core/paint/DeprecatedPaintLayerScrollableArea.cpp
|
| diff --git a/third_party/WebKit/Source/core/paint/DeprecatedPaintLayerScrollableArea.cpp b/third_party/WebKit/Source/core/paint/DeprecatedPaintLayerScrollableArea.cpp
|
| index 7f23aa54fe791c3f63dc5aa6d0b9e115c2104ec2..616ad1964fcf455198d94ba86c31977e90b7b0cf 100644
|
| --- a/third_party/WebKit/Source/core/paint/DeprecatedPaintLayerScrollableArea.cpp
|
| +++ b/third_party/WebKit/Source/core/paint/DeprecatedPaintLayerScrollableArea.cpp
|
| @@ -88,6 +88,7 @@ DeprecatedPaintLayerScrollableArea::DeprecatedPaintLayerScrollableArea(Deprecate
|
| , m_nextTopmostScrollChild(0)
|
| , m_topmostScrollChild(0)
|
| , m_needsCompositedScrolling(false)
|
| + , m_scrollbarManager(*this)
|
| , m_scrollCorner(nullptr)
|
| , m_resizer(nullptr)
|
| #if ENABLE(ASSERT)
|
| @@ -142,8 +143,7 @@ void DeprecatedPaintLayerScrollableArea::dispose()
|
| frameView->removeResizerArea(box());
|
| }
|
|
|
| - destroyScrollbar(HorizontalScrollbar);
|
| - destroyScrollbar(VerticalScrollbar);
|
| + m_scrollbarManager.dispose();
|
|
|
| if (m_scrollCorner)
|
| m_scrollCorner->destroy();
|
| @@ -159,8 +159,7 @@ void DeprecatedPaintLayerScrollableArea::dispose()
|
|
|
| DEFINE_TRACE(DeprecatedPaintLayerScrollableArea)
|
| {
|
| - visitor->trace(m_hBar);
|
| - visitor->trace(m_vBar);
|
| + m_scrollbarManager.trace(visitor);
|
| ScrollableArea::trace(visitor);
|
| }
|
|
|
| @@ -205,15 +204,15 @@ void DeprecatedPaintLayerScrollableArea::invalidateScrollbarRect(Scrollbar* scro
|
| // See crbug.com/343132.
|
| DisableCompositingQueryAsserts disabler;
|
|
|
| - ASSERT(scrollbar == m_hBar.get() || scrollbar == m_vBar.get());
|
| - ASSERT(scrollbar == m_hBar.get() ? !layerForHorizontalScrollbar() : !layerForVerticalScrollbar());
|
| + ASSERT(scrollbar == horizontalScrollbar() || scrollbar == verticalScrollbar());
|
| + ASSERT(scrollbar == horizontalScrollbar() ? !layerForHorizontalScrollbar() : !layerForVerticalScrollbar());
|
|
|
| IntRect scrollRect = rect;
|
| // If we are not yet inserted into the tree, there is no need to issue paint invaldiations.
|
| if (!box().isLayoutView() && !box().parent())
|
| return;
|
|
|
| - if (scrollbar == m_vBar.get())
|
| + if (scrollbar == verticalScrollbar())
|
| scrollRect.move(verticalScrollbarStart(0, box().size().width()), box().borderTop());
|
| else
|
| scrollRect.move(horizontalScrollbarStart(0), box().size().height() - box().borderBottom() - scrollbar->height());
|
| @@ -653,12 +652,13 @@ void DeprecatedPaintLayerScrollableArea::updateScrollDimensions(DoubleSize& scro
|
| ASSERT(box().hasOverflowClip());
|
|
|
| if (needsScrollbarReconstruction()) {
|
| - if (m_hBar)
|
| - destroyScrollbar(HorizontalScrollbar);
|
| - if (m_vBar)
|
| - destroyScrollbar(VerticalScrollbar);
|
| + m_scrollbarManager.setCanDetachScrollbars(false);
|
| + setHasHorizontalScrollbar(false);
|
| + setHasVerticalScrollbar(false);
|
| }
|
|
|
| + m_scrollbarManager.setCanDetachScrollbars(true);
|
| +
|
| scrollOffset = adjustedScrollOffset();
|
| computeScrollDimensions();
|
| bool hasHorizontalOverflow = this->hasHorizontalOverflow();
|
| @@ -674,10 +674,14 @@ void DeprecatedPaintLayerScrollableArea::updateScrollDimensions(DoubleSize& scro
|
| autoHorizontalScrollBarChanged = (box().hasAutoHorizontalScrollbar() && (hasHorizontalScrollbar() != hasHorizontalOverflow)) || (box().style()->overflowX() == OSCROLL && !horizontalScrollbar());
|
| autoVerticalScrollBarChanged = (box().hasAutoVerticalScrollbar() && (hasVerticalScrollbar() != hasVerticalOverflow)) || (box().style()->overflowY() == OSCROLL && !verticalScrollbar());
|
| if (!visualViewportSuppliesScrollbars() && (autoHorizontalScrollBarChanged || autoVerticalScrollBarChanged)) {
|
| - if (box().hasAutoHorizontalScrollbar() || (box().style()->overflowX() == OSCROLL && !horizontalScrollbar()))
|
| - setHasHorizontalScrollbar(box().style()->overflowX() == OSCROLL ? true : hasHorizontalOverflow);
|
| - if (box().hasAutoVerticalScrollbar() || (box().style()->overflowY() == OSCROLL && !verticalScrollbar()))
|
| - setHasVerticalScrollbar(box().style()->overflowY() == OSCROLL ? true : hasVerticalOverflow);
|
| + if (box().hasAutoHorizontalScrollbar())
|
| + setHasHorizontalScrollbar(hasHorizontalOverflow);
|
| + else if (box().style()->overflowX() == OSCROLL)
|
| + setHasHorizontalScrollbar(true);
|
| + if (box().hasAutoVerticalScrollbar())
|
| + setHasVerticalScrollbar(hasVerticalOverflow);
|
| + else if (box().style()->overflowX() == OSCROLL)
|
| + setHasVerticalScrollbar(true);
|
| }
|
| }
|
|
|
| @@ -696,6 +700,8 @@ void DeprecatedPaintLayerScrollableArea::finalizeScrollDimensions(const DoubleSi
|
| scrollPositionChanged(-origin + adjustedScrollOffset(), ProgrammaticScroll);
|
| }
|
|
|
| + m_scrollbarManager.setCanDetachScrollbars(false);
|
| +
|
| bool hasHorizontalOverflow = this->hasHorizontalOverflow();
|
| bool hasVerticalOverflow = this->hasVerticalOverflow();
|
|
|
| @@ -851,19 +857,19 @@ void DeprecatedPaintLayerScrollableArea::updateAfterStyleChange(const ComputedSt
|
| // When switching to another value, we need to re-enable them (see bug 11985).
|
| if (needsHorizontalScrollbar && oldStyle && oldStyle->overflowX() == OSCROLL && overflowX != OSCROLL) {
|
| ASSERT(hasHorizontalScrollbar());
|
| - m_hBar->setEnabled(true);
|
| + horizontalScrollbar()->setEnabled(true);
|
| }
|
|
|
| if (needsVerticalScrollbar && oldStyle && oldStyle->overflowY() == OSCROLL && overflowY != OSCROLL) {
|
| ASSERT(hasVerticalScrollbar());
|
| - m_vBar->setEnabled(true);
|
| + verticalScrollbar()->setEnabled(true);
|
| }
|
|
|
| // FIXME: Need to detect a swap from custom to native scrollbars (and vice versa).
|
| - if (m_hBar)
|
| - m_hBar->styleChanged();
|
| - if (m_vBar)
|
| - m_vBar->styleChanged();
|
| + if (horizontalScrollbar())
|
| + horizontalScrollbar()->styleChanged();
|
| + if (verticalScrollbar())
|
| + verticalScrollbar()->styleChanged();
|
|
|
| updateScrollCornerStyle();
|
| updateResizerAreaSet();
|
| @@ -901,27 +907,27 @@ void DeprecatedPaintLayerScrollableArea::updateAfterOverflowRecalc()
|
|
|
| IntRect DeprecatedPaintLayerScrollableArea::rectForHorizontalScrollbar(const IntRect& borderBoxRect) const
|
| {
|
| - if (!m_hBar)
|
| + if (!hasHorizontalScrollbar())
|
| return IntRect();
|
|
|
| const IntRect& scrollCorner = scrollCornerRect();
|
|
|
| return IntRect(horizontalScrollbarStart(borderBoxRect.x()),
|
| - borderBoxRect.maxY() - box().borderBottom() - m_hBar->height(),
|
| + borderBoxRect.maxY() - box().borderBottom() - horizontalScrollbar()->height(),
|
| borderBoxRect.width() - (box().borderLeft() + box().borderRight()) - scrollCorner.width(),
|
| - m_hBar->height());
|
| + horizontalScrollbar()->height());
|
| }
|
|
|
| IntRect DeprecatedPaintLayerScrollableArea::rectForVerticalScrollbar(const IntRect& borderBoxRect) const
|
| {
|
| - if (!m_vBar)
|
| + if (!hasVerticalScrollbar())
|
| return IntRect();
|
|
|
| const IntRect& scrollCorner = scrollCornerRect();
|
|
|
| return IntRect(verticalScrollbarStart(borderBoxRect.x(), borderBoxRect.maxX()),
|
| borderBoxRect.y() + box().borderTop(),
|
| - m_vBar->width(),
|
| + verticalScrollbar()->width(),
|
| borderBoxRect.height() - (box().borderTop() + box().borderBottom()) - scrollCorner.height());
|
| }
|
|
|
| @@ -929,23 +935,23 @@ LayoutUnit DeprecatedPaintLayerScrollableArea::verticalScrollbarStart(int minX,
|
| {
|
| if (box().style()->shouldPlaceBlockDirectionScrollbarOnLogicalLeft())
|
| return minX + box().borderLeft();
|
| - return maxX - box().borderRight() - m_vBar->width();
|
| + return maxX - box().borderRight() - verticalScrollbar()->width();
|
| }
|
|
|
| LayoutUnit DeprecatedPaintLayerScrollableArea::horizontalScrollbarStart(int minX) const
|
| {
|
| int x = minX + box().borderLeft();
|
| if (box().style()->shouldPlaceBlockDirectionScrollbarOnLogicalLeft())
|
| - x += m_vBar ? m_vBar->width() : resizerCornerRect(box().pixelSnappedBorderBoxRect(), ResizerForPointer).width();
|
| + x += hasVerticalScrollbar() ? verticalScrollbar()->width() : resizerCornerRect(box().pixelSnappedBorderBoxRect(), ResizerForPointer).width();
|
| return x;
|
| }
|
|
|
| IntSize DeprecatedPaintLayerScrollableArea::scrollbarOffset(const Scrollbar* scrollbar) const
|
| {
|
| - if (scrollbar == m_vBar.get())
|
| + if (scrollbar == verticalScrollbar())
|
| return IntSize(verticalScrollbarStart(0, box().size().width()), box().borderTop());
|
|
|
| - if (scrollbar == m_hBar.get())
|
| + if (scrollbar == horizontalScrollbar())
|
| return IntSize(horizontalScrollbarStart(0), box().size().height() - box().borderBottom() - scrollbar->height());
|
|
|
| ASSERT_NOT_REACHED();
|
| @@ -991,68 +997,25 @@ bool DeprecatedPaintLayerScrollableArea::needsScrollbarReconstruction() const
|
| LayoutObject* actualLayoutObject = layoutObjectForScrollbar(box());
|
| bool shouldUseCustom = actualLayoutObject->isBox() && actualLayoutObject->style()->hasPseudoStyle(SCROLLBAR);
|
| bool hasAnyScrollbar = hasScrollbar();
|
| - bool hasCustom = (m_hBar && m_hBar->isCustomScrollbar()) || (m_vBar && m_vBar->isCustomScrollbar());
|
| + bool hasCustom = (hasHorizontalScrollbar() && horizontalScrollbar()->isCustomScrollbar()) || (hasVerticalScrollbar() && verticalScrollbar()->isCustomScrollbar());
|
| return hasAnyScrollbar && (shouldUseCustom != hasCustom);
|
| }
|
|
|
| -PassRefPtrWillBeRawPtr<Scrollbar> DeprecatedPaintLayerScrollableArea::createScrollbar(ScrollbarOrientation orientation)
|
| -{
|
| - RefPtrWillBeRawPtr<Scrollbar> widget = nullptr;
|
| - LayoutObject* actualLayoutObject = layoutObjectForScrollbar(box());
|
| - bool hasCustomScrollbarStyle = actualLayoutObject->isBox() && actualLayoutObject->style()->hasPseudoStyle(SCROLLBAR);
|
| - if (hasCustomScrollbarStyle) {
|
| - widget = LayoutScrollbar::createCustomScrollbar(this, orientation, actualLayoutObject->node());
|
| - } else {
|
| - ScrollbarControlSize scrollbarSize = RegularScrollbar;
|
| - if (actualLayoutObject->style()->hasAppearance())
|
| - scrollbarSize = LayoutTheme::theme().scrollbarControlSizeForPart(actualLayoutObject->style()->appearance());
|
| - widget = Scrollbar::create(this, orientation, scrollbarSize);
|
| - if (orientation == HorizontalScrollbar)
|
| - didAddScrollbar(widget.get(), HorizontalScrollbar);
|
| - else
|
| - didAddScrollbar(widget.get(), VerticalScrollbar);
|
| - }
|
| - box().document().view()->addChild(widget.get());
|
| - return widget.release();
|
| -}
|
| -
|
| -void DeprecatedPaintLayerScrollableArea::destroyScrollbar(ScrollbarOrientation orientation)
|
| -{
|
| - RefPtrWillBeMember<Scrollbar>& scrollbar = orientation == HorizontalScrollbar ? m_hBar : m_vBar;
|
| - if (!scrollbar)
|
| - return;
|
| -
|
| - if (!scrollbar->isCustomScrollbar())
|
| - willRemoveScrollbar(scrollbar.get(), orientation);
|
| -
|
| - toFrameView(scrollbar->parent())->removeChild(scrollbar.get());
|
| - scrollbar->disconnectFromScrollableArea();
|
| - scrollbar = nullptr;
|
| -}
|
| -
|
| void DeprecatedPaintLayerScrollableArea::setHasHorizontalScrollbar(bool hasScrollbar)
|
| {
|
| if (hasScrollbar == hasHorizontalScrollbar())
|
| return;
|
|
|
| - if (hasScrollbar) {
|
| - // This doesn't hit in any tests, but since the equivalent code in setHasVerticalScrollbar
|
| - // does, presumably this code does as well.
|
| - DisableCompositingQueryAsserts disabler;
|
| - m_hBar = createScrollbar(HorizontalScrollbar);
|
| - } else {
|
| - if (!layerForHorizontalScrollbar())
|
| - m_hBar->invalidate();
|
| - // Otherwise we will remove the layer and just need recompositing.
|
| + if (!hasScrollbar && !layerForHorizontalScrollbar())
|
| + horizontalScrollbar()->invalidate();
|
|
|
| - destroyScrollbar(HorizontalScrollbar);
|
| - }
|
| + m_scrollbarManager.setHasHorizontalScrollbar(hasScrollbar);
|
|
|
| // Destroying or creating one bar can cause our scrollbar corner to come and go. We need to update the opposite scrollbar's style.
|
| - if (m_hBar)
|
| - m_hBar->styleChanged();
|
| - if (m_vBar)
|
| - m_vBar->styleChanged();
|
| + if (hasHorizontalScrollbar())
|
| + horizontalScrollbar()->styleChanged();
|
| + if (hasVerticalScrollbar())
|
| + verticalScrollbar()->styleChanged();
|
|
|
| // These are valid because we want to invalidate display item clients on the current backing.
|
| DisablePaintInvalidationStateAsserts paintInvalidationAssertDisabler;
|
| @@ -1069,23 +1032,16 @@ void DeprecatedPaintLayerScrollableArea::setHasVerticalScrollbar(bool hasScrollb
|
| if (hasScrollbar == hasVerticalScrollbar())
|
| return;
|
|
|
| - if (hasScrollbar) {
|
| - // Hits in compositing/overflow/automatically-opt-into-composited-scrolling-after-style-change.html
|
| - DisableCompositingQueryAsserts disabler;
|
| - m_vBar = createScrollbar(VerticalScrollbar);
|
| - } else {
|
| - if (!layerForVerticalScrollbar())
|
| - m_vBar->invalidate();
|
| - // Otherwise we will remove the layer and just need recompositing.
|
| + if (!hasScrollbar && !layerForVerticalScrollbar())
|
| + verticalScrollbar()->invalidate();
|
|
|
| - destroyScrollbar(VerticalScrollbar);
|
| - }
|
| + m_scrollbarManager.setHasVerticalScrollbar(hasScrollbar);
|
|
|
| // Destroying or creating one bar can cause our scrollbar corner to come and go. We need to update the opposite scrollbar's style.
|
| - if (m_hBar)
|
| - m_hBar->styleChanged();
|
| - if (m_vBar)
|
| - m_vBar->styleChanged();
|
| + if (hasHorizontalScrollbar())
|
| + horizontalScrollbar()->styleChanged();
|
| + if (hasVerticalScrollbar())
|
| + verticalScrollbar()->styleChanged();
|
|
|
| // These are valid because we want to invalidate display item clients on the current backing.
|
| DisablePaintInvalidationStateAsserts paintInvalidationAssertDisabler;
|
| @@ -1099,16 +1055,16 @@ void DeprecatedPaintLayerScrollableArea::setHasVerticalScrollbar(bool hasScrollb
|
|
|
| int DeprecatedPaintLayerScrollableArea::verticalScrollbarWidth(OverlayScrollbarSizeRelevancy relevancy) const
|
| {
|
| - if (!m_vBar || (m_vBar->isOverlayScrollbar() && (relevancy == IgnoreOverlayScrollbarSize || !m_vBar->shouldParticipateInHitTesting())))
|
| + if (!hasVerticalScrollbar() || (verticalScrollbar()->isOverlayScrollbar() && (relevancy == IgnoreOverlayScrollbarSize || !verticalScrollbar()->shouldParticipateInHitTesting())))
|
| return 0;
|
| - return m_vBar->width();
|
| + return verticalScrollbar()->width();
|
| }
|
|
|
| int DeprecatedPaintLayerScrollableArea::horizontalScrollbarHeight(OverlayScrollbarSizeRelevancy relevancy) const
|
| {
|
| - if (!m_hBar || (m_hBar->isOverlayScrollbar() && (relevancy == IgnoreOverlayScrollbarSize || !m_hBar->shouldParticipateInHitTesting())))
|
| + if (!hasHorizontalScrollbar() || (horizontalScrollbar()->isOverlayScrollbar() && (relevancy == IgnoreOverlayScrollbarSize || !horizontalScrollbar()->shouldParticipateInHitTesting())))
|
| return 0;
|
| - return m_hBar->height();
|
| + return horizontalScrollbar()->height();
|
| }
|
|
|
| void DeprecatedPaintLayerScrollableArea::positionOverflowControls()
|
| @@ -1171,25 +1127,25 @@ bool DeprecatedPaintLayerScrollableArea::hitTestOverflowControls(HitTestResult&
|
| }
|
|
|
| int resizeControlSize = max(resizeControlRect.height(), 0);
|
| - if (m_vBar && m_vBar->shouldParticipateInHitTesting()) {
|
| + if (hasVerticalScrollbar() && verticalScrollbar()->shouldParticipateInHitTesting()) {
|
| LayoutRect vBarRect(verticalScrollbarStart(0, box().size().width()),
|
| box().borderTop(),
|
| - m_vBar->width(),
|
| - box().size().height() - (box().borderTop() + box().borderBottom()) - (m_hBar ? m_hBar->height() : resizeControlSize));
|
| + verticalScrollbar()->width(),
|
| + box().size().height() - (box().borderTop() + box().borderBottom()) - (hasHorizontalScrollbar() ? horizontalScrollbar()->height() : resizeControlSize));
|
| if (vBarRect.contains(localPoint)) {
|
| - result.setScrollbar(m_vBar.get());
|
| + result.setScrollbar(verticalScrollbar());
|
| return true;
|
| }
|
| }
|
|
|
| resizeControlSize = max(resizeControlRect.width(), 0);
|
| - if (m_hBar && m_hBar->shouldParticipateInHitTesting()) {
|
| + if (hasHorizontalScrollbar() && horizontalScrollbar()->shouldParticipateInHitTesting()) {
|
| LayoutRect hBarRect(horizontalScrollbarStart(0),
|
| - box().size().height() - box().borderBottom() - m_hBar->height(),
|
| - box().size().width() - (box().borderLeft() + box().borderRight()) - (m_vBar ? m_vBar->width() : resizeControlSize),
|
| - m_hBar->height());
|
| + box().size().height() - box().borderBottom() - horizontalScrollbar()->height(),
|
| + box().size().width() - (box().borderLeft() + box().borderRight()) - (hasVerticalScrollbar() ? verticalScrollbar()->width() : resizeControlSize),
|
| + horizontalScrollbar()->height());
|
| if (hBarRect.contains(localPoint)) {
|
| - result.setScrollbar(m_hBar.get());
|
| + result.setScrollbar(horizontalScrollbar());
|
| return true;
|
| }
|
| }
|
| @@ -1490,4 +1446,107 @@ bool DeprecatedPaintLayerScrollableArea::visualViewportSuppliesScrollbars() cons
|
| return frame->settings()->viewportMetaEnabled();
|
| }
|
|
|
| +DeprecatedPaintLayerScrollableArea::ScrollbarManager::ScrollbarManager(DeprecatedPaintLayerScrollableArea& scrollableArea)
|
| + : m_scrollableArea(scrollableArea)
|
| + , m_canDetachScrollbars(0)
|
| + , m_hBarIsAttached(0)
|
| + , m_vBarIsAttached(0)
|
| +{
|
| +}
|
| +
|
| +void DeprecatedPaintLayerScrollableArea::ScrollbarManager::dispose()
|
| +{
|
| + m_canDetachScrollbars = m_hBarIsAttached = m_vBarIsAttached = 0;
|
| + destroyScrollbar(HorizontalScrollbar);
|
| + destroyScrollbar(VerticalScrollbar);
|
| +}
|
| +
|
| +void DeprecatedPaintLayerScrollableArea::ScrollbarManager::setCanDetachScrollbars(bool detach)
|
| +{
|
| + ASSERT(!m_hBarIsAttached || m_hBar);
|
| + ASSERT(!m_vBarIsAttached || m_vBar);
|
| + m_canDetachScrollbars = detach ? 1 : 0;
|
| + if (!detach) {
|
| + if (m_hBar && !m_hBarIsAttached)
|
| + destroyScrollbar(HorizontalScrollbar, true);
|
| + if (m_vBar && !m_vBarIsAttached)
|
| + destroyScrollbar(VerticalScrollbar, true);
|
| + }
|
| +}
|
| +
|
| +void DeprecatedPaintLayerScrollableArea::ScrollbarManager::setHasHorizontalScrollbar(bool hasScrollbar)
|
| +{
|
| + if (hasScrollbar) {
|
| + // This doesn't hit in any tests, but since the equivalent code in setHasVerticalScrollbar
|
| + // does, presumably this code does as well.
|
| + DisableCompositingQueryAsserts disabler;
|
| + if (!m_hBar)
|
| + m_hBar = createScrollbar(HorizontalScrollbar);
|
| + m_hBarIsAttached = 1;
|
| + } else {
|
| + m_hBarIsAttached = 0;
|
| + if (!m_canDetachScrollbars)
|
| + destroyScrollbar(HorizontalScrollbar);
|
| + }
|
| +}
|
| +
|
| +void DeprecatedPaintLayerScrollableArea::ScrollbarManager::setHasVerticalScrollbar(bool hasScrollbar)
|
| +{
|
| + if (hasScrollbar) {
|
| + DisableCompositingQueryAsserts disabler;
|
| + if (!m_vBar)
|
| + m_vBar = createScrollbar(VerticalScrollbar);
|
| + m_vBarIsAttached = 1;
|
| + } else {
|
| + m_vBarIsAttached = 0;
|
| + if (!m_canDetachScrollbars)
|
| + destroyScrollbar(VerticalScrollbar);
|
| + }
|
| +}
|
| +
|
| +PassRefPtrWillBeRawPtr<Scrollbar> DeprecatedPaintLayerScrollableArea::ScrollbarManager::createScrollbar(ScrollbarOrientation orientation)
|
| +{
|
| + ASSERT(orientation == HorizontalScrollbar ? !m_hBarIsAttached : !m_vBarIsAttached);
|
| + RefPtrWillBeRawPtr<Scrollbar> widget = nullptr;
|
| + LayoutObject* actualLayoutObject = layoutObjectForScrollbar(m_scrollableArea.box());
|
| + bool hasCustomScrollbarStyle = actualLayoutObject->isBox() && actualLayoutObject->style()->hasPseudoStyle(SCROLLBAR);
|
| + if (hasCustomScrollbarStyle) {
|
| + widget = LayoutScrollbar::createCustomScrollbar(&m_scrollableArea, orientation, actualLayoutObject->node());
|
| + } else {
|
| + ScrollbarControlSize scrollbarSize = RegularScrollbar;
|
| + if (actualLayoutObject->style()->hasAppearance())
|
| + scrollbarSize = LayoutTheme::theme().scrollbarControlSizeForPart(actualLayoutObject->style()->appearance());
|
| + widget = Scrollbar::create(&m_scrollableArea, orientation, scrollbarSize);
|
| + if (orientation == HorizontalScrollbar)
|
| + m_scrollableArea.didAddScrollbar(widget.get(), HorizontalScrollbar);
|
| + else
|
| + m_scrollableArea.didAddScrollbar(widget.get(), VerticalScrollbar);
|
| + }
|
| + m_scrollableArea.box().document().view()->addChild(widget.get());
|
| + return widget.release();
|
| +}
|
| +
|
| +void DeprecatedPaintLayerScrollableArea::ScrollbarManager::destroyScrollbar(ScrollbarOrientation orientation, bool invalidate)
|
| +{
|
| + RefPtrWillBeMember<Scrollbar>& scrollbar = orientation == HorizontalScrollbar ? m_hBar : m_vBar;
|
| + ASSERT(orientation == HorizontalScrollbar ? !m_hBarIsAttached: !m_vBarIsAttached);
|
| + if (!scrollbar)
|
| + return;
|
| +
|
| + if (invalidate)
|
| + scrollbar->invalidate();
|
| + if (!scrollbar->isCustomScrollbar())
|
| + m_scrollableArea.willRemoveScrollbar(scrollbar.get(), orientation);
|
| +
|
| + toFrameView(scrollbar->parent())->removeChild(scrollbar.get());
|
| + scrollbar->disconnectFromScrollableArea();
|
| + scrollbar = nullptr;
|
| +}
|
| +
|
| +DEFINE_TRACE(DeprecatedPaintLayerScrollableArea::ScrollbarManager)
|
| +{
|
| + visitor->trace(m_hBar);
|
| + visitor->trace(m_vBar);
|
| +}
|
| +
|
| } // namespace blink
|
|
|