mirror of
https://github.com/Tencent/Hippy.git
synced 2026-10-28 05:07:51 +08:00
* feat(voltron): format voltron code * feat(voltron): fix voltron flutter analyze
467 lines
9.7 KiB
Dart
467 lines
9.7 KiB
Dart
//
|
|
// Tencent is pleased to support the open source community by making
|
|
// Hippy available.
|
|
//
|
|
// Copyright (C) 2022 THL A29 Limited, a Tencent company.
|
|
// All rights reserved.
|
|
//
|
|
// Licensed 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 'flex_define.dart';
|
|
import 'flex_node_style.dart';
|
|
|
|
typedef FlexMeasureFunc = int Function(FlexNodeAPI node, double width, FlexMeasureMode widthMode,
|
|
double height, FlexMeasureMode heightMode);
|
|
|
|
abstract class FlexNodeAPI<T> {
|
|
FlexNodeAPI();
|
|
|
|
FlexDirection get styleDirection;
|
|
|
|
set styleDirection(FlexDirection direction);
|
|
|
|
FlexCSSDirection get styleCssDirection;
|
|
|
|
set styleCssDirection(FlexCSSDirection flexDirection);
|
|
|
|
FlexJustify get justifyContent;
|
|
|
|
set justifyContent(FlexJustify justifyContent);
|
|
|
|
FlexAlign get alignItems;
|
|
|
|
set alignItems(FlexAlign alignItems);
|
|
|
|
FlexAlign get alignSelf;
|
|
|
|
set alignSelf(FlexAlign alignSelf);
|
|
|
|
FlexAlign get alignContent;
|
|
|
|
set alignContent(FlexAlign alignContent);
|
|
|
|
FlexPositionType get positionType;
|
|
|
|
set positionType(FlexPositionType positionType);
|
|
|
|
double get styleWidth;
|
|
|
|
set styleWidth(double width);
|
|
|
|
double get styleHeight;
|
|
|
|
set styleHeight(double height);
|
|
|
|
double get styleMaxWidth;
|
|
|
|
set styleMaxWidth(double maxWidth);
|
|
|
|
double get styleMinWidth;
|
|
|
|
set styleMinWidth(double minWidth);
|
|
|
|
double get styleMaxHeight;
|
|
|
|
set styleMaxHeight(double maxHeight);
|
|
|
|
double get styleMinHeight;
|
|
|
|
set styleMinHeight(double minHeight);
|
|
|
|
set wrap(FlexWrap flexWrap);
|
|
|
|
FlexWrap get wrap;
|
|
|
|
set flex(double flex);
|
|
|
|
double get flex;
|
|
|
|
set display(FlexDisplay display);
|
|
|
|
FlexDisplay get display;
|
|
|
|
double get flexGrow;
|
|
|
|
set flexGrow(double flexGrow);
|
|
|
|
double get flexShrink;
|
|
|
|
set flexShrink(double flexShrink);
|
|
|
|
double get flexBasis;
|
|
|
|
set flexBasis(double flexBasis);
|
|
|
|
double getMargin(FlexStyleEdge spacingType);
|
|
|
|
void setMargin(FlexStyleEdge spacingType, double margin);
|
|
|
|
double getPadding(FlexStyleEdge spacingType);
|
|
|
|
void setPadding(FlexStyleEdge spacingType, double padding);
|
|
|
|
double getBorder(FlexStyleEdge spacingType);
|
|
|
|
void setBorder(FlexStyleEdge spacingType, double border);
|
|
|
|
double getPosition(FlexStyleEdge spacingType);
|
|
|
|
void setPosition(FlexStyleEdge spacingType, double position);
|
|
|
|
double get layoutX;
|
|
|
|
double get layoutY;
|
|
|
|
double get layoutWidth;
|
|
|
|
double get layoutHeight;
|
|
|
|
FlexOverflow get overflow;
|
|
|
|
set overflow(FlexOverflow overflow);
|
|
|
|
set data(Object data);
|
|
|
|
Object get data;
|
|
|
|
void reset();
|
|
}
|
|
|
|
class FlexNode extends FlexNodeAPI<FlexNode> {
|
|
late FlexNodeStyle _flexNodeStyle;
|
|
|
|
static const int kMarginIndex = 1;
|
|
static const int kPaddingIndex = 2;
|
|
static const int kBorderIndex = 4;
|
|
|
|
double _width = double.nan;
|
|
double _height = double.nan;
|
|
double _top = double.nan;
|
|
double _left = double.nan;
|
|
|
|
dynamic _data;
|
|
|
|
int get id => 0;
|
|
|
|
FlexNode() {
|
|
_flexNodeStyle = FlexNodeStyle();
|
|
reset();
|
|
}
|
|
|
|
@override
|
|
double getBorder(FlexStyleEdge spacingType) {
|
|
return _flexNodeStyle.getBorder(spacingType).value;
|
|
}
|
|
|
|
// ignore: always_declare_return_types, type_annotate_public_apis
|
|
@override
|
|
Object get data => _data;
|
|
|
|
@override
|
|
set data(dynamic data) => {_data = data};
|
|
|
|
@override
|
|
double get flexBasis => style.flexBasis;
|
|
|
|
@override
|
|
set flexBasis(double flexBasis) => {style.flexBasis = flexBasis};
|
|
|
|
FlexNodeStyle get style => _flexNodeStyle;
|
|
|
|
@override
|
|
void reset() {
|
|
styleDirection = FlexDirection.ltr;
|
|
styleCssDirection = FlexCSSDirection.column;
|
|
justifyContent = FlexJustify.flexStart;
|
|
alignContent = FlexAlign.flexStart;
|
|
alignItems = FlexAlign.stretch;
|
|
alignSelf = FlexAlign.auto;
|
|
positionType = FlexPositionType.relative;
|
|
wrap = FlexWrap.noWrap;
|
|
overflow = FlexOverflow.visible;
|
|
flexGrow = 0;
|
|
flexShrink = 0;
|
|
flexBasis = undefined;
|
|
|
|
_width = double.nan;
|
|
_height = double.nan;
|
|
_top = double.nan;
|
|
_left = double.nan;
|
|
}
|
|
|
|
String resultToString() {
|
|
return "layout: {${"left: $layoutX"}, ${"top: $layoutY"}, ${"width: $layoutWidth"}, ${"height: $layoutHeight"}, }";
|
|
}
|
|
|
|
@override
|
|
String toString() {
|
|
var sb = StringBuffer();
|
|
toStringWithIndentation(sb, 0);
|
|
return sb.toString();
|
|
}
|
|
|
|
void toStringWithIndentation(StringBuffer result, int level) {
|
|
var indentation = StringBuffer();
|
|
for (var i = 0; i < level; ++i) {
|
|
indentation.write("__");
|
|
}
|
|
|
|
result.write(indentation.toString());
|
|
result.write(_flexNodeStyle.toString());
|
|
result.write(resultToString());
|
|
|
|
result.write("$indentation]");
|
|
}
|
|
|
|
@override
|
|
FlexDirection get styleDirection {
|
|
return _flexNodeStyle.direction;
|
|
}
|
|
|
|
@override
|
|
set styleDirection(FlexDirection direction) {
|
|
_flexNodeStyle.direction = direction;
|
|
}
|
|
|
|
@override
|
|
FlexCSSDirection get styleCssDirection {
|
|
return _flexNodeStyle.flexCSSDirection;
|
|
}
|
|
|
|
@override
|
|
set styleCssDirection(FlexCSSDirection flexDirection) {
|
|
_flexNodeStyle.flexCSSDirection = flexDirection;
|
|
}
|
|
|
|
@override
|
|
FlexJustify get justifyContent {
|
|
return _flexNodeStyle.justifyContent;
|
|
}
|
|
|
|
@override
|
|
set justifyContent(FlexJustify justifyContent) {
|
|
_flexNodeStyle.justifyContent = justifyContent;
|
|
}
|
|
|
|
@override
|
|
FlexAlign get alignItems {
|
|
return _flexNodeStyle.alignItems;
|
|
}
|
|
|
|
@override
|
|
set alignItems(FlexAlign alignItems) {
|
|
_flexNodeStyle.alignItems = alignItems;
|
|
}
|
|
|
|
@override
|
|
FlexAlign get alignSelf {
|
|
return _flexNodeStyle.alignSelf;
|
|
}
|
|
|
|
@override
|
|
set alignSelf(FlexAlign alignSelf) {
|
|
_flexNodeStyle.alignSelf = alignSelf;
|
|
}
|
|
|
|
@override
|
|
FlexAlign get alignContent {
|
|
return _flexNodeStyle.alignContent;
|
|
}
|
|
|
|
@override
|
|
set alignContent(FlexAlign alignContent) {
|
|
_flexNodeStyle.alignContent = alignContent;
|
|
}
|
|
|
|
@override
|
|
FlexPositionType get positionType {
|
|
return _flexNodeStyle.positionType;
|
|
}
|
|
|
|
@override
|
|
set positionType(FlexPositionType positionType) {
|
|
_flexNodeStyle.positionType = positionType;
|
|
}
|
|
|
|
@override
|
|
double get styleWidth {
|
|
return _flexNodeStyle.width;
|
|
}
|
|
|
|
@override
|
|
set styleWidth(double width) {
|
|
_flexNodeStyle.width = width;
|
|
}
|
|
|
|
@override
|
|
double get styleHeight {
|
|
return _flexNodeStyle.height;
|
|
}
|
|
|
|
@override
|
|
set styleHeight(double height) {
|
|
_flexNodeStyle.height = height;
|
|
}
|
|
|
|
@override
|
|
double get styleMaxWidth {
|
|
return _flexNodeStyle.maxWidth;
|
|
}
|
|
|
|
@override
|
|
set styleMaxWidth(double maxWidth) {
|
|
_flexNodeStyle.maxWidth = maxWidth;
|
|
}
|
|
|
|
@override
|
|
double get styleMinWidth {
|
|
return _flexNodeStyle.minWidth;
|
|
}
|
|
|
|
@override
|
|
set styleMinWidth(double minWidth) {
|
|
_flexNodeStyle.minWidth = minWidth;
|
|
}
|
|
|
|
@override
|
|
double get styleMaxHeight {
|
|
return _flexNodeStyle.maxHeight;
|
|
}
|
|
|
|
@override
|
|
set styleMaxHeight(double maxHeight) {
|
|
_flexNodeStyle.maxHeight = maxHeight;
|
|
}
|
|
|
|
@override
|
|
set styleMinHeight(double minHeight) {
|
|
_flexNodeStyle.minHeight = minHeight;
|
|
}
|
|
|
|
@override
|
|
double get styleMinHeight {
|
|
return _flexNodeStyle.minHeight;
|
|
}
|
|
|
|
@override
|
|
set wrap(FlexWrap flexWrap) {
|
|
_flexNodeStyle.flexWrap = flexWrap;
|
|
}
|
|
|
|
@override
|
|
FlexWrap get wrap => _flexNodeStyle.flexWrap;
|
|
|
|
@override
|
|
set flex(double flex) {
|
|
_flexNodeStyle.flex = flex;
|
|
}
|
|
|
|
@override
|
|
double get flex => _flexNodeStyle.flex;
|
|
|
|
@override
|
|
set display(FlexDisplay display) {
|
|
_flexNodeStyle.display = display;
|
|
}
|
|
|
|
FlexDisplay get display => _flexNodeStyle.display;
|
|
|
|
@override
|
|
double get flexGrow {
|
|
return _flexNodeStyle.flexGrow;
|
|
}
|
|
|
|
@override
|
|
set flexGrow(double flexGrow) {
|
|
_flexNodeStyle.flexGrow = flexGrow;
|
|
}
|
|
|
|
@override
|
|
double get flexShrink {
|
|
return _flexNodeStyle.flexShrink;
|
|
}
|
|
|
|
@override
|
|
set flexShrink(double flexShrink) {
|
|
_flexNodeStyle.flexShrink = flexShrink;
|
|
}
|
|
|
|
@override
|
|
double getMargin(FlexStyleEdge spacingType) {
|
|
return _flexNodeStyle.getMargin(spacingType).value;
|
|
}
|
|
|
|
@override
|
|
void setMargin(FlexStyleEdge spacingType, double margin) {
|
|
// 注意,设置宽高margin不直接改变flex node的属性值,在native层cssLayout后属性值由底层传上来设置
|
|
_flexNodeStyle.setMargin(spacingType, margin);
|
|
}
|
|
|
|
@override
|
|
double getPadding(FlexStyleEdge spacingType) {
|
|
return _flexNodeStyle.getPadding(spacingType).value;
|
|
}
|
|
|
|
@override
|
|
void setPadding(FlexStyleEdge spacingType, double padding) {
|
|
// 注意,设置宽高padding不直接改变flex node的属性值,在native层cssLayout后属性值由底层传上来设置
|
|
_flexNodeStyle.setPadding(spacingType, padding);
|
|
}
|
|
|
|
@override
|
|
void setBorder(FlexStyleEdge spacingType, double border) {
|
|
_flexNodeStyle.setBorder(spacingType, border);
|
|
}
|
|
|
|
@override
|
|
double getPosition(FlexStyleEdge spacingType) {
|
|
return _flexNodeStyle.getPosition(spacingType).value;
|
|
}
|
|
|
|
@override
|
|
void setPosition(FlexStyleEdge spacingType, double position) {
|
|
_flexNodeStyle.setPosition(spacingType, position);
|
|
}
|
|
|
|
@override
|
|
double get layoutX {
|
|
return _left;
|
|
}
|
|
|
|
@override
|
|
double get layoutY {
|
|
return _top;
|
|
}
|
|
|
|
@override
|
|
double get layoutWidth {
|
|
return _width;
|
|
}
|
|
|
|
@override
|
|
double get layoutHeight {
|
|
return _height;
|
|
}
|
|
|
|
@override
|
|
FlexOverflow get overflow {
|
|
return _flexNodeStyle.overflow;
|
|
}
|
|
|
|
@override
|
|
set overflow(FlexOverflow overflow) {
|
|
_flexNodeStyle.overflow = overflow;
|
|
}
|
|
}
|