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.
310 lines
8.6 KiB
310 lines
8.6 KiB
/** |
|
* 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. |
|
*/ |
|
#ifdef __cplusplus |
|
|
|
#ifndef WEEXCORE_FLEXLAYOUT_WXCOREFLEXENUMS_H |
|
#define WEEXCORE_FLEXLAYOUT_WXCOREFLEXENUMS_H |
|
|
|
|
|
#include "flex_enum.h" |
|
#include <math.h> |
|
#include <cmath> |
|
|
|
namespace WeexCore { |
|
|
|
/** |
|
* Margin: margin-left、margin-right、margin-top、margin-bottom |
|
*/ |
|
class WXCoreMargin { |
|
private: |
|
float mMarginTop; |
|
float mMarginBottom; |
|
float mMarginLeft; |
|
float mMarginRight; |
|
|
|
public: |
|
WXCoreMargin() : mMarginTop(0), |
|
mMarginBottom(0), |
|
mMarginLeft(0), |
|
mMarginRight(0) {} |
|
|
|
~WXCoreMargin() { |
|
mMarginTop = 0; |
|
mMarginBottom = 0; |
|
mMarginLeft = 0; |
|
mMarginRight = 0; |
|
} |
|
|
|
bool setMargin(const WXCoreMarginEdge &edge, float margin); |
|
|
|
float getMargin(const WXCoreMarginEdge &edge)const; |
|
}; |
|
|
|
|
|
/** |
|
* Padding:padding-left、padding-right、padding-top、padding-bottom |
|
*/ |
|
class WXCorePadding { |
|
private: |
|
float mPaddingTop; |
|
float mPaddingBottom; |
|
float mPaddingLeft; |
|
float mPaddingRight; |
|
|
|
public: |
|
WXCorePadding() : mPaddingTop(0), |
|
mPaddingBottom(0), |
|
mPaddingLeft(0), |
|
mPaddingRight(0) {} |
|
|
|
~WXCorePadding() { |
|
mPaddingTop = 0; |
|
mPaddingBottom = 0; |
|
mPaddingLeft = 0; |
|
mPaddingRight = 0; |
|
} |
|
|
|
bool setPadding(const WXCorePaddingEdge &edge, float padding); |
|
|
|
float getPadding(const WXCorePaddingEdge &edge)const; |
|
}; |
|
|
|
|
|
/** |
|
* BorderWidth:borderwidth-left、borderwidth-right、borderwidth-top、borderwidth-bottom |
|
*/ |
|
class WXCoreBorderWidth { |
|
private: |
|
float mBorderWidthTop; |
|
float mBorderWidthBottom; |
|
float mBorderWidthLeft; |
|
float mBorderWidthRight; |
|
|
|
public: |
|
WXCoreBorderWidth() : mBorderWidthTop(0), |
|
mBorderWidthBottom(0), |
|
mBorderWidthLeft(0), |
|
mBorderWidthRight(0) {} |
|
|
|
~WXCoreBorderWidth() { |
|
mBorderWidthTop = 0; |
|
mBorderWidthBottom = 0; |
|
mBorderWidthLeft = 0; |
|
mBorderWidthRight = 0; |
|
} |
|
|
|
bool setBorderWidth(const WXCoreBorderWidthEdge &edge, float borderWidth); |
|
|
|
float getBorderWidth(const WXCoreBorderWidthEdge &edge)const; |
|
}; |
|
|
|
|
|
/** |
|
* position:left、right、top、bottom |
|
*/ |
|
class WXCorePosition { |
|
private: |
|
float mTop; |
|
float mBottom; |
|
float mLeft; |
|
float mRight; |
|
|
|
public: |
|
WXCorePosition() : mTop(NAN), |
|
mBottom(NAN), |
|
mLeft(NAN), |
|
mRight(NAN) {} |
|
|
|
~WXCorePosition() { |
|
reset(); |
|
} |
|
|
|
inline bool isNAN() { |
|
return isnan(mTop) || isnan(mBottom) || isnan(mLeft) || isnan(mRight); |
|
} |
|
|
|
inline void reset() { |
|
mTop = 0; |
|
mBottom = 0; |
|
mLeft = 0; |
|
mRight = 0; |
|
} |
|
|
|
bool setPosition(const WXCorePositionEdge &edge, float position); |
|
|
|
float getPosition(const WXCorePositionEdge &edge); |
|
}; |
|
|
|
enum DimensionLevel{ |
|
CSS_STYLE = 1, |
|
INSTANCE_STYLE = 2, |
|
FALLBACK_STYLE = 3 |
|
}; |
|
|
|
/** |
|
* css-style |
|
*/ |
|
class WXCoreCSSStyle { |
|
public: |
|
/** |
|
* The direction children items are placed inside the Flexbox layout, it determines the |
|
* direction of the main axis (and the cross axis, perpendicular to the main axis). |
|
* The default value is {@link WXCoreFlexDirection #WXCore_Flex_Direction_Row}. |
|
*/ |
|
WXCoreFlexDirection mFlexDirection; |
|
|
|
/** |
|
* This attribute controls whether the flex container is single-line or multi-line, and the |
|
* direction of the cross axis. |
|
* <ul> |
|
* <li>{@link WXCoreFlexWrap}: The flex container is single-line.</li> |
|
* <li>{@link WXCoreFlexWrap}: The flex container is multi-line.</li> |
|
* <li>{@link WXCoreFlexWrap}: The flex container is multi-line. The direction of the |
|
* cross axis is opposed to the direction as the {@link WXCoreFlexWrap}</li> |
|
* </ul> |
|
* The default value is {@link WXCoreFlexWrap #WXCore_Wrap_NoWrap}. |
|
*/ |
|
WXCoreFlexWrap mFlexWrap; |
|
|
|
/** |
|
* This attribute controls the alignment along the main axis. |
|
* The default value is {@link WXCoreJustifyContent #WXCore_Justify_Flex_Start}. |
|
*/ |
|
WXCoreJustifyContent mJustifyContent; |
|
|
|
/** |
|
* This attribute controls the alignment along the cross axis. |
|
* The default value is {@link WXCoreAlignItems #WXCore_AlignItems_Stretch}. |
|
*/ |
|
WXCoreAlignItems mAlignItems; |
|
|
|
/** |
|
* This attribute controls the alignment along the cross axis. |
|
* The default value is {@link WXCoreAlignSelf #WXCore_AlignSelf_Auto}. |
|
*/ |
|
WXCoreAlignSelf mAlignSelf; |
|
|
|
WXCorePositionType mPositionType; |
|
|
|
WXCoreDirection mDirection; |
|
|
|
float mFlexGrow; |
|
|
|
float mMinWidth; |
|
|
|
float mMinHeight; |
|
|
|
float mMaxWidth; |
|
|
|
float mMaxHeight; |
|
|
|
float mStyleWidth; |
|
|
|
float mStyleHeight; |
|
|
|
DimensionLevel mStyleWidthLevel; |
|
|
|
DimensionLevel mStyleHeightLevel; |
|
|
|
WXCoreMargin mMargin; |
|
|
|
WXCorePadding mPadding; |
|
|
|
WXCoreBorderWidth mBorderWidth; |
|
|
|
WXCorePosition mStylePosition; |
|
|
|
constexpr static float kFlexGrowDefault = 0; |
|
|
|
constexpr static WXCoreDirection kDirectionDefault = kDirectionLTR; |
|
|
|
constexpr static WXCoreFlexDirection kFlexDirectionDefault= kFlexDirectionColumn; |
|
|
|
constexpr static WXCoreFlexWrap kFlexWrapDefault = kNoWrap; |
|
|
|
constexpr static WXCoreJustifyContent kFlexJustifyContentDefault = kJustifyFlexStart; |
|
|
|
constexpr static WXCoreAlignItems kFlexAlignItemsDefault = kAlignItemsStretch; |
|
|
|
constexpr static WXCoreAlignSelf kFlexAlignSelfDefault = kAlignSelfAuto; |
|
|
|
constexpr static WXCorePositionType kWXCorePositionTypeDefault = kRelative; |
|
|
|
WXCoreCSSStyle() : mDirection(kDirectionInherit), |
|
mFlexDirection(kFlexDirectionDefault), |
|
mFlexWrap(kFlexWrapDefault), |
|
mJustifyContent(kFlexJustifyContentDefault), |
|
mAlignItems(kFlexAlignItemsDefault), |
|
mAlignSelf(kFlexAlignSelfDefault), |
|
mFlexGrow(kFlexGrowDefault), |
|
mPositionType(kWXCorePositionTypeDefault), |
|
mStyleWidth(NAN), mStyleHeight(NAN), |
|
mStyleHeightLevel(FALLBACK_STYLE), mStyleWidthLevel(FALLBACK_STYLE), |
|
mMaxWidth(NAN), mMaxHeight(NAN), |
|
mMinWidth(NAN), mMinHeight(NAN) { |
|
|
|
} |
|
|
|
~WXCoreCSSStyle() { |
|
mDirection = kDirectionInherit; |
|
mFlexDirection = kFlexDirectionDefault; |
|
mFlexWrap = kFlexWrapDefault; |
|
mJustifyContent = kFlexJustifyContentDefault; |
|
mAlignItems = kFlexAlignItemsDefault; |
|
mAlignSelf = kFlexAlignSelfDefault; |
|
mFlexGrow = kFlexGrowDefault; |
|
mStyleWidth = NAN; |
|
mStyleHeight = NAN; |
|
mStyleWidthLevel = FALLBACK_STYLE; |
|
mStyleHeightLevel = FALLBACK_STYLE; |
|
mMaxWidth = NAN; |
|
mMaxHeight = NAN; |
|
mMinWidth = NAN; |
|
mMinHeight = NAN; |
|
} |
|
|
|
inline float sumPaddingBorderOfEdge(const WXCoreEdge edge){ |
|
switch (edge) { |
|
case kTop: |
|
return mPadding.getPadding(kPaddingTop) |
|
+ mBorderWidth.getBorderWidth(kBorderWidthTop); |
|
case kRight: |
|
return mPadding.getPadding(kPaddingRight) |
|
+ mBorderWidth.getBorderWidth(kBorderWidthRight); |
|
case kBottom: |
|
return mPadding.getPadding(kPaddingBottom) |
|
+ mBorderWidth.getBorderWidth(kBorderWidthBottom); |
|
case kLeft: |
|
return mPadding.getPadding(kPaddingLeft) |
|
+ mBorderWidth.getBorderWidth(kBorderWidthLeft); |
|
} |
|
} |
|
|
|
float sumMarginOfDirection(bool horizontal){ |
|
if(horizontal){ |
|
return mMargin.getMargin(kMarginLeft) + mMargin.getMargin(kMarginRight); |
|
} |
|
else{ |
|
return mMargin.getMargin(kMarginTop) + mMargin.getMargin(kMarginBottom); |
|
} |
|
} |
|
}; |
|
} |
|
#endif //WEEXCORE_FLEXLAYOUT_WXCOREFLEXENUMS_H |
|
#endif
|
|
|