Use ol.Disposable instead of goog.Disposable

This commit is contained in:
Tim Schaub
2016-03-01 23:58:36 -07:00
parent ae4d8195c0
commit 09eee46822
7 changed files with 67 additions and 30 deletions

View File

@@ -118,14 +118,17 @@ ol.control.ZoomSlider = function(opt_options) {
[className, ol.css.CLASS_UNSELECTABLE, ol.css.CLASS_CONTROL],
thumbElement);
var dragger = new ol.pointer.PointerEventHandler(containerElement);
this.registerDisposable(dragger);
/**
* @type {ol.pointer.PointerEventHandler}
* @private
*/
this.dragger_ = new ol.pointer.PointerEventHandler(containerElement);
ol.events.listen(dragger, ol.pointer.EventType.POINTERDOWN,
ol.events.listen(this.dragger_, ol.pointer.EventType.POINTERDOWN,
this.handleDraggerStart_, this);
ol.events.listen(dragger, ol.pointer.EventType.POINTERMOVE,
ol.events.listen(this.dragger_, ol.pointer.EventType.POINTERMOVE,
this.handleDraggerDrag_, this);
ol.events.listen(dragger, ol.pointer.EventType.POINTERUP,
ol.events.listen(this.dragger_, ol.pointer.EventType.POINTERUP,
this.handleDraggerEnd_, this);
ol.events.listen(containerElement, ol.events.EventType.CLICK,
@@ -143,6 +146,15 @@ ol.control.ZoomSlider = function(opt_options) {
goog.inherits(ol.control.ZoomSlider, ol.control.Control);
/**
* @inheritDoc
*/
ol.control.ZoomSlider.prototype.disposeInternal = function() {
this.dragger_.dispose();
goog.base(this, 'disposeInternal');
};
/**
* The enum for available directions.
*

30
src/ol/disposable.js Normal file
View File

@@ -0,0 +1,30 @@
goog.provide('ol.Disposable');
/**
* Objects that need to clean up after themselves.
* @constructor
*/
ol.Disposable = function() {};
/**
* The object has already been disposed.
* @type {boolean}
* @private
*/
ol.Disposable.prototype.disposed_ = false;
/**
* Clean up.
*/
ol.Disposable.prototype.dispose = function() {
if (!this.disposed_) {
this.disposed_ = true;
this.disposeInternal();
}
};
/**
* Extension point for disposable objects.
* @protected
*/
ol.Disposable.prototype.disposeInternal = function() {};

View File

@@ -1,6 +1,6 @@
goog.provide('ol.events.EventTarget');
goog.require('goog.Disposable');
goog.require('ol.Disposable');
goog.require('ol.events');
goog.require('ol.events.Event');
@@ -20,7 +20,7 @@ goog.require('ol.events.Event');
* returns false.
*
* @constructor
* @extends {goog.Disposable}
* @extends {ol.Disposable}
*/
ol.events.EventTarget = function() {
@@ -33,7 +33,7 @@ ol.events.EventTarget = function() {
this.listeners_ = {};
};
goog.inherits(ol.events.EventTarget, goog.Disposable);
goog.inherits(ol.events.EventTarget, ol.Disposable);
/**
@@ -79,7 +79,6 @@ ol.events.EventTarget.prototype.dispatchEvent = function(event) {
*/
ol.events.EventTarget.prototype.disposeInternal = function() {
ol.events.unlistenAll(this);
goog.base(this, 'disposeInternal');
};

View File

@@ -300,12 +300,15 @@ ol.Map = function(options) {
}
this.viewport_.appendChild(this.overlayContainerStopEvent_);
var mapBrowserEventHandler = new ol.MapBrowserEventHandler(this);
/**
* @private
* @type {ol.MapBrowserEventHandler}
*/
this.mapBrowserEventHandler_ = new ol.MapBrowserEventHandler(this);
for (var key in ol.MapBrowserEvent.EventType) {
ol.events.listen(mapBrowserEventHandler, ol.MapBrowserEvent.EventType[key],
ol.events.listen(this.mapBrowserEventHandler_, ol.MapBrowserEvent.EventType[key],
this.handleMapBrowserEvent, this);
}
this.registerDisposable(mapBrowserEventHandler);
/**
* @private
@@ -353,9 +356,7 @@ ol.Map = function(options) {
* @type {ol.renderer.Map}
* @private
*/
this.renderer_ =
new optionsInternal.rendererConstructor(this.viewport_, this);
this.registerDisposable(this.renderer_);
this.renderer_ = new optionsInternal.rendererConstructor(this.viewport_, this);
/**
* @type {function(Event)|undefined}
@@ -577,6 +578,8 @@ ol.Map.prototype.removePreRenderFunction = function(preRenderFunction) {
* @inheritDoc
*/
ol.Map.prototype.disposeInternal = function() {
this.mapBrowserEventHandler_.dispose();
this.renderer_.dispose();
ol.events.unlisten(this.viewport_, ol.events.EventType.WHEEL,
this.handleBrowserEvent, this);
ol.events.unlisten(this.viewport_, ol.events.EventType.MOUSEWHEEL,

View File

@@ -2,14 +2,14 @@
goog.provide('ol.render.Box');
goog.require('goog.Disposable');
goog.require('goog.asserts');
goog.require('ol.Disposable');
goog.require('ol.geom.Polygon');
/**
* @constructor
* @extends {goog.Disposable}
* @extends {ol.Disposable}
* @param {string} className CSS class name.
*/
ol.render.Box = function(className) {
@@ -47,7 +47,7 @@ ol.render.Box = function(className) {
this.endPixel_ = null;
};
goog.inherits(ol.render.Box, goog.Disposable);
goog.inherits(ol.render.Box, ol.Disposable);
/**
@@ -55,7 +55,6 @@ goog.inherits(ol.render.Box, goog.Disposable);
*/
ol.render.Box.prototype.disposeInternal = function() {
this.setMap(null);
goog.base(this, 'disposeInternal');
};

View File

@@ -1,11 +1,11 @@
goog.provide('ol.RendererType');
goog.provide('ol.renderer.Map');
goog.require('goog.Disposable');
goog.require('goog.asserts');
goog.require('goog.functions');
goog.require('goog.vec.Mat4');
goog.require('ol');
goog.require('ol.Disposable');
goog.require('ol.events');
goog.require('ol.events.EventType');
goog.require('ol.extent');
@@ -29,7 +29,7 @@ ol.RendererType = {
/**
* @constructor
* @extends {goog.Disposable}
* @extends {ol.Disposable}
* @param {Element} container Container.
* @param {ol.Map} map Map.
* @struct
@@ -58,7 +58,7 @@ ol.renderer.Map = function(container, map) {
this.layerRendererListeners_ = {};
};
goog.inherits(ol.renderer.Map, goog.Disposable);
goog.inherits(ol.renderer.Map, ol.Disposable);
/**
@@ -96,7 +96,6 @@ ol.renderer.Map.prototype.disposeInternal = function() {
for (var id in this.layerRenderers_) {
this.layerRenderers_[id].dispose();
}
goog.base(this, 'disposeInternal');
};