Changeset 95158 in webkit
- Timestamp:
- Sep 14, 2011 9:06:49 PM (13 years ago)
- Location:
- trunk
- Files:
-
- 25 added
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/platform/chromium/test_expectations.txt
r95131 r95158 480 480 // Rubber-banding is currently a Mac only feature. 481 481 WONTFIX WIN LINUX : platform/chromium/rubberbanding = FAIL 482 WONTFIX WIN LINUX : platform/chromium-gpu/compositing/rubberbanding = IMAGE 482 483 483 484 // ----------------------------------------------------------------- -
trunk/Source/WebCore/ChangeLog
r95152 r95158 1 2011-09-14 Alexei Svitkine <asvitkine@chromium.org> 2 3 Chromium: Add a layer for rubber-band overhang painting to the hardware path. 4 https://bugs.webkit.org/show_bug.cgi?id=66969 5 6 Also, add layout tests for rubber-band overhang drawing for compositing path. 7 8 Reviewed by James Robinson. 9 10 * page/FrameView.cpp: 11 (WebCore::FrameView::layerForOverhangAreas): 12 * page/FrameView.h: 13 * platform/ScrollView.cpp: 14 (WebCore::ScrollView::scrollContents): 15 (WebCore::ScrollView::wheelEvent): 16 * platform/ScrollView.h: 17 * platform/ScrollableArea.h: 18 (WebCore::ScrollableArea::layerForOverhangAreas): 19 * rendering/RenderLayerCompositor.cpp: 20 (WebCore::RenderLayerCompositor::frameViewDidChangeSize): 21 (WebCore::RenderLayerCompositor::paintContents): 22 (WebCore::RenderLayerCompositor::updateOverflowControlsLayers): 23 (WebCore::RenderLayerCompositor::destroyRootLayer): 24 * rendering/RenderLayerCompositor.h: 25 (WebCore::RenderLayerCompositor::layerForOverhangAreas): 26 1 27 2011-09-14 Antoine Labour <piman@chromium.org> 2 28 -
trunk/Source/WebCore/page/FrameView.cpp
r94464 r95158 686 686 } 687 687 688 #if PLATFORM(CHROMIUM) && ENABLE(RUBBER_BANDING) 689 GraphicsLayer* FrameView::layerForOverhangAreas() const 690 { 691 RenderView* view = m_frame->contentRenderer(); 692 if (!view) 693 return 0; 694 return view->compositor()->layerForOverhangAreas(); 695 } 696 #endif 697 688 698 bool FrameView::syncCompositingStateForThisFrame(Frame* rootFrameForSync) 689 699 { -
trunk/Source/WebCore/page/FrameView.h
r94107 r95158 350 350 virtual GraphicsLayer* layerForVerticalScrollbar() const; 351 351 virtual GraphicsLayer* layerForScrollCorner() const; 352 #if PLATFORM(CHROMIUM) && ENABLE(RUBBER_BANDING) 353 virtual GraphicsLayer* layerForOverhangAreas() const; 354 #endif 352 355 #endif 353 356 -
trunk/Source/WebCore/platform/ScrollView.cpp
r94243 r95158 645 645 IntRect verticalOverhangRect; 646 646 calculateOverhangAreasForPainting(horizontalOverhangRect, verticalOverhangRect); 647 #if USE(ACCELERATED_COMPOSITING) && PLATFORM(CHROMIUM) && ENABLE(RUBBER_BANDING) 648 if (GraphicsLayer* overhangLayer = layerForOverhangAreas()) { 649 bool hasOverhangArea = !horizontalOverhangRect.isEmpty() || !verticalOverhangRect.isEmpty(); 650 overhangLayer->setDrawsContent(hasOverhangArea); 651 } 652 #endif 647 653 if (!horizontalOverhangRect.isEmpty()) 648 654 hostWindow()->invalidateContentsAndWindow(horizontalOverhangRect, false /*immediate*/); … … 1026 1032 } 1027 1033 1028 IntRect horizontalOverhangRect; 1029 IntRect verticalOverhangRect;1030 calculateOverhangAreasForPainting(horizontalOverhangRect, verticalOverhangRect);1031 1032 if (rect.intersects(horizontalOverhangRect) || rect.intersects(verticalOverhangRect))1033 paintOverhangAreas(context, horizontalOverhangRect, verticalOverhangRect, rect); 1034 #if USE(ACCELERATED_COMPOSITING) && PLATFORM(CHROMIUM) && ENABLE(RUBBER_BANDING) 1035 if (!layerForOverhangAreas()) 1036 calculateAndPaintOverhangAreas(context, rect); 1037 #else 1038 calculateAndPaintOverhangAreas(context, rect); 1039 #endif 1034 1040 1035 1041 // Now paint the scrollbars. … … 1093 1099 } 1094 1100 1101 void ScrollView::calculateAndPaintOverhangAreas(GraphicsContext* context, const IntRect& dirtyRect) 1102 { 1103 IntRect horizontalOverhangRect; 1104 IntRect verticalOverhangRect; 1105 calculateOverhangAreasForPainting(horizontalOverhangRect, verticalOverhangRect); 1106 1107 if (dirtyRect.intersects(horizontalOverhangRect) || dirtyRect.intersects(verticalOverhangRect)) 1108 paintOverhangAreas(context, horizontalOverhangRect, verticalOverhangRect, dirtyRect); 1109 } 1110 1095 1111 bool ScrollView::isPointInScrollbarCorner(const IntPoint& windowPoint) 1096 1112 { -
trunk/Source/WebCore/platform/ScrollView.h
r91435 r95158 287 287 void setContainsScrollableAreaWithOverlayScrollbars(bool contains) { m_containsScrollableAreaWithOverlayScrollbars = contains; } 288 288 289 void calculateAndPaintOverhangAreas(GraphicsContext*, const IntRect& dirtyRect); 290 289 291 protected: 290 292 ScrollView(); -
trunk/Source/WebCore/platform/ScrollableArea.h
r94705 r95158 185 185 virtual GraphicsLayer* layerForVerticalScrollbar() const { return 0; } 186 186 virtual GraphicsLayer* layerForScrollCorner() const { return 0; } 187 #if PLATFORM(CHROMIUM) && ENABLE(RUBBER_BANDING) 188 virtual GraphicsLayer* layerForOverhangAreas() const { return 0; } 189 #endif 187 190 #endif 188 191 bool hasLayerForHorizontalScrollbar() const; -
trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp
r94889 r95158 957 957 m_scrollLayer->setPosition(FloatPoint(-scrollPosition.x(), -scrollPosition.y())); 958 958 updateOverflowControlsLayers(); 959 960 #if PLATFORM(CHROMIUM) && ENABLE(RUBBER_BANDING) 961 if (m_layerForOverhangAreas) 962 m_layerForOverhangAreas->setSize(frameView->frameRect().size()); 963 #endif 959 964 } 960 965 } … … 1545 1550 m_renderView->frameView()->paintScrollCorner(&context, transformedClip); 1546 1551 context.restore(); 1552 #if PLATFORM(CHROMIUM) && ENABLE(RUBBER_BANDING) 1553 } else if (graphicsLayer == layerForOverhangAreas()) { 1554 ScrollView* view = m_renderView->frameView(); 1555 view->calculateAndPaintOverhangAreas(&context, clip); 1556 #endif 1547 1557 } 1548 1558 } … … 1610 1620 } 1611 1621 1622 #if PLATFORM(CHROMIUM) && ENABLE(RUBBER_BANDING) 1623 bool RenderLayerCompositor::requiresOverhangAreasLayer() const 1624 { 1625 // Only if this is a top level frame (not iframe). 1626 return !m_renderView->document()->ownerElement(); 1627 } 1628 #endif 1629 1612 1630 void RenderLayerCompositor::updateOverflowControlsLayers() 1613 1631 { 1614 1632 bool layersChanged = false; 1633 1634 #if PLATFORM(CHROMIUM) && ENABLE(RUBBER_BANDING) 1635 if (requiresOverhangAreasLayer()) { 1636 if (!m_layerForOverhangAreas) { 1637 m_layerForOverhangAreas = GraphicsLayer::create(this); 1638 #ifndef NDEBUG 1639 m_layerForOverhangAreas->setName("overhang areas"); 1640 #endif 1641 m_layerForOverhangAreas->setDrawsContent(false); 1642 m_layerForOverhangAreas->setSize(m_renderView->frameView()->frameRect().size()); 1643 m_overflowControlsHostLayer->addChild(m_layerForOverhangAreas.get()); 1644 layersChanged = true; 1645 } 1646 } else if (m_layerForOverhangAreas) { 1647 m_layerForOverhangAreas->removeFromParent(); 1648 m_layerForOverhangAreas = nullptr; 1649 layersChanged = true; 1650 } 1651 #endif 1615 1652 1616 1653 if (requiresHorizontalScrollbarLayer()) { … … 1727 1764 1728 1765 detachRootLayer(); 1766 1767 #if PLATFORM(CHROMIUM) && ENABLE(RUBBER_BANDING) 1768 if (m_layerForOverhangAreas) { 1769 m_layerForOverhangAreas->removeFromParent(); 1770 m_layerForOverhangAreas = nullptr; 1771 } 1772 #endif 1729 1773 1730 1774 if (m_layerForHorizontalScrollbar) { -
trunk/Source/WebCore/rendering/RenderLayerCompositor.h
r93760 r95158 197 197 GraphicsLayer* layerForVerticalScrollbar() const { return m_layerForVerticalScrollbar.get(); } 198 198 GraphicsLayer* layerForScrollCorner() const { return m_layerForScrollCorner.get(); } 199 #if PLATFORM(CHROMIUM) && ENABLE(RUBBER_BANDING) 200 GraphicsLayer* layerForOverhangAreas() const { return m_layerForOverhangAreas.get(); } 201 #endif 199 202 200 203 private: … … 276 279 bool requiresVerticalScrollbarLayer() const; 277 280 bool requiresScrollCornerLayer() const; 281 #if PLATFORM(CHROMIUM) && ENABLE(RUBBER_BANDING) 282 bool requiresOverhangAreasLayer() const; 283 #endif 278 284 279 285 private: … … 312 318 OwnPtr<GraphicsLayer> m_layerForVerticalScrollbar; 313 319 OwnPtr<GraphicsLayer> m_layerForScrollCorner; 320 #if PLATFORM(CHROMIUM) && ENABLE(RUBBER_BANDING) 321 OwnPtr<GraphicsLayer> m_layerForOverhangAreas; 322 #endif 314 323 #if PROFILE_LAYER_REBUILD 315 324 int m_rootLayerUpdateCount;
Note: See TracChangeset
for help on using the changeset viewer.