Merge pull request #12180 from MoonE/text-builder-geometry-widths
Fix rendering of MultiPolygon text styles
This commit is contained in:
@@ -232,7 +232,7 @@ class CanvasTextBuilder extends CanvasBuilder {
|
|||||||
}
|
}
|
||||||
this.endGeometry(feature);
|
this.endGeometry(feature);
|
||||||
} else {
|
} else {
|
||||||
const geometryWidths = textState.overflow ? null : [];
|
let geometryWidths = textState.overflow ? null : [];
|
||||||
switch (geometryType) {
|
switch (geometryType) {
|
||||||
case GeometryType.POINT:
|
case GeometryType.POINT:
|
||||||
case GeometryType.MULTI_POINT:
|
case GeometryType.MULTI_POINT:
|
||||||
@@ -275,6 +275,21 @@ class CanvasTextBuilder extends CanvasBuilder {
|
|||||||
if (end === begin) {
|
if (end === begin) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (
|
||||||
|
geometryWidths &&
|
||||||
|
(end - begin) / 2 !== flatCoordinates.length / stride
|
||||||
|
) {
|
||||||
|
let beg = begin / 2;
|
||||||
|
geometryWidths = geometryWidths.filter((w, i) => {
|
||||||
|
const keep =
|
||||||
|
coordinates[(beg + i) * 2] === flatCoordinates[i * stride] &&
|
||||||
|
coordinates[(beg + i) * 2 + 1] === flatCoordinates[i * stride + 1];
|
||||||
|
if (!keep) {
|
||||||
|
--beg;
|
||||||
|
}
|
||||||
|
return keep;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
this.saveTextStates_();
|
this.saveTextStates_();
|
||||||
|
|
||||||
|
|||||||
@@ -320,4 +320,50 @@ describe('ol.render.canvas.TextBuilder', function () {
|
|||||||
expect(builder.instructions.length).to.be(3);
|
expect(builder.instructions.length).to.be(3);
|
||||||
executeInstructions(builder, 1, 2);
|
executeInstructions(builder, 1, 2);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('generates a matching geometry widths array for multipolygons', function () {
|
||||||
|
const feature = new Feature(
|
||||||
|
new MultiPolygon([
|
||||||
|
[
|
||||||
|
[
|
||||||
|
[-180, -90],
|
||||||
|
[-180, 90],
|
||||||
|
[-50, 90],
|
||||||
|
[-50, -90],
|
||||||
|
[-180, -90],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[
|
||||||
|
[-50, -90],
|
||||||
|
[-50, 90],
|
||||||
|
[70, 90],
|
||||||
|
[70, -90],
|
||||||
|
[-50, -90],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[
|
||||||
|
[70, -90],
|
||||||
|
[70, 90],
|
||||||
|
[180, 90],
|
||||||
|
[180, -90],
|
||||||
|
[70, -90],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
])
|
||||||
|
);
|
||||||
|
const builder = new TextBuilder(1, [-50, -90, 70, 90], 1, 1);
|
||||||
|
builder.setTextStyle(
|
||||||
|
new Text({
|
||||||
|
text: 'text',
|
||||||
|
})
|
||||||
|
);
|
||||||
|
builder.drawText(feature.getGeometry(), feature);
|
||||||
|
expect(builder.coordinates).to.have.length(2);
|
||||||
|
expect(builder.instructions).to.have.length(3);
|
||||||
|
const geometryWidths = builder.instructions[1][24];
|
||||||
|
expect(geometryWidths).to.have.length(1);
|
||||||
|
expect(geometryWidths[0]).to.be(120);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user