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.
311 lines
8.6 KiB
311 lines
8.6 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.
|
||
|
*/
|
||
|
#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
|