diff --git a/src/ol/style.js b/src/ol/style.js index d3efbe46e4..8639a72651 100644 --- a/src/ol/style.js +++ b/src/ol/style.js @@ -2,4 +2,8 @@ goog.provide('ol.style'); goog.require('ol.style.IconImageCache'); +/** + * The {@link ol.style.IconImageCache} for {@link ol.style.Icon} images. + * @api + */ ol.style.iconImageCache = new ol.style.IconImageCache(); diff --git a/src/ol/style/iconimagecache.js b/src/ol/style/iconimagecache.js index 58b1baac69..7966e7bdc6 100644 --- a/src/ol/style/iconimagecache.js +++ b/src/ol/style/iconimagecache.js @@ -4,6 +4,7 @@ goog.require('ol.color'); /** + * Singleton class. Available through {@link ol.style.iconImageCache}. * @constructor */ ol.style.IconImageCache = function() { @@ -21,7 +22,6 @@ ol.style.IconImageCache = function() { this.cacheSize_ = 0; /** - * @const * @type {number} * @private */ @@ -91,3 +91,16 @@ ol.style.IconImageCache.prototype.set = function(src, crossOrigin, color, iconIm this.cache_[key] = iconImage; ++this.cacheSize_; }; + + +/** + * Set the cache size of the icon cache. Default is `32`. Change this value when + * your map uses more than 32 different icon images and you are not caching icon + * styles on the application level. + * @param {number} maxCacheSize Cache max size. + * @api + */ +ol.style.IconImageCache.prototype.setSize = function(maxCacheSize) { + this.maxCacheSize_ = maxCacheSize; + this.expire(); +}; diff --git a/test/spec/ol/style/iconimagecache.test.js b/test/spec/ol/style/iconimagecache.test.js index ef47345275..bb3daa3321 100644 --- a/test/spec/ol/style/iconimagecache.test.js +++ b/test/spec/ol/style/iconimagecache.test.js @@ -66,4 +66,25 @@ describe('ol.style.IconImageCache', function() { expect(cache.get('4', null, null)).to.not.be(null); }); }); + + describe('#setSize', function() { + it('sets max cache size and expires cache', function() { + var cache = ol.style.iconImageCache; + + var i, src, iconImage; + + for (i = 0; i < 3; ++i) { + src = i + ''; + iconImage = new ol.style.IconImage(null, src); + cache.set(src, null, null, iconImage); + } + + expect(cache.cacheSize_).to.eql(3); + + cache.setSize(2); + + expect(cache.maxCacheSize_).to.eql(2); + expect(cache.cacheSize_).to.eql(2); + }); + }); });