minecraft-src/net/minecraft/client/gui/render/state/GuiTextRenderState.java
2025-09-18 12:27:44 +00:00

61 lines
1.8 KiB
Java

package net.minecraft.client.gui.render.state;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.gui.Font;
import net.minecraft.client.gui.navigation.ScreenRectangle;
import net.minecraft.util.FormattedCharSequence;
import org.jetbrains.annotations.Nullable;
import org.joml.Matrix3x2f;
@Environment(EnvType.CLIENT)
public final class GuiTextRenderState implements ScreenArea {
public final Font font;
public final FormattedCharSequence text;
public final Matrix3x2f pose;
public final int x;
public final int y;
public final int color;
public final int backgroundColor;
public final boolean dropShadow;
@Nullable
public final ScreenRectangle scissor;
@Nullable
private Font.PreparedText preparedText;
@Nullable
private ScreenRectangle bounds;
public GuiTextRenderState(
Font font, FormattedCharSequence text, Matrix3x2f pose, int x, int y, int color, int backgroundColor, boolean dropShadow, @Nullable ScreenRectangle scissor
) {
this.font = font;
this.text = text;
this.pose = pose;
this.x = x;
this.y = y;
this.color = color;
this.backgroundColor = backgroundColor;
this.dropShadow = dropShadow;
this.scissor = scissor;
}
public Font.PreparedText ensurePrepared() {
if (this.preparedText == null) {
this.preparedText = this.font.prepareText(this.text, (float)this.x, (float)this.y, this.color, this.dropShadow, this.backgroundColor);
ScreenRectangle screenRectangle = this.preparedText.bounds();
if (screenRectangle != null) {
screenRectangle = screenRectangle.transformMaxBounds(this.pose);
this.bounds = this.scissor != null ? this.scissor.intersection(screenRectangle) : screenRectangle;
}
}
return this.preparedText;
}
@Nullable
@Override
public ScreenRectangle bounds() {
this.ensurePrepared();
return this.bounds;
}
}