slot 0.0.1
A real time UI render framework
载入中...
搜索中...
未找到
BoundAxis.h
浏览该文件的文档.
1/*
2 * Copyright (c) Meta Platforms, Inc. and affiliates.
3 *
4 * This source code is licensed under the MIT license found in the
5 * LICENSE file in the root directory of this source tree.
6 */
7
8#pragma once
9
13#include <yoga/node/Node.h>
16
17namespace facebook::yoga {
18
20 const yoga::Node* const node,
21 const FlexDirection axis,
22 const Direction direction,
23 const float widthSize) {
24 return node->style().computeInlineStartPaddingAndBorder(
25 axis, direction, widthSize) +
26 node->style().computeInlineEndPaddingAndBorder(
27 axis, direction, widthSize);
28}
29
31 const yoga::Node* const node,
32 const Direction direction,
33 const FlexDirection axis,
34 const FloatOptional value,
35 const float axisSize,
36 const float widthSize) {
37 FloatOptional min;
38 FloatOptional max;
39
40 if (isColumn(axis)) {
41 min = node->style().resolvedMinDimension(
42 direction, Dimension::Height, axisSize, widthSize);
43 max = node->style().resolvedMaxDimension(
44 direction, Dimension::Height, axisSize, widthSize);
45 } else if (isRow(axis)) {
46 min = node->style().resolvedMinDimension(
47 direction, Dimension::Width, axisSize, widthSize);
48 max = node->style().resolvedMaxDimension(
49 direction, Dimension::Width, axisSize, widthSize);
50 }
51
52 if (max >= FloatOptional{0} && value > max) {
53 return max;
54 }
55
56 if (min >= FloatOptional{0} && value < min) {
57 return min;
58 }
59
60 return value;
61}
62
63// Like boundAxisWithinMinAndMax but also ensures that the value doesn't
64// go below the padding and border amount.
65inline float boundAxis(
66 const yoga::Node* const node,
67 const FlexDirection axis,
68 const Direction direction,
69 const float value,
70 const float axisSize,
71 const float widthSize) {
72 return yoga::maxOrDefined(
74 node, direction, axis, FloatOptional{value}, axisSize, widthSize)
75 .unwrap(),
76 paddingAndBorderForAxis(node, axis, direction, widthSize));
77}
78
79} // namespace facebook::yoga
Definition Benchmark.cpp:19
float paddingAndBorderForAxis(const yoga::Node *const node, const FlexDirection axis, const Direction direction, const float widthSize)
Definition BoundAxis.h:19
Direction
Definition Direction.h:18
constexpr auto maxOrDefined(std::floating_point auto a, std::floating_point auto b)
Definition Comparison.h:35
float boundAxis(const yoga::Node *const node, const FlexDirection axis, const Direction direction, const float value, const float axisSize, const float widthSize)
Definition BoundAxis.h:65
bool isRow(const FlexDirection flexDirection)
Definition FlexDirection.h:21
FlexDirection
Definition FlexDirection.h:18
bool isColumn(const FlexDirection flexDirection)
Definition FlexDirection.h:26
FloatOptional boundAxisWithinMinAndMax(const yoga::Node *const node, const Direction direction, const FlexDirection axis, const FloatOptional value, const float axisSize, const float widthSize)
Definition BoundAxis.h:30
Definition FloatOptional.h:15