From c4847bb8a95747ea8fdc9f2e99d161a581e9106d Mon Sep 17 00:00:00 2001 From: Douma Fang Date: Fri, 9 Nov 2018 16:37:39 +0800 Subject: [PATCH 1/8] [iOS] fix scrollEnd can not get offset (#1729) --- ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.mm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.mm b/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.mm index dfe8824891..a27820222b 100644 --- a/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.mm +++ b/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.mm @@ -903,7 +903,7 @@ - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL } if (!decelerate) { _isScrolling = NO; - [self performSelector:@selector(scrollViewDidEndDecelerating:) withObject:nil afterDelay:0.1]; + [self performSelector:@selector(scrollViewDidEndDecelerating:) withObject:scrollView afterDelay:0.1]; } NSHashTable *delegates = [_delegates copy]; From ca545a5891fbd0baad5b8a6dfc993912b0d9b4a6 Mon Sep 17 00:00:00 2001 From: wqyfavor Date: Sat, 10 Nov 2018 22:54:57 +0800 Subject: [PATCH 2/8] [iOS] Remove specific animation by key instead of removing all. If we don' t remove, updating transform won't work after doing CAAnimation. http://dotwe.org/vue/ce7d8d3bd4e67d3fe321c9e8b0bbbb7b (#1734) --- ios/sdk/WeexSDK/Sources/Module/WXAnimationModule.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ios/sdk/WeexSDK/Sources/Module/WXAnimationModule.m b/ios/sdk/WeexSDK/Sources/Module/WXAnimationModule.m index 70a8feba25..75b09d8d01 100644 --- a/ios/sdk/WeexSDK/Sources/Module/WXAnimationModule.m +++ b/ios/sdk/WeexSDK/Sources/Module/WXAnimationModule.m @@ -123,7 +123,7 @@ - (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag _animationInfo.target.view.layer.anchorPoint = _animationInfo.originAnchorPoint; _animationInfo.target.view.layer.frame = originFrame; } - [_animationInfo.target.layer removeAllAnimations]; + [_animationInfo.target.layer removeAnimationForKey:_animationInfo.propertyName]; if (_finishBlock) { _finishBlock(flag); From ac18368ec65bbfea77e0d7d669db9f8262d96b01 Mon Sep 17 00:00:00 2001 From: wqyfavor Date: Wed, 14 Nov 2018 15:49:08 +0800 Subject: [PATCH 3/8] [iOS] Fix deadlock if WXSDKInstance is release in thread safe dictionary. (#1757) --- ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m | 13 ++----------- .../Utility/WXThreadSafeMutableDictionary.m | 16 +++++++++++++++- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m index 87bc32650b..613abd59a4 100644 --- a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m +++ b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m @@ -78,7 +78,6 @@ @implementation WXSDKInstance BOOL _debugJS; id _instanceJavaScriptContext; // sandbox javaScript context CGFloat _defaultPixelScaleFactor; - BOOL _bReleaseInstanceInMainThread; BOOL _defaultDataRender; } @@ -118,7 +117,6 @@ - (instancetype)init _apmInstance = [[WXApmForInstance alloc] init]; _defaultPixelScaleFactor = CGFLOAT_MIN; - _bReleaseInstanceInMainThread = YES; _defaultDataRender = NO; [self addObservers]; @@ -443,9 +441,6 @@ - (BOOL)_handleConfigCenter BOOL useJSCApiForCreateInstance = [[configCenter configForKey:@"iOS_weex_ext_config.useJSCApiForCreateInstance" defaultValue:@(YES) isDefault:NULL] boolValue]; [WXUtility setUseJSCApiForCreateInstance:useJSCApiForCreateInstance]; - - //Reading config from orange for Release instance in Main Thread or not - _bReleaseInstanceInMainThread = [[configCenter configForKey:@"iOS_weex_ext_config.releaseInstanceInMainThread" defaultValue:@(YES) isDefault:nil] boolValue]; BOOL shoudMultiContext = NO; shoudMultiContext = [[configCenter configForKey:@"iOS_weex_ext_config.createInstanceUsingMutliContext" defaultValue:@(YES) isDefault:NULL] boolValue]; @@ -659,13 +654,9 @@ - (void)destroyInstance [WXCoreBridge closePage:instanceId]; // Reading config from orange for Release instance in Main Thread or not, for Bug #15172691 +{ - if (!_bReleaseInstanceInMainThread) { + dispatch_async(dispatch_get_main_queue(), ^{ [WXSDKManager removeInstanceforID:instanceId]; - } else { - dispatch_async(dispatch_get_main_queue(), ^{ - [WXSDKManager removeInstanceforID:instanceId]; - }); - } + }); //+} }); diff --git a/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeMutableDictionary.m b/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeMutableDictionary.m index 3c32292269..6f31fb990e 100644 --- a/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeMutableDictionary.m +++ b/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeMutableDictionary.m @@ -145,24 +145,30 @@ - (NSEnumerator *)keyEnumerator - (void)setObject:(id)anObject forKey:(id)aKey { + id originalObject = nil; // make sure that object is not released in lock @try { pthread_mutex_lock(&_safeThreadDictionaryMutex); + originalObject = [_dict objectForKey:aKey]; [_dict setObject:anObject forKey:aKey]; } @finally { pthread_mutex_unlock(&_safeThreadDictionaryMutex); } + originalObject = nil; } - (void)setObject:(id)anObject forKeyedSubscript:(id )key { + id originalObject = nil; // make sure that object is not released in lock @try { pthread_mutex_lock(&_safeThreadDictionaryMutex); + originalObject = [_dict objectForKey:key]; [_dict setObject:anObject forKeyedSubscript:key]; } @finally { pthread_mutex_unlock(&_safeThreadDictionaryMutex); } + originalObject = nil; } - (NSArray *)allKeys @@ -189,24 +195,32 @@ - (NSArray *)allValues - (void)removeObjectForKey:(id)aKey { + id originalObject = nil; // make sure that object is not released in lock @try { pthread_mutex_lock(&_safeThreadDictionaryMutex); - [_dict removeObjectForKey:aKey]; + originalObject = [_dict objectForKey:aKey]; + if (originalObject) { + [_dict removeObjectForKey:aKey]; + } } @finally { pthread_mutex_unlock(&_safeThreadDictionaryMutex); } + originalObject = nil; } - (void)removeAllObjects { + NSArray* allValues = nil; // make sure that objects are not released in lock @try { pthread_mutex_lock(&_safeThreadDictionaryMutex); + allValues = [_dict allValues]; [_dict removeAllObjects]; } @finally { pthread_mutex_unlock(&_safeThreadDictionaryMutex); } + allValues = nil; } - (id)copy From 6b9cbe0af5c8110ad7384fa512afa5dd03f6e857 Mon Sep 17 00:00:00 2001 From: wqyfavor Date: Wed, 14 Nov 2018 18:53:06 +0800 Subject: [PATCH 4/8] [iOS] Trigger vsync on iOS in every batch. (#1759) --- weex_core/Source/core/render/page/render_page.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/weex_core/Source/core/render/page/render_page.cpp b/weex_core/Source/core/render/page/render_page.cpp index 032a0d7aa0..119af879ec 100644 --- a/weex_core/Source/core/render/page/render_page.cpp +++ b/weex_core/Source/core/render/page/render_page.cpp @@ -628,13 +628,11 @@ void RenderPage::Batch() { if ((kUseVSync && this->need_layout_.load()) || !kUseVSync) { LayoutInner(); } - else { #if OS_IOS - // vsync may stopped, trigger once - RenderAction *action = new RenderActionTriggerVSync(page_id()); - PostRenderAction(action); + // vsync may stopped, trigger once + RenderAction *action = new RenderActionTriggerVSync(page_id()); + PostRenderAction(action); #endif - } } RenderObject *RenderPage::GetRenderObject(const std::string &ref) { From fd4b750326014aecf063b975f77bb7029a13a44d Mon Sep 17 00:00:00 2001 From: wqyfavor Date: Mon, 19 Nov 2018 19:29:29 +0800 Subject: [PATCH 5/8] [iOS] Add completion callback for registerService (#1776) --- ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.h | 30 ++++++++++++++++++- ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m | 17 +++++++++-- .../WeexSDK/Sources/Manager/WXBridgeManager.h | 7 +++-- .../WeexSDK/Sources/Manager/WXBridgeManager.m | 26 ++++++++++++---- 4 files changed, 68 insertions(+), 12 deletions(-) diff --git a/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.h b/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.h index 5e7b1e7db6..ac014a5781 100644 --- a/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.h +++ b/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.h @@ -82,6 +82,20 @@ */ + (void)registerService:(NSString *)name withScript:(NSString *)serviceScript withOptions:(NSDictionary *)options; +/** + * @abstract Registers a component for a given name, options and js code + * + * @param name The service name to register + * + * @param options The service options to register + * + * @param serviceScript service js code to invoke + * + * @param completion Completion callback. JS is executed in asynchronously. + * + */ ++ (void)registerService:(NSString *)name withScript:(NSString *)serviceScript withOptions:(NSDictionary *)options completion:(void(^)(BOOL result))completion; + /** * @abstract Registers a component for a given name, options and js url * @@ -92,7 +106,21 @@ * @param serviceScriptUrl The service url to register * */ -+ (void)registerService:(NSString *)name withScriptUrl:(NSURL *)serviceScriptUrl WithOptions:(NSDictionary *)options; ++ (void)registerService:(NSString *)name withScriptUrl:(NSURL *)serviceScriptUrl withOptions:(NSDictionary *)options; + +/** + * @abstract Registers a component for a given name, options and js url + * + * @param name The service name to register + * + * @param options The service options to register + * + * @param serviceScriptUrl The service url to register + * + * @param completion Completion callback. JS is executed in asynchronously. + * + */ ++ (void)registerService:(NSString *)name withScriptUrl:(NSURL *)serviceScriptUrl withOptions:(NSDictionary *)options completion:(void(^)(BOOL result))completion; /** * @abstract Registers a component for a given name, options and js code diff --git a/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m b/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m index b5d7e00825..26ca8b7714 100644 --- a/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m +++ b/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m @@ -166,14 +166,25 @@ + (void)registerComponent:(NSString *)name withClass:(Class)clazz withProperties # pragma mark Service Register + + (void)registerService:(NSString *)name withScript:(NSString *)serviceScript withOptions:(NSDictionary *)options { - [[WXSDKManager bridgeMgr] registerService:name withService:serviceScript withOptions:options]; + [[WXSDKManager bridgeMgr] registerService:name withService:serviceScript withOptions:options completion:nil]; +} + ++ (void)registerService:(NSString *)name withScript:(NSString *)serviceScript withOptions:(NSDictionary *)options completion:(void(^)(BOOL result))completion +{ + [[WXSDKManager bridgeMgr] registerService:name withService:serviceScript withOptions:options completion:completion]; +} + ++ (void)registerService:(NSString *)name withScriptUrl:(NSURL *)serviceScriptUrl withOptions:(NSDictionary *)options +{ + [[WXSDKManager bridgeMgr] registerService:name withServiceUrl:serviceScriptUrl withOptions:options completion:nil]; } -+ (void)registerService:(NSString *)name withScriptUrl:(NSURL *)serviceScriptUrl WithOptions:(NSDictionary *)options ++ (void)registerService:(NSString *)name withScriptUrl:(NSURL *)serviceScriptUrl withOptions:(NSDictionary *)options completion:(void(^)(BOOL result))completion { - [[WXSDKManager bridgeMgr] registerService:name withServiceUrl:serviceScriptUrl withOptions:options]; + [[WXSDKManager bridgeMgr] registerService:name withServiceUrl:serviceScriptUrl withOptions:options completion:completion]; } + (void)unregisterService:(NSString *)name diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.h b/ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.h index 3d062774b7..8728161254 100644 --- a/ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.h +++ b/ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.h @@ -102,8 +102,9 @@ extern void WXPerformBlockOnBridgeThread(void (^block)(void)); * @param name : service name * @param serviceScript : script code * @param options : service options + * @param completion : completion callback **/ -- (void)registerService:(NSString *)name withService:(NSString *)serviceScript withOptions:(NSDictionary *)options; +- (void)registerService:(NSString *)name withService:(NSString *)serviceScript withOptions:(NSDictionary *)options completion:(void(^)(BOOL result))completion; /** @@ -111,9 +112,9 @@ extern void WXPerformBlockOnBridgeThread(void (^block)(void)); * @param name : service name * @param serviceScriptUrl : script url * @param options : service options + * @param completion : completion callback **/ - --(void)registerService:(NSString *)name withServiceUrl:(NSURL *)serviceScriptUrl withOptions:(NSDictionary *)options; +-(void)registerService:(NSString *)name withServiceUrl:(NSURL *)serviceScriptUrl withOptions:(NSDictionary *)options completion:(void(^)(BOOL result))completion; /** * Unregister JS service Script diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.m b/ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.m index a0e8e4e2a2..f5c7a47e7d 100644 --- a/ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.m +++ b/ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.m @@ -288,28 +288,41 @@ - (JSValue *)callJSMethodWithResult:(WXCallJSMethod *)method return value; } --(void)registerService:(NSString *)name withServiceUrl:(NSURL *)serviceScriptUrl withOptions:(NSDictionary *)options +- (void)registerService:(NSString *)name withServiceUrl:(NSURL *)serviceScriptUrl withOptions:(NSDictionary *)options completion:(void(^)(BOOL result))completion { - if (!name || !serviceScriptUrl || !options) return; + if (!name || !serviceScriptUrl || !options) { + if (completion) { + completion(NO); + } + return; + } __weak typeof(self) weakSelf = self; WXResourceRequest *request = [WXResourceRequest requestWithURL:serviceScriptUrl resourceType:WXResourceTypeServiceBundle referrer:@"" cachePolicy:NSURLRequestUseProtocolCachePolicy]; WXResourceLoader *serviceBundleLoader = [[WXResourceLoader alloc] initWithRequest:request];; serviceBundleLoader.onFinished = ^(WXResourceResponse *response, NSData *data) { __strong typeof(weakSelf) strongSelf = weakSelf; NSString *jsServiceString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; - [strongSelf registerService:name withService:jsServiceString withOptions:options]; + [strongSelf registerService:name withService:jsServiceString withOptions:options completion:completion]; }; serviceBundleLoader.onFailed = ^(NSError *loadError) { WXLogError(@"No script URL found"); + if (completion) { + completion(NO); + } }; [serviceBundleLoader start]; } -- (void)registerService:(NSString *)name withService:(NSString *)serviceScript withOptions:(NSDictionary *)options +- (void)registerService:(NSString *)name withService:(NSString *)serviceScript withOptions:(NSDictionary *)options completion:(void(^)(BOOL result))completion { - if (!name || !serviceScript || !options) return; + if (!name || !serviceScript || !options) { + if (completion) { + completion(NO); + } + return; + } NSString *script = [WXServiceFactory registerServiceScript:name withRawScript:serviceScript withOptions:options]; @@ -318,6 +331,9 @@ - (void)registerService:(NSString *)name withService:(NSString *)serviceScript w // save it when execute [WXDebugTool cacheJsService:name withScript:serviceScript withOptions:options]; [weakSelf.bridgeCtx executeJsService:script withName:name]; + if (completion) { + completion(YES); + } }); } From 8cf3513aea2a67f237d60e2e5aad96f94bfc3679 Mon Sep 17 00:00:00 2001 From: wqyfavor Date: Tue, 20 Nov 2018 13:31:31 +0800 Subject: [PATCH 6/8] [iOS] Forbid adjustment of safeArea by system for cycle slider component. (#1780) --- ios/sdk/WeexSDK/Sources/Component/WXCycleSliderComponent.mm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ios/sdk/WeexSDK/Sources/Component/WXCycleSliderComponent.mm b/ios/sdk/WeexSDK/Sources/Component/WXCycleSliderComponent.mm index 402e592c7a..ab26bc3655 100644 --- a/ios/sdk/WeexSDK/Sources/Component/WXCycleSliderComponent.mm +++ b/ios/sdk/WeexSDK/Sources/Component/WXCycleSliderComponent.mm @@ -73,6 +73,9 @@ - (id)initWithFrame:(CGRect)frame _currentIndex = 0; _itemViews = [[NSMutableArray alloc] init]; _scrollView = [[WXRecycleSliderScrollView alloc] init]; + if (@available(iOS 11.0, *)) { + _scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } _scrollView.backgroundColor = [UIColor clearColor]; _scrollView.delegate = self; _scrollView.showsHorizontalScrollIndicator = NO; From 942f0c561de5098a54c2b2ad54f28094a9133b12 Mon Sep 17 00:00:00 2001 From: wqyfavor Date: Wed, 21 Nov 2018 13:11:22 +0800 Subject: [PATCH 7/8] [iOS] Add methods to retrieve css style values from weexcore c++ object. --- .../Sources/Layout/WXComponent+Layout.h | 72 ++++++++++++++++- .../Sources/Layout/WXComponent+Layout.mm | 80 +++++++++++++++++++ weex_core/Source/core/layout/flex_enum.h | 8 +- weex_core/Source/core/layout/layout.h | 2 +- 4 files changed, 158 insertions(+), 4 deletions(-) diff --git a/ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.h b/ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.h index a33884769c..7a7dc37ff7 100644 --- a/ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.h +++ b/ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.h @@ -26,6 +26,13 @@ #ifdef __cplusplus #include "layout.h" +typedef WeexCore::WXCoreFlexDirection WXCoreFlexDirection; +typedef WeexCore::WXCoreFlexWrap WXCoreFlexWrap; +typedef WeexCore::WXCoreJustifyContent WXCoreJustifyContent; +typedef WeexCore::WXCoreAlignItems WXCoreAlignItems; +typedef WeexCore::WXCoreAlignSelf WXCoreAlignSelf; +typedef WeexCore::WXCorePositionType WXCorePositionType; + extern "C" { #endif bool flexIsUndefined(float value); @@ -33,6 +40,19 @@ extern "C" { } #endif +#ifndef __cplusplus +// Ensure that .m files can use css style enum definitions. +#include "flex_enum.h" + +typedef enum WXCoreFlexDirection WXCoreFlexDirection; +typedef enum WXCoreFlexWrap WXCoreFlexWrap; +typedef enum WXCoreJustifyContent WXCoreJustifyContent; +typedef enum WXCoreAlignItems WXCoreAlignItems; +typedef enum WXCoreAlignSelf WXCoreAlignSelf; +typedef enum WXCorePositionType WXCorePositionType; + +#endif + @interface WXComponent () { @package @@ -51,9 +71,59 @@ extern "C" { * @warning Subclasses must not override this. */ #ifdef __cplusplus -@property(nonatomic, readonly, assign) WeexCore::WXCoreLayoutNode *flexCssNode; +@property (nonatomic, readonly, assign) WeexCore::WXCoreLayoutNode *flexCssNode; #endif +/** + * @abstract Get css style value for key. The key should be of CSS standard form. + * This method is for convenience use in C/ObjC environment. And if you want to + * retrieve all style values or in C++, you could use flexCssNode directly. + * + * Thread usage: + * This method should be invoked in component thread by WXPerformBlockOnComponentThread. + * Note that all initWithRef methods of WXComponent and its subclasses are performed in + * component thread by default. Therefore you can call this method directly in initWithRef. + * + * Supported keys: + * width, height, min-width, min-height, max-width, max-height, + * margin-(left/right/top/bottom) + * padding-(left/right/top/bottom) + * border-(left/right/top/bottom)-width + * left, right, top, bottom + * flex-grow + */ +- (float)getCssStyleValueForKey:(NSString *)key; + +/** + * @abstract Get css style flex-direction. Thread usage the same as getCssStyleValueForKey. + */ +- (WXCoreFlexDirection)getCssStyleFlexDirection; + +/** + * @abstract Get css style flex-wrap. Thread usage the same as getCssStyleValueForKey. + */ +- (WXCoreFlexWrap)getCssStyleFlexWrap; + +/** + * @abstract Get css style justify-content. Thread usage the same as getCssStyleValueForKey. + */ +- (WXCoreJustifyContent)getCssStyleJustifyContent; + +/** + * @abstract Get css style align-items. Thread usage the same as getCssStyleValueForKey. + */ +- (WXCoreAlignItems)getCssStyleAlignItems; + +/** + * @abstract Get css style align-self. Thread usage the same as getCssStyleValueForKey. + */ +- (WXCoreAlignSelf)getCssStyleAlignSelf; + +/** + * @abstract Get css style position. Thread usage the same as getCssStyleValueForKey. + */ +- (WXCorePositionType)getCssStylePositionType; + /** * @abstract Convert layout dimension value like 'left', 'width' to style value in js considering viewport and scale. */ diff --git a/ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.mm b/ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.mm index 18cb24dbb1..8afd225d18 100644 --- a/ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.mm +++ b/ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.mm @@ -366,6 +366,86 @@ - (CGFloat)judgePropValuePropValue:(id)propValue defaultValue:(CGFloat)defaultVa return defaultValue; } +- (float)getCssStyleValueForKey:(NSString *)key +{ + /* + * width, height, min-width, min-height, max-width, max-height, + * margin-(left/right/top/bottom) + * padding-(left/right/top/bottom) + * border-(left/right/top/bottom)-width + * left, right, top, bottom + * flex-grow + */ + WXAssert(_flexCssNode != nullptr, @"Css node is null."); + if (_flexCssNode == nullptr) { + return NAN; + } + + std::string ckey = [key UTF8String]; + if (ckey == "width") return _flexCssNode->getStyleWidth(); + if (ckey == "height") return _flexCssNode->getStyleHeight(); + if (ckey == "min-width") return _flexCssNode->getMinWidth(); + if (ckey == "min-height") return _flexCssNode->getMinHeight(); + if (ckey == "max-width") return _flexCssNode->getMaxWidth(); + if (ckey == "max-height") return _flexCssNode->getMaxHeight(); + if (ckey == "margin-left") return _flexCssNode->getMarginLeft(); + if (ckey == "margin-right") return _flexCssNode->getMarginRight(); + if (ckey == "margin-top") return _flexCssNode->getMarginTop(); + if (ckey == "margin-bottom") return _flexCssNode->getMarginBottom(); + if (ckey == "padding-left") return _flexCssNode->getPaddingLeft(); + if (ckey == "padding-right") return _flexCssNode->getPaddingRight(); + if (ckey == "padding-top") return _flexCssNode->getPaddingTop(); + if (ckey == "padding-bottom") return _flexCssNode->getPaddingBottom(); + if (ckey == "border-left-width") return _flexCssNode->getBorderWidthLeft(); + if (ckey == "border-right-width") return _flexCssNode->getBorderWidthRight(); + if (ckey == "border-top-width") return _flexCssNode->getBorderWidthTop(); + if (ckey == "border-bottom-width") return _flexCssNode->getBorderWidthBottom(); + if (ckey == "left") return _flexCssNode->getStylePositionLeft(); + if (ckey == "right") return _flexCssNode->getStylePositionRight(); + if (ckey == "top") return _flexCssNode->getStylePositionTop(); + if (ckey == "bottom") return _flexCssNode->getStylePositionBottom(); + if (ckey == "flex-grow") return _flexCssNode->getFlex(); + + WXAssert(NO, @"Invalid css style key %@", key); + return NAN; +} + +- (WXCoreFlexDirection)getCssStyleFlexDirection +{ + WXAssert(_flexCssNode != nullptr, @"Css node is null."); + return _flexCssNode ? _flexCssNode->getFlexDirection() : kFlexDirectionColumn; +} + +- (WXCoreFlexWrap)getCssStyleFlexWrap +{ + WXAssert(_flexCssNode != nullptr, @"Css node is null."); + return _flexCssNode ? _flexCssNode->getFlexWrap() : kNoWrap; +} + +- (WXCoreJustifyContent)getCssStyleJustifyContent +{ + WXAssert(_flexCssNode != nullptr, @"Css node is null."); + return _flexCssNode ? _flexCssNode->getJustifyContent() : kJustifyFlexStart; +} + +- (WXCoreAlignItems)getCssStyleAlignItems +{ + WXAssert(_flexCssNode != nullptr, @"Css node is null."); + return _flexCssNode ? _flexCssNode->getAlignItems() : kAlignItemsStretch; +} + +- (WXCoreAlignSelf)getCssStyleAlignSelf +{ + WXAssert(_flexCssNode != nullptr, @"Css node is null."); + return _flexCssNode ? _flexCssNode->getAlignSelf() : kAlignSelfAuto; +} + +- (WXCorePositionType)getCssStylePositionType +{ + WXAssert(_flexCssNode != nullptr, @"Css node is null."); + return _flexCssNode ? _flexCssNode->getStylePositionType() : kRelative; +} + - (NSString*)convertLayoutValueToStyleValue:(NSString*)valueName { if (_flexCssNode == nullptr) { diff --git a/weex_core/Source/core/layout/flex_enum.h b/weex_core/Source/core/layout/flex_enum.h index 9eb3676354..7e439b21ed 100644 --- a/weex_core/Source/core/layout/flex_enum.h +++ b/weex_core/Source/core/layout/flex_enum.h @@ -16,12 +16,14 @@ * specific language governing permissions and limitations * under the License. */ -#ifdef __cplusplus #ifndef WEEXCORE_FLEXLAYOUT_WXCOREFLEXENUM_H #define WEEXCORE_FLEXLAYOUT_WXCOREFLEXENUM_H +/* These enum definitions may also be used by C files. */ +#ifdef __cplusplus namespace WeexCore { +#endif /** * MainAxis direction @@ -120,6 +122,8 @@ namespace WeexCore { kLeft, }; +#ifdef __cplusplus } +#endif + #endif //WEEXCORE_FLEXLAYOUT_WXCOREFLEXENUM_H -#endif \ No newline at end of file diff --git a/weex_core/Source/core/layout/layout.h b/weex_core/Source/core/layout/layout.h index 0d62edd1df..4b8f0c54df 100644 --- a/weex_core/Source/core/layout/layout.h +++ b/weex_core/Source/core/layout/layout.h @@ -836,7 +836,7 @@ namespace WeexCore { } } - inline WXCorePositionType getStypePositionType() const { + inline WXCorePositionType getStylePositionType() const { return mCssStyle->mPositionType; } From 5702b656a1dae32fdfe6a82749a92e9bf58cea3c Mon Sep 17 00:00:00 2001 From: wqyfavor Date: Wed, 21 Nov 2018 16:06:03 +0800 Subject: [PATCH 8/8] [Android] Fix mistype. --- .../wrap/native_render_object_utils_impl_android.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/weex_core/Source/android/wrap/native_render_object_utils_impl_android.cpp b/weex_core/Source/android/wrap/native_render_object_utils_impl_android.cpp index 5565075a01..eb30d90d72 100644 --- a/weex_core/Source/android/wrap/native_render_object_utils_impl_android.cpp +++ b/weex_core/Source/android/wrap/native_render_object_utils_impl_android.cpp @@ -79,7 +79,7 @@ static jlong CopyRenderObject(JNIEnv* env, jclass jcaller, jlong ptr){ static void showRenderObjectLayout(RenderObject *renderObject, int level){ LOGE("RenderObject layout %s %d %p %f %f %f %f ", renderObject->type().c_str(), - renderObject->getStypePositionType(), + renderObject->getStylePositionType(), renderObject, renderObject->getLayoutHeight(), renderObject->getLayoutWidth(), renderObject->getLayoutPositionLeft(), renderObject->getLayoutPositionRight()); @@ -171,11 +171,11 @@ static void RenderObjectChildWaste(JNIEnv* env, jclass jcaller, jboolean waster){ RenderObject* renderObject = convert_long_to_render_object(ptr); if(waster){ - if(renderObject->getStypePositionType() != WXCorePositionType::kFixed){ + if(renderObject->getStylePositionType() != WXCorePositionType::kFixed){ renderObject->setStylePositionType(WXCorePositionType::kFixed); } }else{ - if(renderObject->getStypePositionType() != WXCorePositionType::kRelative){ + if(renderObject->getStylePositionType() != WXCorePositionType::kRelative){ renderObject->setStylePositionType(WXCorePositionType::kRelative); } }