1// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5'use strict'; 6 7base.require('base.rect'); 8base.require('cc.constants'); 9base.require('cc.region'); 10base.require('tracing.trace_model.object_instance'); 11 12base.exportTo('cc', function() { 13 var constants = cc.constants; 14 var ObjectSnapshot = tracing.trace_model.ObjectSnapshot; 15 16 /** 17 * @constructor 18 */ 19 function LayerImplSnapshot() { 20 ObjectSnapshot.apply(this, arguments); 21 } 22 23 LayerImplSnapshot.prototype = { 24 __proto__: ObjectSnapshot.prototype, 25 26 preInitialize: function() { 27 cc.preInitializeObject(this); 28 29 this.layerTreeImpl_ = undefined; 30 this.parentLayer = undefined; 31 }, 32 33 initialize: function() { 34 // Defaults. 35 this.invalidation = new cc.Region(); 36 this.pictures = []; 37 38 // Import & validate this.args 39 cc.moveRequiredFieldsFromArgsToToplevel( 40 this, ['layerId', 'children', 41 'layerQuad']); 42 cc.moveOptionalFieldsFromArgsToToplevel( 43 this, ['maskLayer', 'replicaLayer']); 44 45 // Leave bounds in both places. 46 this.bounds = base.Rect.FromXYWH( 47 0, 0, 48 this.args.bounds.width, this.args.bounds.height); 49 50 for (var i = 0; i < this.children.length; i++) 51 this.children[i].parentLayer = this; 52 if (this.maskLayer) 53 this.maskLayer.parentLayer = this; 54 if (this.replicaLayer) 55 this.maskLayer.replicaLayer = this; 56 }, 57 58 get layerTreeImpl() { 59 if (this.layerTreeImpl_) 60 return this.layerTreeImpl_; 61 if (this.parentLayer) 62 return this.parentLayer.layerTreeImpl; 63 return undefined; 64 }, 65 set layerTreeImpl(layerTreeImpl) { 66 this.layerTreeImpl_ = layerTreeImpl; 67 }, 68 69 get activeLayer() { 70 if (this.layerTreeImpl.whichTree == constants.ACTIVE_TREE) 71 return this; 72 var activeTree = this.layerTreeImpl.layerTreeHostImpl.activeTree; 73 return activeTree.findLayerWithId(this.layerId); 74 }, 75 76 get pendingLayer() { 77 if (this.layerTreeImpl.whichTree == constants.PENDING_TREE) 78 return this; 79 var pendingTree = this.layerTreeImpl.layerTreeHostImpl.pendingTree; 80 return pendingTree.findLayerWithId(this.layerId); 81 } 82 }; 83 84 /** 85 * @constructor 86 */ 87 function PictureLayerImplSnapshot() { 88 LayerImplSnapshot.apply(this, arguments); 89 } 90 91 PictureLayerImplSnapshot.prototype = { 92 __proto__: LayerImplSnapshot.prototype, 93 94 initialize: function() { 95 LayerImplSnapshot.prototype.initialize.call(this); 96 97 if (this.args.invalidation) { 98 this.invalidation = cc.RegionFromArray(this.args.invalidation); 99 delete this.args.invalidation; 100 } 101 if (this.args.pictures) { 102 this.pictures = this.args.pictures; 103 } 104 } 105 }; 106 107 ObjectSnapshot.register('cc::LayerImpl', LayerImplSnapshot); 108 ObjectSnapshot.register('cc::PictureLayerImpl', PictureLayerImplSnapshot); 109 110 ObjectSnapshot.register('cc::DelegatedRendererLayerImpl', LayerImplSnapshot); 111 ObjectSnapshot.register('cc::HeadsUpDisplayLayerImpl', LayerImplSnapshot); 112 ObjectSnapshot.register('cc::IOSurfaceLayerImpl', LayerImplSnapshot); 113 ObjectSnapshot.register('cc::NinePatchLayerImpl', LayerImplSnapshot); 114 ObjectSnapshot.register('cc::PictureImageLayerImpl', LayerImplSnapshot); 115 ObjectSnapshot.register('cc::ScrollbarLayerImpl', LayerImplSnapshot); 116 ObjectSnapshot.register('cc::SolidColorLayerImpl', LayerImplSnapshot); 117 ObjectSnapshot.register('cc::TextureLayerImpl', LayerImplSnapshot); 118 ObjectSnapshot.register('cc::TiledLayerImpl', LayerImplSnapshot); 119 ObjectSnapshot.register('cc::VideoLayerImpl', LayerImplSnapshot); 120 121 return { 122 LayerImplSnapshot: LayerImplSnapshot, 123 PictureLayerImplSnapshot: PictureLayerImplSnapshot 124 }; 125}); 126