Changeset 170864 in webkit
- Timestamp:
- Jul 7, 2014 4:44:58 PM (10 years ago)
- Location:
- trunk/Source
- Files:
-
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r170862 r170864 1 2014-07-07 Simon Fraser <simon.fraser@apple.com> 2 3 [UI-side compositing] Support reflections on custom layers like video 4 https://bugs.webkit.org/show_bug.cgi?id=134701 5 6 Reviewed by Tim Horton. 7 8 Add a LayerTypeWebGLLayer layer type, and support casting to PlatformCALayerRemoteCustom. 9 10 * WebCore.exp.in: Export PlatformCALayerMac::layerTypeForPlatformLayer(CALayer*), and sort. 11 * platform/graphics/ca/PlatformCALayer.h: 12 (WebCore::PlatformCALayer::isPlatformCALayerRemoteCustom): 13 * platform/graphics/ca/mac/PlatformCALayerMac.h: 14 * platform/graphics/ca/mac/PlatformCALayerMac.mm: 15 (PlatformCALayerMac::layerTypeForPlatformLayer): 16 (PlatformCALayerMac::PlatformCALayerMac): 17 (PlatformCALayerMac::commonInit): 18 1 19 2014-07-07 Simon Fraser <simon.fraser@apple.com> 2 20 -
trunk/Source/WebCore/WebCore.exp.in
r170818 r170864 159 159 __ZN7WebCore11HistoryItem14addRedirectURLERKN3WTF6StringE 160 160 __ZN7WebCore11HistoryItem14setScrollPointERKNS_8IntPointE 161 __ZN7WebCore11HistoryItem14setStateObjectEN3WTF10PassRefPtrINS_21SerializedScriptValueEEE 161 162 __ZN7WebCore11HistoryItem15setIsTargetItemEb 162 163 __ZN7WebCore11HistoryItem15setRedirectURLsENSt3__110unique_ptrIN3WTF6VectorINS3_6StringELm0ENS3_15CrashOnOverflowEEENS1_14default_deleteIS7_EEEE 163 164 __ZN7WebCore11HistoryItem16setDocumentStateERKN3WTF6VectorINS1_6StringELm0ENS1_15CrashOnOverflowEEE 164 165 __ZN7WebCore11HistoryItem17setAlternateTitleERKN3WTF6StringE 166 __ZN7WebCore11HistoryItem18setFormContentTypeERKN3WTF6StringE 167 __ZN7WebCore11HistoryItem18setPageScaleFactorEf 165 168 __ZN7WebCore11HistoryItem20setOriginalURLStringERKN3WTF6StringE 166 169 __ZN7WebCore11HistoryItem20setTransientPropertyERKN3WTF6StringEP11objc_object 167 170 __ZN7WebCore11HistoryItem8formDataEv 168 171 __ZN7WebCore11HistoryItem8setTitleERKN3WTF6StringE 172 __ZN7WebCore11HistoryItem9setTargetERKN3WTF6StringE 169 173 __ZN7WebCore11HistoryItemC1ERKN3WTF6StringES4_ 170 174 __ZN7WebCore11HistoryItemC1ERKN3WTF6StringES4_S4_ … … 596 600 __ZN7WebCore15GraphicsLayerCAC2ERNS_19GraphicsLayerClientE 597 601 __ZN7WebCore15GraphicsLayerCAD2Ev 598 __ZN7WebCore11HistoryItem14setStateObjectEN3WTF10PassRefPtrINS_21SerializedScriptValueEEE599 __ZN7WebCore11HistoryItem18setFormContentTypeERKN3WTF6StringE600 __ZN7WebCore11HistoryItem18setPageScaleFactorEf601 __ZN7WebCore11HistoryItem9setTargetERKN3WTF6StringE602 602 __ZN7WebCore15HitTestLocation12rectForPointERKNS_11LayoutPointEjjjj 603 603 __ZN7WebCore15HitTestLocationC1ERKNS_10FloatPointE … … 775 775 __ZN7WebCore18PlatformCALayerMac18setGeometryFlippedEb 776 776 __ZN7WebCore18PlatformCALayerMac22filtersCanBeCompositedERKNS_16FilterOperationsE 777 __ZN7WebCore18PlatformCALayerMac25layerTypeForPlatformLayerEP7CALayer 777 778 __ZN7WebCore18PlatformPasteboard10uniqueNameEv 778 779 __ZN7WebCore18PlatformPasteboard13bufferForTypeERKN3WTF6StringE … … 1301 1302 __ZN7WebCore8FormData10appendDataEPKvm 1302 1303 __ZN7WebCore8FormData15appendFileRangeERKN3WTF6StringExxdb 1304 __ZN7WebCore8FormData6createEPKvm 1303 1305 __ZN7WebCore8FormData6createEv 1304 __ZN7WebCore8FormData6createEPKvm1305 1306 __ZN7WebCore8FormDataD1Ev 1306 1307 __ZN7WebCore8Gradient12addColorStopEfRKNS_5ColorE -
trunk/Source/WebCore/platform/graphics/ca/PlatformCALayer.h
r170179 r170864 76 76 LayerTypeRootLayer, 77 77 LayerTypeAVPlayerLayer, 78 LayerTypeWebGLLayer, 78 79 LayerTypeCustom 79 80 }; … … 88 89 virtual bool isPlatformCALayerMac() const { return false; } 89 90 virtual bool isPlatformCALayerRemote() const { return false; } 91 virtual bool isPlatformCALayerRemoteCustom() const { return false; } 90 92 91 93 // This function passes the layer as a void* rather than a PlatformLayer because PlatformLayer -
trunk/Source/WebCore/platform/graphics/ca/mac/PlatformCALayerMac.h
r170071 r170864 40 40 // is defined differently for Obj C and C++. This allows callers from both languages. 41 41 static PassRefPtr<PlatformCALayer> create(void* platformLayer, PlatformCALayerClient*); 42 43 static LayerType layerTypeForPlatformLayer(PlatformLayer*); 42 44 43 45 ~PlatformCALayerMac(); -
trunk/Source/WebCore/platform/graphics/ca/mac/PlatformCALayerMac.mm
r170862 r170864 43 43 #import "WebCoreCALayerExtras.h" 44 44 #import "WebLayer.h" 45 #import "WebGLLayer.h" 45 46 #import "WebTiledBackingLayer.h" 46 47 #import <objc/objc-auto.h> … … 176 177 } 177 178 179 PlatformCALayer::LayerType PlatformCALayerMac::layerTypeForPlatformLayer(PlatformLayer* layer) 180 { 181 if ([layer isKindOfClass:getAVPlayerLayerClass()]) 182 return LayerTypeAVPlayerLayer; 183 184 if ([layer isKindOfClass:[WebGLLayer class]]) 185 return LayerTypeWebGLLayer; 186 187 return LayerTypeCustom; 188 } 189 178 190 PlatformCALayerMac::PlatformCALayerMac(LayerType layerType, PlatformCALayerClient* owner) 179 191 : PlatformCALayer(layerType, owner) … … 207 219 layerClass = getAVPlayerLayerClass(); 208 220 break; 221 case LayerTypeWebGLLayer: 222 // We don't create PlatformCALayerMacs wrapped around WebGLLayers. 223 ASSERT_NOT_REACHED(); 224 break; 209 225 case LayerTypeCustom: 210 226 break; … … 218 234 219 235 PlatformCALayerMac::PlatformCALayerMac(PlatformLayer* layer, PlatformCALayerClient* owner) 220 : PlatformCALayer( [layer isKindOfClass:getAVPlayerLayerClass()] ? LayerTypeAVPlayerLayer : LayerTypeCustom, owner)236 : PlatformCALayer(layerTypeForPlatformLayer(layer), owner) 221 237 , m_customAppearance(GraphicsLayer::NoCustomAppearance) 222 238 , m_customBehavior(GraphicsLayer::NoCustomBehavior) … … 233 249 234 250 // Clear all the implicit animations on the CALayer 235 if (m_layerType == LayerTypeAVPlayerLayer || m_layerType == LayerType Custom)251 if (m_layerType == LayerTypeAVPlayerLayer || m_layerType == LayerTypeWebGLLayer || m_layerType == LayerTypeCustom) 236 252 [m_layer web_disableAllActions]; 237 253 else -
trunk/Source/WebKit2/ChangeLog
r170862 r170864 1 2014-07-07 Simon Fraser <simon.fraser@apple.com> 2 3 [UI-side compositing] Support reflections on custom layers like video 4 https://bugs.webkit.org/show_bug.cgi?id=134701 5 6 Reviewed by Tim Horton. 7 8 For video reflections, we have to support cloning of PlatformCALayerRemoteCustom 9 in the web process. Do so by implementing PlatformCALayerRemoteCustom::clone(), 10 which does the right gyrations to get AVPlayerLayers cloned, then makes a 11 new PlatformCALayerRemoteCustom to wrap the new layer. This ends up getting 12 its own context hosting ID, allowing the clone to show in the UI process. 13 14 Attempt to do the same for WebGL, but turn it off because it breaks. 15 16 * Shared/mac/RemoteLayerBackingStore.mm: 17 (WebKit::RemoteLayerBackingStore::drawInContext): 18 * Shared/mac/RemoteLayerTreeTransaction.mm: 19 (WebKit::RemoteLayerTreeTransaction::LayerCreationProperties::encode): Unconditionally encode/decode 20 the hostingContextID. It will be 0 for most layers. 21 (WebKit::RemoteLayerTreeTransaction::LayerCreationProperties::decode): 22 (WebKit::RemoteLayerTreeTransaction::description): 23 * UIProcess/ios/RemoteLayerTreeHostIOS.mm: 24 (WebKit::RemoteLayerTreeHost::createLayer): 25 * UIProcess/mac/RemoteLayerTreeHost.mm: 26 (WebKit::RemoteLayerTreeHost::createLayer): 27 * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp: 28 (WebKit::PlatformCALayerRemote::create): Creation with a custom PlatformLayer* always 29 creates a PlatformCALayerRemoteCustom. 30 (WebKit::PlatformCALayerRemote::clone): Factor some code. 31 (WebKit::PlatformCALayerRemote::updateClonedLayerProperties): 32 (WebKit::PlatformCALayerRemote::recursiveBuildTransaction): 33 * WebProcess/WebPage/mac/PlatformCALayerRemote.h: 34 * WebProcess/WebPage/mac/PlatformCALayerRemoteCustom.h: 35 * WebProcess/WebPage/mac/PlatformCALayerRemoteCustom.mm: 36 (WebKit::PlatformCALayerRemoteCustom::create): 37 (WebKit::PlatformCALayerRemoteCustom::PlatformCALayerRemoteCustom): 38 (WebKit::PlatformCALayerRemoteCustom::clone): Clone by making an instance of the 39 correct type of platform layer when possible, then wrapping a PlatformCALayerRemoteCustom 40 around it. 41 (WebKit::PlatformCALayerRemoteCustom::contents): 42 (WebKit::PlatformCALayerRemoteCustom::setContents): 43 * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: 44 (WebKit::RemoteLayerTreeContext::layerWasCreated): 45 (WebKit::RemoteLayerTreeContext::layerWillBeDestroyed): 46 1 47 2014-07-07 Simon Fraser <simon.fraser@apple.com> 2 48 -
trunk/Source/WebKit2/Shared/mac/RemoteLayerBackingStore.mm
r170774 r170864 338 338 case PlatformCALayer::LayerTypeRootLayer: 339 339 case PlatformCALayer::LayerTypeAVPlayerLayer: 340 case PlatformCALayer::LayerTypeWebGLLayer: 340 341 case PlatformCALayer::LayerTypeCustom: 341 342 ASSERT_NOT_REACHED(); -
trunk/Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.mm
r170774 r170864 55 55 encoder << layerID; 56 56 encoder.encodeEnum(type); 57 58 if (type == PlatformCALayer::LayerTypeCustom) 59 encoder << hostingContextID; 57 encoder << hostingContextID; 60 58 } 61 59 … … 68 66 return false; 69 67 70 if (result.type == PlatformCALayer::LayerTypeCustom) { 71 if (!decoder.decode(result.hostingContextID)) 72 return false; 73 } 68 if (!decoder.decode(result.hostingContextID)) 69 return false; 74 70 75 71 return true; … … 1181 1177 break; 1182 1178 case PlatformCALayer::LayerTypeAVPlayerLayer: 1183 ts << "av-player-layer"; 1179 ts << "av-player-layer (context-id " << createdLayer.hostingContextID << ")"; 1180 break; 1181 case PlatformCALayer::LayerTypeWebGLLayer: 1182 ts << "web-gl-layer (context-id " << createdLayer.hostingContextID << ")"; 1184 1183 break; 1185 1184 case PlatformCALayer::LayerTypeCustom: -
trunk/Source/WebKit2/UIProcess/ios/RemoteLayerTreeHostIOS.mm
r170610 r170864 153 153 break; 154 154 case PlatformCALayer::LayerTypeCustom: 155 case PlatformCALayer::LayerTypeAVPlayerLayer: 156 case PlatformCALayer::LayerTypeWebGLLayer: 155 157 if (!m_isDebugLayerTreeHost) 156 158 view = adoptNS([[WKRemoteView alloc] initWithFrame:CGRectZero contextID:properties.hostingContextID]); -
trunk/Source/WebKit2/UIProcess/mac/RemoteLayerTreeHost.mm
r170862 r170864 203 203 break; 204 204 case PlatformCALayer::LayerTypeCustom: 205 case PlatformCALayer::LayerTypeAVPlayerLayer: 206 case PlatformCALayer::LayerTypeWebGLLayer: 205 207 if (!m_isDebugLayerTreeHost) 206 208 layer = WKMakeRenderLayer(properties.hostingContextID); -
trunk/Source/WebKit2/WebProcess/WebPage/mac/PlatformCALayerRemote.cpp
r170862 r170864 62 62 PassRefPtr<PlatformCALayerRemote> PlatformCALayerRemote::create(PlatformLayer *platformLayer, PlatformCALayerClient* owner, RemoteLayerTreeContext& context) 63 63 { 64 RefPtr<PlatformCALayerRemote> layer = adoptRef(new PlatformCALayerRemoteCustom(static_cast<PlatformLayer*>(platformLayer), owner, context)); 65 66 context.layerWasCreated(*layer, LayerTypeCustom); 67 68 return layer.release(); 64 return PlatformCALayerRemoteCustom::create(platformLayer, owner, context); 69 65 } 70 66 … … 98 94 } 99 95 100 PassRefPtr<PlatformCALayer> PlatformCALayerRemote::clone(PlatformCALayerClient* client) const 101 { 102 RefPtr<PlatformCALayerRemote> clone = PlatformCALayerRemote::create(*this, client, *m_context); 103 104 clone->setPosition(position()); 105 clone->setBounds(bounds()); 106 clone->setAnchorPoint(anchorPoint()); 96 PassRefPtr<PlatformCALayer> PlatformCALayerRemote::clone(PlatformCALayerClient* owner) const 97 { 98 RefPtr<PlatformCALayerRemote> clone = PlatformCALayerRemote::create(*this, owner, *m_context); 99 100 updateClonedLayerProperties(*clone); 101 102 clone->setClonedLayer(this); 103 return clone.release(); 104 } 105 106 PlatformCALayerRemote::~PlatformCALayerRemote() 107 { 108 for (const auto& layer : m_children) 109 toPlatformCALayerRemote(layer.get())->m_superlayer = nullptr; 110 111 if (m_context) 112 m_context->layerWillBeDestroyed(*this); 113 } 114 115 void PlatformCALayerRemote::updateClonedLayerProperties(PlatformCALayerRemote& clone, bool copyContents) const 116 { 117 clone.setPosition(position()); 118 clone.setBounds(bounds()); 119 clone.setAnchorPoint(anchorPoint()); 107 120 108 121 if (m_properties.transform) 109 clone ->setTransform(*m_properties.transform);122 clone.setTransform(*m_properties.transform); 110 123 111 124 if (m_properties.sublayerTransform) 112 clone->setSublayerTransform(*m_properties.sublayerTransform); 113 114 clone->setContents(contents()); 115 clone->setMasksToBounds(masksToBounds()); 116 clone->setDoubleSided(isDoubleSided()); 117 clone->setOpaque(isOpaque()); 118 clone->setBackgroundColor(backgroundColor()); 119 clone->setContentsScale(contentsScale()); 125 clone.setSublayerTransform(*m_properties.sublayerTransform); 126 127 if (copyContents) 128 clone.setContents(contents()); 129 130 clone.setMasksToBounds(masksToBounds()); 131 clone.setDoubleSided(isDoubleSided()); 132 clone.setOpaque(isOpaque()); 133 clone.setBackgroundColor(backgroundColor()); 134 clone.setContentsScale(contentsScale()); 120 135 #if ENABLE(CSS_FILTERS) 121 136 if (m_properties.filters) 122 clone ->copyFiltersFrom(this);137 clone.copyFiltersFrom(this); 123 138 #endif 124 clone->updateCustomAppearance(customAppearance()); 125 126 clone->setClonedLayer(this); 127 return clone.release(); 128 } 129 130 PlatformCALayerRemote::~PlatformCALayerRemote() 131 { 132 for (const auto& layer : m_children) 133 toPlatformCALayerRemote(layer.get())->m_superlayer = nullptr; 134 135 if (m_context) 136 m_context->layerWillBeDestroyed(*this); 139 clone.updateCustomAppearance(customAppearance()); 137 140 } 138 141 … … 157 160 } 158 161 159 if ( m_layerType == LayerTypeCustom) {162 if (isPlatformCALayerRemoteCustom()) { 160 163 RemoteLayerTreePropertyApplier::applyProperties(platformLayer(), nullptr, m_properties, RemoteLayerTreePropertyApplier::RelatedLayerMap()); 161 164 didCommit(); -
trunk/Source/WebKit2/WebProcess/WebPage/mac/PlatformCALayerRemote.h
r170274 r170864 172 172 PlatformCALayerRemote(const PlatformCALayerRemote&, WebCore::PlatformCALayerClient*, RemoteLayerTreeContext&); 173 173 174 void updateClonedLayerProperties(PlatformCALayerRemote& clone, bool copyContents = true) const; 175 174 176 private: 175 177 virtual bool isPlatformCALayerRemote() const override { return true; } -
trunk/Source/WebKit2/WebProcess/WebPage/mac/PlatformCALayerRemoteCustom.h
r170274 r170864 33 33 class LayerHostingContext; 34 34 35 // PlatformCALayerRemoteCustom is used for CALayers that live in the web process and are hosted into the UI process via remote context. 35 36 class PlatformCALayerRemoteCustom final : public PlatformCALayerRemote { 36 37 friend class PlatformCALayerRemote; 37 38 public: 39 static PassRefPtr<PlatformCALayerRemote> create(PlatformLayer *, WebCore::PlatformCALayerClient*, RemoteLayerTreeContext&); 40 38 41 virtual ~PlatformCALayerRemoteCustom(); 39 42 … … 45 48 46 49 private: 47 PlatformCALayerRemoteCustom(PlatformLayer*, WebCore::PlatformCALayerClient* owner, RemoteLayerTreeContext&); 50 PlatformCALayerRemoteCustom(WebCore::PlatformCALayer::LayerType, PlatformLayer *, WebCore::PlatformCALayerClient* owner, RemoteLayerTreeContext&); 51 52 virtual PassRefPtr<WebCore::PlatformCALayer> clone(WebCore::PlatformCALayerClient* owner) const override; 53 54 virtual bool isPlatformCALayerRemoteCustom() const { return true; } 55 56 virtual CFTypeRef contents() const override; 57 virtual void setContents(CFTypeRef) override; 48 58 49 59 std::unique_ptr<LayerHostingContext> m_layerHostingContext; … … 52 62 }; 53 63 64 PLATFORM_CALAYER_TYPE_CASTS(PlatformCALayerRemoteCustom, isPlatformCALayerRemote()) 65 54 66 } // namespace WebKit 55 67 -
trunk/Source/WebKit2/WebProcess/WebPage/mac/PlatformCALayerRemoteCustom.mm
r170274 r170864 31 31 #import "RemoteLayerTreePropertyApplier.h" 32 32 #import "WebProcess.h" 33 #import <AVFoundation/AVFoundation.h> 33 34 #import <WebCore/GraphicsLayerCA.h> 34 35 #import <WebCore/PlatformCALayerMac.h> … … 37 38 #import <wtf/RetainPtr.h> 38 39 40 SOFT_LINK_FRAMEWORK_OPTIONAL(AVFoundation) 41 SOFT_LINK_CLASS(AVFoundation, AVPlayerLayer) 42 39 43 using namespace WebCore; 40 44 … … 42 46 43 47 static NSString * const platformCALayerPointer = @"WKPlatformCALayer"; 44 PlatformCALayerRemoteCustom::PlatformCALayerRemoteCustom(PlatformLayer* customLayer, PlatformCALayerClient* owner, RemoteLayerTreeContext& context) 45 : PlatformCALayerRemote(LayerTypeCustom, owner, context) 48 49 PassRefPtr<PlatformCALayerRemote> PlatformCALayerRemoteCustom::create(PlatformLayer *platformLayer, PlatformCALayerClient* owner, RemoteLayerTreeContext& context) 50 { 51 RefPtr<PlatformCALayerRemote> layer = adoptRef(new PlatformCALayerRemoteCustom(PlatformCALayerMac::layerTypeForPlatformLayer(platformLayer), platformLayer, owner, context)); 52 context.layerWasCreated(*layer, layer->layerType()); 53 54 return layer.release(); 55 } 56 57 PlatformCALayerRemoteCustom::PlatformCALayerRemoteCustom(LayerType layerType, PlatformLayer * customLayer, PlatformCALayerClient* owner, RemoteLayerTreeContext& context) 58 : PlatformCALayerRemote(layerType, owner, context) 46 59 { 47 60 switch (context.layerHostingMode()) { … … 62 75 [customLayer web_disableAllActions]; 63 76 64 m_providesContents = [customLayer isKindOfClass:NSClassFromString(@"WebGLLayer")];77 m_providesContents = layerType == LayerTypeWebGLLayer; 65 78 66 79 properties().position = FloatPoint3D(customLayer.position.x, customLayer.position.y, customLayer.zPosition); … … 80 93 } 81 94 95 PassRefPtr<WebCore::PlatformCALayer> PlatformCALayerRemoteCustom::clone(PlatformCALayerClient* owner) const 96 { 97 RetainPtr<CALayer *> clonedLayer; 98 bool copyContents = true; 99 100 if (layerType() == LayerTypeAVPlayerLayer) { 101 clonedLayer = adoptNS([[getAVPlayerLayerClass() alloc] init]); 102 103 AVPlayerLayer* destinationPlayerLayer = static_cast<AVPlayerLayer *>(clonedLayer.get()); 104 AVPlayerLayer* sourcePlayerLayer = static_cast<AVPlayerLayer *>(platformLayer()); 105 dispatch_async(dispatch_get_main_queue(), ^{ 106 [destinationPlayerLayer setPlayer:[sourcePlayerLayer player]]; 107 }); 108 copyContents = false; 109 } else if (layerType() == LayerTypeWebGLLayer) { 110 clonedLayer = adoptNS([[CALayer alloc] init]); 111 // FIXME: currently copying WebGL contents breaks the original layer. 112 copyContents = false; 113 } 114 115 RefPtr<PlatformCALayerRemote> clone = adoptRef(new PlatformCALayerRemoteCustom(layerType(), clonedLayer.get(), owner, *context())); 116 context()->layerWasCreated(*clone, clone->layerType()); 117 118 updateClonedLayerProperties(*clone, copyContents); 119 120 clone->setClonedLayer(this); 121 return clone.release(); 122 } 123 124 CFTypeRef PlatformCALayerRemoteCustom::contents() const 125 { 126 return [m_platformLayer contents]; 127 } 128 129 void PlatformCALayerRemoteCustom::setContents(CFTypeRef contents) 130 { 131 [m_platformLayer setContents:(id)contents]; 132 } 133 82 134 void PlatformCALayerRemoteCustom::setNeedsDisplay(const FloatRect* rect) 83 135 { -
trunk/Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeContext.mm
r170774 r170864 62 62 creationProperties.type = type; 63 63 64 if ( type == PlatformCALayer::LayerTypeCustom)64 if (layer.isPlatformCALayerRemoteCustom()) 65 65 creationProperties.hostingContextID = layer.hostingContextID(); 66 66 … … 71 71 void RemoteLayerTreeContext::layerWillBeDestroyed(PlatformCALayerRemote& layer) 72 72 { 73 ASSERT(layer.layerID()); 73 74 GraphicsLayer::PlatformLayerID layerID = layer.layerID(); 74 75
Note: See TracChangeset
for help on using the changeset viewer.