Skip to content

Commit 673fd80

Browse files
committed
[GLJS-1165] Correctly stretch vector icons for >1 pixel ratio (internal-2130)
1 parent 0257a04 commit 673fd80

File tree

4 files changed

+63
-6
lines changed

4 files changed

+63
-6
lines changed

src/style/load_iconset.ts

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,28 @@ function getContentArea(icon: Icon): [number, number, number, number] | undefine
1212
return undefined;
1313
}
1414

15+
const dpr = browser.devicePixelRatio;
1516
const {left, top, width, height} = icon.metadata.content_area;
1617

18+
const scaledLeft = left * dpr;
19+
const scaledTop = top * dpr;
20+
1721
return [
18-
left,
19-
top,
20-
left + width,
21-
top + height
22+
scaledLeft,
23+
scaledTop,
24+
scaledLeft + width * dpr,
25+
scaledTop + height * dpr
2226
];
2327
}
2428

29+
function getStretchArea(stretchArea: [number, number][] | undefined): [number, number][] | undefined {
30+
if (!stretchArea) {
31+
return undefined;
32+
}
33+
34+
return stretchArea.map(([l, r]) => [l * browser.devicePixelRatio, r * browser.devicePixelRatio]);
35+
}
36+
2537
export function loadIconset(
2638
loadURL: string,
2739
requestManager: RequestManager,
@@ -44,8 +56,8 @@ export function loadIconset(
4456
version: 1,
4557
pixelRatio: browser.devicePixelRatio,
4658
content: getContentArea(icon),
47-
stretchX: icon.metadata ? icon.metadata.stretch_x_areas : undefined,
48-
stretchY: icon.metadata ? icon.metadata.stretch_y_areas : undefined,
59+
stretchX: icon.metadata ? getStretchArea(icon.metadata.stretch_x_areas) : undefined,
60+
stretchY: icon.metadata ? getStretchArea(icon.metadata.stretch_y_areas) : undefined,
4961
sdf: false,
5062
usvg: true,
5163
icon,
Loading
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
{
2+
"version": 8,
3+
"metadata": {
4+
"test": {
5+
"spriteFormat": "icon_set",
6+
"width": 128,
7+
"height": 64,
8+
"pixelRatio": 2
9+
}
10+
},
11+
"sources": {
12+
"geojson": {
13+
"type": "geojson",
14+
"data": {
15+
"type": "Point",
16+
"coordinates": [
17+
0,
18+
0
19+
]
20+
}
21+
}
22+
},
23+
"sprite": "local://sprites/rect",
24+
"glyphs": "local://glyphs/{fontstack}/{range}.pbf",
25+
"layers": [
26+
{
27+
"id": "symbol",
28+
"type": "symbol",
29+
"source": "geojson",
30+
"layout": {
31+
"text-field": "ABCDEF",
32+
"text-font": [
33+
"Open Sans Semibold",
34+
"Arial Unicode MS Bold"
35+
],
36+
"icon-image": "rect",
37+
"icon-text-fit": "both",
38+
"icon-text-fit-padding": [0, 10, 0, 10]
39+
},
40+
"paint": {
41+
"text-color": "white"
42+
}
43+
}
44+
]
45+
}

test/integration/sprites/rect.pbf

94 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)