Skip to content

Commit

Permalink
Add internal API for text field
Browse files Browse the repository at this point in the history
  • Loading branch information
Pixaurora committed Jan 20, 2025
1 parent ceee99e commit 6f47dd5
Show file tree
Hide file tree
Showing 16 changed files with 202 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,14 @@ public AlignedGuiDisplay(GuiDisplay parent, Alignment alignment, Size window) {
this.window = window;
}

private int alignX(int x, int y) {
return this.alignment.alignX(x, y, this.window);
@Override
public int alignX(int x, int y) {
return this.alignment.alignX(super.alignX(x, y), super.alignY(x, y), this.window);
}

private int alignY(int x, int y) {
return this.alignment.alignY(x, y, this.window);
@Override
public int alignY(int x, int y) {
return this.alignment.alignY(super.alignX(x, y), super.alignY(x, y), this.window);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,4 +53,12 @@ public default void drawGui(GuiTexture texture, Point pos) {
public default void drawGui(GuiTexture texture, Point pos, Size subsection, Point offset) {
this.drawGuiTextureSubsection(texture.path(), texture.size(), pos, subsection, offset);
}

public default int alignX(int x, int y) {
return x;
}

public default int alignY(int x, int y) {
return y;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,4 +39,14 @@ public void drawText(Component text, Color color, int x, int y, boolean shadowed
public void drawTextBox(TextBox box, Alignment alignment, Size window) {
this.parent.drawTextBox(box, alignment, window);
}

@Override
public int alignX(int x, int y) {
return this.parent.alignX(x, y);
}

@Override
public int alignY(int x, int y) {
return this.parent.alignY(x, y);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
import net.pixaurora.kitten_cube.impl.ui.display.GuiDisplay;
import net.pixaurora.kitten_cube.impl.ui.screen.align.Alignment;
import net.pixaurora.kitten_cube.impl.ui.widget.Widget;
import net.pixaurora.kitten_cube.impl.ui.widget.event.WindowUpdateEvent;
import net.pixaurora.kitten_cube.impl.ui.widget.event.WindowUpdateEventImpl;

public abstract class ScreenTemplate implements Screen {
private boolean initializedWidgets = false;
Expand Down Expand Up @@ -72,14 +74,16 @@ protected Size window() {

private void updateWindow(Size window) {
for (WidgetContainer<?> widget : this.widgets) {
widget.onWindowUpdate(window);
WindowUpdateEvent event = new WindowUpdateEventImpl(window, this);

widget.onWindowUpdate(event);
}
}

protected final <W extends Widget> WidgetContainer<W> addWidget(W widget) {
WidgetContainer<W> widgetContainer = new WidgetContainer<>(widget, this);
this.widgets.add(widgetContainer);
widgetContainer.onWindowUpdate(window);
widgetContainer.onWindowUpdate(new WindowUpdateEventImpl(window, this));

return widgetContainer;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import net.pixaurora.kitten_cube.impl.ui.screen.align.NestedAlignment;
import net.pixaurora.kitten_cube.impl.ui.screen.align.WidgetAnchor;
import net.pixaurora.kitten_cube.impl.ui.widget.Widget;
import net.pixaurora.kitten_cube.impl.ui.widget.event.WindowUpdateEvent;

public class WidgetContainer<T extends Widget> {
private final T widget;
Expand Down Expand Up @@ -75,8 +76,8 @@ public Alignment relativeTo(WidgetAnchor anchor) {
return new RelativeToSelfAlignment(this, anchor);
}

public void onWindowUpdate(Size window) {
this.widget.onWindowUpdate(window);
public void onWindowUpdate(WindowUpdateEvent event) {
this.widget.onWindowUpdate(event);
}

private static class SelfAlignment implements NestedAlignment {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import net.pixaurora.kitten_cube.impl.ui.display.GuiDisplay;
import net.pixaurora.kitten_cube.impl.ui.screen.align.Alignment;
import net.pixaurora.kitten_cube.impl.ui.texture.GuiTexture;
import net.pixaurora.kitten_cube.impl.ui.widget.event.WindowUpdateEvent;

public class TiledBackground implements IncorporealWidget {
private final GuiTexture texture;
Expand All @@ -27,7 +28,9 @@ public void draw(GuiDisplay gui, Point mousePos) {
}

@Override
public void onWindowUpdate(Size window) {
public void onWindowUpdate(WindowUpdateEvent event) {
Size window = event.newWindow();

Size texture = this.texture.size();

Size tileCounts = Size.of((int) Math.ceil((float) window.width() / texture.width()),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,16 @@

import net.pixaurora.kitten_cube.impl.math.Size;
import net.pixaurora.kitten_cube.impl.ui.Drawable;
import net.pixaurora.kitten_cube.impl.ui.screen.WidgetContainer;
import net.pixaurora.kitten_cube.impl.ui.screen.align.Alignment;
import net.pixaurora.kitten_cube.impl.ui.widget.event.WindowUpdateEvent;
import net.pixaurora.kitten_cube.impl.ui.widget.surface.ClickableSurface;

public interface Widget extends Drawable, ClickableSurface {
public default void onWindowUpdate(Size window) {
public default void init(WidgetContainer<?> container) {
}

public default void onWindowUpdate(WindowUpdateEvent event) {
}

public default void tick() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package net.pixaurora.kitten_cube.impl.ui.widget.event;

import net.pixaurora.kitten_cube.impl.math.Size;
import net.pixaurora.kitten_cube.impl.ui.screen.Screen;

public interface WindowUpdateEvent {
public Size newWindow();

public Screen screen();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package net.pixaurora.kitten_cube.impl.ui.widget.event;

import net.pixaurora.kitten_cube.impl.math.Size;
import net.pixaurora.kitten_cube.impl.ui.screen.Screen;

public class WindowUpdateEventImpl implements WindowUpdateEvent {
private final Size newWindow;
private final Screen screen;

public WindowUpdateEventImpl(Size newWindow, Screen screen) {
this.newWindow = newWindow;
this.screen = screen;
}

@Override
public Size newWindow() {
return this.newWindow;
}

@Override
public Screen screen() {
return this.screen;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package net.pixaurora.kitten_cube.impl.ui.widget.text;

import net.pixaurora.kitten_cube.impl.math.Point;
import net.pixaurora.kitten_cube.impl.ui.controls.MouseButton;
import net.pixaurora.kitten_cube.impl.ui.display.GuiDisplay;
import net.pixaurora.kitten_cube.impl.ui.widget.Widget;
import net.pixaurora.kitten_cube.impl.ui.widget.event.WindowUpdateEvent;
import net.pixaurora.kitten_heart.impl.KitTunes;

public interface TextField extends Widget {
public static TextField regular() {
return KitTunes.UI_LAYER.newTextField(TextFieldBackground.REGULAR_BACKGROUND);
}

@Override
default void onWindowUpdate(WindowUpdateEvent event) {
KitTunes.UI_LAYER.addTextField(event.screen(), this);
}

public String input();

public void setPos(int x, int y);

@Override
default void draw(GuiDisplay gui, Point mousePos) {
this.setPos(gui.alignX(0, 0), gui.alignY(0, 0));
}

@Override
default void onClick(Point mousePos, MouseButton button) {
return;
}

@Override
default boolean isWithinBounds(Point mousePos) {
return false;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package net.pixaurora.kitten_cube.impl.ui.widget.text;

import java.util.function.Function;

import net.pixaurora.kitten_cube.impl.math.Size;
import net.pixaurora.kitten_cube.impl.ui.texture.Texture;
import net.pixaurora.kitten_heart.impl.KitTunes;

public class TextFieldBackground<T> {
public static final TextFieldBackground<Texture> REGULAR_BACKGROUND = new TextFieldBackground<>(
Texture.of(KitTunes.resource("textures/gui/sprites/widget/text_field/normal.png"), Size.of(200, 20)),
Texture.of(KitTunes.resource("textures/gui/sprites/widget/text_field/highlighted.png"), Size.of(200, 20)));

private final T normal;
private final T highlighted;

public TextFieldBackground(T normal, T highlighted) {
this.normal = normal;
this.highlighted = highlighted;
}

public <G> TextFieldBackground<G> map(Function<T, G> mapFunction) {
return new TextFieldBackground<G>(mapFunction.apply(this.normal), mapFunction.apply(this.highlighted));
}

public T normal() {
return normal;
}

public T getHighlighted() {
return highlighted;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@
import net.pixaurora.kitten_cube.impl.text.TextProcessor;
import net.pixaurora.kitten_cube.impl.ui.screen.Screen;
import net.pixaurora.kitten_cube.impl.ui.sound.SoundPlayer;
import net.pixaurora.kitten_cube.impl.ui.texture.Texture;
import net.pixaurora.kitten_cube.impl.ui.toast.Toast;
import net.pixaurora.kitten_cube.impl.ui.widget.text.TextField;
import net.pixaurora.kitten_cube.impl.ui.widget.text.TextFieldBackground;
import net.pixaurora.kitten_heart.impl.resource.temp.FileAccess;

/**
Expand All @@ -32,4 +35,12 @@ public interface UICompat extends SoundPlayer, TextProcessor {
public void openURL(String url);

public FileAccess accessResource(ResourcePath path) throws IOException;

public default TextField newTextField(TextFieldBackground<Texture> background) {
throw new RuntimeException("No implementation for `newTextField` defined!");
}

public default void addTextField(Screen screen, TextField field) {
throw new RuntimeException("No implementation for `addTextField` defined!");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,10 @@ public void firstInit() {
this.addWidget(RectangularButton.vanillaButton(REGISTER_SCROBBLER_LABEL,
button -> MinecraftClient.setScreen(LastFMScrobbler.TYPE.setup().get().setupScreen(this))))
.at(widgetPos);

widgetPos = Point.of(0, 0);
this.addWidget(RectangularButton.vanillaButton(Component.literal("demo screeb....."),
button -> MinecraftClient.setScreen(new TextFieldDemoScreen(this))));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package net.pixaurora.kitten_heart.impl.ui.screen;

import net.pixaurora.kitten_cube.impl.math.Point;
import net.pixaurora.kitten_cube.impl.text.Component;
import net.pixaurora.kitten_cube.impl.ui.screen.ReturnToPreviousScreen;
import net.pixaurora.kitten_cube.impl.ui.screen.Screen;
import net.pixaurora.kitten_cube.impl.ui.screen.WidgetContainer;
import net.pixaurora.kitten_cube.impl.ui.screen.align.Alignment;
import net.pixaurora.kitten_cube.impl.ui.screen.align.WidgetAnchor;
import net.pixaurora.kitten_cube.impl.ui.widget.button.RectangularButton;
import net.pixaurora.kitten_cube.impl.ui.widget.text.TextField;
import net.pixaurora.kitten_heart.impl.KitTunes;

public class TextFieldDemoScreen extends ReturnToPreviousScreen {
public TextFieldDemoScreen(Screen previous) {
super(previous);
}

@Override
protected Alignment alignmentMethod() {
return Alignment.CENTER;
}

@Override
protected void firstInit() {
WidgetContainer<TextField> textField = this.addWidget(TextField.regular()).anchor(WidgetAnchor.TOP_MIDDLE);
this.addWidget(RectangularButton.vanillaButton(Component.literal("log text field"),
button -> KitTunes.LOGGER.info("Text field input: " + textField.get().input())))
.anchor(WidgetAnchor.TOP_MIDDLE)
.align(textField.relativeTo(WidgetAnchor.BOTTOM_MIDDLE))
.at(Point.of(0, 10));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import net.pixaurora.kitten_cube.impl.ui.tile.PositionedInnerTile;
import net.pixaurora.kitten_cube.impl.ui.tile.TileRow;
import net.pixaurora.kitten_cube.impl.ui.widget.Widget;
import net.pixaurora.kitten_cube.impl.ui.widget.event.WindowUpdateEvent;
import net.pixaurora.kitten_heart.impl.KitTunes;
import net.pixaurora.kitten_heart.impl.listener.HistoryWidgetUpdater;
import net.pixaurora.kitten_heart.impl.ui.widget.history.HistoryTileSet.Row;
Expand All @@ -39,8 +40,8 @@ public HistoryWidget(int verticalPadding) {
}

@Override
public void onWindowUpdate(Size window) {
this.window.set(window);
public void onWindowUpdate(WindowUpdateEvent event) {
this.window.set(event.newWindow());
this.update();
HistoryWidgetUpdater.LISTENING_WIDGET.set(this);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import net.pixaurora.kitten_cube.impl.ui.tile.PositionedInnerTile;
import net.pixaurora.kitten_cube.impl.ui.tile.TileColumn;
import net.pixaurora.kitten_cube.impl.ui.widget.Widget;
import net.pixaurora.kitten_cube.impl.ui.widget.event.WindowUpdateEvent;

public class ProgressBar implements Widget {
private final List<PositionedInnerTile> tiles;
Expand All @@ -31,8 +32,8 @@ public ProgressBar(ProgressProvider progressProvider, ProgressBarTileSets tilese
}

@Override
public void onWindowUpdate(Size window) {
this.window = Optional.of(window);
public void onWindowUpdate(WindowUpdateEvent event) {
this.window = Optional.of(event.newWindow());
this.update(true);
}

Expand Down

0 comments on commit 6f47dd5

Please sign in to comment.