Skip to content

Commit fa3ca97

Browse files
committed
added text field horizontal scrolling + fixed int to text conversion
1 parent c7898c7 commit fa3ca97

5 files changed

Lines changed: 62 additions & 7 deletions

File tree

src/main/java/io/github/techstreet/dfscript/screen/CScreen.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,13 +65,22 @@ public boolean charTyped(char ch, int keyCode) {
6565
return super.charTyped(ch, keyCode);
6666
}
6767

68+
@Override
6869
public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
6970
for (CWidget cWidget : widgets) {
7071
cWidget.keyPressed(keyCode, scanCode, modifiers);
7172
}
7273

7374
return super.keyPressed(keyCode, scanCode, modifiers);
7475
}
76+
@Override
77+
public boolean keyReleased(int keyCode, int scanCode, int modifiers) {
78+
for (CWidget cWidget : widgets) {
79+
cWidget.keyReleased(keyCode, scanCode, modifiers);
80+
}
81+
82+
return super.keyReleased(keyCode, scanCode, modifiers);
83+
}
7584

7685
@Override
7786
public boolean mouseClicked(double mouseX, double mouseY, int button) {

src/main/java/io/github/techstreet/dfscript/screen/script/ScriptEditActionScreen.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
import io.github.techstreet.dfscript.script.argument.*;
1212

1313
import java.awt.Rectangle;
14+
import java.math.RoundingMode;
15+
import java.text.DecimalFormat;
1416
import java.util.ArrayList;
1517
import java.util.List;
1618
import net.minecraft.client.gui.DrawableHelper;
@@ -41,7 +43,9 @@ public ScriptEditActionScreen(ScriptAction action, Script script) {
4143
} else if (arg instanceof ScriptNumberArgument na) {
4244
icon = new ItemStack(Items.SLIME_BALL);
4345
if (na.value() % 1 == 0) {
44-
text = String.valueOf((int) na.value());
46+
DecimalFormat df = new DecimalFormat("#");
47+
df.setRoundingMode(RoundingMode.UNNECESSARY);
48+
text = df.format(na.value());
4549
} else {
4650
text = String.valueOf(na.value());
4751
}

src/main/java/io/github/techstreet/dfscript/screen/widget/CTextField.java

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,16 @@ public class CTextField implements CWidget {
1515

1616
boolean selected;
1717
boolean editable;
18+
19+
boolean xScrolling = false;
1820
public int textColor = 0xFFFFFFFF;
1921
String text;
2022
Runnable changedListener;
2123
int cursorPos = 0;
2224
boolean hasSelection = false;
2325
int selectionPos = 0;
2426
int scroll = 0;
27+
int xScroll = 0;
2528

2629
public CTextField(String text, int x, int y, int width, int height, boolean editable) {
2730
this.text = text;
@@ -63,7 +66,7 @@ public void render(MatrixStack stack, int mouseX, int mouseY, float tickDelta) {
6366
(int) (end.getY() - begin.getY())*guiScale
6467
);
6568

66-
stack.translate(2, 2 + scroll, 0);
69+
stack.translate(2 + xScroll, 2 + scroll, 0);
6770
stack.scale(0.5f, 0.5f, 0);
6871

6972
TextRenderer f = DFScript.MC.textRenderer;
@@ -129,8 +132,15 @@ public void charTyped(char ch, int keyCode) {
129132
}
130133
}
131134

135+
public void keyReleased(int keyCode, int scanCode, int modifiers)
136+
{
137+
if(keyCode == 341) xScrolling = false; // left control
138+
}
139+
132140
@Override
133141
public void keyPressed(int keyCode, int scanCode, int modifiers) {
142+
if(keyCode == 341) xScrolling = true; // left control
143+
134144
if (editable && selected) {
135145
String lastText = text;
136146
TextRenderer f = DFScript.MC.textRenderer;
@@ -296,11 +306,35 @@ public boolean mouseClicked(double x, double y, int button) {
296306

297307
@Override
298308
public void mouseScrolled(double mouseX, double mouseY, double amount) {
299-
if (editable && selected) {
300-
scroll += amount * 5;
301-
TextRenderer f = DFScript.MC.textRenderer;
302-
scroll = Math.min(0, Math.max(scroll, -(getLines().length + 1) * f.fontHeight / 2 + height - 2));
309+
if (!editable || !selected) {
310+
return;
303311
}
312+
313+
TextRenderer f = DFScript.MC.textRenderer;
314+
315+
if(xScrolling)
316+
{
317+
int maxScroll = 0;
318+
319+
for (String line : getLines()) {
320+
int lineWidth = f.getWidth(line);
321+
322+
if(maxScroll < lineWidth) {
323+
maxScroll = lineWidth;
324+
}
325+
}
326+
327+
maxScroll /= 2;
328+
maxScroll -= width - 2;
329+
330+
xScroll += amount * 5;
331+
xScroll = Math.min(0, Math.max(xScroll, -maxScroll));
332+
333+
return;
334+
}
335+
336+
scroll += amount * 5;
337+
scroll = Math.min(0, Math.max(scroll, -(getLines().length + 1) * f.fontHeight / 2 + height - 2));
304338
}
305339

306340
public int getCursorLineIndex() {

src/main/java/io/github/techstreet/dfscript/screen/widget/CWidget.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ default void charTyped(char ch, int keyCode) {
1717
default void keyPressed(int keyCode, int scanCode, int modifiers) {
1818
}
1919

20+
default void keyReleased(int keyCode, int scanCode, int modifiers) {
21+
}
22+
2023
default void mouseScrolled(double mouseX, double mouseY, double amount) {
2124
}
2225

src/main/java/io/github/techstreet/dfscript/script/values/ScriptNumberValue.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package io.github.techstreet.dfscript.script.values;
22

3+
import java.math.RoundingMode;
4+
import java.text.DecimalFormat;
5+
36
public class ScriptNumberValue extends ScriptValue {
47

58
private final double value;
@@ -30,7 +33,9 @@ public boolean valueEquals(ScriptValue other) {
3033
@Override
3134
public String asText() {
3235
if (value % 1 == 0) {
33-
return String.valueOf((int) value);
36+
DecimalFormat df = new DecimalFormat("#");
37+
df.setRoundingMode(RoundingMode.UNNECESSARY);
38+
return df.format(value);
3439
}
3540
return String.valueOf(value);
3641
}

0 commit comments

Comments
 (0)