      1 /**
      2  * Hilo
      3  * Copyright 2015 alibaba.com
      4  * Licensed under the MIT License
      5  */
      6
      7 var _cacheCanvas, _cacheContext;
      8 /**
      9  * @class CacheMixin A mixin that contains cache method.You can mix cache method to the target by use Class.mix(target, CacheMixin).
     10  * @static
     11  * @mixin
     12  * @module hilo/view/CacheMixin
     13  * @requires hilo/view/Drawable
     14  * @requires hilo/util/browser
     15  */
     16 var CacheMixin = /** @lends CacheMixin# */ {
     17     _cacheDirty:true,
     18     /**
     19      * Cache the view.
     20      * @param {Boolean} forceUpdate is force update cache.
     21      */
     22     cache: function(forceUpdate){
     23         if(forceUpdate || this._cacheDirty || !this.drawable){
     24             this.updateCache();
     25         }
     26     },
     27     /**
     28      * Update the cache.
     29      */
     30     updateCache:function(){
     31         if(browser.supportCanvas){
     32             if(!_cacheCanvas){
     33                 _cacheCanvas = document.createElement('canvas');
     34                 _cacheContext = _cacheCanvas.getContext('2d');
     35             }
     36
     37             //TODO:width, height自动判断
     38             _cacheCanvas.width = this.width;
     39             _cacheCanvas.height = this.height;
     40             this._draw(_cacheContext);
     41             this.drawable = this.drawable||new Drawable();
     42             this.drawable.init({
     43                 image:_cacheCanvas.toDataURL()
     44             });
     45             this._cacheDirty = false;
     46         }
     47     },
     48     /**
     49      * set the cache state diry.
     50      * @param {Boolean} dirty is cache dirty
     51      */
     52     setCacheDirty:function(dirty){
     53         this._cacheDirty = dirty;
     54     }
     55 };