From bc8c32848321fce4a0c3e61412fe03244b84e02c Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Sun, 10 Nov 2013 13:57:25 +0100 Subject: [PATCH] Add snapToPixel --- src/ol/render/canvas/canvasrender.js | 1 + src/ol/render/canvas/canvasreplay.js | 13 +++++++++---- src/ol/style.js | 3 +++ src/ol/symbols.js | 1 + 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/ol/render/canvas/canvasrender.js b/src/ol/render/canvas/canvasrender.js index 1c900002d1..fddcbe715d 100644 --- a/src/ol/render/canvas/canvasrender.js +++ b/src/ol/render/canvas/canvasrender.js @@ -1,5 +1,6 @@ // FIXME complete missing functionality // FIXME factor out drawImage +// FIXME apply snapToPixel // FIXME factor out moveTo/lineTo goog.provide('ol.render.canvas.Render'); diff --git a/src/ol/render/canvas/canvasreplay.js b/src/ol/render/canvas/canvasreplay.js index 803b556708..9e5ed73448 100644 --- a/src/ol/render/canvas/canvasreplay.js +++ b/src/ol/render/canvas/canvasreplay.js @@ -1,3 +1,5 @@ +// FIXME decide default snapToPixel behaviour + goog.provide('ol.render.canvas.BatchGroup'); goog.require('goog.array'); @@ -108,10 +110,13 @@ ol.render.canvas.Batch.prototype.draw = function(context, transform) { end = /** @type {number} */ (instruction[1]); var imageStyle = /** @type {ol.style.Image} */ (instruction[2]); for (; i < end; i += 2) { - context.drawImage( - imageStyle.image, - pixelCoordinates[i] - imageStyle.anchor[0], - pixelCoordinates[i + 1] - imageStyle.anchor[1]); + var x = pixelCoordinates[i] - imageStyle.anchor[0]; + var y = pixelCoordinates[i + 1] - imageStyle.anchor[1]; + if (imageStyle.snapToPixel) { + x = (x + 0.5) | 0; + y = (y + 0.5) | 0; + } + context.drawImage(imageStyle.image, x, y); } } else if (type == ol.render.canvas.Instruction.FILL) { context.fill(); diff --git a/src/ol/style.js b/src/ol/style.js index b59c10f801..a449fdd1af 100644 --- a/src/ol/style.js +++ b/src/ol/style.js @@ -1,4 +1,5 @@ // FIXME decide how to handle fill opacity +// FIXME decide default value for snapToPixel goog.provide('ol.style'); goog.provide('ol.style.DefaultStyleFunction'); @@ -32,6 +33,7 @@ ol.style.fill.equals = function(fillStyle1, fillStyle2) { * @typedef {{anchor: Array., * image: (HTMLCanvasElement|HTMLVideoElement|Image), * rotation: number, + * snapToPixel: (boolean|undefined), * subtractViewRotation: boolean}} */ ol.style.Image; @@ -89,6 +91,7 @@ ol.style.DEFAULT_IMAGE_STYLE = { anchor: [0, 0], image: null, // FIXME rotation: 0.0, + snapToPixel: undefined, subtractViewRotation: false }; diff --git a/src/ol/symbols.js b/src/ol/symbols.js index 7f7efd8007..d71d8a1df8 100644 --- a/src/ol/symbols.js +++ b/src/ol/symbols.js @@ -40,6 +40,7 @@ ol.symbol.renderCircle = function(radius, fillStyle, strokeStyle) { anchor: [size / 2, size / 2], image: canvas, rotation: 0, + snapToPixel: undefined, subtractViewRotation: false };