Skip to content

Commit 42e94f6

Browse files
committed
fix: updateStyleFromArray was wrong for markers
If the marker feature was not visible or refreshes happened in a certain order, the fall-back to the super class was not always called.
1 parent 2491144 commit 42e94f6

File tree

3 files changed

+30
-21
lines changed

3 files changed

+30
-21
lines changed

package-lock.json

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/webgl/markerFeature.js

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -282,14 +282,15 @@ var webgl_markerFeature = function (arg) {
282282
*/
283283
this.updateStyleFromArray = function (keyOrObject, styleArray, refresh) {
284284
var bufferedKeys = {
285+
radius: 1,
285286
fillColor: 3,
286287
fillOpacity: 1,
287-
radius: 1,
288288
strokeColor: 3,
289289
strokeOpacity: 1,
290290
strokeWidth: 1,
291291
symbolComputed: 1,
292-
symbolValueComputed: 1
292+
symbolValueComputed: 1,
293+
rotation: 1
293294
};
294295
var needsRefresh, needsRender;
295296
if (typeof keyOrObject === 'string') {
@@ -298,12 +299,12 @@ var webgl_markerFeature = function (arg) {
298299
keyOrObject = obj;
299300
}
300301
$.each(keyOrObject, function (key, styleArray) {
302+
var sbkey = key === 'symbolComputed' ? 'symbol' : key === 'symbolValueComputed' ? 'symbolValue' : key;
301303
if (m_this.visible() && m_actor && bufferedKeys[key] && !needsRefresh && !m_this.clustering()) {
302-
var vpf, mapper, buffer, numPts, value, i, j, v, bpv, sbkey;
304+
var vpf, mapper, buffer, numPts, value, i, j, v, bpv;
303305
bpv = bufferedKeys[key];
304306
numPts = m_this.data().length;
305307
mapper = m_actor.mapper();
306-
sbkey = key === 'symbolComputed' ? 'symbol' : key === 'symbolValueComputed' ? 'symbolValue' : key;
307308
buffer = mapper.getSourceBuffer(sbkey);
308309
vpf = m_this.verticesPerFeature();
309310
if (!buffer || !numPts || numPts * vpf * bpv !== buffer.length) {
@@ -339,15 +340,13 @@ var webgl_markerFeature = function (arg) {
339340
} else {
340341
needsRefresh = true;
341342
}
342-
if (key === sbkey) {
343-
const mod = m_this.modified;
344-
if (!needsRefresh) {
345-
// don't allow modified to be adjusted if we don't need to refresh
346-
m_this.modified = () => {};
347-
}
348-
s_updateStyleFromArray(key, styleArray, false);
349-
m_this.modified = mod;
343+
const mod = m_this.modified;
344+
if (!needsRefresh && key === sbkey) {
345+
// don't allow modified to be adjusted if we don't need to refresh
346+
m_this.modified = () => {};
350347
}
348+
s_updateStyleFromArray(key, styleArray, false);
349+
m_this.modified = mod;
351350
});
352351
if (refresh) {
353352
if (m_this.visible() && needsRefresh) {
@@ -391,15 +390,15 @@ var webgl_markerFeature = function (arg) {
391390
geom = vgl.geometryData(),
392391
sourcePositions = vgl.sourceDataP3fv({name: 'pos'}),
393392
attr = {
394-
radius: 1,
395393
fillColor: 3,
396394
fillOpacity: 1,
395+
radius: 1,
396+
rotation: 1,
397397
strokeColor: 3,
398398
strokeOpacity: 1,
399399
strokeWidth: 1,
400400
symbol: 1,
401-
symbolValue: 1,
402-
rotation: 1
401+
symbolValue: 1
403402
},
404403
uniforms = {
405404
pixelWidth: vgl.GL.FLOAT,

tests/cases/markerFeature.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,16 @@ describe('geo.markerFeature', function () {
266266
waitForIt('next render gl E', function () {
267267
return vgl.mockCounts().bufferSubData >= (glCounts.bufferSubData || 0) + 8;
268268
});
269+
it('updateStyleFromArray non-visible', function () {
270+
var t = marker.timestamp();
271+
marker.visible(false);
272+
marker.updateStyleFromArray('radius', array1, true);
273+
marker.visible(true);
274+
expect(marker.timestamp()).toBeGreaterThan(t);
275+
});
276+
waitForIt('next render gl F', function () {
277+
return vgl.mockCounts().bufferSubData >= (glCounts.bufferSubData || 0) + 8;
278+
});
269279
it('_exit', function () {
270280
expect(marker.actors().length).toBe(1);
271281
layer.deleteFeature(marker);

0 commit comments

Comments
 (0)