diff --git a/lib/OpenLayers/Handler/Path.js b/lib/OpenLayers/Handler/Path.js index 2dd07bbe8b..cdc286b12c 100644 --- a/lib/OpenLayers/Handler/Path.js +++ b/lib/OpenLayers/Handler/Path.js @@ -79,13 +79,14 @@ OpenLayers.Handler.Path = OpenLayers.Class(OpenLayers.Handler.Point, { * feature. */ createFeature: function(pixel) { - if(!pixel) { - pixel = new OpenLayers.Pixel(-50, -50); + var geometry; + if(pixel) { + var lonlat = this.map.getLonLatFromPixel(pixel); + geometry = new OpenLayers.Geometry.Point(lonlat.lon, lonlat.lat); + } else { + geometry = new OpenLayers.Geometry.Point(); } - var lonlat = this.control.map.getLonLatFromPixel(pixel); - this.point = new OpenLayers.Feature.Vector( - new OpenLayers.Geometry.Point(lonlat.lon, lonlat.lat) - ); + this.point = new OpenLayers.Feature.Vector(geometry); this.line = new OpenLayers.Feature.Vector( new OpenLayers.Geometry.LineString([this.point.geometry]) ); diff --git a/lib/OpenLayers/Handler/Polygon.js b/lib/OpenLayers/Handler/Polygon.js index 0692def33f..3a57d28186 100644 --- a/lib/OpenLayers/Handler/Polygon.js +++ b/lib/OpenLayers/Handler/Polygon.js @@ -75,13 +75,14 @@ OpenLayers.Handler.Polygon = OpenLayers.Class(OpenLayers.Handler.Path, { * feature. */ createFeature: function(pixel) { - if(!pixel) { - pixel = new OpenLayers.Pixel(-50, -50); + var geometry; + if(pixel) { + var lonlat = this.map.getLonLatFromPixel(pixel); + geometry = new OpenLayers.Geometry.Point(lonlat.lon, lonlat.lat); + } else { + geometry = new OpenLayers.Geometry.Point(); } - var lonlat = this.control.map.getLonLatFromPixel(pixel); - this.point = new OpenLayers.Feature.Vector( - new OpenLayers.Geometry.Point(lonlat.lon, lonlat.lat) - ); + this.point = new OpenLayers.Feature.Vector(geometry); this.line = new OpenLayers.Feature.Vector( new OpenLayers.Geometry.LinearRing([this.point.geometry]) ); diff --git a/tests/Handler/Path.html b/tests/Handler/Path.html index 8eb17e6470..4429d5ace2 100644 --- a/tests/Handler/Path.html +++ b/tests/Handler/Path.html @@ -67,7 +67,7 @@ "activate adds the line feature to the layer"); t.eq(log.length, 1, "activate calls \"create\" once"); - t.geom_eq(log[0].geometry, handler.point.geometry, + t.ok(log[0].geometry == handler.point.geometry, "\"create\" called with expected geometry"); t.ok(log[0].feature == handler.line, "\"create\" called with expected feature"); @@ -78,6 +78,32 @@ map.destroy(); } + // See: http://trac.osgeo.org/openlayers/ticket/3179 + function test_activate_before_map_is_centered(t) { + t.plan(1); + var map = new OpenLayers.Map('map', { + resolutions: [1] + }); + var layer = new OpenLayers.Layer.Vector("foo", { + maxExtent: new OpenLayers.Bounds(-10, -10, 10, 10), + isBaseLayer: true + }); + map.addLayer(layer); + var control = new OpenLayers.Control(); + var handler = new OpenLayers.Handler.Path(control, {}); + control.handler = handler; + map.addControl(control); + + var error; + try { + handler.activate(); + error = false; + } catch(err) { + error = true; + } + t.ok(!error, "no error on activate"); + } + function test_bounds(t) { t.plan(2); var geometry; @@ -159,8 +185,8 @@ t.eq(logs.length, 1, "[activate] called back"); log = logs.shift(); t.eq(log.type, "create", "[activate] create called"); - t.geom_eq(log.args[0], new OpenLayers.Geometry.Point(-200, 125), - "[activate] correct point"); + t.ok(isNaN(log.args[0].x) && isNaN(log.args[0].y), + "[activate] initial point"); t.ok(log.args[1] == handler.line, "[activate] correct feature"); // mouse move @@ -260,8 +286,8 @@ ); log = logs.shift(); t.eq(log.type, "create", "[dblclick] create called"); - t.geom_eq(log.args[0], new OpenLayers.Geometry.Point(-200, 125), - "[dblclick] correct point"); + t.ok(isNaN(log.args[0].x) && isNaN(log.args[0].y), + "[dblclick] initial point"); t.ok(log.args[1] == handler.line, "[dblclick] correct feature"); // cancel @@ -269,16 +295,13 @@ t.eq(logs.length, 2, "[cancel] called back"); log = logs.shift(); t.eq(log.type, "cancel", "[cancel] canced called"); - t.geom_eq(log.args[0], - new OpenLayers.Geometry.LineString([ - new OpenLayers.Geometry.Point(-200, 125) - ]), - "[cancel] correct linestring" + t.ok(isNaN(log.args[0].components[0].x) && isNaN(log.args[0].components[0].y), + "[cancel] initial linestring" ); log = logs.shift(); t.eq(log.type, "create", "[cancel] create called"); - t.geom_eq(log.args[0], new OpenLayers.Geometry.Point(-200, 125), - "[cancel] correct point"); + t.ok(isNaN(log.args[0].x) && isNaN(log.args[0].y), + "[cancel] initial point"); map.destroy(); } diff --git a/tests/Handler/Polygon.html b/tests/Handler/Polygon.html index 860c664a43..a8d0310854 100644 --- a/tests/Handler/Polygon.html +++ b/tests/Handler/Polygon.html @@ -69,7 +69,7 @@ "activate adds the polygin feature to the layer"); t.eq(log.length, 1, "activate calls \"create\" once"); - t.geom_eq(log[0].geometry, handler.point.geometry, + t.ok(log[0].geometry == handler.point.geometry, "\"create\" called with expected geometry"); t.ok(log[0].feature == handler.polygon, "\"create\" called with expected feature"); @@ -80,6 +80,32 @@ map.destroy(); } + // See: http://trac.osgeo.org/openlayers/ticket/3179 + function test_activate_before_map_is_centered(t) { + t.plan(1); + var map = new OpenLayers.Map('map', { + resolutions: [1] + }); + var layer = new OpenLayers.Layer.Vector("foo", { + maxExtent: new OpenLayers.Bounds(-10, -10, 10, 10), + isBaseLayer: true + }); + map.addLayer(layer); + var control = new OpenLayers.Control(); + var handler = new OpenLayers.Handler.Polygon(control, {}); + control.handler = handler; + map.addControl(control); + + var error; + try { + handler.activate(); + error = false; + } catch(err) { + error = true; + } + t.ok(!error, "no error on activate"); + } + function test_bounds_stopDown_true(t) { t.plan(2); var map = new OpenLayers.Map('map'); @@ -157,8 +183,8 @@ t.eq(logs.length, 1, "[activate] called back"); log = logs.shift(); t.eq(log.type, "create", "[activate] create called"); - t.geom_eq(log.args[0], new OpenLayers.Geometry.Point(-200, 125), - "[activate] correct point"); + t.ok(isNaN(log.args[0].x) && isNaN(log.args[0].y), + "[activate] initial point"); t.ok(log.args[1] == handler.polygon, "[activate] correct feature"); handler.mousemove( @@ -279,8 +305,8 @@ ); log = logs.shift(); t.eq(log.type, "create", "[dblclick] create called"); - t.geom_eq(log.args[0], new OpenLayers.Geometry.Point(-200, 125), - "[dblclick] correct point"); + t.ok(isNaN(log.args[0].x) && isNaN(log.args[0].y), + "[dblclick] initial point"); t.ok(log.args[1] == handler.polygon, "[dblclick] correct feature"); // cancel @@ -290,8 +316,8 @@ t.eq(log.type, "cancel", "[cancel] canced called"); log = logs.shift(); t.eq(log.type, "create", "[cancel] create called"); - t.geom_eq(log.args[0], new OpenLayers.Geometry.Point(-200, 125), - "[cancel] correct point"); + t.ok(isNaN(log.args[0].x) && isNaN(log.args[0].y), + "[cancel] initial point"); map.destroy(); }