diff --git a/src/ol/control/zoomslidercontrol.js b/src/ol/control/zoomslidercontrol.js index 605131b875..e4a968c3c4 100644 --- a/src/ol/control/zoomslidercontrol.js +++ b/src/ol/control/zoomslidercontrol.js @@ -4,7 +4,6 @@ goog.provide('ol.control.ZoomSlider'); goog.require('goog.asserts'); goog.require('goog.dom'); -goog.require('goog.math.Rect'); goog.require('goog.style'); goog.require('ol.events'); goog.require('ol.events.Event'); @@ -55,25 +54,37 @@ ol.control.ZoomSlider = function(opt_options) { /** * @type {boolean} + * @private */ this.dragging_; + /** * @type {Array.} + * @private */ this.dragListenerKeys_; /** - * @type {goog.math.Rect} + * @type {number} + * @private */ - this.limits_; + this.heightLimit_ = 0; + + /** + * @type {number} + * @private + */ + this.widthLimit_ = 0; /** * @type {number|undefined} + * @private */ this.previousX_; /** * @type {number|undefined} + * @private */ this.previousY_; @@ -93,8 +104,8 @@ ol.control.ZoomSlider = function(opt_options) { this.sliderInitialized_ = false; /** - * @private * @type {number} + * @private */ this.duration_ = options.duration !== undefined ? options.duration : 200; @@ -174,18 +185,13 @@ ol.control.ZoomSlider.prototype.initSlider_ = function() { thumbMargins.top + thumbMargins.bottom; this.thumbSize_ = [thumbWidth, thumbHeight]; - var width = containerSize.width - thumbWidth; - var height = containerSize.height - thumbHeight; - - var limits; if (containerSize.width > containerSize.height) { this.direction_ = ol.control.ZoomSlider.direction.HORIZONTAL; - limits = new goog.math.Rect(0, 0, width, 0); + this.widthLimit_ = containerSize.width - thumbWidth; } else { this.direction_ = ol.control.ZoomSlider.direction.VERTICAL; - limits = new goog.math.Rect(0, 0, 0, height); + this.heightLimit_ = containerSize.height - thumbHeight; } - this.limits_ = limits; this.sliderInitialized_ = true; }; @@ -325,10 +331,9 @@ ol.control.ZoomSlider.prototype.setThumbPosition_ = function(res) { var thumb = goog.dom.getFirstElementChild(this.element); if (this.direction_ == ol.control.ZoomSlider.direction.HORIZONTAL) { - thumb.style.left = this.limits_.left + this.limits_.width * position + 'px'; + thumb.style.left = this.widthLimit_ * position + 'px'; } else { - thumb.style.left = this.limits_.left + 'px'; - thumb.style.top = this.limits_.top + this.limits_.height * position + 'px'; + thumb.style.top = this.heightLimit_ * position + 'px'; } }; @@ -344,12 +349,11 @@ ol.control.ZoomSlider.prototype.setThumbPosition_ = function(res) { * @private */ ol.control.ZoomSlider.prototype.getRelativePosition_ = function(x, y) { - var draggerLimits = this.limits_; var amount; if (this.direction_ === ol.control.ZoomSlider.direction.HORIZONTAL) { - amount = (x - draggerLimits.left) / draggerLimits.width; + amount = x / this.widthLimit_; } else { - amount = (y - draggerLimits.top) / draggerLimits.height; + amount = y / this.heightLimit_; } return ol.math.clamp(amount, 0, 1); }; diff --git a/test/spec/ol/control/zoomslidercontrol.test.js b/test/spec/ol/control/zoomslidercontrol.test.js index fc71799507..9fe30399c3 100644 --- a/test/spec/ol/control/zoomslidercontrol.test.js +++ b/test/spec/ol/control/zoomslidercontrol.test.js @@ -52,7 +52,8 @@ describe('ol.control.ZoomSlider', function() { describe('#initSlider_', function() { it('sets limits', function() { zoomslider.initSlider_(); - expect(zoomslider.limits_ instanceof goog.math.Rect).to.be(true); + expect(zoomslider.widthLimit_).not.to.be(0); + expect(zoomslider.heightLimit_).to.be(0); }); }); @@ -115,19 +116,19 @@ describe('ol.control.ZoomSlider', function() { var event = new ol.pointer.PointerEvent(ol.pointer.EventType.POINTERDOWN, { target: control.element.firstElementChild }); - event.clientX = control.limits_.width; + event.clientX = control.widthLimit_; event.clientY = 0; dragger.dispatchEvent(event); expect(control.currentResolution_).to.be(16); expect(control.dragging_).to.be(true); expect(control.dragListenerKeys_).to.be.ok(); event.type = ol.pointer.EventType.POINTERMOVE; - event.clientX = 6 * control.limits_.width / 8; + event.clientX = 6 * control.widthLimit_ / 8; event.clientY = 0; dragger.dispatchEvent(event); expect(control.currentResolution_).to.be(4); event.type = ol.pointer.EventType.POINTERMOVE; - event.clientX = 4 * control.limits_.width / 8; + event.clientX = 4 * control.widthLimit_ / 8; event.clientY = 0; dragger.dispatchEvent(event); event.type = ol.pointer.EventType.POINTERUP; @@ -159,12 +160,12 @@ describe('ol.control.ZoomSlider', function() { expect(control.dragListenerKeys_).to.be.ok(); event.type = ol.pointer.EventType.POINTERMOVE; event.clientX = 0; - event.clientY = 2 * control.limits_.height / 8; + event.clientY = 2 * control.heightLimit_ / 8; dragger.dispatchEvent(event); expect(control.currentResolution_).to.be(0.25); event.type = ol.pointer.EventType.POINTERMOVE; event.clientX = 0; - event.clientY = 4 * control.limits_.height / 8; + event.clientY = 4 * control.heightLimit_ / 8; dragger.dispatchEvent(event); event.type = ol.pointer.EventType.POINTERUP; dragger.dispatchEvent(event); @@ -179,7 +180,6 @@ describe('ol.control.ZoomSlider', function() { goog.require('goog.Disposable'); goog.require('goog.dispose'); goog.require('goog.dom.classlist'); -goog.require('goog.math.Rect'); goog.require('ol.Map'); goog.require('ol.View'); goog.require('ol.control.ZoomSlider');