IMEPreeditOverlay.java
net.minecraft.client.gui.components.IMEPreeditOverlay
信息
- 全限定名:net.minecraft.client.gui.components.IMEPreeditOverlay
- 类型:public class
- 包:net.minecraft.client.gui.components
- 源码路径:src/main/java/net/minecraft/client/gui/components/IMEPreeditOverlay.java
- 起始行号:L16
- 实现:Renderable
- 职责:
TODO
字段/常量
-
BACKGROUND- 类型:
Identifier - 修饰符:
private static final - 源码定位:
L17 - 说明:
TODO
- 类型:
-
FOCUSED_STYLE- 类型:
Style - 修饰符:
private static final - 源码定位:
L18 - 说明:
TODO
- 类型:
-
SEPARATION_FROM_INPUT- 类型:
int - 修饰符:
private static final - 源码定位:
L19 - 说明:
TODO
- 类型:
-
BORDER_MARGIN- 类型:
int - 修饰符:
private static final - 源码定位:
L20 - 说明:
TODO
- 类型:
-
BORDER_WIDTH- 类型:
int - 修饰符:
private static final - 源码定位:
L21 - 说明:
TODO
- 类型:
-
BORDER_OFFSET- 类型:
int - 修饰符:
private static final - 源码定位:
L22 - 说明:
TODO
- 类型:
-
TEXT_COLOR- 类型:
int - 修饰符:
private static final - 源码定位:
L23 - 说明:
TODO
- 类型:
-
HOT_AREA_MARGIN- 类型:
int - 修饰符:
private static final - 源码定位:
L24 - 说明:
TODO
- 类型:
-
font- 类型:
Font - 修饰符:
private final - 源码定位:
L25 - 说明:
TODO
- 类型:
-
inputLeft- 类型:
int - 修饰符:
private - 源码定位:
L26 - 说明:
TODO
- 类型:
-
inputTop- 类型:
int - 修饰符:
private - 源码定位:
L27 - 说明:
TODO
- 类型:
-
inputHeight- 类型:
int - 修饰符:
private final - 源码定位:
L28 - 说明:
TODO
- 类型:
-
initTimeMs- 类型:
long - 修饰符:
private final - 源码定位:
L29 - 说明:
TODO
- 类型:
-
preEditText- 类型:
Component - 修饰符:
private final - 源码定位:
L30 - 说明:
TODO
- 类型:
-
preEditTextWidth- 类型:
int - 修饰符:
private final - 源码定位:
L31 - 说明:
TODO
- 类型:
-
caretPos- 类型:
int - 修饰符:
private final - 源码定位:
L32 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
public IMEPreeditOverlay(PreeditEvent contents, Font font, int inputHeight) @ L34
- 构造器名:IMEPreeditOverlay
- 源码定位:L34
- 修饰符:public
参数:
- contents: PreeditEvent
- font: Font
- inputHeight: int
说明:
TODO
方法
下面的方法块按源码顺序生成。
public void updateInputPosition(int inputLeft, int inputTop) @ L44
- 方法名:updateInputPosition
- 源码定位:L44
- 返回类型:void
- 修饰符:public
参数:
- inputLeft: int
- inputTop: int
说明:
TODO
public void extractRenderState(GuiGraphicsExtractor graphics, int mouseX, int mouseY, float a) @ L49
- 方法名:extractRenderState
- 源码定位:L49
- 返回类型:void
- 修饰符:public
参数:
- graphics: GuiGraphicsExtractor
- mouseX: int
- mouseY: int
- a: float
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class IMEPreeditOverlay implements Renderable {
private static final Identifier BACKGROUND = Identifier.withDefaultNamespace("widget/preedit");
private static final Style FOCUSED_STYLE = Style.EMPTY.withUnderlined(true);
private static final int SEPARATION_FROM_INPUT = 4;
private static final int BORDER_MARGIN = 4;
private static final int BORDER_WIDTH = 1;
private static final int BORDER_OFFSET = 5;
private static final int TEXT_COLOR = -16777216;
private static final int HOT_AREA_MARGIN = 2;
private final Font font;
private int inputLeft;
private int inputTop;
private final int inputHeight;
private final long initTimeMs;
private final Component preEditText;
private final int preEditTextWidth;
private final int caretPos;
public IMEPreeditOverlay(PreeditEvent contents, Font font, int inputHeight) {
this.font = font;
this.inputHeight = inputHeight;
this.initTimeMs = Util.getMillis();
this.preEditText = contents.toFormattedText(FOCUSED_STYLE).withColor(-16777216);
this.preEditTextWidth = font.width(this.preEditText);
String textBeforeCaret = contents.fullText().substring(0, contents.caretPosition());
this.caretPos = font.width(textBeforeCaret);
}
public void updateInputPosition(int inputLeft, int inputTop) {
this.inputLeft = inputLeft;
this.inputTop = inputTop;
}
@Override
public void extractRenderState(GuiGraphicsExtractor graphics, int mouseX, int mouseY, float a) {
int preeditLeft = this.inputLeft;
int preeditRight = preeditLeft + this.preEditTextWidth;
if (preeditRight > graphics.guiWidth()) {
preeditLeft = graphics.guiWidth() - this.preEditTextWidth;
preeditRight = preeditLeft + this.preEditTextWidth;
}
int inputBottom = this.inputTop + this.inputHeight;
int preeditBottom = inputBottom + 4 + 9;
if (preeditBottom > graphics.guiHeight()) {
preeditBottom = this.inputTop - 4 - 9;
}
int preeditTop = preeditBottom - 9;
Minecraft.getInstance()
.textInputManager()
.setTextInputArea(
Math.min(preeditLeft, this.inputLeft) - 2, Math.min(preeditTop, this.inputTop) - 2, preeditRight + 2, Math.max(preeditBottom, inputBottom) + 2
);
int backgroundWidth = preeditRight - preeditLeft + 10;
int backgroundHeight = preeditBottom - preeditTop + 10;
graphics.blitSprite(RenderPipelines.GUI_TEXTURED, BACKGROUND, preeditLeft - 5, preeditTop - 5, backgroundWidth, backgroundHeight);
graphics.text(this.font, this.preEditText, preeditLeft, preeditTop, -16777216, false);
if (TextCursorUtils.isCursorVisible(Util.getMillis() - this.initTimeMs)) {
TextCursorUtils.extractInsertCursor(graphics, preeditLeft + this.caretPos, preeditTop, -16777216, 9 + 1);
}
}
}引用的其他类
-
- 引用位置:
方法调用 - 关联成员:
Minecraft.getInstance()
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
实现
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
TextCursorUtils.extractInsertCursor(), TextCursorUtils.isCursorVisible()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
字段
- 引用位置:
-
- 引用位置:
字段
- 引用位置:
-
- 引用位置:
字段/方法调用 - 关联成员:
Identifier.withDefaultNamespace()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Util.getMillis()
- 引用位置: