PreeditEvent.java
net.minecraft.client.input.PreeditEvent
信息
- 全限定名:net.minecraft.client.input.PreeditEvent
- 类型:public record
- 包:net.minecraft.client.input
- 源码路径:src/main/java/net/minecraft/client/input/PreeditEvent.java
- 起始行号:L17
- 职责:
TODO
字段/常量
- 无
内部类/嵌套类型
- 无
构造器
public PreeditEvent(String fullText, int caretPosition, List<String> blocks, int focusedBlock) @ L18
- 构造器名:PreeditEvent
- 源码定位:L18
- 修饰符:public
参数:
- fullText: String
- caretPosition: int
- blocks: List
- focusedBlock: int
说明:
TODO
方法
下面的方法块按源码顺序生成。
public static PreeditEvent createFromCallback(int preeditSize, long preeditPtr, int blockCount, long blockSizesPtr, int focusedBlock, int caret) @ L26
- 方法名:createFromCallback
- 源码定位:L26
- 返回类型:PreeditEvent
- 修饰符:public static
参数:
- preeditSize: int
- preeditPtr: long
- blockCount: int
- blockSizesPtr: long
- focusedBlock: int
- caret: int
说明:
TODO
private static int[] readIntBuffer(int size, long ptr) @ L63
- 方法名:readIntBuffer
- 源码定位:L63
- 返回类型:int[]
- 修饰符:private static
参数:
- size: int
- ptr: long
说明:
TODO
public MutableComponent toFormattedText(Style focusedStyle) @ L70
- 方法名:toFormattedText
- 源码定位:L70
- 返回类型:MutableComponent
- 修饰符:public
参数:
- focusedStyle: Style
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public record PreeditEvent(String fullText, int caretPosition, List<String> blocks, int focusedBlock) {
public PreeditEvent(String fullText, int caretPosition, List<String> blocks, int focusedBlock) {
Preconditions.checkElementIndex(focusedBlock, blocks.size());
this.fullText = fullText;
this.caretPosition = caretPosition;
this.blocks = blocks;
this.focusedBlock = focusedBlock;
}
public static @Nullable PreeditEvent createFromCallback(int preeditSize, long preeditPtr, int blockCount, long blockSizesPtr, int focusedBlock, int caret) {
if (preeditSize == 0) {
return null;
} else {
int[] codepoints = readIntBuffer(preeditSize, preeditPtr);
int[] blockSizes = readIntBuffer(blockCount, blockSizesPtr);
StringBuilder fullText = new StringBuilder();
Builder<String> blocks = ImmutableList.builder();
int offset = 0;
int convertedCaret = 0;
for (int blockSize : blockSizes) {
StringBuilder blockBuilder = new StringBuilder();
for (int i = 0; i < blockSize; i++) {
int codepoint = codepoints[offset];
if (offset == caret) {
convertedCaret = fullText.length() + blockBuilder.length();
}
blockBuilder.appendCodePoint(codepoint);
offset++;
}
String block = blockBuilder.toString();
blocks.add(block);
fullText.append(block);
}
if (offset == caret) {
convertedCaret = fullText.length();
}
return new PreeditEvent(fullText.toString(), convertedCaret, blocks.build(), focusedBlock);
}
}
private static int[] readIntBuffer(int size, long ptr) {
IntBuffer buffer = MemoryUtil.memIntBuffer(ptr, size);
int[] result = new int[size];
buffer.get(result);
return result;
}
public MutableComponent toFormattedText(Style focusedStyle) {
int blockCount = this.blocks.size();
if (blockCount == 1) {
return Component.literal(this.blocks.getFirst()).withStyle(focusedStyle);
} else {
MutableComponent result = Component.empty();
for (int i = 0; i < blockCount; i++) {
MutableComponent part = Component.literal(this.blocks.get(i));
if (i == this.focusedBlock) {
part.withStyle(focusedStyle);
}
result.append(part);
}
return result;
}
}
}引用的其他类
-
- 引用位置:
方法调用 - 关联成员:
Component.empty(), Component.literal()
- 引用位置:
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
参数
- 引用位置: