Merge pull request #10527 from ahocevar/no-label-cache
Remove label cache, render text directly to target canvas
This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
import {clear} from '../../../../../src/ol/obj.js';
|
||||
import * as render from '../../../../../src/ol/render/canvas.js';
|
||||
|
||||
|
||||
@@ -9,69 +8,70 @@ describe('ol.render.canvas', function() {
|
||||
font.rel = 'stylesheet';
|
||||
const head = document.getElementsByTagName('head')[0];
|
||||
|
||||
describe('ol.render.canvas.checkFont()', function() {
|
||||
describe('ol.render.canvas.registerFont()', function() {
|
||||
|
||||
beforeEach(function() {
|
||||
clear(render.checkedFonts);
|
||||
render.checkedFonts.values_ = {};
|
||||
render.measureTextHeight('12px sans-serif');
|
||||
});
|
||||
|
||||
const retries = 100;
|
||||
|
||||
it('does not clear label cache and measurements for unavailable fonts', function(done) {
|
||||
it('does not trigger redraw and clear measurements for unavailable fonts', function(done) {
|
||||
this.timeout(4000);
|
||||
const spy = sinon.spy();
|
||||
render.labelCache.addEventListener('clear', spy);
|
||||
render.checkedFonts.addEventListener('propertychange', spy);
|
||||
const interval = setInterval(function() {
|
||||
if (render.checkedFonts['normal\nnormal\nfoo'] == retries && render.checkedFonts['normal\nnormal\nsans-serif'] == retries) {
|
||||
if (render.checkedFonts.get('normal\nnormal\nfoo') == retries && render.checkedFonts.get('normal\nnormal\nsans-serif') == retries) {
|
||||
clearInterval(interval);
|
||||
render.labelCache.removeEventListener('clear', spy);
|
||||
render.checkedFonts.removeEventListener('propertychange', spy);
|
||||
expect(spy.callCount).to.be(0);
|
||||
expect(render.textHeights).to.not.eql({});
|
||||
done();
|
||||
}
|
||||
}, 32);
|
||||
render.checkFont('12px foo,sans-serif');
|
||||
render.registerFont('12px foo,sans-serif');
|
||||
});
|
||||
|
||||
it('does not clear label cache and measurements for available fonts', function(done) {
|
||||
it('does not trigger redraw and clear measurements for available fonts', function(done) {
|
||||
const spy = sinon.spy();
|
||||
render.labelCache.addEventListener('clear', spy);
|
||||
render.checkedFonts.addEventListener('propertychange', spy);
|
||||
const interval = setInterval(function() {
|
||||
if (render.checkedFonts['normal\nnormal\nsans-serif'] == retries) {
|
||||
if (render.checkedFonts.get('normal\nnormal\nsans-serif') == retries) {
|
||||
clearInterval(interval);
|
||||
render.labelCache.removeEventListener('clear', spy);
|
||||
render.checkedFonts.removeEventListener('propertychange', spy);
|
||||
expect(spy.callCount).to.be(0);
|
||||
expect(render.textHeights).to.not.eql({});
|
||||
done();
|
||||
}
|
||||
}, 32);
|
||||
render.checkFont('12px sans-serif');
|
||||
render.registerFont('12px sans-serif');
|
||||
});
|
||||
|
||||
it('does not clear label cache and measurements for the \'monospace\' font', function(done) {
|
||||
it('does not trigger redraw and clear measurements for the \'monospace\' font', function(done) {
|
||||
const spy = sinon.spy();
|
||||
render.labelCache.addEventListener('clear', spy);
|
||||
render.checkedFonts.addEventListener('propertychange', spy);
|
||||
const interval = setInterval(function() {
|
||||
if (render.checkedFonts['normal\nnormal\nmonospace'] == retries) {
|
||||
if (render.checkedFonts.get('normal\nnormal\nmonospace') == retries) {
|
||||
clearInterval(interval);
|
||||
render.labelCache.removeEventListener('clear', spy);
|
||||
render.checkedFonts.removeEventListener('propertychange', spy);
|
||||
expect(spy.callCount).to.be(0);
|
||||
expect(render.textHeights).to.not.eql({});
|
||||
done();
|
||||
}
|
||||
}, 32);
|
||||
render.checkFont('12px monospace');
|
||||
render.registerFont('12px monospace');
|
||||
});
|
||||
|
||||
it('clears label cache and measurements for fonts that become available', function(done) {
|
||||
it('triggers redraw and clear measurements for fonts that become available', function(done) {
|
||||
head.appendChild(font);
|
||||
render.labelCache.set('dummy', {});
|
||||
render.labelCache.addEventListener('clear', function() {
|
||||
render.checkedFonts.addEventListener('propertychange', function onPropertyChange(e) {
|
||||
render.checkedFonts.removeEventListener('propertychange', onPropertyChange);
|
||||
expect(e.key).to.be('normal\nnormal\nAbel');
|
||||
expect(render.textHeights).to.eql({});
|
||||
done();
|
||||
});
|
||||
render.checkFont('12px Abel');
|
||||
render.registerFont('12px Abel');
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
import LabelCache from '../../../../../src/ol/render/canvas/LabelCache.js';
|
||||
|
||||
describe('ol.render.canvas.LabelCache', function() {
|
||||
|
||||
it('#expireCache()', function() {
|
||||
const labelCache = new LabelCache(1);
|
||||
labelCache.set('key1', document.createElement('canvas'));
|
||||
labelCache.set('key2', document.createElement('canvas'));
|
||||
labelCache.expireCache();
|
||||
expect(labelCache.getCount()).to.be(1);
|
||||
});
|
||||
|
||||
});
|
||||
@@ -29,11 +29,11 @@ function executeInstructions(builder, expectedDrawTextImageCalls, expectedBuilde
|
||||
const transform = createTransform();
|
||||
const context = createContext();
|
||||
const executor = new Executor(0.02, 1, false, builder.finish());
|
||||
sinon.spy(executor, 'drawTextImageWithPointPlacement_');
|
||||
const replayImageStub = sinon.stub(executor, 'replayImage_');
|
||||
sinon.spy(executor, 'drawLabelWithPointPlacement_');
|
||||
const replayImageOrLabelStub = sinon.stub(executor, 'replayImageOrLabel_');
|
||||
executor.execute(context, transform);
|
||||
expect(executor.drawTextImageWithPointPlacement_.callCount).to.be(expectedDrawTextImageCalls);
|
||||
expect(replayImageStub.callCount).to.be(expectedBuilderImageCalls);
|
||||
expect(executor.drawLabelWithPointPlacement_.callCount).to.be(expectedDrawTextImageCalls);
|
||||
expect(replayImageOrLabelStub.callCount).to.be(expectedBuilderImageCalls);
|
||||
}
|
||||
|
||||
describe('ol.render.canvas.TextBuilder', function() {
|
||||
|
||||
@@ -6,7 +6,6 @@ import Circle from '../../../../../src/ol/geom/Circle.js';
|
||||
import Point from '../../../../../src/ol/geom/Point.js';
|
||||
import {fromExtent} from '../../../../../src/ol/geom/Polygon.js';
|
||||
import VectorLayer from '../../../../../src/ol/layer/Vector.js';
|
||||
import {clear} from '../../../../../src/ol/obj.js';
|
||||
import {get as getProjection} from '../../../../../src/ol/proj.js';
|
||||
import {checkedFonts} from '../../../../../src/ol/render/canvas.js';
|
||||
import CanvasVectorLayerRenderer from '../../../../../src/ol/renderer/canvas/VectorLayer.js';
|
||||
@@ -88,7 +87,7 @@ describe('ol.renderer.canvas.VectorLayer', function() {
|
||||
});
|
||||
|
||||
it('does not re-render for unavailable fonts', function(done) {
|
||||
clear(checkedFonts);
|
||||
checkedFonts.values_ = {};
|
||||
const map = new Map({
|
||||
view: new View({
|
||||
center: [0, 0],
|
||||
@@ -119,7 +118,7 @@ describe('ol.renderer.canvas.VectorLayer', function() {
|
||||
});
|
||||
|
||||
it('does not re-render for available fonts', function(done) {
|
||||
clear(checkedFonts);
|
||||
checkedFonts.values_ = {};
|
||||
const map = new Map({
|
||||
view: new View({
|
||||
center: [0, 0],
|
||||
@@ -150,7 +149,7 @@ describe('ol.renderer.canvas.VectorLayer', function() {
|
||||
});
|
||||
|
||||
it('re-renders for fonts that become available', function(done) {
|
||||
clear(checkedFonts);
|
||||
checkedFonts.values_ = {};
|
||||
head.appendChild(font);
|
||||
const map = new Map({
|
||||
view: new View({
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import {clear} from '../../../../../src/ol/obj.js';
|
||||
import Feature from '../../../../../src/ol/Feature.js';
|
||||
import Map from '../../../../../src/ol/Map.js';
|
||||
import TileState from '../../../../../src/ol/TileState.js';
|
||||
@@ -171,7 +170,7 @@ describe('ol.renderer.canvas.VectorTileLayer', function() {
|
||||
|
||||
it('does not re-render for unavailable fonts', function(done) {
|
||||
map.renderSync();
|
||||
clear(checkedFonts);
|
||||
checkedFonts.values_ = {};
|
||||
layerStyle[0].getText().setFont('12px "Unavailable font",sans-serif');
|
||||
layer.changed();
|
||||
const revision = layer.getRevision();
|
||||
@@ -183,7 +182,7 @@ describe('ol.renderer.canvas.VectorTileLayer', function() {
|
||||
|
||||
it('does not re-render for available fonts', function(done) {
|
||||
map.renderSync();
|
||||
clear(checkedFonts);
|
||||
checkedFonts.values_ = {};
|
||||
layerStyle[0].getText().setFont('12px sans-serif');
|
||||
layer.changed();
|
||||
const revision = layer.getRevision();
|
||||
@@ -195,7 +194,7 @@ describe('ol.renderer.canvas.VectorTileLayer', function() {
|
||||
|
||||
it('re-renders for fonts that become available', function(done) {
|
||||
map.renderSync();
|
||||
clear(checkedFonts);
|
||||
checkedFonts.values_ = {};
|
||||
head.appendChild(font);
|
||||
layerStyle[0].getText().setFont('12px "Dancing Script",sans-serif');
|
||||
layer.changed();
|
||||
|
||||
Reference in New Issue
Block a user