[OpenLayers-Dev] PanZoomBar tries to zoom outside the range (plus
bad events)
Tim Schaub
tschaub at opengeo.org
Wed Mar 30 15:30:09 EDT 2011
Hello Martin-
Thanks for opening http://trac.osgeo.org/openlayers/ticket/3219. Please
see my comments there and provide more detail on the ticket to describe
how you reproduce the problem. Also, please specify if this issue
exists on the trunk and in the 2.10 release or only in one.
In trying to reproduce your issue, I've come across a minor regression
that I think is a separate issue.
http://trac.osgeo.org/openlayers/ticket/3220
Tim
On 3/24/11 4:45 AM, Andreas Hocevar wrote:
> Can you please provide an example that shows the problem? The best place to do this (and attach a patch with your fixes) would be a ticket on http://trac.osgeo.org/openlayers/.
>
> Thanks,
> Andreas.
>
> On Mar 16, 2011, at 13:14 , Martin Saturka wrote:
>
>> Hi,
>> when you drag the bar at the PanZoomBar too up or down, the control
>> tries to zoom to levels outside the map zoom range, e.g. to -1 or 22,
>> ...
>>
>> It would be nice if we had a hook for checking / modifying that
>> targeted zoom number. We use some hook by now, as below at the
>> "zoomBarUp" method.
>>
>> Together with it, the mouse click event stopping does not work
>> correctly (at MSIE, and OL 2.10), thus we had to put some external
>> dealing there (otherwise it ended up with adding new points as we have
>> it for mouse click events).
>>
>>
>> OpenLayers.Control.PanZoomBarMod =
>> OpenLayers.Class(OpenLayers.Control.PanZoomBar, {
>> // msie does not stops the event, and does not preserves its
>> properties either
>> divClick: function (evt) {
>> if (!OpenLayers.Event.isLeftClick(evt)) {
>> return;
>> }
>> var levels = evt.xy.y / this.zoomStopHeight;
>> if (this.forceFixedZoomLevel || !this.map.fractionalZoom) {
>> levels = Math.floor(levels);
>> }
>> var zoom = this.map.getNumZoomLevels() - 1 - levels;
>> zoom = Math.min(Math.max(zoom, 0), this.map.getNumZoomLevels() - 1);
>> this.map.zoomTo(zoom);
>>
>> var stop_event = OpenLayers.Hooks.PanZoomBar.divClick(this);
>> if (stop_event)
>> {
>> OpenLayers.Event.stop(evt);
>> }
>>
>> },
>>
>> buttonDown: function(evt) {
>> if (!OpenLayers.Event.isLeftClick(evt)) {
>> return;
>> }
>> OpenLayers.Hooks.PanZoomBar.buttonDown(this);
>>
>> switch (this.action) {
>> case "panup":
>> this.map.pan(0, - this.getSlideFactor("h"));
>> break;
>> case "pandown":
>> this.map.pan(0, this.getSlideFactor("h"));
>> break;
>> case "panleft":
>> this.map.pan(- this.getSlideFactor("w"), 0);
>> break;
>> case "panright":
>> this.map.pan(this.getSlideFactor("w"), 0);
>> break;
>> case "zoomin":
>> this.map.zoomIn();
>> break;
>> case "zoomout":
>> this.map.zoomOut();
>> break;
>> case "zoomworld":
>> this.map.zoomToMaxExtent();
>> break;
>> default:;
>> }
>>
>> OpenLayers.Event.stop(evt);
>> },
>>
>> zoomBarUp: function(evt) {
>> if (!OpenLayers.Event.isLeftClick(evt)) {
>> return;
>> }
>> if (this.mouseDragStart) {
>> this.div.style.cursor="";
>> this.map.events.un({
>> "mouseup": this.passEventToSlider,
>> "mousemove": this.passEventToSlider,
>> scope: this
>> });
>> var deltaY = this.zoomStart.y - evt.xy.y;
>> var zoomLevel = this.map.zoom;
>> if (!this.forceFixedZoomLevel&& this.map.fractionalZoom) {
>> zoomLevel += deltaY/this.zoomStopHeight;
>> zoomLevel = Math.min(Math.max(zoomLevel, 0),
>> this.map.getNumZoomLevels() - 1);
>> } else {
>> zoomLevel += Math.round(deltaY/this.zoomStopHeight);
>> }
>>
>> var max_layer_zoom = OpenLayers.Hooks.Zooms.maxZoom(this);
>> var min_layer_zoom = OpenLayers.Hooks.Zooms.minZoom(this);
>>
>> if ((max_layer_zoom !== undefined)&& (typeof
>> max_layer_zoom === "number")) {
>> if (max_layer_zoom< zoomLevel) {zoomLevel = max_layer_zoom;}
>> }
>> if ((min_layer_zoom !== undefined)&& (typeof
>> min_layer_zoom === "number")) {
>> if (min_layer_zoom> zoomLevel) {zoomLevel = min_layer_zoom;}
>> }
>>
>> this.map.zoomTo(zoomLevel);
>> this.mouseDragStart = null;
>> this.zoomStart = null;
>>
>> var stop_event = OpenLayers.Hooks.PanZoomBar.zoomBarUp(this);
>> if (stop_event) {
>> OpenLayers.Event.stop(evt);
>> }
>> }
>> },
>>
>> CLASS_NAME: "OpenLayers.Control.PanZoomBar"
>> });
>>
>> M.
>>
>> --
>> Martin Saturka
>> Software Engineer, Sourcefabric
>> www.sourcefabric.org
>> _______________________________________________
>> Dev mailing list
>> Dev at lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/openlayers-dev
>
--
Tim Schaub
OpenGeo - http://opengeo.org
Expert service straight from the developers.
More information about the Dev
mailing list