@@ -4,6 +4,44 @@ function toCamelCase(s) {
4
4
return s . replace ( / ( [ - _ ] [ a - z ] ) / gi, ( $1 ) => $1 . toUpperCase ( ) . replace ( '-' , '' ) . replace ( '_' , '' ) ) ;
5
5
}
6
6
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
+
7
45
const keysMap = {
8
46
'circle-pitch-scale' : 'circleScaleAlignment' ,
9
47
'circle-translate' : 'circleTranslation' ,
@@ -41,23 +79,37 @@ const keysMap = {
41
79
'raster-brightness-min' : 'maximumRasterBrightness' ,
42
80
'raster-brightness-max' : 'minimumRasterBrightness'
43
81
} ;
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 ) {
46
85
const color = value instanceof Color ? value : new Color ( value ) ;
47
86
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 :
56
109
return value ;
57
- }
58
- default :
59
- return value ;
110
+ }
60
111
}
112
+
61
113
}
62
114
export class PropertyParser {
63
115
static parsePropertiesForLayer ( propertiesObject ) {
@@ -67,7 +119,7 @@ export class PropertyParser {
67
119
Object . keys ( propertiesObject ) . forEach ( ( k ) => {
68
120
const actualKey = keysMap [ k ] || toCamelCase ( k ) ;
69
121
const value = propertiesObject [ k ] ;
70
- const rValue = transformValue ( k , value ) ;
122
+ const rValue = transformValue ( k , value , styleExtras [ k ] ?. iosType ) ;
71
123
if ( Array . isArray ( value ) ) {
72
124
nProperties [ actualKey ] = ( NSExpression as any ) . expressionWithMGLJSONObject ( rValue ) ;
73
125
} else {
0 commit comments