Chromium Code Reviews| 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 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 124 , m_showRepaintCounter(false) | 124 , m_showRepaintCounter(false) |
| 125 , m_paintingPhase(GraphicsLayerPaintAllWithOverflowClip) | 125 , m_paintingPhase(GraphicsLayerPaintAllWithOverflowClip) |
| 126 , m_contentsOrientation(CompositingCoordinatesTopDown) | 126 , m_contentsOrientation(CompositingCoordinatesTopDown) |
| 127 , m_parent(0) | 127 , m_parent(0) |
| 128 , m_maskLayer(0) | 128 , m_maskLayer(0) |
| 129 , m_replicaLayer(0) | 129 , m_replicaLayer(0) |
| 130 , m_replicatedLayer(0) | 130 , m_replicatedLayer(0) |
| 131 , m_repaintCount(0) | 131 , m_repaintCount(0) |
| 132 , m_contentsLayer(0) | 132 , m_contentsLayer(0) |
| 133 , m_contentsLayerId(0) | 133 , m_contentsLayerId(0) |
| 134 , m_linkHighlight(0) | |
| 135 , m_contentsLayerPurpose(NoContentsLayer) | 134 , m_contentsLayerPurpose(NoContentsLayer) |
| 136 , m_scrollableArea(0) | 135 , m_scrollableArea(0) |
| 137 { | 136 { |
| 138 #ifndef NDEBUG | 137 #ifndef NDEBUG |
| 139 if (m_client) | 138 if (m_client) |
| 140 m_client->verifyNotPainting(); | 139 m_client->verifyNotPainting(); |
| 141 #endif | 140 #endif |
| 142 | 141 |
| 143 m_opaqueRectTrackingContentLayerDelegate = adoptPtr(new OpaqueRectTrackingCo ntentLayerDelegate(this)); | 142 m_opaqueRectTrackingContentLayerDelegate = adoptPtr(new OpaqueRectTrackingCo ntentLayerDelegate(this)); |
| 144 m_layer = adoptPtr(Platform::current()->compositorSupport()->createContentLa yer(m_opaqueRectTrackingContentLayerDelegate.get())); | 143 m_layer = adoptPtr(Platform::current()->compositorSupport()->createContentLa yer(m_opaqueRectTrackingContentLayerDelegate.get())); |
| 145 m_layer->layer()->setDrawsContent(m_drawsContent && m_contentsVisible); | 144 m_layer->layer()->setDrawsContent(m_drawsContent && m_contentsVisible); |
| 146 m_layer->layer()->setScrollClient(this); | 145 m_layer->layer()->setScrollClient(this); |
| 147 m_layer->setAutomaticallyComputeRasterScale(true); | 146 m_layer->setAutomaticallyComputeRasterScale(true); |
| 148 } | 147 } |
| 149 | 148 |
| 150 GraphicsLayer::~GraphicsLayer() | 149 GraphicsLayer::~GraphicsLayer() |
| 151 { | 150 { |
| 152 if (m_linkHighlight) { | 151 for (size_t i = 0; i < m_linkHighlights.size(); i++) |
| 153 m_linkHighlight->clearCurrentGraphicsLayer(); | 152 m_linkHighlights[i]->clearCurrentGraphicsLayer(); |
| 154 m_linkHighlight = 0; | 153 m_linkHighlights.clear(); |
| 155 } | |
| 156 | 154 |
| 157 #ifndef NDEBUG | 155 #ifndef NDEBUG |
| 158 if (m_client) | 156 if (m_client) |
| 159 m_client->verifyNotPainting(); | 157 m_client->verifyNotPainting(); |
| 160 #endif | 158 #endif |
| 161 | 159 |
| 162 if (m_replicaLayer) | 160 if (m_replicaLayer) |
| 163 m_replicaLayer->setReplicatedLayer(0); | 161 m_replicaLayer->setReplicatedLayer(0); |
| 164 | 162 |
| 165 if (m_replicatedLayer) | 163 if (m_replicatedLayer) |
| (...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 557 | 555 |
| 558 void GraphicsLayer::updateNames() | 556 void GraphicsLayer::updateNames() |
| 559 { | 557 { |
| 560 String debugName = "Layer for " + m_nameBase; | 558 String debugName = "Layer for " + m_nameBase; |
| 561 m_layer->layer()->setDebugName(debugName); | 559 m_layer->layer()->setDebugName(debugName); |
| 562 | 560 |
| 563 if (WebLayer* contentsLayer = contentsLayerIfRegistered()) { | 561 if (WebLayer* contentsLayer = contentsLayerIfRegistered()) { |
| 564 String debugName = "ContentsLayer for " + m_nameBase; | 562 String debugName = "ContentsLayer for " + m_nameBase; |
| 565 contentsLayer->setDebugName(debugName); | 563 contentsLayer->setDebugName(debugName); |
| 566 } | 564 } |
| 567 if (m_linkHighlight) { | 565 for (size_t i = 0; i < m_linkHighlights.size(); i++) { |
| 568 String debugName = "LinkHighlight for " + m_nameBase; | 566 String debugName = "LinkHighlight for " + m_nameBase; |
| 569 m_linkHighlight->layer()->setDebugName(debugName); | 567 m_linkHighlights[i]->layer()->setDebugName(debugName); |
|
wjmaclean
2013/06/12 15:09:06
It may be slightly confusing having multiple link
| |
| 570 } | 568 } |
| 571 } | 569 } |
| 572 | 570 |
| 573 void GraphicsLayer::updateChildList() | 571 void GraphicsLayer::updateChildList() |
| 574 { | 572 { |
| 575 WebLayer* childHost = m_layer->layer(); | 573 WebLayer* childHost = m_layer->layer(); |
| 576 childHost->removeAllChildren(); | 574 childHost->removeAllChildren(); |
| 577 | 575 |
| 578 clearContentsLayerIfUnregistered(); | 576 clearContentsLayerIfUnregistered(); |
| 579 | 577 |
| 580 if (m_contentsLayer) { | 578 if (m_contentsLayer) { |
| 581 // FIXME: add the contents layer in the correct order with negative z-or der children. | 579 // FIXME: add the contents layer in the correct order with negative z-or der children. |
| 582 // This does not cause visible rendering issues because currently conten ts layers are only used | 580 // This does not cause visible rendering issues because currently conten ts layers are only used |
| 583 // for replaced elements that don't have children. | 581 // for replaced elements that don't have children. |
| 584 childHost->addChild(m_contentsLayer); | 582 childHost->addChild(m_contentsLayer); |
| 585 } | 583 } |
| 586 | 584 |
| 587 const Vector<GraphicsLayer*>& childLayers = children(); | 585 const Vector<GraphicsLayer*>& childLayers = children(); |
| 588 size_t numChildren = childLayers.size(); | 586 size_t numChildren = childLayers.size(); |
| 589 for (size_t i = 0; i < numChildren; ++i) { | 587 for (size_t i = 0; i < numChildren; ++i) { |
| 590 GraphicsLayer* curChild = childLayers[i]; | 588 GraphicsLayer* curChild = childLayers[i]; |
| 591 | 589 |
| 592 childHost->addChild(curChild->platformLayer()); | 590 childHost->addChild(curChild->platformLayer()); |
| 593 } | 591 } |
| 594 | 592 |
| 595 if (m_linkHighlight) | 593 for (size_t i = 0; i < m_linkHighlights.size(); i++) |
| 596 childHost->addChild(m_linkHighlight->layer()); | 594 childHost->addChild(m_linkHighlights[i]->layer()); |
| 597 } | 595 } |
| 598 | 596 |
| 599 void GraphicsLayer::updateLayerIsDrawable() | 597 void GraphicsLayer::updateLayerIsDrawable() |
| 600 { | 598 { |
| 601 // For the rest of the accelerated compositor code, there is no reason to ma ke a | 599 // For the rest of the accelerated compositor code, there is no reason to ma ke a |
| 602 // distinction between drawsContent and contentsVisible. So, for m_layer->la yer(), these two | 600 // distinction between drawsContent and contentsVisible. So, for m_layer->la yer(), these two |
| 603 // flags are combined here. m_contentsLayer shouldn't receive the drawsConte nt flag | 601 // flags are combined here. m_contentsLayer shouldn't receive the drawsConte nt flag |
| 604 // so it is only given contentsVisible. | 602 // so it is only given contentsVisible. |
| 605 | 603 |
| 606 m_layer->layer()->setDrawsContent(m_drawsContent && m_contentsVisible); | 604 m_layer->layer()->setDrawsContent(m_drawsContent && m_contentsVisible); |
| 607 if (WebLayer* contentsLayer = contentsLayerIfRegistered()) | 605 if (WebLayer* contentsLayer = contentsLayerIfRegistered()) |
| 608 contentsLayer->setDrawsContent(m_contentsVisible); | 606 contentsLayer->setDrawsContent(m_contentsVisible); |
| 609 | 607 |
| 610 if (m_drawsContent) { | 608 if (m_drawsContent) { |
| 611 m_layer->layer()->invalidate(); | 609 m_layer->layer()->invalidate(); |
| 612 if (m_linkHighlight) | 610 for (size_t i = 0; i < m_linkHighlights.size(); i++) |
| 613 m_linkHighlight->invalidate(); | 611 m_linkHighlights[i]->invalidate(); |
| 614 } | 612 } |
| 615 } | 613 } |
| 616 | 614 |
| 617 void GraphicsLayer::updateContentsRect() | 615 void GraphicsLayer::updateContentsRect() |
| 618 { | 616 { |
| 619 WebLayer* contentsLayer = contentsLayerIfRegistered(); | 617 WebLayer* contentsLayer = contentsLayerIfRegistered(); |
| 620 if (!contentsLayer) | 618 if (!contentsLayer) |
| 621 return; | 619 return; |
| 622 | 620 |
| 623 contentsLayer->setPosition(FloatPoint(m_contentsRect.x(), m_contentsRect.y() )); | 621 contentsLayer->setPosition(FloatPoint(m_contentsRect.x(), m_contentsRect.y() )); |
| (...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 935 info.addMember(m_parent, "parent"); | 933 info.addMember(m_parent, "parent"); |
| 936 info.addMember(m_maskLayer, "maskLayer"); | 934 info.addMember(m_maskLayer, "maskLayer"); |
| 937 info.addMember(m_replicaLayer, "replicaLayer"); | 935 info.addMember(m_replicaLayer, "replicaLayer"); |
| 938 info.addMember(m_replicatedLayer, "replicatedLayer"); | 936 info.addMember(m_replicatedLayer, "replicatedLayer"); |
| 939 info.ignoreMember(m_client); | 937 info.ignoreMember(m_client); |
| 940 info.addMember(m_name, "name"); | 938 info.addMember(m_name, "name"); |
| 941 info.addMember(m_nameBase, "nameBase"); | 939 info.addMember(m_nameBase, "nameBase"); |
| 942 info.addMember(m_layer, "layer"); | 940 info.addMember(m_layer, "layer"); |
| 943 info.addMember(m_imageLayer, "imageLayer"); | 941 info.addMember(m_imageLayer, "imageLayer"); |
| 944 info.addMember(m_contentsLayer, "contentsLayer"); | 942 info.addMember(m_contentsLayer, "contentsLayer"); |
| 945 info.addMember(m_linkHighlight, "linkHighlight"); | 943 for (size_t i = 0; i < m_linkHighlights.size(); i++) { |
| 944 info.addMember(m_linkHighlights[i], "linkHighlights"); | |
| 945 } | |
| 946 info.addMember(m_opaqueRectTrackingContentLayerDelegate, "opaqueRectTracking ContentLayerDelegate"); | 946 info.addMember(m_opaqueRectTrackingContentLayerDelegate, "opaqueRectTracking ContentLayerDelegate"); |
| 947 info.addMember(m_animationIdMap, "animationIdMap"); | 947 info.addMember(m_animationIdMap, "animationIdMap"); |
| 948 info.addMember(m_scrollableArea, "scrollableArea"); | 948 info.addMember(m_scrollableArea, "scrollableArea"); |
| 949 } | 949 } |
| 950 | 950 |
| 951 void GraphicsLayer::setName(const String& name) | 951 void GraphicsLayer::setName(const String& name) |
| 952 { | 952 { |
| 953 m_nameBase = name; | 953 m_nameBase = name; |
| 954 m_name = String::format("GraphicsLayer(%p) ", this) + name; | 954 m_name = String::format("GraphicsLayer(%p) ", this) + name; |
| 955 updateNames(); | 955 updateNames(); |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1091 contentsLayer->invalidate(); | 1091 contentsLayer->invalidate(); |
| 1092 addRepaintRect(contentsRect()); | 1092 addRepaintRect(contentsRect()); |
| 1093 } | 1093 } |
| 1094 } | 1094 } |
| 1095 | 1095 |
| 1096 void GraphicsLayer::setNeedsDisplay() | 1096 void GraphicsLayer::setNeedsDisplay() |
| 1097 { | 1097 { |
| 1098 if (drawsContent()) { | 1098 if (drawsContent()) { |
| 1099 m_layer->layer()->invalidate(); | 1099 m_layer->layer()->invalidate(); |
| 1100 addRepaintRect(FloatRect(FloatPoint(), m_size)); | 1100 addRepaintRect(FloatRect(FloatPoint(), m_size)); |
| 1101 if (m_linkHighlight) | 1101 for (size_t i = 0; i < m_linkHighlights.size(); i++) |
| 1102 m_linkHighlight->invalidate(); | 1102 m_linkHighlights[i]->invalidate(); |
| 1103 } | 1103 } |
| 1104 } | 1104 } |
| 1105 | 1105 |
| 1106 void GraphicsLayer::setNeedsDisplayInRect(const FloatRect& rect) | 1106 void GraphicsLayer::setNeedsDisplayInRect(const FloatRect& rect) |
| 1107 { | 1107 { |
| 1108 if (drawsContent()) { | 1108 if (drawsContent()) { |
| 1109 m_layer->layer()->invalidateRect(rect); | 1109 m_layer->layer()->invalidateRect(rect); |
| 1110 addRepaintRect(rect); | 1110 addRepaintRect(rect); |
| 1111 if (m_linkHighlight) | 1111 for (size_t i = 0; i < m_linkHighlights.size(); i++) |
| 1112 m_linkHighlight->invalidate(); | 1112 m_linkHighlights[i]->invalidate(); |
| 1113 } | 1113 } |
| 1114 } | 1114 } |
| 1115 | 1115 |
| 1116 void GraphicsLayer::setContentsRect(const IntRect& rect) | 1116 void GraphicsLayer::setContentsRect(const IntRect& rect) |
| 1117 { | 1117 { |
| 1118 if (rect == m_contentsRect) | 1118 if (rect == m_contentsRect) |
| 1119 return; | 1119 return; |
| 1120 | 1120 |
| 1121 m_contentsRect = rect; | 1121 m_contentsRect = rect; |
| 1122 updateContentsRect(); | 1122 updateContentsRect(); |
| (...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1324 } | 1324 } |
| 1325 | 1325 |
| 1326 void GraphicsLayer::setBackgroundFilters(const FilterOperations& filters) | 1326 void GraphicsLayer::setBackgroundFilters(const FilterOperations& filters) |
| 1327 { | 1327 { |
| 1328 WebFilterOperations webFilters; | 1328 WebFilterOperations webFilters; |
| 1329 if (!copyWebCoreFilterOperationsToWebFilterOperations(filters, webFilters)) | 1329 if (!copyWebCoreFilterOperationsToWebFilterOperations(filters, webFilters)) |
| 1330 return; | 1330 return; |
| 1331 m_layer->layer()->setBackgroundFilters(webFilters); | 1331 m_layer->layer()->setBackgroundFilters(webFilters); |
| 1332 } | 1332 } |
| 1333 | 1333 |
| 1334 void GraphicsLayer::setLinkHighlight(LinkHighlightClient* linkHighlight) | 1334 void GraphicsLayer::addLinkHighlight(LinkHighlightClient* linkHighlight) |
| 1335 { | 1335 { |
| 1336 m_linkHighlight = linkHighlight; | 1336 ASSERT(linkHighlight); |
| 1337 m_linkHighlights.append(linkHighlight); | |
| 1337 updateChildList(); | 1338 updateChildList(); |
| 1338 } | 1339 } |
| 1339 | 1340 |
| 1341 void GraphicsLayer::removeLinkHighlight( | |
| 1342 LinkHighlightClient* linkHighlight) | |
| 1343 { | |
| 1344 m_linkHighlights.remove(m_linkHighlights.find(linkHighlight)); | |
| 1345 ASSERT(!m_linkHighlights.contains(linkHighlight)); | |
| 1346 updateChildList(); | |
| 1347 } | |
| 1348 | |
| 1340 void GraphicsLayer::paint(GraphicsContext& context, const IntRect& clip) | 1349 void GraphicsLayer::paint(GraphicsContext& context, const IntRect& clip) |
| 1341 { | 1350 { |
| 1342 paintGraphicsLayerContents(context, clip); | 1351 paintGraphicsLayerContents(context, clip); |
| 1343 } | 1352 } |
| 1344 | 1353 |
| 1345 | 1354 |
| 1346 void GraphicsLayer::notifyAnimationStarted(double startTime) | 1355 void GraphicsLayer::notifyAnimationStarted(double startTime) |
| 1347 { | 1356 { |
| 1348 if (m_client) | 1357 if (m_client) |
| 1349 m_client->notifyAnimationStarted(this, startTime); | 1358 m_client->notifyAnimationStarted(this, startTime); |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 1365 #ifndef NDEBUG | 1374 #ifndef NDEBUG |
| 1366 void showGraphicsLayerTree(const WebCore::GraphicsLayer* layer) | 1375 void showGraphicsLayerTree(const WebCore::GraphicsLayer* layer) |
| 1367 { | 1376 { |
| 1368 if (!layer) | 1377 if (!layer) |
| 1369 return; | 1378 return; |
| 1370 | 1379 |
| 1371 String output = layer->layerTreeAsText(LayerTreeAsTextDebug | LayerTreeAsTex tIncludeVisibleRects); | 1380 String output = layer->layerTreeAsText(LayerTreeAsTextDebug | LayerTreeAsTex tIncludeVisibleRects); |
| 1372 fprintf(stderr, "%s\n", output.utf8().data()); | 1381 fprintf(stderr, "%s\n", output.utf8().data()); |
| 1373 } | 1382 } |
| 1374 #endif | 1383 #endif |
| OLD | NEW |