-
-
Notifications
You must be signed in to change notification settings - Fork 13
/
EditorTest.java
67 lines (63 loc) · 2.7 KB
/
EditorTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package org.ice1000.jimgui.tests;
import org.ice1000.jimgui.*;
import org.ice1000.jimgui.util.JniLoader;
import org.jetbrains.annotations.NotNull;
import java.net.URISyntaxException;
public class EditorTest {
public static final int LIMIT = 3;
@SuppressWarnings("AccessStaticViaInstance")
public static void main(String @NotNull ... args) throws InterruptedException, URISyntaxException {
JniLoader.load();
StringBuilder builder = new StringBuilder("输入一些文本");
int cursor = builder.length();
try (JImGui gui = new JImGui()) {
JImGuiIO io = gui.getIO();
JImFontAtlas fonts = io.getFonts();
// String fontPath = EditorTest.class.getResource("/font/sarasa-gothic-sc-regular.ttf").toURI().getPath();
int texHeight = 20;
// JImFont sarasaGothic = fonts.addFontFromFile(fontPath,
// texHeight,
// fonts.getGlyphRangesForChineseSimplifiedCommon());
System.out.println(texHeight);
long lastMovedTime = 0;
JImStyle style = gui.getStyle();
style.setItemSpacingX(2f);
while (!gui.windowShouldClose()) {
// long deltaTime = (long) (io.getDeltaTime() * 1000);
// Thread.sleep(LIMIT - deltaTime < 0 ? 0 : (LIMIT - deltaTime));
gui.initNewFrame();
char[] inputString = io.getInputChars();
io.clearInputCharacters();
builder.insert(cursor, inputString);
cursor += inputString.length;
if (gui.isKeyPressed(io.keyMapAt(JImDefaultKeys.LeftArrow)) && cursor > 0) {
lastMovedTime = System.currentTimeMillis();
cursor--;
}
if (gui.isKeyPressed(io.keyMapAt(JImDefaultKeys.RightArrow)) && cursor < builder.length()) {
lastMovedTime = System.currentTimeMillis();
cursor++;
}
if (gui.isKeyPressed(io.keyMapAt(JImDefaultKeys.Enter))) builder.insert(cursor++, '\n');
if (gui.isKeyPressed(io.keyMapAt(JImDefaultKeys.Backspace)) && cursor > 0) builder.deleteCharAt(--cursor);
gui.begin("Editor");
int length = builder.length();
for (int i = 0; i <= length; i++) {
if (i == cursor && ((System.currentTimeMillis() - lastMovedTime) / 500) % 2 == 0) {
float cursorPosX = gui.getCursorPosX() + gui.getWindowPosX() - 1;
float cursorPosY = gui.getCursorPosY() + gui.getWindowPosY();
gui.windowDrawListAddLine(cursorPosX, cursorPosY, cursorPosX, cursorPosY + texHeight, 0xffffffff, 1.5f);
}
if (i == length) break;
char c = builder.charAt(i);
if (c != '\n') {
gui.text(String.valueOf(c));
gui.sameLine();
} else gui.newLine();
}
gui.end();
gui.render();
}
}
}
}