Skip to content

Commit bdc7cca

Browse files
Refactoring Flow
1 parent 3452b03 commit bdc7cca

33 files changed

+162
-137
lines changed
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.github.webicitybrowser.thready.gui.graphical.base.layout;
2+
3+
import java.util.List;
4+
5+
import com.github.webicitybrowser.thready.gui.graphical.layout.core.TreeTracker;
6+
import com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.box.Box;
7+
8+
public record StaticTreeTracker(Box parentBox, List<Box> children) implements TreeTracker {
9+
10+
}

Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/layout/base/flowing/FlowingLayoutManager.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import com.github.webicitybrowser.thready.gui.graphical.directive.SizeDirective;
1111
import com.github.webicitybrowser.thready.gui.graphical.layout.base.flowing.imp.RenderCursorTracker;
1212
import com.github.webicitybrowser.thready.gui.graphical.layout.core.ChildLayoutResult;
13-
import com.github.webicitybrowser.thready.gui.graphical.layout.core.LayoutManagerContext;
13+
import com.github.webicitybrowser.thready.gui.graphical.layout.core.LayoutRenderContext;
1414
import com.github.webicitybrowser.thready.gui.graphical.layout.core.LayoutResult;
1515
import com.github.webicitybrowser.thready.gui.graphical.layout.core.SolidLayoutManager;
1616
import com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.UIPipeline;
@@ -22,14 +22,14 @@
2222
public class FlowingLayoutManager implements SolidLayoutManager {
2323

2424
@Override
25-
public LayoutResult render(LayoutManagerContext layoutManagerContext) {
25+
public LayoutResult render(LayoutRenderContext layoutManagerContext) {
2626
RenderCursorTracker renderCursor = new RenderCursorTracker();
2727
ChildLayoutResult[] childrenResults = renderChildren(layoutManagerContext, renderCursor);
2828
return LayoutResult.create(childrenResults, renderCursor.getCoveredSize());
2929
}
3030

31-
private ChildLayoutResult[] renderChildren(LayoutManagerContext layoutManagerContext, RenderCursorTracker renderCursor) {
32-
List<Box> children = layoutManagerContext.children();
31+
private ChildLayoutResult[] renderChildren(LayoutRenderContext layoutManagerContext, RenderCursorTracker renderCursor) {
32+
List<Box> children = layoutManagerContext.treeTracker().children();
3333
ChildLayoutResult[] results = new ChildLayoutResult[children.size()];
3434
for (int i = 0; i < children.size(); i++) {
3535
results[i] = renderChild(layoutManagerContext, children.get(i), renderCursor);
@@ -38,9 +38,9 @@ private ChildLayoutResult[] renderChildren(LayoutManagerContext layoutManagerCon
3838
return results;
3939
}
4040

41-
private ChildLayoutResult renderChild(LayoutManagerContext layoutManagerContext, Box childBox, RenderCursorTracker renderCursor) {
42-
GlobalRenderContext globalRenderContext = layoutManagerContext.globalRenderContext();
43-
LocalRenderContext localRenderContext = layoutManagerContext.localRenderContext();
41+
private ChildLayoutResult renderChild(LayoutRenderContext layoutRenderContext, Box childBox, RenderCursorTracker renderCursor) {
42+
GlobalRenderContext globalRenderContext = layoutRenderContext.globalRenderContext();
43+
LocalRenderContext localRenderContext = layoutRenderContext.localRenderContext();
4444

4545
AbsoluteSize parentSize = localRenderContext.preferredSize();
4646
AbsoluteSize precomputedSize = precomputeChildSize(childBox, parentSize);
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,15 @@
11
package com.github.webicitybrowser.thready.gui.graphical.layout.core;
22

3-
import java.util.List;
4-
53
import com.github.webicitybrowser.thready.gui.directive.core.pool.DirectivePool;
6-
import com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.box.Box;
74
import com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.render.GlobalRenderContext;
85
import com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.render.LocalRenderContext;
96

10-
public record LayoutManagerContext(
11-
Box parentBox, List<Box> children, GlobalRenderContext globalRenderContext, LocalRenderContext localRenderContext
7+
public record LayoutRenderContext(
8+
GlobalRenderContext globalRenderContext, LocalRenderContext localRenderContext, TreeTracker treeTracker
129
) {
1310

1411
public DirectivePool layoutDirectives() {
15-
return parentBox.styleDirectives();
12+
return treeTracker.parentBox().styleDirectives();
1613
}
1714

1815
}

Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/layout/core/SolidLayoutManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@
22

33
public interface SolidLayoutManager {
44

5-
LayoutResult render(LayoutManagerContext layoutManagerContext);
5+
LayoutResult render(LayoutRenderContext layoutManagerContext);
66

77
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.github.webicitybrowser.thready.gui.graphical.layout.core;
2+
3+
import java.util.List;
4+
5+
import com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.box.Box;
6+
7+
public interface TreeTracker {
8+
9+
Box parentBox();
10+
11+
List<Box> children();
12+
13+
}

Thready/src/main/java/com/github/webicitybrowser/thready/gui/graphical/lookandfeel/simplelaf/ui/container/solid/ContainerSolidRenderer.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
package com.github.webicitybrowser.thready.gui.graphical.lookandfeel.simplelaf.ui.container.solid;
22

3+
import com.github.webicitybrowser.thready.gui.graphical.base.layout.StaticTreeTracker;
34
import com.github.webicitybrowser.thready.gui.graphical.layout.base.flowing.FlowingLayoutManager;
4-
import com.github.webicitybrowser.thready.gui.graphical.layout.core.LayoutManagerContext;
5+
import com.github.webicitybrowser.thready.gui.graphical.layout.core.LayoutRenderContext;
56
import com.github.webicitybrowser.thready.gui.graphical.layout.core.LayoutResult;
67
import com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.box.ChildrenBox;
78
import com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.render.GlobalRenderContext;
@@ -13,9 +14,9 @@ public final class ContainerSolidRenderer {
1314
private ContainerSolidRenderer() {}
1415

1516
public static ContainerRenderedUnit render(ChildrenBox box, GlobalRenderContext globalRenderContext, LocalRenderContext localRenderContext) {
16-
LayoutManagerContext layoutManagerContext = new LayoutManagerContext(
17-
box, box.getChildrenTracker().getChildren(),
18-
globalRenderContext, localRenderContext);
17+
LayoutRenderContext layoutManagerContext = new LayoutRenderContext(
18+
globalRenderContext, localRenderContext,
19+
new StaticTreeTracker(box, box.getChildrenTracker().getChildren()));
1920
LayoutResult layoutResults = new FlowingLayoutManager().render(layoutManagerContext);
2021

2122
ContainerRenderedUnit renderedUnit = new ContainerRenderedUnit(box, localRenderContext.preferredSize(), layoutResults.childLayoutResults());

ThreadyWeb/src/main/java/com/github/webicitybrowser/threadyweb/graphical/layout/adjusted/AdjustedLayoutManager.java

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@
77
import com.github.webicitybrowser.thready.dimensions.Rectangle;
88
import com.github.webicitybrowser.thready.dimensions.util.AbsoluteDimensionsMath;
99
import com.github.webicitybrowser.thready.gui.directive.core.pool.DirectivePool;
10+
import com.github.webicitybrowser.thready.gui.graphical.base.layout.StaticTreeTracker;
1011
import com.github.webicitybrowser.thready.gui.graphical.layout.core.ChildLayoutResult;
11-
import com.github.webicitybrowser.thready.gui.graphical.layout.core.LayoutManagerContext;
12+
import com.github.webicitybrowser.thready.gui.graphical.layout.core.LayoutRenderContext;
1213
import com.github.webicitybrowser.thready.gui.graphical.layout.core.LayoutResult;
1314
import com.github.webicitybrowser.thready.gui.graphical.layout.core.SolidLayoutManager;
1415
import com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.box.Box;
@@ -26,8 +27,8 @@ public AdjustedLayoutManager(SolidLayoutManager innerLayoutManager) {
2627
}
2728

2829
@Override
29-
public LayoutResult render(LayoutManagerContext layoutManagerContext) {
30-
List<Box> children = layoutManagerContext.children();
30+
public LayoutResult render(LayoutRenderContext layoutManagerContext) {
31+
List<Box> children = layoutManagerContext.treeTracker().children();
3132
List<Box> childrenForInnerLayout = new ArrayList<>(children.size());
3233
List<Box> outOfFlowChildren = new ArrayList<>(0);
3334
getChildrenForInnerLayout(children, childrenForInnerLayout, outOfFlowChildren);
@@ -48,7 +49,7 @@ public LayoutResult render(LayoutManagerContext layoutManagerContext) {
4849
}
4950

5051
private ChildLayoutResult[] adjustRelativeChildren(
51-
LayoutManagerContext layoutManagerContext, ChildLayoutResult[] originalChildLayoutResults
52+
LayoutRenderContext layoutManagerContext, ChildLayoutResult[] originalChildLayoutResults
5253
) {
5354
ChildLayoutResult[] adjustedChildLayoutResults = new ChildLayoutResult[originalChildLayoutResults.length];
5455
for (int i = 0; i < originalChildLayoutResults.length; i++) {
@@ -78,12 +79,13 @@ private ChildLayoutResult adjustRelativeChild(ChildLayoutResult originalLayoutRe
7879
return adjustedChildLayoutResult;
7980
}
8081

81-
private LayoutResult renderInnerLayout(LayoutManagerContext layoutManagerContext, List<Box> childrenForInnerLayout) {
82-
LayoutManagerContext innerLayoutManagerContext = new LayoutManagerContext(
83-
layoutManagerContext.parentBox(),
84-
childrenForInnerLayout,
82+
private LayoutResult renderInnerLayout(LayoutRenderContext layoutManagerContext, List<Box> childrenForInnerLayout) {
83+
LayoutRenderContext innerLayoutManagerContext = new LayoutRenderContext(
8584
layoutManagerContext.globalRenderContext(),
86-
layoutManagerContext.localRenderContext()
85+
layoutManagerContext.localRenderContext(),
86+
new StaticTreeTracker(
87+
layoutManagerContext.treeTracker().parentBox(),
88+
childrenForInnerLayout)
8789
);
8890

8991
return innerLayoutManager.render(innerLayoutManagerContext);

ThreadyWeb/src/main/java/com/github/webicitybrowser/threadyweb/graphical/layout/adjusted/AdjustedLayoutRenderer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@
44
import java.util.List;
55

66
import com.github.webicitybrowser.thready.gui.graphical.layout.core.ChildLayoutResult;
7-
import com.github.webicitybrowser.thready.gui.graphical.layout.core.LayoutManagerContext;
7+
import com.github.webicitybrowser.thready.gui.graphical.layout.core.LayoutRenderContext;
88
import com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.box.Box;
99

1010
public final class AdjustedLayoutRenderer {
1111

1212
private AdjustedLayoutRenderer() {}
1313

14-
public static List<ChildLayoutResult> render(LayoutManagerContext layoutManagerContext, List<Box> outOfFlowChildren) {
14+
public static List<ChildLayoutResult> render(LayoutRenderContext layoutManagerContext, List<Box> outOfFlowChildren) {
1515
List<ChildLayoutResult> layoutResults = new ArrayList<>(outOfFlowChildren.size());
1616
// TODO: Implement non-relative sizes
1717

ThreadyWeb/src/main/java/com/github/webicitybrowser/threadyweb/graphical/layout/flexbox/FlexCrossSizeDetermination.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
import com.github.webicitybrowser.thready.dimensions.AbsoluteSize;
66
import com.github.webicitybrowser.thready.dimensions.RelativeDimension;
7-
import com.github.webicitybrowser.thready.gui.graphical.layout.core.LayoutManagerContext;
7+
import com.github.webicitybrowser.thready.gui.graphical.layout.core.LayoutRenderContext;
88
import com.github.webicitybrowser.thready.gui.graphical.lookandfeel.core.stage.render.GlobalRenderContext;
99
import com.github.webicitybrowser.threadyweb.graphical.directive.layout.flexbox.FlexDirectionDirective.FlexDirection;
1010
import com.github.webicitybrowser.threadyweb.graphical.directive.layout.flexbox.FlexWrapDirective.FlexWrap;
@@ -14,7 +14,7 @@ public final class FlexCrossSizeDetermination {
1414

1515
private FlexCrossSizeDetermination() {}
1616

17-
public static void determineLineCrossSizes(LayoutManagerContext layoutManagerContext, List<FlexLine> flexLines) {
17+
public static void determineLineCrossSizes(LayoutRenderContext layoutManagerContext, List<FlexLine> flexLines) {
1818
for (FlexLine flexLine: flexLines) {
1919
determineItemCrossSizes(layoutManagerContext, flexLine);
2020
}
@@ -35,7 +35,7 @@ public static void determineLineCrossSizes(LayoutManagerContext layoutManagerCon
3535
}
3636
}
3737

38-
private static void distributeExtraSpace(LayoutManagerContext layoutManagerContext, List<FlexLine> flexLines) {
38+
private static void distributeExtraSpace(LayoutRenderContext layoutManagerContext, List<FlexLine> flexLines) {
3939
float preferredCrossSize = FlexDimension
4040
.createFrom(
4141
layoutManagerContext.localRenderContext().preferredSize(),
@@ -53,7 +53,7 @@ private static void distributeExtraSpace(LayoutManagerContext layoutManagerConte
5353
}
5454
}
5555

56-
private static boolean determineNoWrapLineCrossSize(LayoutManagerContext layoutManagerContext, FlexLine flexLine) {
56+
private static boolean determineNoWrapLineCrossSize(LayoutRenderContext layoutManagerContext, FlexLine flexLine) {
5757
float parentSize = FlexDimension
5858
.createFrom(layoutManagerContext.localRenderContext().preferredSize(), flexLine.getFlexDirection())
5959
.cross();
@@ -65,28 +65,28 @@ private static boolean determineNoWrapLineCrossSize(LayoutManagerContext layoutM
6565
return false;
6666
}
6767

68-
private static void determineFlexLineCrossSize(LayoutManagerContext layoutManagerContext, FlexLine flexLine) {
68+
private static void determineFlexLineCrossSize(LayoutRenderContext layoutManagerContext, FlexLine flexLine) {
6969
float crossSize = flexLine.getFlexItems().stream()
7070
.map(FlexItem::getCrossSize)
7171
.max(Float::compare)
7272
.orElse(0f);
7373
flexLine.setCrossSize(crossSize);
7474
}
7575

76-
public static void determineItemCrossSizes(LayoutManagerContext layoutManagerContext, FlexLine flexLine) {
76+
public static void determineItemCrossSizes(LayoutRenderContext layoutManagerContext, FlexLine flexLine) {
7777
FlexDirection flexDirection = flexLine.getFlexDirection();
7878
for (FlexItem flexItem: flexLine.getFlexItems()) {
7979
determineInitialItemCrossSize(layoutManagerContext, flexItem, flexDirection);
8080
}
8181
}
8282

83-
private static void determineUsedItemCrossSizes(LayoutManagerContext layoutManagerContext, FlexLine flexLine) {
83+
private static void determineUsedItemCrossSizes(LayoutRenderContext layoutManagerContext, FlexLine flexLine) {
8484
for (FlexItem flexItem: flexLine.getFlexItems()) {
8585
determineUsedItemCrossSize(layoutManagerContext, flexLine, flexItem);
8686
}
8787
}
8888

89-
private static void determineUsedItemCrossSize(LayoutManagerContext layoutManagerContext, FlexLine flexLine, FlexItem flexItem) {
89+
private static void determineUsedItemCrossSize(LayoutRenderContext layoutManagerContext, FlexLine flexLine, FlexItem flexItem) {
9090
FlexDirection flexDirection = flexLine.getFlexDirection();
9191
flexItem.setCrossSize(flexLine.getCrossSize());
9292
GlobalRenderContext globalRenderContext = layoutManagerContext.globalRenderContext();
@@ -96,12 +96,12 @@ private static void determineUsedItemCrossSize(LayoutManagerContext layoutManage
9696
FlexItemRenderer.render(flexItem, flexItemRenderContext);
9797
}
9898

99-
private static void determineInitialItemCrossSize(LayoutManagerContext layoutManagerContext, FlexItem flexItem, FlexDirection flexDirection) {
99+
private static void determineInitialItemCrossSize(LayoutRenderContext layoutManagerContext, FlexItem flexItem, FlexDirection flexDirection) {
100100
determineBaselineCrossSize(layoutManagerContext, flexItem, flexDirection);
101101
}
102102

103103
private static void determineBaselineCrossSize(
104-
LayoutManagerContext layoutManagerContext, FlexItem flexItem, FlexDirection flexDirection
104+
LayoutRenderContext layoutManagerContext, FlexItem flexItem, FlexDirection flexDirection
105105
) {
106106
GlobalRenderContext globalRenderContext = layoutManagerContext.globalRenderContext();
107107
FlexItemRenderer.FlexItemRenderContext flexItemRenderContext = new FlexItemRenderer.FlexItemRenderContext(

ThreadyWeb/src/main/java/com/github/webicitybrowser/threadyweb/graphical/layout/flexbox/FlexInnerDisplayLayout.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import com.github.webicitybrowser.thready.dimensions.Rectangle;
88
import com.github.webicitybrowser.thready.gui.directive.core.pool.DirectivePool;
99
import com.github.webicitybrowser.thready.gui.graphical.layout.core.ChildLayoutResult;
10-
import com.github.webicitybrowser.thready.gui.graphical.layout.core.LayoutManagerContext;
10+
import com.github.webicitybrowser.thready.gui.graphical.layout.core.LayoutRenderContext;
1111
import com.github.webicitybrowser.thready.gui.graphical.layout.core.LayoutResult;
1212
import com.github.webicitybrowser.thready.gui.graphical.layout.core.SolidLayoutManager;
1313
import com.github.webicitybrowser.thready.gui.graphical.lookandfeel.base.stage.box.BasicAnonymousFluidBox;
@@ -31,8 +31,8 @@ public FlexInnerDisplayLayout(StyledUnitGenerator styledUnitGenerator) {
3131
}
3232

3333
@Override
34-
public LayoutResult render(LayoutManagerContext layoutManagerContext) {
35-
int numChildren = layoutManagerContext.children().size();
34+
public LayoutResult render(LayoutRenderContext layoutManagerContext) {
35+
int numChildren = layoutManagerContext.treeTracker().children().size();
3636
if (numChildren == 0) {
3737
return LayoutResult.create(new ChildLayoutResult[0], AbsoluteSize.ZERO_SIZE);
3838
}
@@ -65,14 +65,14 @@ public LayoutResult render(LayoutManagerContext layoutManagerContext) {
6565
lineDimensions.toAbsoluteSize());
6666
}
6767

68-
private List<FlexItem> createFlexItems(LayoutManagerContext layoutManagerContext) {
69-
List<FlexItem> flexItems = new ArrayList<>(layoutManagerContext.children().size());
70-
addFlexItems(layoutManagerContext, flexItems, layoutManagerContext.children());
68+
private List<FlexItem> createFlexItems(LayoutRenderContext layoutManagerContext) {
69+
List<FlexItem> flexItems = new ArrayList<>(layoutManagerContext.treeTracker().children().size());
70+
addFlexItems(layoutManagerContext, flexItems, layoutManagerContext.treeTracker().children());
7171

7272
return flexItems;
7373
}
7474

75-
private void addFlexItems(LayoutManagerContext layoutManagerContext, List<FlexItem> flexItems, List<Box> children) {
75+
private void addFlexItems(LayoutRenderContext layoutManagerContext, List<FlexItem> flexItems, List<Box> children) {
7676
for (Box child: children) {
7777
if (child instanceof TextBox textBox && textBox.text().isBlank()) continue;
7878
if (child instanceof BasicAnonymousFluidBox anonBox) {

0 commit comments

Comments
 (0)