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

    • 引用位置: 方法调用
    • 关联成员: Minecraft.getInstance()
  • Font

    • 引用位置: 参数/字段
  • GuiGraphicsExtractor

    • 引用位置: 参数
  • Renderable

    • 引用位置: 实现
  • TextCursorUtils

    • 引用位置: 方法调用
    • 关联成员: TextCursorUtils.extractInsertCursor(), TextCursorUtils.isCursorVisible()
  • PreeditEvent

    • 引用位置: 参数
  • Component

    • 引用位置: 字段
  • Style

    • 引用位置: 字段
  • Identifier

    • 引用位置: 字段/方法调用
    • 关联成员: Identifier.withDefaultNamespace()
  • Util

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