FrameLayout.java

net.minecraft.client.gui.layouts.FrameLayout

信息

  • 全限定名:net.minecraft.client.gui.layouts.FrameLayout
  • 类型:public class
  • 包:net.minecraft.client.gui.layouts
  • 源码路径:src/main/java/net/minecraft/client/gui/layouts/FrameLayout.java
  • 起始行号:L13
  • 继承:AbstractLayout
  • 职责:

    TODO

字段/常量

  • children

    • 类型: List<FrameLayout.ChildContainer>
    • 修饰符: private final
    • 源码定位: L14
    • 说明:

      TODO

  • minWidth

    • 类型: int
    • 修饰符: private
    • 源码定位: L15
    • 说明:

      TODO

  • minHeight

    • 类型: int
    • 修饰符: private
    • 源码定位: L16
    • 说明:

      TODO

  • defaultChildLayoutSettings

    • 类型: LayoutSettings
    • 修饰符: private final
    • 源码定位: L17
    • 说明:

      TODO

内部类/嵌套类型

  • net.minecraft.client.gui.layouts.FrameLayout.ChildContainer
    • 类型: class
    • 修饰符: private static
    • 源码定位: L115
    • 说明:

      TODO

构造器

public FrameLayout() @ L19

  • 构造器名:FrameLayout
  • 源码定位:L19
  • 修饰符:public

参数:

说明:

TODO

public FrameLayout(int minWidth, int minHeight) @ L23

  • 构造器名:FrameLayout
  • 源码定位:L23
  • 修饰符:public

参数:

  • minWidth: int
  • minHeight: int

说明:

TODO

public FrameLayout(int x, int y, int minWidth, int minHeight) @ L27

  • 构造器名:FrameLayout
  • 源码定位:L27
  • 修饰符:public

参数:

  • x: int
  • y: int
  • minWidth: int
  • minHeight: int

说明:

TODO

方法

下面的方法块按源码顺序生成。

public FrameLayout setMinDimensions(int minWidth, int minHeight) @ L32

  • 方法名:setMinDimensions
  • 源码定位:L32
  • 返回类型:FrameLayout
  • 修饰符:public

参数:

  • minWidth: int
  • minHeight: int

说明:

TODO

public FrameLayout setMinHeight(int minHeight) @ L36

  • 方法名:setMinHeight
  • 源码定位:L36
  • 返回类型:FrameLayout
  • 修饰符:public

参数:

  • minHeight: int

说明:

TODO

public FrameLayout setMinWidth(int minWidth) @ L41

  • 方法名:setMinWidth
  • 源码定位:L41
  • 返回类型:FrameLayout
  • 修饰符:public

参数:

  • minWidth: int

说明:

TODO

public LayoutSettings newChildLayoutSettings() @ L46

  • 方法名:newChildLayoutSettings
  • 源码定位:L46
  • 返回类型:LayoutSettings
  • 修饰符:public

参数:

说明:

TODO

public LayoutSettings defaultChildLayoutSetting() @ L50

  • 方法名:defaultChildLayoutSetting
  • 源码定位:L50
  • 返回类型:LayoutSettings
  • 修饰符:public

参数:

说明:

TODO

public void arrangeElements() @ L54

  • 方法名:arrangeElements
  • 源码定位:L54
  • 返回类型:void
  • 修饰符:public

参数:

说明:

TODO

public <T extends LayoutElement> T addChild(T child) @ L74

  • 方法名:addChild
  • 源码定位:L74
  • 返回类型: T
  • 修饰符:public

参数:

  • child: T

说明:

TODO

public <T extends LayoutElement> T addChild(T child, LayoutSettings childLayoutSettings) @ L78

  • 方法名:addChild
  • 源码定位:L78
  • 返回类型: T
  • 修饰符:public

参数:

  • child: T
  • childLayoutSettings: LayoutSettings

说明:

TODO

public <T extends LayoutElement> T addChild(T child, Consumer<LayoutSettings> layoutSettingsAdjustments) @ L83

  • 方法名:addChild
  • 源码定位:L83
  • 返回类型: T
  • 修饰符:public

参数:

  • child: T
  • layoutSettingsAdjustments: Consumer

说明:

TODO

public void visitChildren(Consumer<LayoutElement> layoutElementVisitor) @ L87

  • 方法名:visitChildren
  • 源码定位:L87
  • 返回类型:void
  • 修饰符:public

参数:

  • layoutElementVisitor: Consumer

说明:

TODO

public static void centerInRectangle(LayoutElement widget, int x, int y, int width, int height) @ L92

  • 方法名:centerInRectangle
  • 源码定位:L92
  • 返回类型:void
  • 修饰符:public static

参数:

  • widget: LayoutElement
  • x: int
  • y: int
  • width: int
  • height: int

说明:

TODO

public static void centerInRectangle(LayoutElement widget, ScreenRectangle rectangle) @ L96

  • 方法名:centerInRectangle
  • 源码定位:L96
  • 返回类型:void
  • 修饰符:public static

参数:

  • widget: LayoutElement
  • rectangle: ScreenRectangle

说明:

TODO

public static void alignInRectangle(LayoutElement widget, ScreenRectangle rectangle, float alignX, float alignY) @ L100

  • 方法名:alignInRectangle
  • 源码定位:L100
  • 返回类型:void
  • 修饰符:public static

参数:

  • widget: LayoutElement
  • rectangle: ScreenRectangle
  • alignX: float
  • alignY: float

说明:

TODO

public static void alignInRectangle(LayoutElement widget, int x, int y, int width, int height, float alignX, float alignY) @ L104

  • 方法名:alignInRectangle
  • 源码定位:L104
  • 返回类型:void
  • 修饰符:public static

参数:

  • widget: LayoutElement
  • x: int
  • y: int
  • width: int
  • height: int
  • alignX: float
  • alignY: float

说明:

TODO

public static void alignInDimension(int pos, int length, int widgetLength, Consumer<Integer> setWidgetPos, float align) @ L109

  • 方法名:alignInDimension
  • 源码定位:L109
  • 返回类型:void
  • 修饰符:public static

参数:

  • pos: int
  • length: int
  • widgetLength: int
  • setWidgetPos: Consumer
  • align: float

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class FrameLayout extends AbstractLayout {
    private final List<FrameLayout.ChildContainer> children = new ArrayList<>();
    private int minWidth;
    private int minHeight;
    private final LayoutSettings defaultChildLayoutSettings = LayoutSettings.defaults().align(0.5F, 0.5F);
 
    public FrameLayout() {
        this(0, 0, 0, 0);
    }
 
    public FrameLayout(int minWidth, int minHeight) {
        this(0, 0, minWidth, minHeight);
    }
 
    public FrameLayout(int x, int y, int minWidth, int minHeight) {
        super(x, y, minWidth, minHeight);
        this.setMinDimensions(minWidth, minHeight);
    }
 
    public FrameLayout setMinDimensions(int minWidth, int minHeight) {
        return this.setMinWidth(minWidth).setMinHeight(minHeight);
    }
 
    public FrameLayout setMinHeight(int minHeight) {
        this.minHeight = minHeight;
        return this;
    }
 
    public FrameLayout setMinWidth(int minWidth) {
        this.minWidth = minWidth;
        return this;
    }
 
    public LayoutSettings newChildLayoutSettings() {
        return this.defaultChildLayoutSettings.copy();
    }
 
    public LayoutSettings defaultChildLayoutSetting() {
        return this.defaultChildLayoutSettings;
    }
 
    @Override
    public void arrangeElements() {
        super.arrangeElements();
        int resultWidth = this.minWidth;
        int resultHeight = this.minHeight;
 
        for (FrameLayout.ChildContainer child : this.children) {
            resultWidth = Math.max(resultWidth, child.getWidth());
            resultHeight = Math.max(resultHeight, child.getHeight());
        }
 
        for (FrameLayout.ChildContainer child : this.children) {
            child.setX(this.getX(), resultWidth);
            child.setY(this.getY(), resultHeight);
        }
 
        this.width = resultWidth;
        this.height = resultHeight;
    }
 
    public <T extends LayoutElement> T addChild(T child) {
        return this.addChild(child, this.newChildLayoutSettings());
    }
 
    public <T extends LayoutElement> T addChild(T child, LayoutSettings childLayoutSettings) {
        this.children.add(new FrameLayout.ChildContainer(child, childLayoutSettings));
        return child;
    }
 
    public <T extends LayoutElement> T addChild(T child, Consumer<LayoutSettings> layoutSettingsAdjustments) {
        return this.addChild(child, Util.make(this.newChildLayoutSettings(), layoutSettingsAdjustments));
    }
 
    @Override
    public void visitChildren(Consumer<LayoutElement> layoutElementVisitor) {
        this.children.forEach(wrapper -> layoutElementVisitor.accept(wrapper.child));
    }
 
    public static void centerInRectangle(LayoutElement widget, int x, int y, int width, int height) {
        alignInRectangle(widget, x, y, width, height, 0.5F, 0.5F);
    }
 
    public static void centerInRectangle(LayoutElement widget, ScreenRectangle rectangle) {
        centerInRectangle(widget, rectangle.position().x(), rectangle.position().y(), rectangle.width(), rectangle.height());
    }
 
    public static void alignInRectangle(LayoutElement widget, ScreenRectangle rectangle, float alignX, float alignY) {
        alignInRectangle(widget, rectangle.left(), rectangle.top(), rectangle.width(), rectangle.height(), alignX, alignY);
    }
 
    public static void alignInRectangle(LayoutElement widget, int x, int y, int width, int height, float alignX, float alignY) {
        alignInDimension(x, width, widget.getWidth(), widget::setX, alignX);
        alignInDimension(y, height, widget.getHeight(), widget::setY, alignY);
    }
 
    public static void alignInDimension(int pos, int length, int widgetLength, Consumer<Integer> setWidgetPos, float align) {
        int offset = (int)Mth.lerp(align, 0.0F, (float)(length - widgetLength));
        setWidgetPos.accept(pos + offset);
    }
 
    @OnlyIn(Dist.CLIENT)
    private static class ChildContainer extends AbstractLayout.AbstractChildWrapper {
        protected ChildContainer(LayoutElement child, LayoutSettings layoutSettings) {
            super(child, layoutSettings);
        }
    }
}

引用的其他类

  • AbstractLayout

    • 引用位置: 继承
  • LayoutElement

    • 引用位置: 参数/返回值
  • LayoutSettings

    • 引用位置: 参数/字段/方法调用/返回值
    • 关联成员: LayoutSettings.defaults()
  • ScreenRectangle

    • 引用位置: 参数
  • Mth

    • 引用位置: 方法调用
    • 关联成员: Mth.lerp()
  • Util

    • 引用位置: 方法调用
    • 关联成员: Util.make()