Chromium Code Reviews| Index: sky/engine/core/frame/FrameView.cpp |
| diff --git a/sky/engine/core/frame/FrameView.cpp b/sky/engine/core/frame/FrameView.cpp |
| index 87694f3c8b32ef1c8cf98ba568ba316c7e8afed9..cea97b6ac28ba1e8ca179856ef2b2b08fee4f78e 100644 |
| --- a/sky/engine/core/frame/FrameView.cpp |
| +++ b/sky/engine/core/frame/FrameView.cpp |
| @@ -97,9 +97,6 @@ FrameView::FrameView(LocalFrame* frame) |
| { |
| ASSERT(m_frame); |
| init(); |
| - |
| - ScrollableArea::setVerticalScrollElasticity(ScrollElasticityAllowed); |
| - ScrollableArea::setHorizontalScrollElasticity(ScrollElasticityAllowed); |
| } |
| PassRefPtr<FrameView> FrameView::create(LocalFrame* frame) |
| @@ -127,15 +124,6 @@ FrameView::~FrameView() |
| if (m_didScrollTimer.isActive()) |
| m_didScrollTimer.stop(); |
| - resetScrollbars(); |
| - |
| - // Custom scrollbars should already be destroyed at this point |
| - ASSERT(!horizontalScrollbar() || !horizontalScrollbar()->isCustomScrollbar()); |
| - ASSERT(!verticalScrollbar() || !verticalScrollbar()->isCustomScrollbar()); |
| - |
| - setHasHorizontalScrollbar(false); // Remove native scrollbars now before we lose the connection to the HostWindow. |
| - setHasVerticalScrollbar(false); |
| - |
| ASSERT(m_frame); |
| ASSERT(m_frame->view() != this || !m_frame->contentRenderer()); |
| // FIXME: Do we need to do something here for OOPI? |
| @@ -166,18 +154,6 @@ void FrameView::reset() |
| m_viewportConstrainedObjects.clear(); |
| } |
| -void FrameView::resetScrollbars() |
| -{ |
| - // Reset the document's scrollbars back to our defaults before we yield the floor. |
| - m_firstLayout = true; |
| - setScrollbarsSuppressed(true); |
| - if (m_canHaveScrollbars) |
| - setScrollbarModes(ScrollbarAuto, ScrollbarAuto); |
| - else |
| - setScrollbarModes(ScrollbarAlwaysOff, ScrollbarAlwaysOff); |
| - setScrollbarsSuppressed(false); |
| -} |
| - |
| void FrameView::init() |
| { |
| reset(); |
| @@ -187,40 +163,17 @@ void FrameView::init() |
| void FrameView::prepareForDetach() |
| { |
| - RELEASE_ASSERT(!isInPerformLayout()); |
| - |
| - if (ScrollAnimator* scrollAnimator = existingScrollAnimator()) |
| - scrollAnimator->cancelAnimations(); |
| - cancelProgrammaticScrollAnimation(); |
| - |
| - if (m_frame->page()) { |
| - if (ScrollingCoordinator* scrollingCoordinator = m_frame->page()->scrollingCoordinator()) |
| - scrollingCoordinator->willDestroyScrollableArea(this); |
| - } |
| + // FIXME(sky): Remove |
| } |
| void FrameView::recalculateScrollbarOverlayStyle() |
| { |
| - ScrollbarOverlayStyle oldOverlayStyle = scrollbarOverlayStyle(); |
| - ScrollbarOverlayStyle overlayStyle = ScrollbarOverlayStyleDefault; |
| - |
| - Color backgroundColor = documentBackgroundColor(); |
| - // Reduce the background color from RGB to a lightness value |
| - // and determine which scrollbar style to use based on a lightness |
| - // heuristic. |
| - double hue, saturation, lightness; |
| - backgroundColor.getHSL(hue, saturation, lightness); |
| - if (lightness <= .5) |
| - overlayStyle = ScrollbarOverlayStyleLight; |
| - |
| - if (oldOverlayStyle != overlayStyle) |
| - setScrollbarOverlayStyle(overlayStyle); |
| + // FIXME(sky): Remove. |
| } |
| void FrameView::clear() |
| { |
| reset(); |
| - setScrollbarsSuppressed(true); |
| } |
| bool FrameView::didFirstLayout() const |
| @@ -246,7 +199,7 @@ void FrameView::setFrameRect(const IntRect& newRect) |
| if (newRect == oldRect) |
| return; |
| - ScrollView::setFrameRect(newRect); |
| + Widget::setFrameRect(newRect); |
| if (RenderView* renderView = this->renderView()) { |
| if (renderView->usesCompositing()) |
| @@ -272,28 +225,23 @@ RenderView* FrameView::renderView() const |
| void FrameView::setCanHaveScrollbars(bool canHaveScrollbars) |
| { |
| - m_canHaveScrollbars = canHaveScrollbars; |
| - ScrollView::setCanHaveScrollbars(canHaveScrollbars); |
| + // FIXME(sky): Remove |
| } |
| -void FrameView::setContentsSize(const IntSize& size) |
| +void FrameView::setContentsSize(const IntSize&) |
| { |
| - if (size == contentsSize()) |
| - return; |
| - |
| - ScrollView::setContentsSize(size); |
| - ScrollView::contentsResized(); |
| + // FIXME(sky): Remove |
| } |
| IntPoint FrameView::clampOffsetAtScale(const IntPoint& offset, float scale) const |
| { |
| - IntPoint maxScrollExtent(contentsSize().width() - scrollOrigin().x(), contentsSize().height() - scrollOrigin().y()); |
| FloatSize scaledSize = unscaledVisibleContentSize(); |
| if (scale) |
| scaledSize.scale(1 / scale); |
| IntPoint clampedOffset = offset; |
| - clampedOffset = clampedOffset.shrunkTo(maxScrollExtent - expandedIntSize(scaledSize)); |
| + clampedOffset = clampedOffset.shrunkTo( |
| + IntPoint(size()) - expandedIntSize(scaledSize)); |
| clampedOffset = clampedOffset.expandedTo(-scrollOrigin()); |
| return clampedOffset; |
| @@ -309,8 +257,6 @@ void FrameView::adjustViewSize() |
| const IntRect rect = renderView->documentRect(); |
| const IntSize& size = rect.size(); |
| - ScrollView::setScrollOrigin(IntPoint(-rect.x(), -rect.y()), true, size == contentsSize()); |
| - |
| setContentsSize(size); |
| } |
| @@ -396,28 +342,13 @@ void FrameView::recalcOverflowAfterStyleChange() |
| renderView->recalcOverflowAfterStyleChange(); |
| IntRect documentRect = renderView->documentRect(); |
| - if (scrollOrigin() == -documentRect.location() && contentsSize() == documentRect.size()) |
| + if (size() == documentRect.size()) |
| return; |
| if (needsLayout()) |
| return; |
| - InUpdateScrollbarsScope inUpdateScrollbarsScope(this); |
| - |
| - bool shouldHaveHorizontalScrollbar = false; |
| - bool shouldHaveVerticalScrollbar = false; |
| - computeScrollbarExistence(shouldHaveHorizontalScrollbar, shouldHaveVerticalScrollbar, documentRect.size()); |
| - |
| - bool hasHorizontalScrollbar = horizontalScrollbar(); |
| - bool hasVerticalScrollbar = verticalScrollbar(); |
| - if (hasHorizontalScrollbar != shouldHaveHorizontalScrollbar |
| - || hasVerticalScrollbar != shouldHaveVerticalScrollbar) { |
| - setNeedsLayout(); |
| - return; |
| - } |
| - |
| adjustViewSize(); |
| - updateScrollbarGeometry(); |
| } |
| bool FrameView::usesCompositedScrolling() const |
| @@ -462,6 +393,23 @@ GraphicsLayer* FrameView::layerForScrollCorner() const |
| return renderView->compositor()->layerForScrollCorner(); |
| } |
| +IntRect FrameView::contentsToScreen(const IntRect& rect) const |
| +{ |
| + HostWindow* window = hostWindow(); |
| + if (!window) |
| + return IntRect(); |
| + return window->rootViewToScreen(contentsToRootView(rect)); |
| +} |
| + |
| +bool FrameView::scheduleAnimation() |
| +{ |
| + if (HostWindow* window = hostWindow()) { |
| + window->scheduleAnimation(); |
| + return true; |
| + } |
| + return false; |
| +} |
| + |
| bool FrameView::isEnclosedInCompositingLayer() const |
| { |
| return false; |
| @@ -609,35 +557,13 @@ void FrameView::layout(bool allowSubtree) |
| m_nestedLayoutCount++; |
| - ScrollbarMode hMode; |
| - ScrollbarMode vMode; |
| - calculateScrollbarModesForLayoutAndSetViewportRenderer(hMode, vMode); |
| - |
| if (!inSubtreeLayout) { |
| - // Now set our scrollbar state for the layout. |
| - ScrollbarMode currentHMode = horizontalScrollbarMode(); |
| - ScrollbarMode currentVMode = verticalScrollbarMode(); |
| - |
| if (m_firstLayout) { |
| - setScrollbarsSuppressed(true); |
| - |
| m_doFullPaintInvalidation = true; |
| m_firstLayout = false; |
| m_firstLayoutCallbackPending = true; |
| m_lastViewportSize = layoutSize(IncludeScrollbars); |
| m_lastZoomFactor = rootForThisLayout->style()->zoom(); |
| - |
| - // Set the initial vMode to AlwaysOn if we're auto. |
| - if (vMode == ScrollbarAuto) |
| - setVerticalScrollbarMode(ScrollbarAlwaysOn); // This causes a vertical scrollbar to appear. |
| - // Set the initial hMode to AlwaysOff if we're auto. |
| - if (hMode == ScrollbarAuto) |
| - setHorizontalScrollbarMode(ScrollbarAlwaysOff); // This causes a horizontal scrollbar to disappear. |
| - |
| - setScrollbarModes(hMode, vMode); |
| - setScrollbarsSuppressed(false, true); |
| - } else if (hMode != currentHMode || vMode != currentVMode) { |
| - setScrollbarModes(hMode, vMode); |
| } |
| m_size = LayoutSize(layoutSize().width(), layoutSize().height()); |
| @@ -672,8 +598,10 @@ void FrameView::layout(bool allowSubtree) |
| ASSERT(!rootForThisLayout->needsLayout()); |
| - if (document->hasListenerType(Document::OVERFLOWCHANGED_LISTENER)) |
| - updateOverflowStatus(layoutSize().width() < contentsWidth(), layoutSize().height() < contentsHeight()); |
| + if (document->hasListenerType(Document::OVERFLOWCHANGED_LISTENER)) { |
| + updateOverflowStatus(layoutSize().width() < width(), |
| + layoutSize().height() < height()); |
| + } |
| scheduleOrPerformPostLayoutTasks(); |
| @@ -714,13 +642,6 @@ void FrameView::invalidateTreeIfNeeded() |
| rootForPaintInvalidation.invalidateTreeIfNeeded(rootPaintInvalidationState); |
| - // Invalidate the paint of the frameviews scrollbars if needed |
| - if (hasVerticalBarDamage()) |
| - invalidateRect(verticalBarDamage()); |
| - if (hasHorizontalBarDamage()) |
| - invalidateRect(horizontalBarDamage()); |
| - resetScrollbarDamage(); |
| - |
| m_doFullPaintInvalidation = false; |
| #ifndef NDEBUG |
| renderView()->assertSubtreeClearedPaintInvalidationState(); |
| @@ -923,15 +844,12 @@ bool FrameView::shouldSetCursor() const |
| void FrameView::scrollContentsIfNeededRecursive() |
| { |
| - scrollContentsIfNeeded(); |
| + // FIXME(sky): Remove |
| } |
| void FrameView::scrollContentsIfNeeded() |
| { |
| - bool didScroll = !pendingScrollDelta().isZero(); |
| - ScrollView::scrollContentsIfNeeded(); |
| - if (didScroll) |
| - updateFixedElementPaintInvalidationRectsAfterScroll(); |
| + // FIXME(sky): Remove |
| } |
| bool FrameView::scrollContentsFastPath(const IntSize& scrollDelta) |
| @@ -995,17 +913,12 @@ bool FrameView::scrollContentsFastPath(const IntSize& scrollDelta) |
| void FrameView::scrollContentsSlowPath(const IntRect& updateRect) |
| { |
| - if (contentsInCompositedLayer()) { |
| - IntRect updateRect = visibleContentRect(); |
| - ASSERT(renderView()); |
| - renderView()->layer()->paintInvalidator().setBackingNeedsPaintInvalidationInRect(updateRect); |
| - } |
| - ScrollView::scrollContentsSlowPath(updateRect); |
| + // FIXME(sky): Remove |
| } |
| void FrameView::restoreScrollbar() |
| { |
| - setScrollbarsSuppressed(false); |
| + // FIXME(sky): Remove |
| } |
| void FrameView::scrollElementToRect(Element* element, const IntRect& rect) |
| @@ -1044,38 +957,18 @@ void FrameView::scrollElementToRect(Element* element, const IntRect& rect) |
| void FrameView::setScrollPosition(const IntPoint& scrollPoint, ScrollBehavior scrollBehavior) |
| { |
| - cancelProgrammaticScrollAnimation(); |
| - TemporaryChange<bool> changeInProgrammaticScroll(m_inProgrammaticScroll, true); |
| - |
| - IntPoint newScrollPosition = adjustScrollPositionWithinRange(scrollPoint); |
| - |
| - if (newScrollPosition == scrollPosition()) |
| - return; |
| - |
| - if (scrollBehavior == ScrollBehaviorAuto) { |
| - RenderObject* renderer = m_frame->document()->documentElement() ? m_frame->document()->documentElement()->renderer() : 0; |
| - if (renderer) |
| - scrollBehavior = renderer->style()->scrollBehavior(); |
| - else |
| - scrollBehavior = ScrollBehaviorInstant; |
| - } |
| - ScrollView::setScrollPosition(newScrollPosition, scrollBehavior); |
| + // FIXME(sky): Remove |
| } |
| -void FrameView::setScrollPositionNonProgrammatically(const IntPoint& scrollPoint) |
| +void FrameView::setScrollPositionNonProgrammatically(const IntPoint&) |
| { |
| - IntPoint newScrollPosition = adjustScrollPositionWithinRange(scrollPoint); |
| - |
| - if (newScrollPosition == scrollPosition()) |
| - return; |
| - |
| - TemporaryChange<bool> changeInProgrammaticScroll(m_inProgrammaticScroll, false); |
| - notifyScrollPositionChanged(newScrollPosition); |
| + // FIXME(sky): Remove |
| } |
| -IntSize FrameView::layoutSize(IncludeScrollbarsInRect scrollbarInclusion) const |
| +// FIXME(sky): remove |
| +IntSize FrameView::layoutSize(IncludeScrollbarsInRect) const |
| { |
| - return scrollbarInclusion == ExcludeScrollbars ? excludeScrollbars(m_layoutSize) : m_layoutSize; |
| + return m_layoutSize; |
| } |
| void FrameView::setLayoutSize(const IntSize& size) |
| @@ -1174,14 +1067,7 @@ void FrameView::updateCompositedSelectionBoundsIfNeeded() |
| bool FrameView::isRubberBandInProgress() const |
| { |
| - if (scrollbarsSuppressed()) |
| - return false; |
| - |
| - // If the main thread updates the scroll position for this FrameView, we should return |
| - // ScrollAnimator::isRubberBandInProgress(). |
| - if (ScrollAnimator* scrollAnimator = existingScrollAnimator()) |
| - return scrollAnimator->isRubberBandInProgress(); |
| - |
| + // FIXME(sky): Remove |
| return false; |
| } |
| @@ -1207,12 +1093,18 @@ void FrameView::contentRectangleForPaintInvalidation(const IntRect& r) |
| RELEASE_ASSERT_NOT_REACHED(); |
| } |
| - ScrollView::contentRectangleForPaintInvalidation(r); |
| + IntRect paintRect = r; |
| + if (clipsPaintInvalidations() && !paintsEntireContents()) |
| + paintRect.intersect(visibleContentRect()); |
| + if (paintRect.isEmpty()) |
| + return; |
| + |
| + if (HostWindow* window = hostWindow()) |
| + window->invalidateContentsAndRootView(contentsToWindow(paintRect)); |
| } |
| void FrameView::contentsResized() |
| { |
| - ScrollView::contentsResized(); |
| setNeedsLayout(); |
| } |
| @@ -1480,7 +1372,7 @@ IntRect FrameView::windowClipRect(IncludeScrollbarsInRect scrollbarInclusion) co |
| ASSERT(m_frame->view() == this); |
| if (paintsEntireContents()) |
| - return IntRect(IntPoint(), contentsSize()); |
| + return IntRect(IntPoint(), size()); |
| // Set our clip rect to be our contents. |
| IntRect clipRect = contentsToWindow(visibleContentRect(scrollbarInclusion)); |
| @@ -1495,25 +1387,12 @@ bool FrameView::isActive() const |
| void FrameView::scrollTo(const IntSize& newOffset) |
| { |
| - LayoutSize offset = scrollOffset(); |
| - ScrollView::scrollTo(newOffset); |
| - if (offset != scrollOffset()) { |
| - updateLayersAndCompositingAfterScrollIfNeeded(); |
| - scrollPositionChanged(); |
| - } |
| - frame().loaderClient()->didChangeScrollOffset(); |
| + // FIXME(sky): remove |
| } |
| -void FrameView::invalidateScrollbarRect(Scrollbar* scrollbar, const IntRect& rect) |
| +void FrameView::invalidateScrollbarRect(Scrollbar*, const IntRect&) |
| { |
| - // Add in our offset within the FrameView. |
| - IntRect dirtyRect = rect; |
| - dirtyRect.moveBy(scrollbar->location()); |
| - |
| - if (isInPerformLayout()) |
| - addScrollbarDamage(scrollbar, rect); |
| - else |
| - invalidateRect(dirtyRect); |
| + // FIXME(sky): remove |
| } |
| void FrameView::getTickmarks(Vector<IntRect>& tickmarks) const |
| @@ -1528,9 +1407,7 @@ void FrameView::setVisibleContentScaleFactor(float visibleContentScaleFactor) |
| { |
| if (m_visibleContentScaleFactor == visibleContentScaleFactor) |
| return; |
| - |
| m_visibleContentScaleFactor = visibleContentScaleFactor; |
| - updateScrollbars(scrollOffset()); |
| } |
| void FrameView::setInputEventsTransformForEmulation(const IntSize& offset, float contentScaleFactor) |
| @@ -1567,27 +1444,8 @@ IntRect FrameView::scrollableAreaBoundingBox() const |
| bool FrameView::isScrollable() |
| { |
| - // Check for: |
| - // 1) If there an actual overflow. |
| - // 2) display:none or visibility:hidden set to self or inherited. |
| - // 3) overflow{-x,-y}: hidden; |
| - // 4) scrolling: no; |
| - |
| - // Covers #1 |
| - IntSize contentsSize = this->contentsSize(); |
| - IntSize visibleContentSize = visibleContentRect().size(); |
| - if ((contentsSize.height() <= visibleContentSize.height() && contentsSize.width() <= visibleContentSize.width())) |
| - return false; |
| - |
| - |
| - // Cover #3 and #4. |
| - ScrollbarMode horizontalMode; |
| - ScrollbarMode verticalMode; |
| - calculateScrollbarModesForLayoutAndSetViewportRenderer(horizontalMode, verticalMode, RulesFromWebContentOnly); |
| - if (horizontalMode == ScrollbarAlwaysOff && verticalMode == ScrollbarAlwaysOff) |
| - return false; |
| - |
| - return true; |
| + // FIXME(sky): Remove |
| + return false; |
| } |
| void FrameView::notifyPageThatContentAreaWillPaint() const |
| @@ -1596,8 +1454,6 @@ void FrameView::notifyPageThatContentAreaWillPaint() const |
| if (!page) |
| return; |
| - contentAreaWillPaint(); |
| - |
| if (!m_scrollableAreas) |
| return; |
| @@ -1748,8 +1604,6 @@ void FrameView::paintOverhangAreas(GraphicsContext* context, const IntRect& hori |
| { |
| if (m_frame->page()->chrome().client().paintCustomOverhangArea(context, horizontalOverhangArea, verticalOverhangArea, dirtyRect)) |
| return; |
| - |
| - ScrollView::paintOverhangAreas(context, horizontalOverhangArea, verticalOverhangArea, dirtyRect); |
| } |
| void FrameView::updateWidgetPositionsIfNeeded() |
| @@ -1954,29 +1808,24 @@ void FrameView::removeScrollableArea(ScrollableArea* scrollableArea) |
| m_scrollableAreas->remove(scrollableArea); |
| } |
| -void FrameView::removeChild(Widget* widget) |
| +void FrameView::addChild(PassRefPtr<Widget> prpChild) |
| { |
| - if (widget->isFrameView()) |
| - removeScrollableArea(toFrameView(widget)); |
| + Widget* child = prpChild.get(); |
| + ASSERT(child != this && !child->parent()); |
| + child->setParent(this); |
| + m_children.add(prpChild); |
| +} |
| - ScrollView::removeChild(widget); |
| +void FrameView::removeChild(Widget* widget) |
| +{ |
| + ASSERT(widget->parent() == this); |
| + widget->setParent(0); |
| + m_children.remove(widget); |
| } |
| bool FrameView::wheelEvent(const PlatformWheelEvent& wheelEvent) |
| { |
| - bool allowScrolling = userInputScrollable(HorizontalScrollbar) || userInputScrollable(VerticalScrollbar); |
| - |
| - if (!isScrollable()) |
| - allowScrolling = false; |
| - |
| - if (allowScrolling && ScrollableArea::handleWheelEvent(wheelEvent)) |
| - return true; |
| - |
| - // If the frame didn't handle the event, give the pinch-zoom viewport a chance to |
| - // process the scroll event. |
| - if (m_frame->settings()->pinchVirtualViewportEnabled()) |
| - return page()->frameHost().pinchViewport().handleWheelEvent(wheelEvent); |
| - |
| + // FIXME(sky): Remove |
| return false; |
| } |
| @@ -2011,7 +1860,11 @@ void FrameView::frameRectsChanged() |
| if (layoutSizeFixedToFrameSize()) |
| setLayoutSizeInternal(frameRect().size()); |
| - ScrollView::frameRectsChanged(); |
| + HashSet<RefPtr<Widget> >::const_iterator end = m_children.end(); |
| + for (HashSet<RefPtr<Widget> >::const_iterator current = m_children.begin(); |
| + current != end; ++current) { |
|
abarth-chromium
2014/10/24 03:16:06
for (const auto& widget : m_children) {
...
}
F
ojan
2014/10/24 03:21:01
Amazing. Done.
I guess it's time to actually lear
|
| + (*current)->frameRectsChanged(); |
| + } |
| } |
| void FrameView::setLayoutSizeInternal(const IntSize& size) |