OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2009 Apple Inc. All rights reserved. | 2 * Copyright (C) 2009 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 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
91 , m_contentsOpaque(false) | 91 , m_contentsOpaque(false) |
92 , m_preserves3D(false) | 92 , m_preserves3D(false) |
93 , m_backfaceVisibility(true) | 93 , m_backfaceVisibility(true) |
94 , m_masksToBounds(false) | 94 , m_masksToBounds(false) |
95 , m_drawsContent(false) | 95 , m_drawsContent(false) |
96 , m_contentsVisible(true) | 96 , m_contentsVisible(true) |
97 , m_paintingPhase(GraphicsLayerPaintAllWithOverflowClip) | 97 , m_paintingPhase(GraphicsLayerPaintAllWithOverflowClip) |
98 , m_contentsOrientation(CompositingCoordinatesTopDown) | 98 , m_contentsOrientation(CompositingCoordinatesTopDown) |
99 , m_parent(0) | 99 , m_parent(0) |
100 , m_maskLayer(0) | 100 , m_maskLayer(0) |
| 101 , m_contentsClippingMaskLayer(0) |
101 , m_replicaLayer(0) | 102 , m_replicaLayer(0) |
102 , m_replicatedLayer(0) | 103 , m_replicatedLayer(0) |
103 , m_paintCount(0) | 104 , m_paintCount(0) |
104 , m_contentsLayer(0) | 105 , m_contentsLayer(0) |
105 , m_contentsLayerId(0) | 106 , m_contentsLayerId(0) |
106 , m_contentsLayerPurpose(NoContentsLayer) | 107 , m_contentsLayerPurpose(NoContentsLayer) |
107 , m_scrollableArea(0) | 108 , m_scrollableArea(0) |
108 , m_compositingReasons(WebKit::CompositingReasonUnknown) | 109 , m_compositingReasons(WebKit::CompositingReasonUnknown) |
109 { | 110 { |
110 #ifndef NDEBUG | 111 #ifndef NDEBUG |
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
424 } | 425 } |
425 | 426 |
426 void GraphicsLayer::updateContentsRect() | 427 void GraphicsLayer::updateContentsRect() |
427 { | 428 { |
428 WebLayer* contentsLayer = contentsLayerIfRegistered(); | 429 WebLayer* contentsLayer = contentsLayerIfRegistered(); |
429 if (!contentsLayer) | 430 if (!contentsLayer) |
430 return; | 431 return; |
431 | 432 |
432 contentsLayer->setPosition(FloatPoint(m_contentsRect.x(), m_contentsRect.y()
)); | 433 contentsLayer->setPosition(FloatPoint(m_contentsRect.x(), m_contentsRect.y()
)); |
433 contentsLayer->setBounds(IntSize(m_contentsRect.width(), m_contentsRect.heig
ht())); | 434 contentsLayer->setBounds(IntSize(m_contentsRect.width(), m_contentsRect.heig
ht())); |
| 435 |
| 436 if (m_contentsClippingMaskLayer) { |
| 437 if (m_contentsClippingMaskLayer->size() != m_contentsRect.size()) { |
| 438 m_contentsClippingMaskLayer->setSize(m_contentsRect.size()); |
| 439 m_contentsClippingMaskLayer->setNeedsDisplay(); |
| 440 } |
| 441 m_contentsClippingMaskLayer->setPosition(FloatPoint()); |
| 442 m_contentsClippingMaskLayer->setOffsetFromRenderer(offsetFromRenderer()
+ IntSize(m_contentsRect.location().x(), m_contentsRect.location().y())); |
| 443 } |
434 } | 444 } |
435 | 445 |
436 static HashSet<int>* s_registeredLayerSet; | 446 static HashSet<int>* s_registeredLayerSet; |
437 | 447 |
438 void GraphicsLayer::registerContentsLayer(WebLayer* layer) | 448 void GraphicsLayer::registerContentsLayer(WebLayer* layer) |
439 { | 449 { |
440 if (!s_registeredLayerSet) | 450 if (!s_registeredLayerSet) |
441 s_registeredLayerSet = new HashSet<int>; | 451 s_registeredLayerSet = new HashSet<int>; |
442 if (s_registeredLayerSet->contains(layer->id())) | 452 if (s_registeredLayerSet->contains(layer->id())) |
443 CRASH(); | 453 CRASH(); |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
489 m_contentsLayer->setAnchorPoint(FloatPoint(0, 0)); | 499 m_contentsLayer->setAnchorPoint(FloatPoint(0, 0)); |
490 m_contentsLayer->setUseParentBackfaceVisibility(true); | 500 m_contentsLayer->setUseParentBackfaceVisibility(true); |
491 | 501 |
492 // It is necessary to call setDrawsContent as soon as we receive the new
contentsLayer, for | 502 // It is necessary to call setDrawsContent as soon as we receive the new
contentsLayer, for |
493 // the correctness of early exit conditions in setDrawsContent() and set
ContentsVisible(). | 503 // the correctness of early exit conditions in setDrawsContent() and set
ContentsVisible(). |
494 m_contentsLayer->setDrawsContent(m_contentsVisible); | 504 m_contentsLayer->setDrawsContent(m_contentsVisible); |
495 | 505 |
496 // Insert the content layer first. Video elements require this, because
they have | 506 // Insert the content layer first. Video elements require this, because
they have |
497 // shadow content that must display in front of the video. | 507 // shadow content that must display in front of the video. |
498 m_layer->layer()->insertChild(m_contentsLayer, 0); | 508 m_layer->layer()->insertChild(m_contentsLayer, 0); |
| 509 WebLayer* borderWebLayer = m_contentsClippingMaskLayer ? m_contentsClipp
ingMaskLayer->platformLayer() : 0; |
| 510 m_contentsLayer->setMaskLayer(borderWebLayer); |
499 } | 511 } |
500 } | 512 } |
501 | 513 |
502 void GraphicsLayer::clearContentsLayerIfUnregistered() | 514 void GraphicsLayer::clearContentsLayerIfUnregistered() |
503 { | 515 { |
504 if (!m_contentsLayerId || s_registeredLayerSet->contains(m_contentsLayerId)) | 516 if (!m_contentsLayerId || s_registeredLayerSet->contains(m_contentsLayerId)) |
505 return; | 517 return; |
506 | 518 |
507 m_contentsLayer = 0; | 519 m_contentsLayer = 0; |
508 m_contentsLayerId = 0; | 520 m_contentsLayerId = 0; |
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
697 ts << "GraphicsLayerPaintBackground\n"; | 709 ts << "GraphicsLayerPaintBackground\n"; |
698 } | 710 } |
699 if (paintingPhase() & GraphicsLayerPaintForeground) { | 711 if (paintingPhase() & GraphicsLayerPaintForeground) { |
700 writeIndent(ts, indent + 2); | 712 writeIndent(ts, indent + 2); |
701 ts << "GraphicsLayerPaintForeground\n"; | 713 ts << "GraphicsLayerPaintForeground\n"; |
702 } | 714 } |
703 if (paintingPhase() & GraphicsLayerPaintMask) { | 715 if (paintingPhase() & GraphicsLayerPaintMask) { |
704 writeIndent(ts, indent + 2); | 716 writeIndent(ts, indent + 2); |
705 ts << "GraphicsLayerPaintMask\n"; | 717 ts << "GraphicsLayerPaintMask\n"; |
706 } | 718 } |
| 719 if (paintingPhase() & GraphicsLayerPaintChildClippingMask) { |
| 720 writeIndent(ts, indent + 2); |
| 721 ts << "GraphicsLayerPaintChildClippingMask\n"; |
| 722 } |
707 if (paintingPhase() & GraphicsLayerPaintOverflowContents) { | 723 if (paintingPhase() & GraphicsLayerPaintOverflowContents) { |
708 writeIndent(ts, indent + 2); | 724 writeIndent(ts, indent + 2); |
709 ts << "GraphicsLayerPaintOverflowContents\n"; | 725 ts << "GraphicsLayerPaintOverflowContents\n"; |
710 } | 726 } |
711 if (paintingPhase() & GraphicsLayerPaintCompositedScroll) { | 727 if (paintingPhase() & GraphicsLayerPaintCompositedScroll) { |
712 writeIndent(ts, indent + 2); | 728 writeIndent(ts, indent + 2); |
713 ts << "GraphicsLayerPaintCompositedScroll\n"; | 729 ts << "GraphicsLayerPaintCompositedScroll\n"; |
714 } | 730 } |
715 writeIndent(ts, indent + 1); | 731 writeIndent(ts, indent + 1); |
716 ts << ")\n"; | 732 ts << ")\n"; |
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
869 void GraphicsLayer::setMaskLayer(GraphicsLayer* maskLayer) | 885 void GraphicsLayer::setMaskLayer(GraphicsLayer* maskLayer) |
870 { | 886 { |
871 if (maskLayer == m_maskLayer) | 887 if (maskLayer == m_maskLayer) |
872 return; | 888 return; |
873 | 889 |
874 m_maskLayer = maskLayer; | 890 m_maskLayer = maskLayer; |
875 WebLayer* maskWebLayer = m_maskLayer ? m_maskLayer->platformLayer() : 0; | 891 WebLayer* maskWebLayer = m_maskLayer ? m_maskLayer->platformLayer() : 0; |
876 m_layer->layer()->setMaskLayer(maskWebLayer); | 892 m_layer->layer()->setMaskLayer(maskWebLayer); |
877 } | 893 } |
878 | 894 |
| 895 void GraphicsLayer::setContentsClippingMaskLayer(GraphicsLayer* contentsClipping
MaskLayer) |
| 896 { |
| 897 if (contentsClippingMaskLayer == m_contentsClippingMaskLayer) |
| 898 return; |
| 899 |
| 900 m_contentsClippingMaskLayer = contentsClippingMaskLayer; |
| 901 WebLayer* contentsClippingMaskWebLayer = m_contentsClippingMaskLayer ? m_con
tentsClippingMaskLayer->platformLayer() : 0; |
| 902 if (hasContentsLayer()) |
| 903 contentsLayer()->setMaskLayer(contentsClippingMaskWebLayer); |
| 904 updateContentsRect(); |
| 905 } |
| 906 |
879 void GraphicsLayer::setBackfaceVisibility(bool visible) | 907 void GraphicsLayer::setBackfaceVisibility(bool visible) |
880 { | 908 { |
881 m_backfaceVisibility = visible; | 909 m_backfaceVisibility = visible; |
882 m_layer->setDoubleSided(m_backfaceVisibility); | 910 m_layer->setDoubleSided(m_backfaceVisibility); |
883 } | 911 } |
884 | 912 |
885 void GraphicsLayer::setOpacity(float opacity) | 913 void GraphicsLayer::setOpacity(float opacity) |
886 { | 914 { |
887 float clampedOpacity = std::max(std::min(opacity, 1.0f), 0.0f); | 915 float clampedOpacity = std::max(std::min(opacity, 1.0f), 0.0f); |
888 m_opacity = clampedOpacity; | 916 m_opacity = clampedOpacity; |
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1211 #ifndef NDEBUG | 1239 #ifndef NDEBUG |
1212 void showGraphicsLayerTree(const WebCore::GraphicsLayer* layer) | 1240 void showGraphicsLayerTree(const WebCore::GraphicsLayer* layer) |
1213 { | 1241 { |
1214 if (!layer) | 1242 if (!layer) |
1215 return; | 1243 return; |
1216 | 1244 |
1217 String output = layer->layerTreeAsText(WebCore::LayerTreeIncludesDebugInfo); | 1245 String output = layer->layerTreeAsText(WebCore::LayerTreeIncludesDebugInfo); |
1218 fprintf(stderr, "%s\n", output.utf8().data()); | 1246 fprintf(stderr, "%s\n", output.utf8().data()); |
1219 } | 1247 } |
1220 #endif | 1248 #endif |
OLD | NEW |