From 0535a31bc666969308565f5791f8d3fdc9103e36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Lemoine?= Date: Thu, 27 Sep 2012 15:48:04 +0200 Subject: [PATCH] Add zoomDelta option to MapOptions --- externs/ol.js | 6 ++++++ src/ol/interaction/dblclickzoom.js | 12 ++++++++++-- src/ol/mapoptions.js | 5 ++++- test/spec/ol/mapoptions.test.js | 27 ++++++++++++++++++++++++++- 4 files changed, 46 insertions(+), 4 deletions(-) diff --git a/externs/ol.js b/externs/ol.js index 1a50100ff7..42179b7246 100644 --- a/externs/ol.js +++ b/externs/ol.js @@ -136,6 +136,12 @@ olx.MapOptionsExtern.prototype.userProjection; olx.MapOptionsExtern.prototype.zoom; +/** + * @type {number|undefined} + */ +olx.MapOptionsExtern.prototype.zoomDelta; + + /** * @type {number|undefined} */ diff --git a/src/ol/interaction/dblclickzoom.js b/src/ol/interaction/dblclickzoom.js index 097ec28888..c4050bdd1f 100644 --- a/src/ol/interaction/dblclickzoom.js +++ b/src/ol/interaction/dblclickzoom.js @@ -9,8 +9,15 @@ goog.require('ol.interaction.Interaction'); /** * @constructor * @extends {ol.interaction.Interaction} + * @param {number} delta The zoom delta applied on each double click. */ -ol.interaction.DblClickZoom = function() { +ol.interaction.DblClickZoom = function(delta) { + /** + * @private + * @type {number} + */ + this.delta_ = delta; + goog.base(this); }; goog.inherits(ol.interaction.DblClickZoom, ol.interaction.Interaction); @@ -26,7 +33,8 @@ ol.interaction.DblClickZoom.prototype.handleMapBrowserEvent = mapBrowserEvent.isMouseActionButton()) { var map = mapBrowserEvent.map; var anchor = mapBrowserEvent.getCoordinate(); - var delta = mapBrowserEvent.browserEvent.shiftKey ? -4 : 4; + var delta = mapBrowserEvent.browserEvent.shiftKey ? + -this.delta_ : this.delta_; map.zoom(delta, anchor); mapBrowserEvent.preventDefault(); } diff --git a/src/ol/mapoptions.js b/src/ol/mapoptions.js index 96a5c4f70c..6ecb55d04e 100644 --- a/src/ol/mapoptions.js +++ b/src/ol/mapoptions.js @@ -75,6 +75,7 @@ ol.DEFAULT_RENDERER_HINTS = [ * shiftDragZoom: (boolean|undefined), * userProjection: (ol.Projection|string|undefined), * zoom: (number|undefined), + * zoomDelta: (number|undefined), * zoomFactor: (number|undefined)}} */ ol.MapOptionsLiteral; @@ -223,7 +224,9 @@ ol.MapOptions.createInteractions_ = function(mapOptionsLiteral) { var doubleClickZoom = goog.isDef(mapOptionsLiteral.doubleClickZoom) ? mapOptionsLiteral.doubleClickZoom : true; if (doubleClickZoom) { - interactions.push(new ol.interaction.DblClickZoom()); + var zoomDelta = goog.isDef(mapOptionsLiteral.zoomDelta) ? + mapOptionsLiteral.zoomDelta : 4; + interactions.push(new ol.interaction.DblClickZoom(zoomDelta)); } var dragPan = goog.isDef(mapOptionsLiteral.dragPan) ? diff --git a/test/spec/ol/mapoptions.test.js b/test/spec/ol/mapoptions.test.js index 58e8d202b5..be840417a3 100644 --- a/test/spec/ol/mapoptions.test.js +++ b/test/spec/ol/mapoptions.test.js @@ -92,6 +92,31 @@ describe('ol.MapOptions', function() { }); }); }); - }); + describe('create double click interaction', function() { + + beforeEach(function() { + options.doubleClickZoom = true; + }); + + describe('default zoomDelta', function() { + it('create double click interaction with default delta', function() { + var interactions = ol.MapOptions.createInteractions_(options); + expect(interactions.getLength()).toEqual(1); + expect(interactions.getAt(0)).toBeA(ol.interaction.DblClickZoom); + expect(interactions.getAt(0).delta_).toEqual(4); + }); + }); + + describe('set mouseWheelZoomDelta', function() { + it('create double click interaction with set delta', function() { + options.zoomDelta = 7; + var interactions = ol.MapOptions.createInteractions_(options); + expect(interactions.getLength()).toEqual(1); + expect(interactions.getAt(0)).toBeA(ol.interaction.DblClickZoom); + expect(interactions.getAt(0).delta_).toEqual(7); + }); + }); + }); + }); });