Skip to content

Commit cef5cd4

Browse files
committed
fix(ios): more style property handle
1 parent ee66b09 commit cef5cd4

File tree

1 file changed

+66
-14
lines changed

1 file changed

+66
-14
lines changed

src/ui-mapbox/layers/parser/property-parser.ios.ts

+66-14
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,44 @@ function toCamelCase(s) {
44
return s.replace(/([-_][a-z])/gi, ($1) => $1.toUpperCase().replace('-', '').replace('_', ''));
55
}
66

7+
const styleExtras = {
8+
// padding
9+
iconTextFitPadding: {
10+
iosType: 'edgeinsets',
11+
},
12+
13+
// offsets
14+
iconOffset: {
15+
iosType: 'vector',
16+
},
17+
textOffset: {
18+
iosType: 'vector',
19+
},
20+
lineOffset: {
21+
iosType: 'vector',
22+
},
23+
24+
// translates
25+
fillTranslate: {
26+
iosType: 'vector',
27+
},
28+
lineTranslate: {
29+
iosType: 'vector',
30+
},
31+
iconTranslate: {
32+
iosType: 'vector',
33+
},
34+
textTranslate: {
35+
iosType: 'vector',
36+
},
37+
circleTranslate: {
38+
iosType: 'vector',
39+
},
40+
fillExtrusionTranslate: {
41+
iosType: 'vector',
42+
},
43+
};
44+
745
const keysMap = {
846
'circle-pitch-scale': 'circleScaleAlignment',
947
'circle-translate': 'circleTranslation',
@@ -41,23 +79,37 @@ const keysMap = {
4179
'raster-brightness-min': 'maximumRasterBrightness',
4280
'raster-brightness-max': 'minimumRasterBrightness'
4381
};
44-
function transformValue(key, value) {
45-
if (key.indexOf('-color') !== -1 && !Array.isArray(value)) {
82+
function transformValue(key, value, _styleType) {
83+
84+
if (_styleType === 'color' || key.indexOf('-color') !== -1) {
4685
const color = value instanceof Color ? value : new Color(value);
4786
return color.ios;
48-
}
49-
switch (key) {
50-
case 'raster-resampling':
51-
if (value === 'linear') {
52-
return MGLRasterResamplingMode.Linear;
53-
} else if (value === 'nearest') {
54-
return MGLRasterResamplingMode.Nearest;
55-
} else {
87+
} else if (_styleType === 'vector') {
88+
const vector = CGVectorMake(value[0], value[1]);
89+
return (NSExpression as any).expressionWithMGLJSONObject(NSValue.valueWithCGVector(vector));
90+
} else if (_styleType === "edgeinsets"){
91+
const edgeInsets = new UIEdgeInsets({
92+
top: value[0],
93+
left: value[1],
94+
bottom: value[2],
95+
right: value[3],
96+
});
97+
return (NSExpression as any).expressionWithMGLJSONObject(NSValue.valueWithUIEdgeInsets(edgeInsets));
98+
} else {
99+
switch (key) {
100+
case 'raster-resampling':
101+
if (value === 'linear') {
102+
return MGLRasterResamplingMode.Linear;
103+
} else if (value === 'nearest') {
104+
return MGLRasterResamplingMode.Nearest;
105+
} else {
106+
return value;
107+
}
108+
default:
56109
return value;
57-
}
58-
default:
59-
return value;
110+
}
60111
}
112+
61113
}
62114
export class PropertyParser {
63115
static parsePropertiesForLayer(propertiesObject) {
@@ -67,7 +119,7 @@ export class PropertyParser {
67119
Object.keys(propertiesObject).forEach((k) => {
68120
const actualKey = keysMap[k] || toCamelCase(k);
69121
const value = propertiesObject[k];
70-
const rValue = transformValue(k, value);
122+
const rValue = transformValue(k, value, styleExtras[k]?.iosType);
71123
if (Array.isArray(value)) {
72124
nProperties[actualKey] = (NSExpression as any).expressionWithMGLJSONObject(rValue);
73125
} else {

0 commit comments

Comments
 (0)