| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| #import "WXScrollerProtocol.h" |
| #import "WXComponent.h" |
| #import "WXConvert.h" |
| #import "WXTransform.h" |
| #import "WXTransition.h" |
| |
| #ifdef __cplusplus |
| #import "WXJSASTParser.h" |
| #include <vector> |
| #endif // __cplusplus |
| |
| @class WXTouchGestureRecognizer; |
| @class WXThreadSafeCounter; |
| |
| typedef id (^WXDataBindingBlock)(NSDictionary *data, BOOL *needUpdate); |
| |
| /** |
| * The following variables and methods are used in Weex INTERNAL logic. |
| * @warning These variables and methods must never be called or overridden. |
| */ |
| @interface WXComponent () |
| { |
| @package |
| NSString *_type; |
| NSMutableArray *_subcomponents; |
| |
| //Transition |
| WXTransition *_transition; |
| |
| /** |
| * View |
| */ |
| UIColor *_styleBackgroundColor; |
| UIColor *_darkSchemeBackgroundColor; |
| UIColor *_lightSchemeBackgroundColor; |
| NSString *_backgroundImage; |
| NSString *_darkSchemeBackgroundImage; |
| NSString *_lightSchemeBackgroundImage; |
| NSString *_clipRadius; |
| WXClipType _clipToBounds; |
| UIView *_view; |
| CGFloat _opacity; |
| WXVisibility _visibility; |
| WXBoxShadow *_originalBoxShadow; |
| WXBoxShadow *_lastBoxShadow; |
| WXBoxShadow *_boxShadow; |
| WXBoxShadow *_darkSchemeBoxShadow; |
| WXBoxShadow *_lightSchemeBoxShadow; |
| |
| /** |
| * accessibility support |
| */ |
| NSString * _roles; //accessibility |
| NSString * _ariaLabel; //accessibilityLabel |
| NSString * _ariaHidden; // accessibilityElementsHidden |
| NSString * _accessible; // accessible |
| NSString * _accessibilityHintContent; // hint for the action |
| NSString * _groupAccessibilityChildren; // voice-over navigation order |
| NSString * _testId;// just for auto-test |
| |
| BOOL _userInteractionEnabled; |
| BOOL _eventPenetrationEnabled; |
| BOOL _accessibilityMagicTapEvent; |
| |
| /** |
| * PseudoClass |
| */ |
| NSMutableDictionary *_pseudoClassStyles; |
| NSMutableDictionary *_updatedPseudoClassStyles; |
| BOOL _isListenPseudoTouch; |
| |
| /** |
| * Events |
| */ |
| BOOL _appearEvent; |
| BOOL _disappearEvent; |
| UITapGestureRecognizer *_tapGesture; |
| NSMutableArray *_swipeGestures; |
| UILongPressGestureRecognizer *_longPressGesture; |
| UIPanGestureRecognizer *_panGesture; |
| |
| BOOL _cancelsTouchesInView; |
| |
| BOOL _listenPanStart; |
| BOOL _listenPanMove; |
| BOOL _listenPanEnd; |
| |
| BOOL _listenHorizontalPan; |
| BOOL _listenVerticalPan; |
| |
| BOOL _listenStopPropagation; |
| BOOL _customEvent; |
| NSString *_stopPropagationName; |
| WXTouchGestureRecognizer* _touchGesture; |
| |
| /** |
| * Display |
| */ |
| CALayer *_layer; |
| BOOL _useCompositing; |
| BOOL _isCompositingChild; |
| WXThreadSafeCounter *_displayCounter; |
| |
| UIColor *_borderTopColor; |
| UIColor *_darkSchemeBorderTopColor; |
| UIColor *_lightSchemeBorderTopColor; |
| UIColor *_borderRightColor; |
| UIColor *_darkSchemeBorderRightColor; |
| UIColor *_lightSchemeBorderRightColor; |
| UIColor *_borderLeftColor; |
| UIColor *_darkSchemeBorderLeftColor; |
| UIColor *_lightSchemeBorderLeftColor; |
| UIColor *_borderBottomColor; |
| UIColor *_darkSchemeBorderBottomColor; |
| UIColor *_lightSchemeBorderBottomColor; |
| |
| CGFloat _borderTopWidth; |
| CGFloat _borderRightWidth; |
| CGFloat _borderLeftWidth; |
| CGFloat _borderBottomWidth; |
| |
| CGFloat _borderTopLeftRadius; |
| CGFloat _borderTopRightRadius; |
| CGFloat _borderBottomLeftRadius; |
| CGFloat _borderBottomRightRadius; |
| |
| WXBorderStyle _borderTopStyle; |
| WXBorderStyle _borderRightStyle; |
| WXBorderStyle _borderBottomStyle; |
| WXBorderStyle _borderLeftStyle; |
| |
| NSInteger _lastBorderRecords; // Records last border drawing |
| |
| BOOL _isViewTreeIgnored; // Component is added to super, but it is not added to views. |
| BOOL _isFixed; |
| BOOL _async; |
| BOOL _lazyCreateView; |
| |
| WXTransform *_transform; |
| |
| /** |
| * Data Binding |
| */ |
| BOOL _isTemplate; |
| WXComponent *_templateComponent; |
| WXDataBindingBlock _bindingMatch; |
| WXDataBindingBlock _bindingRepeat; |
| NSString *_repeatIndexIdentify; |
| NSString *_repeatLabelIdentify; |
| NSString *_virtualComponentId;// for recycleList subcomponent |
| NSMutableDictionary *_virtualElementInfo; |
| |
| BOOL _isRepeating; |
| BOOL _isSkipUpdate; |
| BOOL _dataBindOnce; |
| |
| NSMutableDictionary<NSString *, WXDataBindingBlock> *_bindingProps; |
| NSMutableDictionary<NSString *, WXDataBindingBlock> *_bindingAttributes; |
| NSMutableDictionary<NSString *, WXDataBindingBlock> *_bindingStyles; |
| NSMutableDictionary<NSString *, WXDataBindingBlock> *_bindingEvents; |
| #ifdef __cplusplus |
| std::vector<WXJSExpression *> *_bindingExpressions; |
| #endif // __cplusplus |
| |
| NSMutableDictionary<NSString *, NSArray *> *_eventParameters; |
| } |
| |
| /* DO NOT use "_transform = XXX" directly. |
| Ivar access in ObjC is compiled to code with additional release or retain. So use Ivar in mutiple |
| thread may lead to crash. Use an ATOMIC property is well enough. */ |
| @property (atomic, strong) WXTransform *transform; |
| |
| /** |
| DO NOT use "_backgroundColor" directly. The same reason as '_transform'. |
| */ |
| @property (atomic, strong) UIColor* styleBackgroundColor; |
| @property (atomic, strong) UIColor* darkSchemeBackgroundColor; |
| @property (atomic, strong) UIColor* lightSchemeBackgroundColor; |
| |
| ///-------------------------------------- |
| /// @name Package Internal Methods |
| ///-------------------------------------- |
| |
| - (void)_layoutDidFinish; |
| |
| - (void)_layoutPlatform; |
| |
| - (void)_willDisplayLayer:(CALayer *)layer; |
| |
| - (void)_unloadViewWithReusing:(BOOL)isReusing; |
| |
| - (id<WXScrollerProtocol>)ancestorScroller; |
| |
| // return if the component is actually inserted |
| - (BOOL)_insertSubcomponent:(WXComponent *)subcomponent atIndex:(NSInteger)index; |
| |
| - (void)_removeFromSupercomponent; |
| - (void)_removeFromSupercomponent:(BOOL)remove; |
| - (void)_moveToSupercomponent:(WXComponent *)newSupercomponent atIndex:(NSUInteger)index; |
| |
| - (BOOL)_isTransitionNone; |
| - (BOOL)_hasTransitionPropertyInStyles:(NSDictionary *)styles; |
| - (void)_updateStylesOnComponentThread:(NSDictionary *)styles resetStyles:(NSMutableArray *)resetStyles isUpdateStyles:(BOOL)isUpdateStyles; |
| - (void)_updateAttributesOnComponentThread:(NSDictionary *)attributes; |
| - (void)_updateStylesOnMainThread:(NSDictionary *)styles resetStyles:(NSMutableArray *)resetStyles; |
| - (void)_updateAttributesOnMainThread:(NSDictionary *)attributes; |
| |
| - (void)_addEventOnComponentThread:(NSString *)eventName; |
| - (void)_removeEventOnComponentThread:(NSString *)eventName; |
| - (void)_addEventOnMainThread:(NSString *)eventName; |
| - (void)_removeEventOnMainThread:(NSString *)eventName; |
| |
| - (void)_collectSubcomponents:(NSMutableArray *)components; |
| |
| ///-------------------------------------- |
| /// @name Protected Methods |
| ///-------------------------------------- |
| |
| - (BOOL)_needsDrawBorder; |
| |
| - (void)_drawBorderWithContext:(CGContextRef)context size:(CGSize)size; |
| |
| - (void)_frameDidCalculated:(BOOL)isChanged; |
| |
| ///-------------------------------------- |
| /// @name Private Methods |
| ///-------------------------------------- |
| |
| - (void)_setRenderObject:(void *)object; |
| |
| - (BOOL)_isCalculatedFrameChanged:(CGRect)frame; |
| |
| - (CGFloat)_getInnerContentMainSize; |
| |
| - (void)_assignInnerContentMainSize:(CGFloat)value; |
| |
| - (void)_assignCalculatedFrame:(CGRect)frame; |
| |
| - (void)_modifyStyles:(NSDictionary *)styles; |
| |
| - (void)_transitionUpdateViewProperty:(NSDictionary *)styles; |
| |
| - (void)_updateCSSNodeStyles:(NSDictionary *)styles; |
| |
| - (void)_resetCSSNodeStyles:(NSArray *)styles; |
| |
| - (void)_handleBorders:(NSDictionary *)styles isUpdating:(BOOL)updating; |
| |
| - (void)_initViewPropertyWithStyles:(NSDictionary *)styles; |
| |
| - (void)_updateViewStyles:(NSDictionary *)styles; |
| |
| - (void)_resetStyles:(NSArray *)styles; |
| |
| - (void)_initEvents:(NSArray *)events; |
| |
| - (void)_initPseudoEvents:(BOOL)isListenPseudoTouch; |
| |
| - (void)_removeAllEvents; |
| |
| - (void)_addEventParams:(NSDictionary *)params; |
| |
| - (NSArray *)_paramsForEvent:(NSString *)eventName; |
| |
| - (void)_setupNavBarWithStyles:(NSMutableDictionary *)styles attributes:(NSMutableDictionary *)attributes; |
| |
| - (void)_initCompositingAttribute:(NSDictionary *)attributes; |
| |
| - (BOOL)_bitmapOpaqueWithSize:(CGSize)size; |
| |
| - (void)_updateNavBarAttributes:(NSDictionary *)attributes; |
| |
| - (void)_handleFirstScreenTime; |
| |
| - (void)_resetNativeBorderRadius; |
| |
| - (void)_updatePseudoClassStyles:(NSString *)key; |
| |
| - (void)_restoreViewStyles; |
| |
| - (void)_configWXComponentA11yWithAttributes:(NSDictionary *)attributes; |
| |
| - (void)setGradientLayer; |
| |
| - (void)_storeBindingsWithProps:(NSDictionary *)props styles:(NSDictionary *)styles attributes:(NSDictionary *)attributes events:(NSDictionary *)events; |
| |
| - (void)_didInserted; |
| |
| - (void)attachSlotEvent:(NSDictionary *)data; |
| |
| - (void)detachSlotEvent:(NSDictionary *)data; |
| |
| - (void)_buildViewHierarchyLazily; |
| |
| - (void)_setIsLayoutRTL:(BOOL)isRTL; |
| |
| - (void)_adjustForRTL; |
| |
| - (BOOL)_isAffineTypeAs:(NSString *)type; |
| |
| - (WXBoxShadow*)_chooseBoxShadow; |
| |
| @end |