Ticket #442: final_animatedZooming_Mouse.patch
| File final_animatedZooming_Mouse.patch, 13.3 kB (added by emanuel, 3 years ago) |
|---|
-
tests/Control/test_MouseDefaults.html
old new 1 <html> 2 <head> 3 <script src="../../lib/OpenLayers.js"></script> 4 <script type="text/javascript"><!-- 5 var map; 6 var layer; 7 var name = 'Test Layer'; 8 var url = "http://octo.metacarta.com/cgi-bin/mapserv"; 9 var params = { map: '/mapdata/vmap_wms.map', 10 layers: 'basic', 11 format: 'image/png'}; 12 13 function test_01_Control_MouseDefaults_constructor (t) { 14 t.plan( 1 ); 15 16 control = new OpenLayers.Control.MouseDefaults(); 17 t.ok( control instanceof OpenLayers.Control.MouseDefaults, "new OpenLayers.Control.MouseDefaults returns object" ); 18 } 19 function test_02_Control_MouseDefaults_addControl (t) { 20 t.plan( 4 ); 21 map = new OpenLayers.Map('map'); 22 control = new OpenLayers.Control.MouseDefaults(); 23 t.ok( control instanceof OpenLayers.Control.MouseDefaults, "new OpenLayers.Control.MouseDefaults returns object" ); 24 t.ok( map instanceof OpenLayers.Map, "new OpenLayers.Map creates map" ); 25 map.addControl(control); 26 t.ok( control.map === map, "Control.map is set to the map object" ); 27 t.ok( map.controls[3] === control, "map.controls contains control" ); 28 } 29 function test_03_Control_MouseDefaults_control_events (t) { 30 t.plan( 10 ); 31 if ((navigator.userAgent.indexOf("compatible") == -1)) { 32 var evt = {which: 1}; // control expects left-click 33 map = new OpenLayers.Map('map'); 34 layer = new OpenLayers.Layer.WMS(name, url, params); 35 map.addLayer(layer); 36 37 control = new OpenLayers.Control.MouseDefaults(); 38 map.addControl(control); 39 40 var centerLL = new OpenLayers.LonLat(0,0); 41 map.setCenter(centerLL, 5); 42 43 44 45 evt.xy = new OpenLayers.Pixel(100,100); 46 control.defaultDblClick(evt); 47 48 t.delay_call( 49 1, function() { 50 t.eq(map.getZoom(), 6, 51 "Map zoom set correctly after double clicking on map"); 52 var cent = map.getCenter(); 53 t.eq(cent.lon, -18.10546875, 54 "Map center lon set correctly after double clicking on map"); 55 t.eq(cent.lat, 6.85546875, 56 "Map center lat set correctly after double clicking on map"); 57 58 // set zoomanimation flag manually, 59 // reason: loadend event in layers.js will not achieved in unittests 60 map.zoomanimationActive = false; 61 62 evt.shiftKey = true; 63 evt.xy = new OpenLayers.Size(5,5); 64 control.defaultMouseDown(evt); 65 evt.xy = new OpenLayers.Size(15,15); 66 control.defaultMouseUp(evt); 67 }, 68 1, function() { 69 t.eq(map.getZoom(), 7, 70 "Map zoom set correctly after using shift-zoombox"); 71 72 // set zoomanimation flag manually, 73 // reason: loadend event in layers.js will not achieved in unittests 74 map.zoomanimationActive = false; 75 76 evt.xy = new OpenLayers.Pixel(100,100); 77 control.defaultWheelUp(evt) 78 }, 79 1, function() { 80 t.eq(map.getZoom(), 8, 81 "Map zoom set correctly after using mouse wheel up"); 82 var cent = map.getCenter(); 83 t.eq(cent.lon, -20.36865234375, 84 "Map center lon set correctly after using mouse wheel up"); 85 t.eq(cent.lat, 7.71240234375, 86 "Map center lat set correctly after using mouse wheel up"); 87 88 // set zoomanimation flag manually, 89 // reason: loadend event in layers.js will not achieved in unittests 90 map.zoomanimationActive = false; 91 92 evt.xy = new OpenLayers.Pixel(100,100); 93 control.defaultWheelDown(evt) 94 }, 95 1, function() { 96 t.eq(map.getZoom(), 7, 97 "Map zoom set correctly after using mouse wheel up"); 98 var cent = map.getCenter(); 99 t.eq(cent.lon, -18.10546875, 100 "Map center lon set correctly after using mouse wheel up"); 101 t.eq(cent.lat, 6.85546875, 102 "Map center lat set correctly after using mouse wheel up"); 103 } 104 ); 105 } else { 106 t.ok(true, "IE does not run this test.") 107 } 108 } 109 // --> 110 </script> 111 </head> 112 <body> 113 <div id="map" style="width: 1024px; height: 512px;"/> 114 </body> 115 </html> -
tests/Control/test_MouseToolbar.html
old new 45 45 control.defaultMouseDown(evt); 46 46 evt.xy = new OpenLayers.Size(15,15); 47 47 control.defaultMouseUp(evt); 48 t.eq(map.getZoom(), 6, "Map zoom set correctly after zoombox"); 48 t.delay_call( 1, function() { 49 t.eq(map.getZoom(), 6, "Map zoom set correctly after zoombox"); 50 }); 49 51 } else { 50 52 t.ok(true, "IE does not run this test.") 51 53 } -
lib/OpenLayers/Control/MouseToolbar.js
old new 112 112 * @param {Event} evt 113 113 */ 114 114 defaultDblClick: function (evt) { 115 this.switchModeTo("pan"); 116 this.performedDrag = false; 117 var newCenter = this.map.getLonLatFromViewPortPx( evt.xy ); 118 this.map.setCenter(newCenter, this.map.zoom + 1); 119 OpenLayers.Event.stop(evt); 120 return false; 115 if (!this.map.zoomanimationActive){ 116 this.switchModeTo("pan"); 117 this.performedDrag = false; 118 119 // convert the (old) center of the map in pixel 120 var centerPx = this.map.getPixelFromLonLat(this.map.getCenter()); 121 122 // pan to new center 123 var deltaX = evt.xy.x - centerPx.x; 124 var deltaY = evt.xy.y - centerPx.y; 125 this.map.pan(deltaX, deltaY,true); 126 127 // zoom to new level 128 this.map.zoomIn(); 129 130 OpenLayers.Event.stop(evt); 131 return false; 132 } 121 133 }, 122 134 123 135 /** -
lib/OpenLayers/Control/MouseDefaults.js
old new 71 71 * @param {Event} evt 72 72 */ 73 73 defaultDblClick: function (evt) { 74 var newCenter = this.map.getLonLatFromViewPortPx( evt.xy ); 75 this.map.setCenter(newCenter, this.map.zoom + 1); 76 OpenLayers.Event.stop(evt); 77 return false; 74 if (!this.map.zoomanimationActive){ 75 // convert the (old) center of the map in pixel 76 var centerPx = this.map.getPixelFromLonLat(this.map.getCenter()); 77 78 // pan to new center 79 var deltaX = evt.xy.x - centerPx.x; 80 var deltaY = evt.xy.y - centerPx.y; 81 this.map.pan(deltaX, deltaY,true); 82 83 // zoom to new level 84 this.map.zoomIn(); 85 86 OpenLayers.Event.stop(evt); 87 return false; 88 } 78 89 }, 79 90 80 91 /** … … 173 184 */ 174 185 defaultWheelUp: function(evt) { 175 186 if (this.map.getZoom() <= this.map.getNumZoomLevels()) { 176 this.map.setCenter(this.map.getLonLatFromPixel(evt.xy), 177 this.map.getZoom() + 1); 187 if (!this.map.zoomanimationActive) { 188 // convert the current center of the map in pixel 189 var centerPx = this.map.getPixelFromLonLat(this.map.getCenter()); 190 191 // determine lonlat from target (mouse position) 192 var targetLonLat = this.map.getLonLatFromViewPortPx( evt.xy ); 193 194 // determine offset target-center in pixel 195 var offset = new OpenLayers.Pixel(); 196 offset.x = evt.xy.x - centerPx.x; 197 offset.y = evt.xy.y - centerPx.y; 198 199 // convert offset of zoomlevel n to zoomlevel n+1 200 offset.x = offset.x / 2; 201 offset.y = offset.y / 2; 202 203 // pan to new center 204 this.map.pan(offset.x, offset.y, true); 205 206 // zoom to new level 207 this.map.zoomIn(); 208 } 178 209 } 179 210 }, 180 211 … … 183 214 */ 184 215 defaultWheelDown: function(evt) { 185 216 if (this.map.getZoom() > 0) { 186 this.map.setCenter(this.map.getLonLatFromPixel(evt.xy), 187 this.map.getZoom() - 1); 217 if (!this.map.zoomanimationActive) { 218 // convert the current center of the map in pixel 219 var centerPx = this.map.getPixelFromLonLat(this.map.getCenter()); 220 221 // determine lonlat from target (mouse position) 222 var targetLonLat = this.map.getLonLatFromViewPortPx( evt.xy ); 223 224 // determine offset target-center in pixel... 225 var offset = new OpenLayers.Pixel(); 226 offset.x = evt.xy.x - centerPx.x; 227 offset.y = evt.xy.y - centerPx.y; 228 229 // convert offset of zoomlevel n to zoomlevel n-1 230 offset.x = -offset.x; 231 offset.y = -offset.y; 232 233 // pan to new center 234 this.map.pan(offset.x, offset.y, true); 235 236 // zoom to new level 237 this.map.zoomOut(); 238 } 188 239 } 189 240 }, 190 241 … … 193 244 */ 194 245 zoomBoxEnd: function(evt) { 195 246 if (this.mouseDragStart != null) { 196 if (Math.abs(this.mouseDragStart.x - evt.xy.x) > 5 || 197 Math.abs(this.mouseDragStart.y - evt.xy.y) > 5) { 198 var start = this.map.getLonLatFromViewPortPx( this.mouseDragStart ); 199 var end = this.map.getLonLatFromViewPortPx( evt.xy ); 200 var top = Math.max(start.lat, end.lat); 201 var bottom = Math.min(start.lat, end.lat); 202 var left = Math.min(start.lon, end.lon); 203 var right = Math.max(start.lon, end.lon); 204 var bounds = new OpenLayers.Bounds(left, bottom, right, top); 205 this.map.zoomToExtent(bounds); 206 } else { 207 var end = this.map.getLonLatFromViewPortPx( evt.xy ); 208 this.map.setCenter(new OpenLayers.LonLat( 209 (end.lon), 210 (end.lat) 211 ), this.map.getZoom() + 1); 212 } 247 if (!this.map.zoomanimationActive) { 248 if (Math.abs(this.mouseDragStart.x - evt.xy.x) > 5 || 249 Math.abs(this.mouseDragStart.y - evt.xy.y) > 5) { 250 var start = this.map.getLonLatFromViewPortPx( this.mouseDragStart ); 251 var end = this.map.getLonLatFromViewPortPx( evt.xy ); 252 var top = Math.max(start.lat, end.lat); 253 var bottom = Math.min(start.lat, end.lat); 254 var left = Math.min(start.lon, end.lon); 255 var right = Math.max(start.lon, end.lon); 256 var bounds = new OpenLayers.Bounds(left, bottom, right, top); 257 this.map.zoomToExtent(bounds); 258 } else { 259 // convert the (old) center of the map in pixel 260 var centerPx = this.map.getPixelFromLonLat(this.map.getCenter()) 261 // pan to new center 262 var deltaX = evt.xy.x - centerPx.x; 263 var deltaY = evt.xy.y - centerPx.y; 264 this.map.pan(deltaX, deltaY,true); 265 266 // zoom to new level 267 this.map.zoomIn(); 268 } 269 } 213 270 this.removeZoomBox(); 214 }271 } 215 272 }, 216 273 217 274 /** -
examples/controls.html
old new 14 14 var map = new OpenLayers.Map('map', { controls: [] }); 15 15 16 16 map.addControl(new OpenLayers.Control.PanZoomBar()); 17 map.addControl(new OpenLayers.Control.Mouse Toolbar());17 map.addControl(new OpenLayers.Control.MouseDefaults()); 18 18 map.addControl(new OpenLayers.Control.LayerSwitcher({'ascending':false})); 19 19 map.addControl(new OpenLayers.Control.Permalink()); 20 20 map.addControl(new OpenLayers.Control.Permalink('permalink'));
