Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
StackPanelWidget.cs
浏览该文件的文档.
1using Engine;
2
3namespace Game {
5 public float m_fixedSize;
6
7 public int m_fillCount;
8
9 public LayoutDirection Direction { get; set; }
10
11 public bool IsInverted { get; set; }
12
13 public override void MeasureOverride(Vector2 parentAvailableSize) {
14 m_fixedSize = 0f;
15 m_fillCount = 0;
16 float num = 0f;
17 foreach (Widget child in Children) {
18 if (child.IsVisible) {
19 child.Measure(Vector2.Max(parentAvailableSize - child.MarginHorizontalSumAndVerticalSum, Vector2.Zero));
20 if (Direction == LayoutDirection.Horizontal) {
21 if (child.ParentDesiredSize.X != float.PositiveInfinity) {
22 m_fixedSize += child.ParentDesiredSize.X + child.MarginHorizontalSum;
23 parentAvailableSize.X = MathUtils.Max(parentAvailableSize.X - (child.ParentDesiredSize.X + child.MarginHorizontalSum), 0f);
24 }
25 else {
27 }
28 num = MathUtils.Max(num, child.ParentDesiredSize.Y + child.MarginVerticalSum);
29 }
30 else {
31 if (child.ParentDesiredSize.Y != float.PositiveInfinity) {
32 m_fixedSize += child.ParentDesiredSize.Y + child.MarginVerticalSum;
33 parentAvailableSize.Y = MathUtils.Max(parentAvailableSize.Y - (child.ParentDesiredSize.Y + child.MarginVerticalSum), 0f);
34 }
35 else {
37 }
38 num = MathUtils.Max(num, child.ParentDesiredSize.X + child.MarginHorizontalSum);
39 }
40 }
41 }
42 if (Direction == LayoutDirection.Horizontal) {
43 DesiredSize = m_fillCount == 0 ? new Vector2(m_fixedSize, num) : new Vector2(float.PositiveInfinity, num);
44 }
45 else {
46 DesiredSize = m_fillCount == 0 ? new Vector2(num, m_fixedSize) : new Vector2(num, float.PositiveInfinity);
47 }
48 }
49
50 public override void ArrangeOverride() {
51 float num = 0f;
52 foreach (Widget child in Children) {
53 if (child.IsVisible) {
54 if (Direction == LayoutDirection.Horizontal) {
55 float num2 = child.ParentDesiredSize.X == float.PositiveInfinity
57 : child.ParentDesiredSize.X + child.MarginHorizontalSum;
58 Vector2 c;
59 Vector2 c2;
60 if (!IsInverted) {
61 c = new Vector2(num, 0f);
62 c2 = new Vector2(num + num2, ActualSize.Y);
63 }
64 else {
65 c = new Vector2(ActualSize.X - (num + num2), 0f);
66 c2 = new Vector2(ActualSize.X - num, ActualSize.Y);
67 }
68 ArrangeChildWidgetInCell(c, c2, child);
69 num += num2;
70 }
71 else {
72 float num3 = child.ParentDesiredSize.Y == float.PositiveInfinity
74 : child.ParentDesiredSize.Y + child.MarginVerticalSum;
75 Vector2 c3;
76 Vector2 c4;
77 if (!IsInverted) {
78 c3 = new Vector2(0f, num);
79 c4 = new Vector2(ActualSize.X, num + num3);
80 }
81 else {
82 c3 = new Vector2(0f, ActualSize.Y - (num + num3));
83 c4 = new Vector2(ActualSize.X, ActualSize.Y - num);
84 }
85 ArrangeChildWidgetInCell(c3, c4, child);
86 num += num3;
87 }
88 }
89 }
90 }
91 }
92}
static int Max(int x1, int x2)
readonly WidgetsList Children
static void ArrangeChildWidgetInCell(Vector2 c1, Vector2 c2, Widget widget)
override void MeasureOverride(Vector2 parentAvailableSize)
virtual float MarginVerticalSum
Vector2 ParentDesiredSize
virtual bool IsVisible
virtual float MarginHorizontalSum
Vector2 DesiredSize
virtual Vector2 MarginHorizontalSumAndVerticalSum
Vector2 ActualSize
virtual void Measure(Vector2 parentAvailableSize)
static readonly Vector2 Zero
static Vector2 Max(Vector2 v, float f)