// Copyright (c) 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
'use strict';
base.require('base.rect');
base.require('cc.constants');
base.require('cc.region');
base.require('tracing.trace_model.object_instance');
base.exportTo('cc', function() {
var constants = cc.constants;
var ObjectSnapshot = tracing.trace_model.ObjectSnapshot;
/**
* @constructor
*/
function LayerImplSnapshot() {
ObjectSnapshot.apply(this, arguments);
}
LayerImplSnapshot.prototype = {
__proto__: ObjectSnapshot.prototype,
preInitialize: function() {
cc.preInitializeObject(this);
this.layerTreeImpl_ = undefined;
this.parentLayer = undefined;
},
initialize: function() {
// Defaults.
this.invalidation = new cc.Region();
this.pictures = [];
// Import & validate this.args
cc.moveRequiredFieldsFromArgsToToplevel(
this, ['layerId', 'children',
'layerQuad']);
cc.moveOptionalFieldsFromArgsToToplevel(
this, ['maskLayer', 'replicaLayer']);
// Leave bounds in both places.
this.bounds = base.Rect.FromXYWH(
0, 0,
this.args.bounds.width, this.args.bounds.height);
for (var i = 0; i < this.children.length; i++)
this.children[i].parentLayer = this;
if (this.maskLayer)
this.maskLayer.parentLayer = this;
if (this.replicaLayer)
this.maskLayer.replicaLayer = this;
},
get layerTreeImpl() {
if (this.layerTreeImpl_)
return this.layerTreeImpl_;
if (this.parentLayer)
return this.parentLayer.layerTreeImpl;
return undefined;
},
set layerTreeImpl(layerTreeImpl) {
this.layerTreeImpl_ = layerTreeImpl;
},
get activeLayer() {
if (this.layerTreeImpl.whichTree == constants.ACTIVE_TREE)
return this;
var activeTree = this.layerTreeImpl.layerTreeHostImpl.activeTree;
return activeTree.findLayerWithId(this.layerId);
},
get pendingLayer() {
if (this.layerTreeImpl.whichTree == constants.PENDING_TREE)
return this;
var pendingTree = this.layerTreeImpl.layerTreeHostImpl.pendingTree;
return pendingTree.findLayerWithId(this.layerId);
}
};
/**
* @constructor
*/
function PictureLayerImplSnapshot() {
LayerImplSnapshot.apply(this, arguments);
}
PictureLayerImplSnapshot.prototype = {
__proto__: LayerImplSnapshot.prototype,
initialize: function() {
LayerImplSnapshot.prototype.initialize.call(this);
if (this.args.invalidation) {
this.invalidation = cc.RegionFromArray(this.args.invalidation);
delete this.args.invalidation;
}
if (this.args.pictures) {
this.pictures = this.args.pictures;
}
}
};
ObjectSnapshot.register('cc::LayerImpl', LayerImplSnapshot);
ObjectSnapshot.register('cc::PictureLayerImpl', PictureLayerImplSnapshot);
ObjectSnapshot.register('cc::DelegatedRendererLayerImpl', LayerImplSnapshot);
ObjectSnapshot.register('cc::HeadsUpDisplayLayerImpl', LayerImplSnapshot);
ObjectSnapshot.register('cc::IOSurfaceLayerImpl', LayerImplSnapshot);
ObjectSnapshot.register('cc::NinePatchLayerImpl', LayerImplSnapshot);
ObjectSnapshot.register('cc::PictureImageLayerImpl', LayerImplSnapshot);
ObjectSnapshot.register('cc::ScrollbarLayerImpl', LayerImplSnapshot);
ObjectSnapshot.register('cc::SolidColorLayerImpl', LayerImplSnapshot);
ObjectSnapshot.register('cc::TextureLayerImpl', LayerImplSnapshot);
ObjectSnapshot.register('cc::TiledLayerImpl', LayerImplSnapshot);
ObjectSnapshot.register('cc::VideoLayerImpl', LayerImplSnapshot);
return {
LayerImplSnapshot: LayerImplSnapshot,
PictureLayerImplSnapshot: PictureLayerImplSnapshot
};
});