Merge pull request #7339 from ahocevar/text-stroke

Use correct text stroke on HiDPI devices
This commit is contained in:
Andreas Hocevar
2017-10-10 07:40:29 +02:00
committed by GitHub
4 changed files with 17 additions and 11 deletions
+1 -1
View File
@@ -326,7 +326,7 @@ ol.render.canvas.TextReplay.prototype.getImage_ = function(text, fill, stroke) {
context.font = textState.font; context.font = textState.font;
if (stroke) { if (stroke) {
context.strokeStyle = strokeState.strokeStyle; context.strokeStyle = strokeState.strokeStyle;
context.lineWidth = strokeState.lineWidth; context.lineWidth = strokeWidth * pixelRatio;
context.lineCap = strokeState.lineCap; context.lineCap = strokeState.lineCap;
context.lineJoin = strokeState.lineJoin; context.lineJoin = strokeState.lineJoin;
context.miterLimit = strokeState.miterLimit; context.miterLimit = strokeState.miterLimit;
Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

+8 -2
View File
@@ -17,14 +17,14 @@ describe('ol.rendering.style.Text', function() {
var map, vectorSource; var map, vectorSource;
function createMap(renderer) { function createMap(renderer, opt_pixelRatio) {
vectorSource = new ol.source.Vector(); vectorSource = new ol.source.Vector();
var vectorLayer = new ol.layer.Vector({ var vectorLayer = new ol.layer.Vector({
source: vectorSource source: vectorSource
}); });
map = new ol.Map({ map = new ol.Map({
pixelRatio: 1, pixelRatio: opt_pixelRatio || 1,
target: createMapDiv(200, 200), target: createMapDiv(200, 200),
renderer: renderer, renderer: renderer,
layers: [vectorLayer], layers: [vectorLayer],
@@ -154,6 +154,12 @@ describe('ol.rendering.style.Text', function() {
expectResemble(map, 'rendering/ol/style/expected/text-rotated-canvas.png', IMAGE_TOLERANCE, done); expectResemble(map, 'rendering/ol/style/expected/text-rotated-canvas.png', IMAGE_TOLERANCE, done);
}); });
it('renders correct stroke with pixelRatio != 1', function(done) {
createMap('canvas', 2);
createFeatures();
expectResemble(map, 'rendering/ol/style/expected/text-canvas-hidpi.png', IMAGE_TOLERANCE, done);
});
it('renders multiline text with alignment options', function(done) { it('renders multiline text with alignment options', function(done) {
createMap('canvas'); createMap('canvas');
var feature; var feature;
+8 -8
View File
@@ -383,6 +383,14 @@ goog.require('ol.has');
}; };
function resembleCanvas(canvas, referenceImage, tolerance, done) { function resembleCanvas(canvas, referenceImage, tolerance, done) {
if (showMap) {
var wrapper = document.createElement('div');
wrapper.style.width = canvas.width + 'px';
wrapper.style.height = canvas.height + 'px';
wrapper.appendChild(canvas);
document.body.appendChild(wrapper);
document.body.appendChild(document.createTextNode(referenceImage));
}
var width = canvas.width; var width = canvas.width;
var height = canvas.height; var height = canvas.height;
var image = new Image(); var image = new Image();
@@ -394,14 +402,6 @@ goog.require('ol.has');
referenceCanvas.height = image.height; referenceCanvas.height = image.height;
var referenceContext = referenceCanvas.getContext('2d'); var referenceContext = referenceCanvas.getContext('2d');
referenceContext.drawImage(image, 0, 0, image.width, image.height); referenceContext.drawImage(image, 0, 0, image.width, image.height);
if (showMap) {
var wrapper = document.createElement('div');
wrapper.style.width = canvas.width + 'px';
wrapper.style.height = canvas.height + 'px';
wrapper.appendChild(canvas);
document.body.appendChild(wrapper);
document.body.appendChild(document.createTextNode(referenceImage));
}
var context = canvas.getContext('2d'); var context = canvas.getContext('2d');
var output = context.createImageData(canvas.width, canvas.height); var output = context.createImageData(canvas.width, canvas.height);
var mismatchPx = pixelmatch( var mismatchPx = pixelmatch(