diff --git a/examples/vector-labels.html b/examples/vector-labels.html
index 4478a1f06f..687618a5ce 100644
--- a/examples/vector-labels.html
+++ b/examples/vector-labels.html
@@ -103,6 +103,9 @@ tags: "geojson, vector, openstreetmap, label"
+
+
+
@@ -212,6 +215,9 @@ tags: "geojson, vector, openstreetmap, label"
+
+
+
@@ -321,6 +327,9 @@ tags: "geojson, vector, openstreetmap, label"
+
+
+
diff --git a/examples/vector-labels.js b/examples/vector-labels.js
index 04d5f8c998..9867b04dc6 100644
--- a/examples/vector-labels.js
+++ b/examples/vector-labels.js
@@ -16,6 +16,7 @@ const myDom = {
font: document.getElementById('points-font'),
weight: document.getElementById('points-weight'),
size: document.getElementById('points-size'),
+ height: document.getElementById('points-height'),
offsetX: document.getElementById('points-offset-x'),
offsetY: document.getElementById('points-offset-y'),
color: document.getElementById('points-color'),
@@ -34,6 +35,7 @@ const myDom = {
maxangle: document.getElementById('lines-maxangle'),
overflow: document.getElementById('lines-overflow'),
size: document.getElementById('lines-size'),
+ height: document.getElementById('lines-height'),
offsetX: document.getElementById('lines-offset-x'),
offsetY: document.getElementById('lines-offset-y'),
color: document.getElementById('lines-color'),
@@ -52,6 +54,7 @@ const myDom = {
maxangle: document.getElementById('polygons-maxangle'),
overflow: document.getElementById('polygons-overflow'),
size: document.getElementById('polygons-size'),
+ height: document.getElementById('polygons-height'),
offsetX: document.getElementById('polygons-offset-x'),
offsetY: document.getElementById('polygons-offset-y'),
color: document.getElementById('polygons-color'),
@@ -84,6 +87,7 @@ const createTextStyle = function(feature, resolution, dom) {
const align = dom.align.value;
const baseline = dom.baseline.value;
const size = dom.size.value;
+ const height = dom.height.value;
const offsetX = parseInt(dom.offsetX.value, 10);
const offsetY = parseInt(dom.offsetY.value, 10);
const weight = dom.weight.value;
@@ -98,7 +102,7 @@ const createTextStyle = function(feature, resolution, dom) {
document.getElementsByTagName('head')[0].appendChild(openSans);
openSansAdded = true;
}
- const font = weight + ' ' + size + ' ' + dom.font.value;
+ const font = weight + ' ' + size + '/' + height + ' ' + dom.font.value;
const fillColor = dom.color.value;
const outlineColor = dom.outline.value;
const outlineWidth = parseInt(dom.outlineWidth.value, 10);
diff --git a/src/ol/render/canvas.js b/src/ol/render/canvas.js
index 4e9f562ac8..3c2607cae0 100644
--- a/src/ol/render/canvas.js
+++ b/src/ol/render/canvas.js
@@ -288,22 +288,22 @@ function getMeasureContext() {
* @return {import("../size.js").Size} Measurement.
*/
export const measureTextHeight = (function() {
- let span;
+ let div;
const heights = textHeights;
return function(font) {
let height = heights[font];
if (height == undefined) {
- if (!span) {
- span = document.createElement('span');
- span.textContent = 'M';
- span.style.margin = span.style.padding = '0 !important';
- span.style.position = 'absolute !important';
- span.style.left = '-99999px !important';
+ if (!div) {
+ div = document.createElement('div');
+ div.innerHTML = 'M';
+ div.style.margin = div.style.padding = '0 !important';
+ div.style.position = 'absolute !important';
+ div.style.left = '-99999px !important';
}
- span.style.font = font;
- document.body.appendChild(span);
- height = heights[font] = span.offsetHeight;
- document.body.removeChild(span);
+ div.style.font = font;
+ document.body.appendChild(div);
+ height = heights[font] = div.offsetHeight;
+ document.body.removeChild(div);
}
return height;
};
diff --git a/test/spec/ol/render/canvas/index.test.js b/test/spec/ol/render/canvas/index.test.js
index 7f178a37be..560cf4698b 100644
--- a/test/spec/ol/render/canvas/index.test.js
+++ b/test/spec/ol/render/canvas/index.test.js
@@ -76,6 +76,14 @@ describe('ol.render.canvas', function() {
});
+ describe('measureTextHeight', function() {
+ it('respects line-height', function() {
+ const height = render.measureTextHeight('12px/1.2 sans-serif');
+ expect(render.measureTextHeight('12px/2.4 sans-serif')).to.be.greaterThan(height);
+ expect(render.measureTextHeight('12px/0.1 sans-serif')).to.be.lessThan(height);
+ });
+ });
+
describe('rotateAtOffset', function() {
it('rotates a canvas at an offset point', function() {