diff --git a/android/rctmgl/src/main/java/com/mapbox/rctmgl/RCTMGLPackage.java b/android/rctmgl/src/main/java/com/mapbox/rctmgl/RCTMGLPackage.java index 5c3202d..af872e7 100644 --- a/android/rctmgl/src/main/java/com/mapbox/rctmgl/RCTMGLPackage.java +++ b/android/rctmgl/src/main/java/com/mapbox/rctmgl/RCTMGLPackage.java @@ -11,11 +11,15 @@ import java.util.Collections; import java.util.List; import com.mapbox.rctmgl.components.mapview.RCTMGLMapViewManager; +import com.mapbox.rctmgl.components.styles.layers.RCTMGLBackgroundLayerManager; import com.mapbox.rctmgl.components.styles.layers.RCTMGLCircleLayerManager; import com.mapbox.rctmgl.components.styles.layers.RCTMGLFillExtrusionLayerManager; import com.mapbox.rctmgl.components.styles.layers.RCTMGLFillLayerManager; import com.mapbox.rctmgl.components.styles.layers.RCTMGLLineLayerManager; +import com.mapbox.rctmgl.components.styles.layers.RCTMGLRasterLayerManager; import com.mapbox.rctmgl.components.styles.layers.RCTMGLSymbolLayerManager; +import com.mapbox.rctmgl.components.styles.light.RCTMGLLightManager; +import com.mapbox.rctmgl.components.styles.sources.RCTMGLRasterSourceManager; import com.mapbox.rctmgl.components.styles.sources.RCTMGLShapeSourceManager; import com.mapbox.rctmgl.components.styles.sources.RCTMGLVectorSourceManager; import com.mapbox.rctmgl.modules.RCTMGLModule; @@ -46,10 +50,12 @@ public class RCTMGLPackage implements ReactPackage { // components managers.add(new RCTMGLMapViewManager(reactApplicationContext)); + managers.add(new RCTMGLLightManager()); // sources managers.add(new RCTMGLVectorSourceManager(reactApplicationContext)); managers.add(new RCTMGLShapeSourceManager()); + managers.add(new RCTMGLRasterSourceManager()); // layers managers.add(new RCTMGLFillLayerManager()); @@ -57,6 +63,8 @@ public class RCTMGLPackage implements ReactPackage { managers.add(new RCTMGLLineLayerManager()); managers.add(new RCTMGLCircleLayerManager()); managers.add(new RCTMGLSymbolLayerManager()); + managers.add(new RCTMGLRasterLayerManager()); + managers.add(new RCTMGLBackgroundLayerManager()); return managers; } diff --git a/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/mapview/RCTMGLMapView.java b/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/mapview/RCTMGLMapView.java index 317b1b9..9fce417 100644 --- a/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/mapview/RCTMGLMapView.java +++ b/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/mapview/RCTMGLMapView.java @@ -24,6 +24,7 @@ import com.mapbox.mapboxsdk.plugins.locationlayer.LocationLayerPlugin; import com.mapbox.rctmgl.components.AbstractMapFeature; import com.mapbox.rctmgl.components.camera.CameraStop; import com.mapbox.rctmgl.components.camera.CameraUpdateQueue; +import com.mapbox.rctmgl.components.styles.light.RCTMGLLight; import com.mapbox.rctmgl.components.styles.sources.RCTSource; import com.mapbox.services.android.location.LostLocationEngine; import com.mapbox.services.android.telemetry.location.LocationEngine; @@ -101,6 +102,8 @@ public class RCTMGLMapView extends MapView implements if (childView instanceof RCTSource) { mSources.put(childPosition, (RCTSource) childView); feature = (AbstractMapFeature) childView; + } else if (childView instanceof RCTMGLLight) { + feature = (AbstractMapFeature) childView; } else { ViewGroup children = (ViewGroup) childView; diff --git a/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/RCTMGLStyle.java b/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/RCTMGLStyle.java index 9d3944d..e0151ce 100644 --- a/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/RCTMGLStyle.java +++ b/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/RCTMGLStyle.java @@ -1,6 +1,7 @@ package com.mapbox.rctmgl.components.styles; import android.support.annotation.NonNull; +import android.support.annotation.StringDef; import com.facebook.react.bridge.ReadableMap; import com.facebook.react.bridge.ReadableMapKeySetIterator; @@ -32,7 +33,11 @@ public class RCTMGLStyle { List keys = new ArrayList<>(); while (it.hasNextKey()) { - keys.add(it.nextKey()); + String key = it.nextKey(); + + if (!key.equals("__MAPBOX_STYLESHEET__")) { + keys.add(key); + } } return keys; diff --git a/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTLayer.java b/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTLayer.java index aaf6a90..2ae75f4 100644 --- a/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTLayer.java +++ b/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTLayer.java @@ -142,6 +142,10 @@ public abstract class RCTLayer extends AbstractMapFeature { public void setReactStyle(ReadableMap reactStyle) { mReactStyle = reactStyle; + + if (mLayer != null) { + addStyles(); + } } public void setFilter(String[] filter) { diff --git a/ios/RCTMGL.xcodeproj/project.pbxproj b/ios/RCTMGL.xcodeproj/project.pbxproj index d035b12..e787b07 100644 --- a/ios/RCTMGL.xcodeproj/project.pbxproj +++ b/ios/RCTMGL.xcodeproj/project.pbxproj @@ -7,6 +7,8 @@ objects = { /* Begin PBXBuildFile section */ + C410D5D51F7AD0B300CF822A /* RCTMGLLight.m in Sources */ = {isa = PBXBuildFile; fileRef = C410D5D41F7AD0B300CF822A /* RCTMGLLight.m */; }; + C410D5D81F7AD0C100CF822A /* RCTMGLLightManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C410D5D71F7AD0C100CF822A /* RCTMGLLightManager.m */; }; C42236A41F6B012000FA9C1C /* RCTMGLStyle.m in Sources */ = {isa = PBXBuildFile; fileRef = C42236A31F6B012000FA9C1C /* RCTMGLStyle.m */; }; C42236A71F6C7F4E00FA9C1C /* RCTMGLFillExtrusionLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = C42236A61F6C7F4E00FA9C1C /* RCTMGLFillExtrusionLayer.m */; }; C42236AA1F6C7F6200FA9C1C /* RCTMGLFillExtrusionLayerManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C42236A91F6C7F6200FA9C1C /* RCTMGLFillExtrusionLayerManager.m */; }; @@ -39,6 +41,12 @@ C4FB110D1F71D0B10055AE1F /* RCTMGLShapeSourceManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C4FB110C1F71D0B10055AE1F /* RCTMGLShapeSourceManager.m */; }; C4FB11101F71EC8D0055AE1F /* RCTMGLSymbolLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = C4FB110F1F71EC8D0055AE1F /* RCTMGLSymbolLayer.m */; }; C4FB11131F71EC9F0055AE1F /* RCTMGLSymbolLayerManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C4FB11121F71EC9F0055AE1F /* RCTMGLSymbolLayerManager.m */; }; + C4FB122D1F7972A00055AE1F /* RCTMGLRasterSource.m in Sources */ = {isa = PBXBuildFile; fileRef = C4FB122C1F7972A00055AE1F /* RCTMGLRasterSource.m */; }; + C4FB12301F7972B40055AE1F /* RCTMGLRasterSourceManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C4FB122F1F7972B40055AE1F /* RCTMGLRasterSourceManager.m */; }; + C4FB12331F799F190055AE1F /* RCTMGLRasterLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = C4FB12321F799F190055AE1F /* RCTMGLRasterLayer.m */; }; + C4FB12361F799F280055AE1F /* RCTMGLRasterLayerManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C4FB12351F799F280055AE1F /* RCTMGLRasterLayerManager.m */; }; + C4FB12581F79C0270055AE1F /* RCTMGLBackgroundLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = C4FB12571F79C0270055AE1F /* RCTMGLBackgroundLayer.m */; }; + C4FB125B1F79C03E0055AE1F /* RCTMGLBackgroundLayerManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C4FB125A1F79C03E0055AE1F /* RCTMGLBackgroundLayerManager.m */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -55,6 +63,10 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + C410D5D31F7AD0B300CF822A /* RCTMGLLight.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RCTMGLLight.h; sourceTree = ""; }; + C410D5D41F7AD0B300CF822A /* RCTMGLLight.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RCTMGLLight.m; sourceTree = ""; }; + C410D5D61F7AD0C100CF822A /* RCTMGLLightManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RCTMGLLightManager.h; sourceTree = ""; }; + C410D5D71F7AD0C100CF822A /* RCTMGLLightManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RCTMGLLightManager.m; sourceTree = ""; }; C42236A21F6B012000FA9C1C /* RCTMGLStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTMGLStyle.h; sourceTree = ""; }; C42236A31F6B012000FA9C1C /* RCTMGLStyle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTMGLStyle.m; sourceTree = ""; }; C42236A51F6C7F4E00FA9C1C /* RCTMGLFillExtrusionLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTMGLFillExtrusionLayer.h; sourceTree = ""; }; @@ -119,6 +131,18 @@ C4FB110F1F71EC8D0055AE1F /* RCTMGLSymbolLayer.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RCTMGLSymbolLayer.m; sourceTree = ""; }; C4FB11111F71EC9F0055AE1F /* RCTMGLSymbolLayerManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RCTMGLSymbolLayerManager.h; sourceTree = ""; }; C4FB11121F71EC9F0055AE1F /* RCTMGLSymbolLayerManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RCTMGLSymbolLayerManager.m; sourceTree = ""; }; + C4FB122B1F7972A00055AE1F /* RCTMGLRasterSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RCTMGLRasterSource.h; sourceTree = ""; }; + C4FB122C1F7972A00055AE1F /* RCTMGLRasterSource.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RCTMGLRasterSource.m; sourceTree = ""; }; + C4FB122E1F7972B40055AE1F /* RCTMGLRasterSourceManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RCTMGLRasterSourceManager.h; sourceTree = ""; }; + C4FB122F1F7972B40055AE1F /* RCTMGLRasterSourceManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RCTMGLRasterSourceManager.m; sourceTree = ""; }; + C4FB12311F799F190055AE1F /* RCTMGLRasterLayer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RCTMGLRasterLayer.h; sourceTree = ""; }; + C4FB12321F799F190055AE1F /* RCTMGLRasterLayer.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RCTMGLRasterLayer.m; sourceTree = ""; }; + C4FB12341F799F280055AE1F /* RCTMGLRasterLayerManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RCTMGLRasterLayerManager.h; sourceTree = ""; }; + C4FB12351F799F280055AE1F /* RCTMGLRasterLayerManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RCTMGLRasterLayerManager.m; sourceTree = ""; }; + C4FB12561F79C0270055AE1F /* RCTMGLBackgroundLayer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RCTMGLBackgroundLayer.h; sourceTree = ""; }; + C4FB12571F79C0270055AE1F /* RCTMGLBackgroundLayer.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RCTMGLBackgroundLayer.m; sourceTree = ""; }; + C4FB12591F79C03E0055AE1F /* RCTMGLBackgroundLayerManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RCTMGLBackgroundLayerManager.h; sourceTree = ""; }; + C4FB125A1F79C03E0055AE1F /* RCTMGLBackgroundLayerManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RCTMGLBackgroundLayerManager.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -132,6 +156,17 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + C410D5D21F7AD0A200CF822A /* Light */ = { + isa = PBXGroup; + children = ( + C410D5D31F7AD0B300CF822A /* RCTMGLLight.h */, + C410D5D41F7AD0B300CF822A /* RCTMGLLight.m */, + C410D5D61F7AD0C100CF822A /* RCTMGLLightManager.h */, + C410D5D71F7AD0C100CF822A /* RCTMGLLightManager.m */, + ); + name = Light; + sourceTree = ""; + }; C43773B91F56024900AF6D71 /* Components */ = { isa = PBXGroup; children = ( @@ -252,6 +287,7 @@ children = ( C42236A21F6B012000FA9C1C /* RCTMGLStyle.h */, C42236A31F6B012000FA9C1C /* RCTMGLStyle.m */, + C410D5D21F7AD0A200CF822A /* Light */, C4EAF17A1F6320B10016DEE8 /* Layers */, C4EAF1791F6320AA0016DEE8 /* Sources */, C4EA22171F675ACE00EF2500 /* RCTMGLStyleValue.h */, @@ -273,6 +309,10 @@ C4FB11091F71D09E0055AE1F /* RCTMGLShapeSource.m */, C4FB110B1F71D0B10055AE1F /* RCTMGLShapeSourceManager.h */, C4FB110C1F71D0B10055AE1F /* RCTMGLShapeSourceManager.m */, + C4FB122B1F7972A00055AE1F /* RCTMGLRasterSource.h */, + C4FB122C1F7972A00055AE1F /* RCTMGLRasterSource.m */, + C4FB122E1F7972B40055AE1F /* RCTMGLRasterSourceManager.h */, + C4FB122F1F7972B40055AE1F /* RCTMGLRasterSourceManager.m */, ); name = Sources; sourceTree = ""; @@ -302,6 +342,14 @@ C4FB110F1F71EC8D0055AE1F /* RCTMGLSymbolLayer.m */, C4FB11111F71EC9F0055AE1F /* RCTMGLSymbolLayerManager.h */, C4FB11121F71EC9F0055AE1F /* RCTMGLSymbolLayerManager.m */, + C4FB12311F799F190055AE1F /* RCTMGLRasterLayer.h */, + C4FB12321F799F190055AE1F /* RCTMGLRasterLayer.m */, + C4FB12341F799F280055AE1F /* RCTMGLRasterLayerManager.h */, + C4FB12351F799F280055AE1F /* RCTMGLRasterLayerManager.m */, + C4FB12561F79C0270055AE1F /* RCTMGLBackgroundLayer.h */, + C4FB12571F79C0270055AE1F /* RCTMGLBackgroundLayer.m */, + C4FB12591F79C03E0055AE1F /* RCTMGLBackgroundLayerManager.h */, + C4FB125A1F79C03E0055AE1F /* RCTMGLBackgroundLayerManager.m */, ); name = Layers; sourceTree = ""; @@ -363,6 +411,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + C4FB12581F79C0270055AE1F /* RCTMGLBackgroundLayer.m in Sources */, C4EAF1801F6324A80016DEE8 /* RCTLayer.m in Sources */, C4EAF1271F6083C70016DEE8 /* CameraUpdateItem.m in Sources */, C4D144531F4E190C00396F26 /* MGLModule.m in Sources */, @@ -370,11 +419,15 @@ C4EA22191F675ACE00EF2500 /* RCTMGLStyleValue.m in Sources */, C4FB110A1F71D09E0055AE1F /* RCTMGLShapeSource.m in Sources */, C4FB11101F71EC8D0055AE1F /* RCTMGLSymbolLayer.m in Sources */, + C4FB125B1F79C03E0055AE1F /* RCTMGLBackgroundLayerManager.m in Sources */, C4EAF18F1F633E020016DEE8 /* RCTMGLFillLayer.m in Sources */, C42236AA1F6C7F6200FA9C1C /* RCTMGLFillExtrusionLayerManager.m in Sources */, + C4FB12331F799F190055AE1F /* RCTMGLRasterLayer.m in Sources */, C4D1444C1F4E178100396F26 /* RCTMGLMapView.m in Sources */, + C410D5D51F7AD0B300CF822A /* RCTMGLLight.m in Sources */, C42236A41F6B012000FA9C1C /* RCTMGLStyle.m in Sources */, C4D1444F1F4E181100396F26 /* RCTMGLMapViewManager.m in Sources */, + C4FB12361F799F280055AE1F /* RCTMGLRasterLayerManager.m in Sources */, C4FB110D1F71D0B10055AE1F /* RCTMGLShapeSourceManager.m in Sources */, C4EAF1921F6341520016DEE8 /* RCTMGLFillLayerManager.m in Sources */, C4D144971F4E2F1100396F26 /* RCTMGLUtils.m in Sources */, @@ -386,9 +439,12 @@ C42236A71F6C7F4E00FA9C1C /* RCTMGLFillExtrusionLayer.m in Sources */, C4FB11011F707A280055AE1F /* RCTMGLLineLayerManager.m in Sources */, C43CA5061F507BCC000B9CB7 /* RCTMGLMapTouchEvent.m in Sources */, + C4FB12301F7972B40055AE1F /* RCTMGLRasterSourceManager.m in Sources */, C4FB10FE1F707A140055AE1F /* RCTMGLLineLayer.m in Sources */, C4EAF1831F6336E20016DEE8 /* RCTMGLVectorSource.m in Sources */, C4EAF1891F633C010016DEE8 /* RCTMGLVectorSourceManager.m in Sources */, + C4FB122D1F7972A00055AE1F /* RCTMGLRasterSource.m in Sources */, + C410D5D81F7AD0C100CF822A /* RCTMGLLightManager.m in Sources */, C4EAF17D1F6324970016DEE8 /* RCTSource.m in Sources */, C4FB11131F71EC9F0055AE1F /* RCTMGLSymbolLayerManager.m in Sources */, C4EAF12A1F6084920016DEE8 /* CameraUpdateQueue.m in Sources */, diff --git a/ios/RCTMGL/RCTLayer.m b/ios/RCTMGL/RCTLayer.m index 88e5ab9..aed9eba 100644 --- a/ios/RCTMGL/RCTLayer.m +++ b/ios/RCTMGL/RCTLayer.m @@ -94,6 +94,10 @@ const int COMPOUND_FILTER_NONE = 1; -(void)setReactStyle:(NSDictionary *)reactStyle { _reactStyle = reactStyle; + + if (_styleLayer != nil) { + [self addStyles]; + } } - (void)addToMap:(MGLStyle *)style diff --git a/ios/RCTMGL/RCTMGLMapView.h b/ios/RCTMGL/RCTMGLMapView.h index 5b5ec9e..97658ac 100644 --- a/ios/RCTMGL/RCTMGLMapView.h +++ b/ios/RCTMGL/RCTMGLMapView.h @@ -8,6 +8,8 @@ #import #import "RCTSource.h" +#import "RCTMGLLight.h" + @import Mapbox; @class CameraUpdateQueue; @@ -17,6 +19,7 @@ @property (nonatomic, strong) CameraUpdateQueue *cameraUpdateQueue; @property (nonatomic, strong) NSMutableArray> *reactSubviews; @property (nonatomic, strong) NSMutableArray *sources; +@property (nonatomic, strong) RCTMGLLight *light; @property (nonatomic, assign) BOOL animated; @property (nonatomic, assign) BOOL reactScrollEnabled; diff --git a/ios/RCTMGL/RCTMGLMapView.m b/ios/RCTMGL/RCTMGLMapView.m index 03814b5..5629a48 100644 --- a/ios/RCTMGL/RCTMGLMapView.m +++ b/ios/RCTMGL/RCTMGLMapView.m @@ -35,6 +35,10 @@ static double const M2PI = M_PI * 2; RCTSource *source = (RCTSource*)subview; source.map = self; [_sources addObject:(RCTSource*)subview]; + } else if ([subview isKindOfClass:[RCTMGLLight class]]) { + RCTMGLLight *light = (RCTMGLLight*)subview; + _light = light; + _light.map = self; } else { NSArray> *childSubviews = [subview reactSubviews]; diff --git a/ios/RCTMGL/RCTMGLMapViewManager.m b/ios/RCTMGL/RCTMGLMapViewManager.m index 7726d31..12b4b00 100644 --- a/ios/RCTMGL/RCTMGLMapViewManager.m +++ b/ios/RCTMGL/RCTMGLMapViewManager.m @@ -196,6 +196,10 @@ RCT_EXPORT_METHOD(setCamera:(nonnull NSNumber*)reactTag } } + if (reactMapView.light != nil) { + reactMapView.light.map = reactMapView; + } + [self reactMapDidChange:reactMapView eventType:RCT_MAPBOX_DID_FINISH_LOADING_STYLE]; } diff --git a/ios/RCTMGL/RCTMGLStyleValue.h b/ios/RCTMGL/RCTMGLStyleValue.h index e64ca8f..3dc6e49 100644 --- a/ios/RCTMGL/RCTMGLStyleValue.h +++ b/ios/RCTMGL/RCTMGLStyleValue.h @@ -20,6 +20,7 @@ - (BOOL)isFunction; - (BOOL)isFunctionTypeSupported:(NSArray*)allowedFunctionTypes; - (MGLTransition)getTransition; +- (MGLStyleValue*)getSphericalPosition; + (RCTMGLStyleValue*)make:(NSDictionary*)config; diff --git a/ios/RCTMGL/RCTMGLStyleValue.m b/ios/RCTMGL/RCTMGLStyleValue.m index ce1aadf..9529aa9 100644 --- a/ios/RCTMGL/RCTMGLStyleValue.m +++ b/ios/RCTMGL/RCTMGLStyleValue.m @@ -46,7 +46,7 @@ } else if ([self.type isEqualToString:@"translate"]) { rawValue = [NSValue valueWithCGVector:[RCTMGLUtils toCGVector:rawValue]]; } - + id propertyValue = self.payload[@"propertyValue"]; if (propertyValue != nil) { return @{ propertyValue: [MGLStyleValue valueWithRawValue:rawValue] }; @@ -132,6 +132,18 @@ return MGLTransitionMake([duration doubleValue], [delay doubleValue]); } +- (MGLStyleValue*)getSphericalPosition +{ + NSArray *values = self.payload[@"value"]; + + CGFloat radial = [values[0] floatValue]; + CLLocationDistance azimuthal = [values[1] doubleValue]; + CLLocationDistance polar = [values[2] doubleValue]; + + MGLSphericalPosition pos = MGLSphericalPositionMake(radial, azimuthal, polar); + return [MGLStyleValue valueWithRawValue:[NSValue valueWithMGLSphericalPosition:pos]]; +} + - (id)_getStopKey:(id)key { // Javascript does a toString on all keys in it's objects, diff --git a/javascript/components/AbstractLayer.js b/javascript/components/AbstractLayer.js index 486dd1a..742efd5 100644 --- a/javascript/components/AbstractLayer.js +++ b/javascript/components/AbstractLayer.js @@ -1,12 +1,12 @@ -/* eslint react/prop-types: 0 */ import React from 'react'; +import MapboxStyleSheet from '../utils/MapboxStyleSheet'; class AbstractLayer extends React.Component { get baseProps () { return { id: this.props.id, sourceID: this.props.sourceID, - reactStyle: this.props.style, + reactStyle: this.getStyle(), minZoomLevel: this.props.minZoomLevel, maxZoomLevel: this.props.maxZoomLevel, aboveLayerID: this.props.aboveLayerID, @@ -34,6 +34,18 @@ class AbstractLayer extends React.Component { return flattenedFilter.join(';'); } + + getStyle () { + if (!this.props.style) { + return; + } + + if (MapboxStyleSheet.isStyleSheet(this.props.style)) { + return this.props.style; + } + + return MapboxStyleSheet.create(this.props.style); + } } export default AbstractLayer; diff --git a/javascript/components/VectorSource.js b/javascript/components/VectorSource.js index e0698a5..df32a85 100644 --- a/javascript/components/VectorSource.js +++ b/javascript/components/VectorSource.js @@ -1,6 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import { NativeModules, requireNativeComponent } from 'react-native'; +import { cloneReactChildrenWithProps } from '../utils'; const MapboxGL = NativeModules.MGLModule; @@ -36,7 +37,7 @@ class VectorSource extends React.Component { }; return ( - {this.props.children} + {cloneReactChildrenWithProps(this.props.children, { sourceID: this.props.id })} ); } diff --git a/javascript/index.js b/javascript/index.js index 1192ea8..ade59da 100644 --- a/javascript/index.js +++ b/javascript/index.js @@ -4,10 +4,12 @@ import * as geoUtils from './utils/geoUtils'; // components import MapView from './components/MapView'; import MapboxStyleSheet from './utils/MapboxStyleSheet'; +import Light from './components/Light'; // sources import VectorSource from './components/VectorSource'; import ShapeSource from './components/ShapeSource'; +import RasterSource from './components/RasterSource'; // layers import FillLayer from './components/FillLayer'; @@ -15,16 +17,20 @@ import FillExtrusionLayer from './components/FillExtrusionLayer'; import LineLayer from './components/LineLayer'; import CircleLayer from './components/CircleLayer'; import SymbolLayer from './components/SymbolLayer'; +import RasterLayer from './components/RasterLayer'; +import BackgroundLayer from './components/BackgroundLayer'; let MapboxGL = { ...NativeModules.MGLModule }; // components MapboxGL.MapView = MapView; MapboxGL.StyleSheet = MapboxStyleSheet; +MapboxGL.Light = Light; // sources MapboxGL.VectorSource = VectorSource; MapboxGL.ShapeSource = ShapeSource; +MapboxGL.RasterSource = RasterSource; // layers MapboxGL.FillLayer = FillLayer; @@ -32,6 +38,8 @@ MapboxGL.FillExtrusionLayer = FillExtrusionLayer; MapboxGL.LineLayer = LineLayer; MapboxGL.CircleLayer = CircleLayer; MapboxGL.SymbolLayer = SymbolLayer; +MapboxGL.RasterLayer = RasterLayer; +MapboxGL.BackgroundLayer = BackgroundLayer; // utils MapboxGL.geoUtils = geoUtils; diff --git a/javascript/utils/MapboxStyleSheet.js b/javascript/utils/MapboxStyleSheet.js index fc1f640..78e03dc 100644 --- a/javascript/utils/MapboxStyleSheet.js +++ b/javascript/utils/MapboxStyleSheet.js @@ -23,7 +23,7 @@ class MapStyleTransitionItem extends MapStyleItem { duration: duration, delay: delay, }, - ...extras, + ...extras }); } } @@ -32,7 +32,7 @@ class MapStyleTranslationItem extends MapStyleItem { constructor (x, y, extras = {}) { super(StyleTypes.Translation, { value: [x, y], - ...extras, + ...extras }); } } @@ -80,7 +80,8 @@ class MapStyleFunctionItem extends MapStyleItem { function makeStyleValue (prop, value, extras = {}) { let item; - if (!isUndefined(value.type), !isUndefined(value.payload)) { // function + if (!isUndefined(value.type) && !isUndefined(value.payload)) { // function + console.log(prop, value); item = value; item.processStops(prop); } else if (styleMap[prop] === StyleTypes.Transition) { @@ -123,10 +124,7 @@ class MapboxStyleSheet { style[styleProp] = makeStyleValue(styleProp, userStyle); } - if (depth === 0) { - style.__MAPBOX_STYLESHEET__ = true; - } - + style.__MAPBOX_STYLESHEET__ = true; return style; } @@ -161,6 +159,10 @@ class MapboxStyleSheet { return stylesheet.__MAPBOX_STYLESHEET__ || false; } + static isStyleItem (item) { + return item instanceof MapStyleItem; + } + // helpers static identity (attrName) {