You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
163 lines
5.0 KiB
163 lines
5.0 KiB
4 years ago
|
/*
|
||
|
* 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 "WXComponent.h"
|
||
|
#import "WXSDKInstance.h"
|
||
|
#import "WXUtility.h"
|
||
|
|
||
|
#define FlexUndefined NAN
|
||
|
|
||
|
#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;
|
||
|
typedef WeexCore::WXCoreDirection WXCoreDirection;
|
||
|
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
bool flexIsUndefined(float value);
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#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;
|
||
|
typedef enum WXCoreDirection WXCoreDirection;
|
||
|
|
||
|
#endif
|
||
|
|
||
|
@interface WXComponent ()
|
||
|
{
|
||
|
@package
|
||
|
#ifdef __cplusplus
|
||
|
WeexCore::WXCoreLayoutNode *_flexCssNode;
|
||
|
#endif // __cplusplus
|
||
|
|
||
|
CGRect _calculatedFrame;
|
||
|
CGPoint _absolutePosition;
|
||
|
WXPositionType _positionType;
|
||
|
BOOL _isLastLayoutDirectionRTL;
|
||
|
BOOL _isLayoutDirectionRTL;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @abstract Return the css node used to layout.
|
||
|
*
|
||
|
* @warning Subclasses must not override this.
|
||
|
*/
|
||
|
#ifdef __cplusplus
|
||
|
@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 Get css layout direction. Thread usage the same as getCssStyleValueForKey.
|
||
|
*/
|
||
|
- (WXCoreDirection)getCssDirection;
|
||
|
|
||
|
/**
|
||
|
* @abstract Convert layout dimension value like 'left', 'width' to style value in js considering viewport and scale.
|
||
|
*/
|
||
|
- (NSString*)convertLayoutValueToStyleValue:(NSString*)valueName;
|
||
|
|
||
|
/**
|
||
|
* @abstract Get style width of a container(scroller like) with safe value. No NAN, No zero.
|
||
|
*/
|
||
|
- (CGFloat)safeContainerStyleWidth;
|
||
|
|
||
|
/**
|
||
|
* @abstract Delete css node of a subcomponent.
|
||
|
*/
|
||
|
- (void)removeSubcomponentCssNode:(WXComponent *)subcomponent;
|
||
|
|
||
|
#pragma mark - RTL
|
||
|
|
||
|
@property (nonatomic, assign, readonly) BOOL isDirectionRTL;
|
||
|
|
||
|
// Now we scrollView RTL solution is tranform
|
||
|
// so scrollView need tranform subviews when RTL by default
|
||
|
// if your component view is not scrollView but also implement RTL layout by tranform,you need return YES
|
||
|
- (BOOL)shouldTransformSubviewsWhenRTL;
|
||
|
|
||
|
- (void)layoutDirectionDidChanged:(BOOL)isRTL;
|
||
|
|
||
|
@end
|