From e78690c2d2c19c9f1edb21621a45793d5e5084e3 Mon Sep 17 00:00:00 2001 From: Tim Schaub Date: Fri, 27 Sep 2013 19:14:56 +0200 Subject: [PATCH] Add setCoordinates for point and dispatch change event --- src/ol/geom/point.js | 17 ++++++++++++++++- test/spec/ol/geom/point.test.js | 30 ++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/src/ol/geom/point.js b/src/ol/geom/point.js index 2b349c84c2..ffa269d902 100644 --- a/src/ol/geom/point.js +++ b/src/ol/geom/point.js @@ -1,8 +1,10 @@ goog.provide('ol.geom.Point'); goog.require('goog.asserts'); +goog.require('goog.events.EventType'); goog.require('ol.Coordinate'); goog.require('ol.geom.Geometry'); +goog.require('ol.geom.GeometryEvent'); goog.require('ol.geom.GeometryType'); @@ -71,11 +73,24 @@ ol.geom.Point.prototype.getType = function() { }; +/** + * Update the point coordinates. + * @param {ol.Coordinate} coordinates Coordinates array. + */ +ol.geom.Point.prototype.setCoordinates = function(coordinates) { + var oldBounds = this.bounds_; + this.bounds_ = null; + this.coordinates_ = coordinates; + this.dispatchEvent(new ol.geom.GeometryEvent(goog.events.EventType.CHANGE, + this, oldBounds)); +}; + + /** * @inheritDoc */ ol.geom.Point.prototype.transform = function(transform) { var coordinates = this.getCoordinates(); transform(coordinates, coordinates, coordinates.length); - this.bounds_ = null; + this.setCoordinates(coordinates); // for change event }; diff --git a/test/spec/ol/geom/point.test.js b/test/spec/ol/geom/point.test.js index 48b5a7f1e6..dda5bc9014 100644 --- a/test/spec/ol/geom/point.test.js +++ b/test/spec/ol/geom/point.test.js @@ -34,6 +34,35 @@ describe('ol.geom.Point', function() { }); + describe('#setCoordinates()', function() { + + it('updates the coordinates', function() { + var point = new ol.geom.Point([10, 20]); + point.setCoordinates([30, 40]); + expect(point.getCoordinates()).to.eql([30, 40]); + }); + + it('invalidates bounds', function() { + var point = new ol.geom.Point([10, 20]); + point.setCoordinates([30, 40]); + expect(point.getBounds()).to.eql([30, 40, 30, 40]); + }); + + it('triggers a change event', function(done) { + var point = new ol.geom.Point([10, 20]); + expect(point.getBounds()).to.eql([10, 20, 10, 20]); + goog.events.listen(point, 'change', function(evt) { + expect(evt.target).to.equal(point); + expect(evt.oldExtent).to.eql([10, 20, 10, 20]); + expect(evt.target.getBounds()).to.eql([30, 40, 30, 40]); + expect(evt.target.getCoordinates()).to.eql([30, 40]); + done(); + }); + point.setCoordinates([30, 40]); + }); + + }); + describe('#transform()', function() { var forward = ol.proj.getTransform('EPSG:4326', 'EPSG:3857'); @@ -57,6 +86,7 @@ describe('ol.geom.Point', function() { }); +goog.require('goog.events'); goog.require('ol.geom.Geometry'); goog.require('ol.geom.Point'); goog.require('ol.proj');