diff --git a/src/ol/control/centerconstraint.js b/src/ol/control/centerconstraint.js new file mode 100644 index 0000000000..ad85e13e4c --- /dev/null +++ b/src/ol/control/centerconstraint.js @@ -0,0 +1,46 @@ +goog.provide('ol.control.CenterConstraint'); +goog.provide('ol.control.CenterConstraintType'); + +goog.require('ol.Coordinate'); + + +/** + * @typedef {function((ol.Coordinate|undefined), + * (number|undefined), + * ol.Coordinate): (ol.Coordinate|undefined)} + */ +ol.control.CenterConstraintType; + + +/** + * @param {ol.Coordinate|undefined} center Center. + * @param {number|undefined} resolution Resolution. + * @param {ol.Coordinate} delta Delta. + * @return {ol.Coordinate|undefined} Center. + */ +ol.control.CenterConstraint.none = function(center, resolution, delta) { + if (goog.isDefAndNotNull(center) && goog.isDef(resolution)) { + var x = center.x + delta.x; + var y = center.y + delta.y; + return new ol.Coordinate(x, y); + } else { + return undefined; + } +}; + + +/** + * @param {ol.Coordinate|undefined} center Center. + * @param {number|undefined} resolution Resolution. + * @param {ol.Coordinate} delta Delta. + * @return {ol.Coordinate|undefined} Center. + */ +ol.control.CenterConstraint.snapToPixel = function(center, resolution, delta) { + if (goog.isDefAndNotNull(center) && goog.isDef(resolution)) { + var x = Math.floor((center.x + delta.x) / resolution + 0.5) * resolution; + var y = Math.floor((center.y + delta.y) / resolution + 0.5) * resolution; + return new ol.Coordinate(x, y); + } else { + return undefined; + } +}; diff --git a/src/ol/control/control.js b/src/ol/control/control.js index 6583b8dbc3..c5a9a7b0e4 100644 --- a/src/ol/control/control.js +++ b/src/ol/control/control.js @@ -1,4 +1,3 @@ -// FIXME add snap-to-pixel pan strategy // FIXME factor out key precondition (shift et. al) goog.provide('ol.Control');