| 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 566 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 577 setCompositingLayersNeedRebuild(); | 577 setCompositingLayersNeedRebuild(); |
| 578 } | 578 } |
| 579 | 579 |
| 580 void RenderLayerCompositor::layerWillBeRemoved(RenderLayer* parent, RenderLayer*
child) | 580 void RenderLayerCompositor::layerWillBeRemoved(RenderLayer* parent, RenderLayer*
child) |
| 581 { | 581 { |
| 582 if (!child->isComposited() || parent->renderer()->documentBeingDestroyed()) | 582 if (!child->isComposited() || parent->renderer()->documentBeingDestroyed()) |
| 583 return; | 583 return; |
| 584 | 584 |
| 585 setCompositingParent(child, 0); | 585 setCompositingParent(child, 0); |
| 586 | 586 |
| 587 RenderLayer* compLayer = parent->enclosingCompositingLayerForRepaint(); | 587 RenderLayer* compLayer = parent->enclosingCompositingLayer(); |
| 588 if (compLayer) { | 588 if (compLayer) { |
| 589 ASSERT(compLayer->backing()); | 589 ASSERT(compLayer->backing()); |
| 590 LayoutRect compBounds = child->backing()->compositedBounds(); | 590 LayoutRect compBounds = child->backing()->compositedBounds(); |
| 591 | 591 |
| 592 LayoutPoint offset; | 592 LayoutPoint offset; |
| 593 child->convertToLayerCoords(compLayer, offset); | 593 child->convertToLayerCoords(compLayer, offset); |
| 594 compBounds.moveBy(offset); | 594 compBounds.moveBy(offset); |
| 595 | 595 |
| 596 compLayer->setBackingNeedsRepaintInRect(compBounds); | 596 compLayer->setBackingNeedsRepaintInRect(compBounds); |
| 597 | 597 |
| (...skipping 598 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1196 | 1196 |
| 1197 | 1197 |
| 1198 void RenderLayerCompositor::repaintCompositedLayersAbsoluteRect(const IntRect& a
bsRect) | 1198 void RenderLayerCompositor::repaintCompositedLayersAbsoluteRect(const IntRect& a
bsRect) |
| 1199 { | 1199 { |
| 1200 recursiveRepaintLayerRect(rootRenderLayer(), absRect); | 1200 recursiveRepaintLayerRect(rootRenderLayer(), absRect); |
| 1201 } | 1201 } |
| 1202 | 1202 |
| 1203 void RenderLayerCompositor::recursiveRepaintLayerRect(RenderLayer* layer, const
IntRect& rect) | 1203 void RenderLayerCompositor::recursiveRepaintLayerRect(RenderLayer* layer, const
IntRect& rect) |
| 1204 { | 1204 { |
| 1205 // FIXME: This method does not work correctly with transforms. | 1205 // FIXME: This method does not work correctly with transforms. |
| 1206 if (layer->isComposited() && !layer->backing()->paintsIntoCompositedAncestor
()) | 1206 if (layer->isComposited()) |
| 1207 layer->setBackingNeedsRepaintInRect(rect); | 1207 layer->setBackingNeedsRepaintInRect(rect); |
| 1208 | 1208 |
| 1209 #if !ASSERT_DISABLED | 1209 #if !ASSERT_DISABLED |
| 1210 LayerListMutationDetector mutationChecker(layer); | 1210 LayerListMutationDetector mutationChecker(layer); |
| 1211 #endif | 1211 #endif |
| 1212 | 1212 |
| 1213 if (layer->hasCompositingDescendant()) { | 1213 if (layer->hasCompositingDescendant()) { |
| 1214 if (Vector<RenderLayer*>* negZOrderList = layer->negZOrderList()) { | 1214 if (Vector<RenderLayer*>* negZOrderList = layer->negZOrderList()) { |
| 1215 size_t listSize = negZOrderList->size(); | 1215 size_t listSize = negZOrderList->size(); |
| 1216 for (size_t i = 0; i < listSize; ++i) { | 1216 for (size_t i = 0; i < listSize; ++i) { |
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1391 bool RenderLayerCompositor::requiresCompositingLayer(const RenderLayer* layer) c
onst | 1391 bool RenderLayerCompositor::requiresCompositingLayer(const RenderLayer* layer) c
onst |
| 1392 { | 1392 { |
| 1393 RenderObject* renderer = layer->renderer(); | 1393 RenderObject* renderer = layer->renderer(); |
| 1394 // The compositing state of a reflection should match that of its reflected
layer. | 1394 // The compositing state of a reflection should match that of its reflected
layer. |
| 1395 if (layer->isReflection()) { | 1395 if (layer->isReflection()) { |
| 1396 renderer = renderer->parent(); // The RenderReplica's parent is the obje
ct being reflected. | 1396 renderer = renderer->parent(); // The RenderReplica's parent is the obje
ct being reflected. |
| 1397 layer = toRenderBoxModelObject(renderer)->layer(); | 1397 layer = toRenderBoxModelObject(renderer)->layer(); |
| 1398 } | 1398 } |
| 1399 // The root layer always has a compositing layer, but it may not have backin
g. | 1399 // The root layer always has a compositing layer, but it may not have backin
g. |
| 1400 return requiresCompositingForTransform(renderer) | 1400 return requiresCompositingForTransform(renderer) |
| 1401 || requiresCompositingForVideo(renderer) | 1401 || requiresCompositingForVideo(renderer) |
| 1402 || requiresCompositingForCanvas(renderer) | 1402 || requiresCompositingForCanvas(renderer) |
| 1403 || requiresCompositingForPlugin(renderer) | 1403 || requiresCompositingForPlugin(renderer) |
| 1404 || requiresCompositingForFrame(renderer) | 1404 || requiresCompositingForFrame(renderer) |
| 1405 || (canRender3DTransforms() && renderer->style()->backfaceVisibility() =
= BackfaceVisibilityHidden) | 1405 || (canRender3DTransforms() && renderer->style()->backfaceVisibilit
y() == BackfaceVisibilityHidden) |
| 1406 || clipsCompositingDescendants(layer) | 1406 || clipsCompositingDescendants(layer) |
| 1407 || requiresCompositingForAnimation(renderer) | 1407 || requiresCompositingForAnimation(renderer) |
| 1408 || requiresCompositingForFilters(renderer) | 1408 || requiresCompositingForFilters(renderer) |
| 1409 || requiresCompositingForPosition(renderer, layer); | 1409 || requiresCompositingForPosition(renderer, layer); |
| 1410 } | 1410 } |
| 1411 | 1411 |
| 1412 bool RenderLayerCompositor::canBeComposited(const RenderLayer* layer) const | 1412 bool RenderLayerCompositor::canBeComposited(const RenderLayer* layer) const |
| 1413 { | 1413 { |
| 1414 return m_hasAcceleratedCompositing && layer->isSelfPaintingLayer(); | 1414 return m_hasAcceleratedCompositing && layer->isSelfPaintingLayer(); |
| 1415 } | 1415 } |
| 1416 | 1416 |
| 1417 bool RenderLayerCompositor::requiresOwnBackingStore(const RenderLayer* layer, co
nst RenderLayer* compositingAncestorLayer) const | |
| 1418 { | |
| 1419 RenderObject* renderer = layer->renderer(); | |
| 1420 if (compositingAncestorLayer | |
| 1421 && !(compositingAncestorLayer->backing()->graphicsLayer()->drawsContent(
) | |
| 1422 || compositingAncestorLayer->backing()->paintsIntoWindow() | |
| 1423 || compositingAncestorLayer->backing()->paintsIntoCompositedAncestor
())) | |
| 1424 return true; | |
| 1425 | |
| 1426 return layer->isRootLayer() | |
| 1427 || layer->transform() // note: excludes perspective and transformStyle3D
. | |
| 1428 || requiresCompositingForVideo(renderer) | |
| 1429 || requiresCompositingForCanvas(renderer) | |
| 1430 || requiresCompositingForPlugin(renderer) | |
| 1431 || requiresCompositingForFrame(renderer) | |
| 1432 || (canRender3DTransforms() && renderer->style()->backfaceVisibility() =
= BackfaceVisibilityHidden) | |
| 1433 || requiresCompositingForAnimation(renderer) | |
| 1434 || requiresCompositingForFilters(renderer) | |
| 1435 || requiresCompositingForPosition(renderer, layer) | |
| 1436 || renderer->isTransparent() | |
| 1437 || renderer->hasMask() | |
| 1438 || renderer->hasReflection() | |
| 1439 || renderer->hasFilter() | |
| 1440 || layer->mustOverlapCompositedLayers(); | |
| 1441 } | |
| 1442 | |
| 1443 #if !LOG_DISABLED | 1417 #if !LOG_DISABLED |
| 1444 const char* RenderLayerCompositor::reasonForCompositing(const RenderLayer* layer
) | 1418 const char* RenderLayerCompositor::reasonForCompositing(const RenderLayer* layer
) |
| 1445 { | 1419 { |
| 1446 RenderObject* renderer = layer->renderer(); | 1420 RenderObject* renderer = layer->renderer(); |
| 1447 if (layer->isReflection()) { | 1421 if (layer->isReflection()) { |
| 1448 renderer = renderer->parent(); | 1422 renderer = renderer->parent(); |
| 1449 layer = toRenderBoxModelObject(renderer)->layer(); | 1423 layer = toRenderBoxModelObject(renderer)->layer(); |
| 1450 } | 1424 } |
| 1451 | 1425 |
| 1452 if (renderer->hasTransform() && renderer->style()->hasPerspective()) | 1426 if (renderer->hasTransform() && renderer->style()->hasPerspective()) |
| (...skipping 833 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2286 if (Page* page = frame->page()) | 2260 if (Page* page = frame->page()) |
| 2287 return page->scrollingCoordinator(); | 2261 return page->scrollingCoordinator(); |
| 2288 } | 2262 } |
| 2289 | 2263 |
| 2290 return 0; | 2264 return 0; |
| 2291 } | 2265 } |
| 2292 | 2266 |
| 2293 } // namespace WebCore | 2267 } // namespace WebCore |
| 2294 | 2268 |
| 2295 #endif // USE(ACCELERATED_COMPOSITING) | 2269 #endif // USE(ACCELERATED_COMPOSITING) |
| OLD | NEW |