From 68b7831dafc144d295c60591e8eb3941b274fb43 Mon Sep 17 00:00:00 2001 From: ahocevar Date: Mon, 3 Jun 2019 14:27:45 +0200 Subject: [PATCH] Listen to label cache again when we have a target --- src/ol/PluggableMap.js | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/src/ol/PluggableMap.js b/src/ol/PluggableMap.js index 0832c11043..bd037c75c7 100644 --- a/src/ol/PluggableMap.js +++ b/src/ol/PluggableMap.js @@ -301,6 +301,11 @@ class PluggableMap extends BaseObject { */ this.interactions = optionsInternal.interactions || new Collection(); + /** + * @type {import("./events/Target.js").default} + */ + this.labelCache_ = null; + /** * @type {import("./events.js").EventsKey} */ @@ -512,20 +517,31 @@ class PluggableMap extends BaseObject { } /** - * Attach a label cache for listening to font changes. + * Attach a label cache and listen to font changes. Called by the renderer. * @param {import("./events/Target.js").default} labelCache Label cache. */ attachLabelCache(labelCache) { - this.detachLabelCache(); - this.labelCacheListenerKey_ = listen(labelCache, EventType.CLEAR, this.redrawText.bind(this)); + this.unlistenLabelCache_(); + this.labelCache_ = labelCache; + this.listenLabelCache_(); } /** - * Detach the label cache, i.e. no longer listen to font changes. + * Listen to font changes. + * @private */ - detachLabelCache() { + listenLabelCache_() { + this.labelCacheListenerKey_ = listen(this.labelCache_, EventType.CLEAR, this.redrawText.bind(this)); + } + + /** + * No longer listen to font changes. + * @private + */ + unlistenLabelCache_() { if (this.labelCacheListenerKey_) { unlistenByKey(this.labelCacheListenerKey_); + delete this.labelCacheListenerKey_; } } @@ -1045,7 +1061,7 @@ class PluggableMap extends BaseObject { removeEventListener(EventType.RESIZE, this.handleResize_, false); this.handleResize_ = undefined; } - this.detachLabelCache(); + this.unlistenLabelCache_(); } else { targetElement.appendChild(this.viewport_); @@ -1060,6 +1076,7 @@ class PluggableMap extends BaseObject { this.handleResize_ = this.updateSize.bind(this); window.addEventListener(EventType.RESIZE, this.handleResize_, false); } + this.listenLabelCache_(); } this.updateSize();