| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2009, 2010 Apple Inc. All rights reserved. | 2 * Copyright (C) 2009, 2010 Apple Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 1554 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1565 RootLayerAttachment attachment = isMainFrame() ? RootLayerAttachedViaChr
omeClient : RootLayerAttachedViaEnclosingFrame; | 1565 RootLayerAttachment attachment = isMainFrame() ? RootLayerAttachedViaChr
omeClient : RootLayerAttachedViaEnclosingFrame; |
| 1566 attachRootLayer(attachment); | 1566 attachRootLayer(attachment); |
| 1567 } else { | 1567 } else { |
| 1568 if (m_rootLayerAttachment == RootLayerUnattached) | 1568 if (m_rootLayerAttachment == RootLayerUnattached) |
| 1569 return; | 1569 return; |
| 1570 | 1570 |
| 1571 detachRootLayer(); | 1571 detachRootLayer(); |
| 1572 } | 1572 } |
| 1573 } | 1573 } |
| 1574 | 1574 |
| 1575 void RenderLayerCompositor::clearMappingForRenderLayerIncludingDescendants(Rende
rLayer* layer) | |
| 1576 { | |
| 1577 if (!layer) | |
| 1578 return; | |
| 1579 | |
| 1580 if (layer->hasCompositedLayerMapping()) { | |
| 1581 removeViewportConstrainedLayer(layer); | |
| 1582 layer->clearCompositedLayerMapping(); | |
| 1583 } | |
| 1584 | |
| 1585 for (RenderLayer* currLayer = layer->firstChild(); currLayer; currLayer = cu
rrLayer->nextSibling()) | |
| 1586 clearMappingForRenderLayerIncludingDescendants(currLayer); | |
| 1587 } | |
| 1588 | |
| 1589 void RenderLayerCompositor::clearMappingForAllRenderLayers() | |
| 1590 { | |
| 1591 clearMappingForRenderLayerIncludingDescendants(m_renderView.layer()); | |
| 1592 } | |
| 1593 | |
| 1594 void RenderLayerCompositor::updateRootLayerPosition() | 1575 void RenderLayerCompositor::updateRootLayerPosition() |
| 1595 { | 1576 { |
| 1596 if (m_rootContentLayer) { | 1577 if (m_rootContentLayer) { |
| 1597 const IntRect& documentRect = m_renderView.documentRect(); | 1578 const IntRect& documentRect = m_renderView.documentRect(); |
| 1598 m_rootContentLayer->setSize(documentRect.size()); | 1579 m_rootContentLayer->setSize(documentRect.size()); |
| 1599 m_rootContentLayer->setPosition(documentRect.location()); | 1580 m_rootContentLayer->setPosition(documentRect.location()); |
| 1600 #if USE(RUBBER_BANDING) | 1581 #if USE(RUBBER_BANDING) |
| 1601 if (m_layerForOverhangShadow) | 1582 if (m_layerForOverhangShadow) |
| 1602 OverscrollTheme::theme()->updateOverhangShadowLayer(m_layerForOverha
ngShadow.get(), m_rootContentLayer.get()); | 1583 OverscrollTheme::theme()->updateOverhangShadowLayer(m_layerForOverha
ngShadow.get(), m_rootContentLayer.get()); |
| 1603 #endif | 1584 #endif |
| 1604 } | 1585 } |
| 1605 if (m_containerLayer) { | 1586 if (m_containerLayer) { |
| 1606 FrameView* frameView = m_renderView.frameView(); | 1587 FrameView* frameView = m_renderView.frameView(); |
| 1607 m_containerLayer->setSize(frameView->unscaledVisibleContentSize()); | 1588 m_containerLayer->setSize(frameView->unscaledVisibleContentSize()); |
| 1608 } | 1589 } |
| 1609 } | 1590 } |
| 1610 | 1591 |
| 1611 bool RenderLayerCompositor::has3DContent() const | |
| 1612 { | |
| 1613 return layerHas3DContent(rootRenderLayer()); | |
| 1614 } | |
| 1615 | |
| 1616 void RenderLayerCompositor::updateStyleDeterminedCompositingReasons(RenderLayer*
layer) | 1592 void RenderLayerCompositor::updateStyleDeterminedCompositingReasons(RenderLayer*
layer) |
| 1617 { | 1593 { |
| 1618 CompositingReasons reasons = m_compositingReasonFinder.styleDeterminedReason
s(layer->renderer()); | 1594 CompositingReasons reasons = m_compositingReasonFinder.styleDeterminedReason
s(layer->renderer()); |
| 1619 layer->setCompositingReasons(reasons, CompositingReasonComboAllStyleDetermin
edReasons); | 1595 layer->setCompositingReasons(reasons, CompositingReasonComboAllStyleDetermin
edReasons); |
| 1620 } | 1596 } |
| 1621 | 1597 |
| 1622 void RenderLayerCompositor::updateDirectCompositingReasons(RenderLayer* layer) | 1598 void RenderLayerCompositor::updateDirectCompositingReasons(RenderLayer* layer) |
| 1623 { | 1599 { |
| 1624 CompositingReasons reasons = m_compositingReasonFinder.directReasons(layer,
&m_needsToRecomputeCompositingRequirements); | 1600 CompositingReasons reasons = m_compositingReasonFinder.directReasons(layer,
&m_needsToRecomputeCompositingRequirements); |
| 1625 layer->setCompositingReasons(reasons, CompositingReasonComboAllDirectReasons
); | 1601 layer->setCompositingReasons(reasons, CompositingReasonComboAllDirectReasons
); |
| (...skipping 517 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2143 | 2119 |
| 2144 // Compositing also affects the answer to RenderIFrame::requiresAcceleratedC
ompositing(), so | 2120 // Compositing also affects the answer to RenderIFrame::requiresAcceleratedC
ompositing(), so |
| 2145 // we need to schedule a style recalc in our parent document. | 2121 // we need to schedule a style recalc in our parent document. |
| 2146 if (HTMLFrameOwnerElement* ownerElement = m_renderView.document().ownerEleme
nt()) { | 2122 if (HTMLFrameOwnerElement* ownerElement = m_renderView.document().ownerEleme
nt()) { |
| 2147 ownerElement->document().renderView()->compositor()->setNeedsToRecompute
CompositingRequirements(); | 2123 ownerElement->document().renderView()->compositor()->setNeedsToRecompute
CompositingRequirements(); |
| 2148 DeprecatedScheduleStyleRecalcDuringCompositingUpdate marker(ownerElement
->document().lifecycle()); | 2124 DeprecatedScheduleStyleRecalcDuringCompositingUpdate marker(ownerElement
->document().lifecycle()); |
| 2149 ownerElement->scheduleLayerUpdate(); | 2125 ownerElement->scheduleLayerUpdate(); |
| 2150 } | 2126 } |
| 2151 } | 2127 } |
| 2152 | 2128 |
| 2153 bool RenderLayerCompositor::layerHas3DContent(const RenderLayer* layer) const | |
| 2154 { | |
| 2155 const RenderStyle* style = layer->renderer()->style(); | |
| 2156 RenderLayerStackingNode* stackingNode = const_cast<RenderLayer*>(layer)->sta
ckingNode(); | |
| 2157 | |
| 2158 if (style && | |
| 2159 (style->transformStyle3D() == TransformStyle3DPreserve3D || | |
| 2160 style->hasPerspective() || | |
| 2161 style->transform().has3DOperation())) | |
| 2162 return true; | |
| 2163 | |
| 2164 stackingNode->updateLayerListsIfNeeded(); | |
| 2165 | |
| 2166 #if !ASSERT_DISABLED | |
| 2167 LayerListMutationDetector mutationChecker(stackingNode); | |
| 2168 #endif | |
| 2169 | |
| 2170 RenderLayerStackingNodeIterator iterator(*layer->stackingNode(), AllChildren
); | |
| 2171 while (RenderLayerStackingNode* curNode = iterator.next()) { | |
| 2172 if (layerHas3DContent(curNode->layer())) | |
| 2173 return true; | |
| 2174 } | |
| 2175 | |
| 2176 return false; | |
| 2177 } | |
| 2178 | |
| 2179 void RenderLayerCompositor::updateViewportConstraintStatus(RenderLayer* layer) | 2129 void RenderLayerCompositor::updateViewportConstraintStatus(RenderLayer* layer) |
| 2180 { | 2130 { |
| 2181 if (CompositingReasonFinder::isViewportConstrainedFixedOrStickyLayer(layer)) | 2131 if (CompositingReasonFinder::isViewportConstrainedFixedOrStickyLayer(layer)) |
| 2182 addViewportConstrainedLayer(layer); | 2132 addViewportConstrainedLayer(layer); |
| 2183 else | 2133 else |
| 2184 removeViewportConstrainedLayer(layer); | 2134 removeViewportConstrainedLayer(layer); |
| 2185 } | 2135 } |
| 2186 | 2136 |
| 2187 void RenderLayerCompositor::addViewportConstrainedLayer(RenderLayer* layer) | 2137 void RenderLayerCompositor::addViewportConstrainedLayer(RenderLayer* layer) |
| 2188 { | 2138 { |
| 2189 m_viewportConstrainedLayers.add(layer); | 2139 m_viewportConstrainedLayers.add(layer); |
| 2190 } | 2140 } |
| 2191 | 2141 |
| 2192 void RenderLayerCompositor::removeViewportConstrainedLayer(RenderLayer* layer) | 2142 void RenderLayerCompositor::removeViewportConstrainedLayer(RenderLayer* layer) |
| 2193 { | 2143 { |
| 2194 if (!m_viewportConstrainedLayers.contains(layer)) | 2144 if (!m_viewportConstrainedLayers.contains(layer)) |
| 2195 return; | 2145 return; |
| 2196 | 2146 |
| 2197 m_viewportConstrainedLayers.remove(layer); | 2147 m_viewportConstrainedLayers.remove(layer); |
| 2198 } | 2148 } |
| 2199 | 2149 |
| 2200 FixedPositionViewportConstraints RenderLayerCompositor::computeFixedViewportCons
traints(RenderLayer* layer) const | |
| 2201 { | |
| 2202 ASSERT(layer->hasCompositedLayerMapping()); | |
| 2203 | |
| 2204 FrameView* frameView = m_renderView.frameView(); | |
| 2205 LayoutRect viewportRect = frameView->viewportConstrainedVisibleContentRect()
; | |
| 2206 | |
| 2207 FixedPositionViewportConstraints constraints; | |
| 2208 | |
| 2209 GraphicsLayer* graphicsLayer = layer->compositedLayerMapping()->mainGraphics
Layer(); | |
| 2210 | |
| 2211 constraints.setLayerPositionAtLastLayout(graphicsLayer->position()); | |
| 2212 constraints.setViewportRectAtLastLayout(viewportRect); | |
| 2213 | |
| 2214 RenderStyle* style = layer->renderer()->style(); | |
| 2215 if (!style->left().isAuto()) | |
| 2216 constraints.addAnchorEdge(ViewportConstraints::AnchorEdgeLeft); | |
| 2217 | |
| 2218 if (!style->right().isAuto()) | |
| 2219 constraints.addAnchorEdge(ViewportConstraints::AnchorEdgeRight); | |
| 2220 | |
| 2221 if (!style->top().isAuto()) | |
| 2222 constraints.addAnchorEdge(ViewportConstraints::AnchorEdgeTop); | |
| 2223 | |
| 2224 if (!style->bottom().isAuto()) | |
| 2225 constraints.addAnchorEdge(ViewportConstraints::AnchorEdgeBottom); | |
| 2226 | |
| 2227 // If left and right are auto, use left. | |
| 2228 if (style->left().isAuto() && style->right().isAuto()) | |
| 2229 constraints.addAnchorEdge(ViewportConstraints::AnchorEdgeLeft); | |
| 2230 | |
| 2231 // If top and bottom are auto, use top. | |
| 2232 if (style->top().isAuto() && style->bottom().isAuto()) | |
| 2233 constraints.addAnchorEdge(ViewportConstraints::AnchorEdgeTop); | |
| 2234 | |
| 2235 return constraints; | |
| 2236 } | |
| 2237 | |
| 2238 StickyPositionViewportConstraints RenderLayerCompositor::computeStickyViewportCo
nstraints(RenderLayer* layer) const | |
| 2239 { | |
| 2240 ASSERT(layer->hasCompositedLayerMapping()); | |
| 2241 // We should never get here for stickies constrained by an enclosing clippin
g layer. | |
| 2242 ASSERT(!layer->enclosingOverflowClipLayer(ExcludeSelf)); | |
| 2243 | |
| 2244 FrameView* frameView = m_renderView.frameView(); | |
| 2245 LayoutRect viewportRect = frameView->viewportConstrainedVisibleContentRect()
; | |
| 2246 | |
| 2247 StickyPositionViewportConstraints constraints; | |
| 2248 | |
| 2249 RenderBoxModelObject* renderer = toRenderBoxModelObject(layer->renderer()); | |
| 2250 | |
| 2251 renderer->computeStickyPositionConstraints(constraints, viewportRect); | |
| 2252 | |
| 2253 GraphicsLayer* graphicsLayer = layer->compositedLayerMapping()->mainGraphics
Layer(); | |
| 2254 | |
| 2255 constraints.setLayerPositionAtLastLayout(graphicsLayer->position()); | |
| 2256 constraints.setStickyOffsetAtLastLayout(renderer->stickyPositionOffset()); | |
| 2257 | |
| 2258 return constraints; | |
| 2259 } | |
| 2260 | |
| 2261 ScrollingCoordinator* RenderLayerCompositor::scrollingCoordinator() const | 2150 ScrollingCoordinator* RenderLayerCompositor::scrollingCoordinator() const |
| 2262 { | 2151 { |
| 2263 if (Page* page = this->page()) | 2152 if (Page* page = this->page()) |
| 2264 return page->scrollingCoordinator(); | 2153 return page->scrollingCoordinator(); |
| 2265 | 2154 |
| 2266 return 0; | 2155 return 0; |
| 2267 } | 2156 } |
| 2268 | 2157 |
| 2269 GraphicsLayerFactory* RenderLayerCompositor::graphicsLayerFactory() const | 2158 GraphicsLayerFactory* RenderLayerCompositor::graphicsLayerFactory() const |
| 2270 { | 2159 { |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2307 } else if (graphicsLayer == m_scrollLayer.get()) { | 2196 } else if (graphicsLayer == m_scrollLayer.get()) { |
| 2308 name = "LocalFrame Scrolling Layer"; | 2197 name = "LocalFrame Scrolling Layer"; |
| 2309 } else { | 2198 } else { |
| 2310 ASSERT_NOT_REACHED(); | 2199 ASSERT_NOT_REACHED(); |
| 2311 } | 2200 } |
| 2312 | 2201 |
| 2313 return name; | 2202 return name; |
| 2314 } | 2203 } |
| 2315 | 2204 |
| 2316 } // namespace WebCore | 2205 } // namespace WebCore |
| OLD | NEW |