OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org> | 2 * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org> |
3 * 1999 Lars Knoll <knoll@kde.org> | 3 * 1999 Lars Knoll <knoll@kde.org> |
4 * 1999 Antti Koivisto <koivisto@kde.org> | 4 * 1999 Antti Koivisto <koivisto@kde.org> |
5 * 2000 Dirk Mueller <mueller@kde.org> | 5 * 2000 Dirk Mueller <mueller@kde.org> |
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. | 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. |
7 * (C) 2006 Graham Dennis (graham.dennis@gmail.com) | 7 * (C) 2006 Graham Dennis (graham.dennis@gmail.com) |
8 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) | 8 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) |
9 * Copyright (C) 2009 Google Inc. All rights reserved. | 9 * Copyright (C) 2009 Google Inc. All rights reserved. |
10 * | 10 * |
(...skipping 955 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
966 | 966 |
967 bool FrameView::hasCompositedContent() const | 967 bool FrameView::hasCompositedContent() const |
968 { | 968 { |
969 #if USE(ACCELERATED_COMPOSITING) | 969 #if USE(ACCELERATED_COMPOSITING) |
970 if (RenderView* renderView = this->renderView()) | 970 if (RenderView* renderView = this->renderView()) |
971 return renderView->compositor()->inCompositingMode(); | 971 return renderView->compositor()->inCompositingMode(); |
972 #endif | 972 #endif |
973 return false; | 973 return false; |
974 } | 974 } |
975 | 975 |
976 bool FrameView::hasCompositedContentIncludingDescendants() const | |
977 { | |
978 #if USE(ACCELERATED_COMPOSITING) | |
979 for (Frame* frame = m_frame.get(); frame; frame = frame->tree()->traverseNex
t(m_frame.get())) { | |
980 RenderView* renderView = frame->contentRenderer(); | |
981 RenderLayerCompositor* compositor = renderView ? renderView->compositor(
) : 0; | |
982 if (compositor) { | |
983 if (compositor->inCompositingMode()) | |
984 return true; | |
985 | |
986 if (!RenderLayerCompositor::allowsIndependentlyCompositedFrames(this
)) | |
987 break; | |
988 } | |
989 } | |
990 #endif | |
991 return false; | |
992 } | |
993 | |
994 bool FrameView::hasCompositingAncestor() const | 976 bool FrameView::hasCompositingAncestor() const |
995 { | 977 { |
996 #if USE(ACCELERATED_COMPOSITING) | 978 #if USE(ACCELERATED_COMPOSITING) |
997 for (Frame* frame = m_frame->tree()->parent(); frame; frame = frame->tree()-
>parent()) { | 979 for (Frame* frame = m_frame->tree()->parent(); frame; frame = frame->tree()-
>parent()) { |
998 if (FrameView* view = frame->view()) { | 980 if (FrameView* view = frame->view()) { |
999 if (view->hasCompositedContent()) | 981 if (view->hasCompositedContent()) |
1000 return true; | 982 return true; |
1001 } | 983 } |
1002 } | 984 } |
1003 #endif | 985 #endif |
(...skipping 469 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1473 setMediaType("print"); | 1455 setMediaType("print"); |
1474 } else { | 1456 } else { |
1475 if (!m_mediaTypeWhenNotPrinting.isNull()) | 1457 if (!m_mediaTypeWhenNotPrinting.isNull()) |
1476 setMediaType(m_mediaTypeWhenNotPrinting); | 1458 setMediaType(m_mediaTypeWhenNotPrinting); |
1477 m_mediaTypeWhenNotPrinting = String(); | 1459 m_mediaTypeWhenNotPrinting = String(); |
1478 } | 1460 } |
1479 } | 1461 } |
1480 | 1462 |
1481 bool FrameView::useSlowRepaints(bool considerOverlap) const | 1463 bool FrameView::useSlowRepaints(bool considerOverlap) const |
1482 { | 1464 { |
1483 bool mustBeSlow = m_slowRepaintObjectCount > 0 || (platformWidget() && hasVi
ewportConstrainedObjects()); | 1465 bool mustBeSlow = m_slowRepaintObjectCount > 0; |
1484 | 1466 |
1485 // FIXME: WidgetMac.mm makes the assumption that useSlowRepaints == | 1467 if (contentsInCompositedLayer()) |
1486 // m_contentIsOpaque, so don't take the fast path for composited layers | |
1487 // if they are a platform widget in order to get painting correctness | |
1488 // for transparent layers. See the comment in WidgetMac::paint. | |
1489 if (contentsInCompositedLayer() && !platformWidget()) | |
1490 return mustBeSlow; | 1468 return mustBeSlow; |
1491 | 1469 |
1492 #if PLATFORM(CHROMIUM) | 1470 #if PLATFORM(CHROMIUM) |
1493 // The chromium compositor does not support scrolling a non-composited frame
within a composited page through | 1471 // The chromium compositor does not support scrolling a non-composited frame
within a composited page through |
1494 // the fast scrolling path, so force slow scrolling in that case. | 1472 // the fast scrolling path, so force slow scrolling in that case. |
1495 if (m_frame->ownerElement() && !hasCompositedContent() && m_frame->page() &&
m_frame->page()->mainFrame()->view()->hasCompositedContent()) | 1473 if (m_frame->ownerElement() && !hasCompositedContent() && m_frame->page() &&
m_frame->page()->mainFrame()->view()->hasCompositedContent()) |
1496 return true; | 1474 return true; |
1497 #endif | 1475 #endif |
1498 | 1476 |
1499 bool isOverlapped = m_isOverlapped && considerOverlap; | 1477 bool isOverlapped = m_isOverlapped && considerOverlap; |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1565 } | 1543 } |
1566 } | 1544 } |
1567 | 1545 |
1568 void FrameView::addViewportConstrainedObject(RenderObject* object) | 1546 void FrameView::addViewportConstrainedObject(RenderObject* object) |
1569 { | 1547 { |
1570 if (!m_viewportConstrainedObjects) | 1548 if (!m_viewportConstrainedObjects) |
1571 m_viewportConstrainedObjects = adoptPtr(new ViewportConstrainedObjectSet
); | 1549 m_viewportConstrainedObjects = adoptPtr(new ViewportConstrainedObjectSet
); |
1572 | 1550 |
1573 if (!m_viewportConstrainedObjects->contains(object)) { | 1551 if (!m_viewportConstrainedObjects->contains(object)) { |
1574 m_viewportConstrainedObjects->add(object); | 1552 m_viewportConstrainedObjects->add(object); |
1575 if (platformWidget()) | |
1576 updateCanBlitOnScrollRecursively(); | |
1577 | 1553 |
1578 if (Page* page = m_frame->page()) { | 1554 if (Page* page = m_frame->page()) { |
1579 if (ScrollingCoordinator* scrollingCoordinator = page->scrollingCoor
dinator()) | 1555 if (ScrollingCoordinator* scrollingCoordinator = page->scrollingCoor
dinator()) |
1580 scrollingCoordinator->frameViewFixedObjectsDidChange(this); | 1556 scrollingCoordinator->frameViewFixedObjectsDidChange(this); |
1581 } | 1557 } |
1582 } | 1558 } |
1583 } | 1559 } |
1584 | 1560 |
1585 void FrameView::removeViewportConstrainedObject(RenderObject* object) | 1561 void FrameView::removeViewportConstrainedObject(RenderObject* object) |
1586 { | 1562 { |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1743 } | 1719 } |
1744 | 1720 |
1745 // Note that this gets called at painting time. | 1721 // Note that this gets called at painting time. |
1746 void FrameView::setIsOverlapped(bool isOverlapped) | 1722 void FrameView::setIsOverlapped(bool isOverlapped) |
1747 { | 1723 { |
1748 if (isOverlapped == m_isOverlapped) | 1724 if (isOverlapped == m_isOverlapped) |
1749 return; | 1725 return; |
1750 | 1726 |
1751 m_isOverlapped = isOverlapped; | 1727 m_isOverlapped = isOverlapped; |
1752 updateCanBlitOnScrollRecursively(); | 1728 updateCanBlitOnScrollRecursively(); |
1753 | |
1754 #if USE(ACCELERATED_COMPOSITING) | |
1755 if (hasCompositedContentIncludingDescendants()) { | |
1756 // Overlap can affect compositing tests, so if it changes, we need to tr
igger | |
1757 // a layer update in the parent document. | |
1758 if (Frame* parentFrame = m_frame->tree()->parent()) { | |
1759 if (RenderView* parentView = parentFrame->contentRenderer()) { | |
1760 RenderLayerCompositor* compositor = parentView->compositor(); | |
1761 compositor->setCompositingLayersNeedRebuild(); | |
1762 compositor->scheduleCompositingLayerUpdate(); | |
1763 } | |
1764 } | |
1765 | |
1766 if (RenderLayerCompositor::allowsIndependentlyCompositedFrames(this)) { | |
1767 // We also need to trigger reevaluation for this and all descendant
frames, | |
1768 // since a frame uses compositing if any ancestor is compositing. | |
1769 for (Frame* frame = m_frame.get(); frame; frame = frame->tree()->tra
verseNext(m_frame.get())) { | |
1770 if (RenderView* view = frame->contentRenderer()) { | |
1771 RenderLayerCompositor* compositor = view->compositor(); | |
1772 compositor->setCompositingLayersNeedRebuild(); | |
1773 compositor->scheduleCompositingLayerUpdate(); | |
1774 } | |
1775 } | |
1776 } | |
1777 } | |
1778 #endif | |
1779 } | 1729 } |
1780 | 1730 |
1781 bool FrameView::isOverlappedIncludingAncestors() const | 1731 bool FrameView::isOverlappedIncludingAncestors() const |
1782 { | 1732 { |
1783 if (isOverlapped()) | 1733 if (isOverlapped()) |
1784 return true; | 1734 return true; |
1785 | 1735 |
1786 if (FrameView* parentView = parentFrameView()) { | 1736 if (FrameView* parentView = parentFrameView()) { |
1787 if (parentView->isOverlapped()) | 1737 if (parentView->isOverlapped()) |
1788 return true; | 1738 return true; |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1943 return; | 1893 return; |
1944 | 1894 |
1945 ViewportConstrainedObjectSet::const_iterator end = m_viewportConstrainedObje
cts->end(); | 1895 ViewportConstrainedObjectSet::const_iterator end = m_viewportConstrainedObje
cts->end(); |
1946 for (ViewportConstrainedObjectSet::const_iterator it = m_viewportConstrained
Objects->begin(); it != end; ++it) { | 1896 for (ViewportConstrainedObjectSet::const_iterator it = m_viewportConstrained
Objects->begin(); it != end; ++it) { |
1947 RenderObject* renderer = *it; | 1897 RenderObject* renderer = *it; |
1948 renderer->setNeedsLayout(true); | 1898 renderer->setNeedsLayout(true); |
1949 } | 1899 } |
1950 } | 1900 } |
1951 | 1901 |
1952 | 1902 |
1953 void FrameView::scrollPositionChangedViaPlatformWidget() | |
1954 { | |
1955 repaintFixedElementsAfterScrolling(); | |
1956 updateFixedElementsAfterScrolling(); | |
1957 scrollPositionChanged(); | |
1958 } | |
1959 | |
1960 void FrameView::scrollPositionChanged() | 1903 void FrameView::scrollPositionChanged() |
1961 { | 1904 { |
1962 frame()->eventHandler()->sendScrollEvent(); | 1905 frame()->eventHandler()->sendScrollEvent(); |
1963 frame()->eventHandler()->dispatchFakeMouseMoveEventSoon(); | 1906 frame()->eventHandler()->dispatchFakeMouseMoveEventSoon(); |
1964 | 1907 |
1965 #if USE(ACCELERATED_COMPOSITING) | 1908 #if USE(ACCELERATED_COMPOSITING) |
1966 if (RenderView* renderView = this->renderView()) { | 1909 if (RenderView* renderView = this->renderView()) { |
1967 if (renderView->usesCompositing()) | 1910 if (renderView->usesCompositing()) |
1968 renderView->compositor()->frameViewDidScroll(); | 1911 renderView->compositor()->frameViewDidScroll(); |
1969 } | 1912 } |
(...skipping 1403 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3373 paintControlTints(); | 3316 paintControlTints(); |
3374 } | 3317 } |
3375 | 3318 |
3376 void FrameView::paintControlTints() | 3319 void FrameView::paintControlTints() |
3377 { | 3320 { |
3378 if (needsLayout()) | 3321 if (needsLayout()) |
3379 layout(); | 3322 layout(); |
3380 PlatformGraphicsContext* const noContext = 0; | 3323 PlatformGraphicsContext* const noContext = 0; |
3381 GraphicsContext context(noContext); | 3324 GraphicsContext context(noContext); |
3382 context.setUpdatingControlTints(true); | 3325 context.setUpdatingControlTints(true); |
3383 if (platformWidget()) | 3326 paint(&context, frameRect()); |
3384 paintContents(&context, visibleContentRect()); | |
3385 else | |
3386 paint(&context, frameRect()); | |
3387 } | 3327 } |
3388 | 3328 |
3389 bool FrameView::wasScrolledByUser() const | 3329 bool FrameView::wasScrolledByUser() const |
3390 { | 3330 { |
3391 return m_wasScrolledByUser; | 3331 return m_wasScrolledByUser; |
3392 } | 3332 } |
3393 | 3333 |
3394 void FrameView::setWasScrolledByUser(bool wasScrolledByUser) | 3334 void FrameView::setWasScrolledByUser(bool wasScrolledByUser) |
3395 { | 3335 { |
3396 if (m_inProgrammaticScroll) | 3336 if (m_inProgrammaticScroll) |
(...skipping 575 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3972 scrollPositionChanged(); | 3912 scrollPositionChanged(); |
3973 frame()->loader()->client()->didChangeScrollOffset(); | 3913 frame()->loader()->client()->didChangeScrollOffset(); |
3974 } | 3914 } |
3975 return true; | 3915 return true; |
3976 } | 3916 } |
3977 | 3917 |
3978 // We don't allow mouse wheeling to happen in a ScrollView that has had its
scrollbars explicitly disabled. | 3918 // We don't allow mouse wheeling to happen in a ScrollView that has had its
scrollbars explicitly disabled. |
3979 if (!canHaveScrollbars()) | 3919 if (!canHaveScrollbars()) |
3980 return false; | 3920 return false; |
3981 | 3921 |
3982 #if !PLATFORM(WX) | |
3983 if (platformWidget()) | |
3984 return false; | |
3985 #endif | |
3986 | |
3987 #if ENABLE(THREADED_SCROLLING) | 3922 #if ENABLE(THREADED_SCROLLING) |
3988 if (Page* page = m_frame->page()) { | 3923 if (Page* page = m_frame->page()) { |
3989 if (ScrollingCoordinator* scrollingCoordinator = page->scrollingCoordina
tor()) { | 3924 if (ScrollingCoordinator* scrollingCoordinator = page->scrollingCoordina
tor()) { |
3990 if (scrollingCoordinator->coordinatesScrollingForFrameView(this)) | 3925 if (scrollingCoordinator->coordinatesScrollingForFrameView(this)) |
3991 return scrollingCoordinator->handleWheelEvent(this, wheelEvent); | 3926 return scrollingCoordinator->handleWheelEvent(this, wheelEvent); |
3992 } | 3927 } |
3993 } | 3928 } |
3994 #endif | 3929 #endif |
3995 | 3930 |
3996 return ScrollableArea::handleWheelEvent(wheelEvent); | 3931 return ScrollableArea::handleWheelEvent(wheelEvent); |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4034 { | 3969 { |
4035 #if USE(ACCELERATED_COMPOSITING) | 3970 #if USE(ACCELERATED_COMPOSITING) |
4036 if (TiledBacking* tiledBacking = this->tiledBacking()) | 3971 if (TiledBacking* tiledBacking = this->tiledBacking()) |
4037 tiledBacking->setScrollingPerformanceLoggingEnabled(flag); | 3972 tiledBacking->setScrollingPerformanceLoggingEnabled(flag); |
4038 #else | 3973 #else |
4039 UNUSED_PARAM(flag); | 3974 UNUSED_PARAM(flag); |
4040 #endif | 3975 #endif |
4041 } | 3976 } |
4042 | 3977 |
4043 } // namespace WebCore | 3978 } // namespace WebCore |
OLD | NEW |