Home | History | Annotate | Download | only in cc
      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 
      7 base.require('base.rect');
      8 base.require('cc.constants');
      9 base.require('cc.region');
     10 base.require('tracing.trace_model.object_instance');
     11 
     12 base.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