Skip to content

Commit 4dc1d32

Browse files
committed
fix dxdy in marker symbolizers
1 parent 21e2067 commit 4dc1d32

File tree

8 files changed

+63
-28
lines changed

8 files changed

+63
-28
lines changed

src/core/Canvas.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,6 @@ const Canvas = {
254254
},
255255

256256
text(ctx, text, pt, style, textDesc) {
257-
// pt = pt.add(new Point(style['textDx'], style['textDy']));
258257
Canvas._textOnMultiRow(ctx, textDesc['rows'], style, pt, textDesc['size'], textDesc['rawSize']);
259258
},
260259

src/renderer/geometry/symbolizers/ImageMarkerSymbolizer.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,8 +115,6 @@ export default class ImageMarkerSymbolizer extends PointSymbolizer {
115115
'markerOpacity': getValueOrDefault(s['markerOpacity'], 1),
116116
'markerWidth': getValueOrDefault(s['markerWidth'], null),
117117
'markerHeight': getValueOrDefault(s['markerHeight'], null),
118-
'markerDx': getValueOrDefault(s['markerDx'], 0),
119-
'markerDy': getValueOrDefault(s['markerDy'], 0),
120118
'markerRotation' : getValueOrDefault(s['markerRotation'], 0)
121119
};
122120
}

src/renderer/geometry/symbolizers/PointSymbolizer.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@ class PointSymbolizer extends CanvasSymbolizer {
2020
this.symbol = symbol;
2121
this.geometry = geometry;
2222
this.painter = painter;
23+
this.dxdy = this._defineStyle({
24+
'dx' : symbol['textDx'] || symbol['markerDx'],
25+
'dy' : symbol['textDy'] || symbol['markerDy']
26+
});
2327
}
2428

2529
get2DExtent() {
@@ -34,10 +38,8 @@ class PointSymbolizer extends CanvasSymbolizer {
3438
}
3539

3640
getDxDy() {
37-
const s = this.symbol;
38-
const dx = s['markerDx'] || 0;
39-
const dy = s['markerDy'] || 0;
40-
return new Point(dx, dy);
41+
const s = this.dxdy;
42+
return new Point(s['dx'] || 0, s['dy'] || 0);
4143
}
4244

4345
_getRenderPoints() {

src/renderer/geometry/symbolizers/TextMarkerSymbolizer.js

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import {
77
} from 'core/util';
88
import { hasFunctionDefinition } from 'core/mapbox';
99
import { splitTextToRow, getAlignPoint, replaceVariable } from 'core/util/strings';
10-
import Point from 'geo/Point';
1110
import PointExtent from 'geo/PointExtent';
1211
import Canvas from 'core/Canvas';
1312
import PointSymbolizer from './PointSymbolizer';
@@ -83,13 +82,6 @@ export default class TextMarkerSymbolizer extends PointSymbolizer {
8382
return r * Math.PI / 180;
8483
}
8584

86-
getDxDy() {
87-
const s = this.style;
88-
const dx = s['textDx'],
89-
dy = s['textDy'];
90-
return new Point(dx, dy);
91-
}
92-
9385
getMarkerExtent() {
9486
const dxdy = this.getDxDy(),
9587
style = this.style;
@@ -127,9 +119,6 @@ export default class TextMarkerSymbolizer extends PointSymbolizer {
127119
'textWrapCharacter': getValueOrDefault(s['textWrapCharacter'], '\n'),
128120
'textLineSpacing': getValueOrDefault(s['textLineSpacing'], 0),
129121

130-
'textDx': getValueOrDefault(s['textDx'], 0),
131-
'textDy': getValueOrDefault(s['textDy'], 0),
132-
133122
'textHorizontalAlignment': getValueOrDefault(s['textHorizontalAlignment'], 'middle'), //left | middle | right | auto
134123
'textVerticalAlignment': getValueOrDefault(s['textVerticalAlignment'], 'middle'), // top | middle | bottom | auto
135124
'textAlign': getValueOrDefault(s['textAlign'], 'center'), //left | right | center | auto

src/renderer/geometry/symbolizers/VectorMarkerSymbolizer.js

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -277,9 +277,6 @@ export default class VectorMarkerSymbolizer extends PointSymbolizer {
277277
'markerWidth': getValueOrDefault(s['markerWidth'], 10),
278278
'markerHeight': getValueOrDefault(s['markerHeight'], 10),
279279

280-
'markerDx': getValueOrDefault(s['markerDx'], 0),
281-
'markerDy': getValueOrDefault(s['markerDy'], 0),
282-
283280
'markerRotation' : getValueOrDefault(s['markerRotation'], 0)
284281
};
285282
//markerOpacity覆盖fillOpacity和lineOpacity

src/renderer/map/MapCanvasRenderer.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import Map from 'map/Map';
1212
* @class
1313
* @protected
1414
* @extends {renderer.MapRenderer}
15+
* @memberOf renderer
1516
*/
1617
class MapCanvasRenderer extends MapRenderer {
1718
/**

test/geometry/MarkerSpec.js

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
describe('#Marker', function () {
1+
describe('Geometry.Marker', function () {
22

33
var container;
44
var map;
@@ -289,7 +289,28 @@ describe('#Marker', function () {
289289
expect(layer).to.be.painted(4, 0);
290290
done();
291291
});
292+
});
292293

294+
it('vector marker\'s dx, dy with zoom', function (done) {
295+
map.config('zoomAnimation', false);
296+
var marker = new maptalks.Marker(map.getCenter(), {
297+
symbol : {
298+
markerType : 'ellipse',
299+
markerWidth : 10,
300+
markerHeight : 10,
301+
markerDx : { stops: [[7, 8], [14, 20]] },
302+
markerDy : { stops: [[7, 8], [14, 20]] }
303+
}
304+
});
305+
var layer = new maptalks.VectorLayer('id', { 'drawImmediate' : true }).addTo(map);
306+
layer.addGeometry([marker]);
307+
expect(layer).to.be.painted(21, 21);
308+
map.setZoom(7);
309+
map.on('renderend', function () {
310+
expect(layer).not.to.be.painted(21, 21);
311+
expect(layer).to.be.painted(13, 9);
312+
done();
313+
});
293314
});
294315

295316
it('text marker\'s size changes with zoom', function (done) {
@@ -317,6 +338,34 @@ describe('#Marker', function () {
317338
done();
318339
});
319340
});
341+
342+
it('text dx dy changes with zoom', function (done) {
343+
map.config('zoomAnimation', false);
344+
var marker = new maptalks.Marker(map.getCenter(), {
345+
symbol : {
346+
textName : '■■■■■■■■■',
347+
textSize : 20,
348+
textFill : '#000',
349+
textDx : { stops: [[7, 8], [14, 20]] },
350+
textDy : { stops: [[7, 8], [14, 20]] }
351+
}
352+
});
353+
var layer = new maptalks.VectorLayer('id', { 'drawImmediate' : true }).addTo(map);
354+
layer.addGeometry([marker]);
355+
expect(layer).to.be.painted(72, 20);
356+
map.setZoom(7);
357+
map.on('renderend', function () {
358+
expect(layer).not.to.be.painted(72, 20);
359+
if (maptalks.Browser.ie) {
360+
// font is smaller with ie
361+
expect(layer).to.be.painted(10, 12);
362+
} else {
363+
expect(layer).to.be.painted(10, 12);
364+
}
365+
366+
done();
367+
});
368+
});
320369
});
321370

322371
describe('marker rotation', function () {

test/geometry/symbol/SymbolSpec.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -139,8 +139,8 @@ describe('SymbolSpec', function () {
139139
expect(symbolizer.style.markerFillOpacity).to.be.eql(0.5);
140140
expect(symbolizer.style.markerLineWidth).to.be.eql(2);
141141
expect(symbolizer.style.markerLineOpacity).to.be.eql(0.6);
142-
expect(symbolizer.style.markerDx).to.be.eql(1);
143-
expect(symbolizer.style.markerDy).to.be.eql(2);
142+
expect(symbolizer.dxdy.dx).to.be.eql(1);
143+
expect(symbolizer.dxdy.dy).to.be.eql(2);
144144
});
145145

146146
it('image marker symbolizer', function () {
@@ -156,8 +156,8 @@ describe('SymbolSpec', function () {
156156
expect(symbolizer.style.markerWidth).to.be.eql(20);
157157
expect(symbolizer.style.markerHeight).to.be.eql(30);
158158
expect(symbolizer.style.markerOpacity).to.be.eql(0.5);
159-
expect(symbolizer.style.markerDx).to.be.eql(1);
160-
expect(symbolizer.style.markerDy).to.be.eql(2);
159+
expect(symbolizer.dxdy.dx).to.be.eql(1);
160+
expect(symbolizer.dxdy.dy).to.be.eql(2);
161161
});
162162

163163
it('text marker symbolizer', function () {
@@ -178,8 +178,8 @@ describe('SymbolSpec', function () {
178178
expect(symbolizer.style.textHaloRadius).to.be.eql(4);
179179
expect(symbolizer.style.textWrapWidth).to.be.eql(3);
180180
expect(symbolizer.style.textLineSpacing).to.be.eql(2);
181-
expect(symbolizer.style.textDx).to.be.eql(1);
182-
expect(symbolizer.style.textDy).to.be.eql(2);
181+
expect(symbolizer.dxdy.dx).to.be.eql(1);
182+
expect(symbolizer.dxdy.dy).to.be.eql(2);
183183
});
184184
});
185185

0 commit comments

Comments
 (0)