From 5759ee8ab8e43190ea2a688b5293d0f013ded1d0 Mon Sep 17 00:00:00 2001 From: Juuz <6596629+Juuxel@users.noreply.github.com> Date: Mon, 12 Sep 2022 02:14:25 +0300 Subject: Make item slots paint a texture instead of coloured rectangles Closes #128. --- .../cotton/gui/client/BackgroundPainter.java | 35 +++++++++------------ .../cottonmc/cotton/gui/widget/WItemSlot.java | 12 +++++++ .../assets/libgui/textures/widget/item_slot.png | Bin 0 -> 738 bytes 3 files changed, 27 insertions(+), 20 deletions(-) create mode 100644 src/main/resources/assets/libgui/textures/widget/item_slot.png diff --git a/src/main/java/io/github/cottonmc/cotton/gui/client/BackgroundPainter.java b/src/main/java/io/github/cottonmc/cotton/gui/client/BackgroundPainter.java index 36c6c3a..654442c 100644 --- a/src/main/java/io/github/cottonmc/cotton/gui/client/BackgroundPainter.java +++ b/src/main/java/io/github/cottonmc/cotton/gui/client/BackgroundPainter.java @@ -44,6 +44,8 @@ public interface BackgroundPainter { /** * The {@code SLOT} background painter draws item slots or slot-like widgets. + * + *
For {@linkplain WItemSlot item slots}, this painter uses {@link WItemSlot#SLOT_TEXTURE libgui:textures/widget/item_slot.png}.
*/
public static BackgroundPainter SLOT = (matrices, left, top, panel) -> {
if (!(panel instanceof WItemSlot)) {
@@ -53,31 +55,24 @@ public interface BackgroundPainter {
for(int x = 0; x < slot.getWidth()/18; ++x) {
for(int y = 0; y < slot.getHeight()/18; ++y) {
int index = x + y * (slot.getWidth() / 18);
- int lo = 0xB8000000;
- int bg = 0x4C000000;
- //this will cause a slightly discolored bottom border on vanilla backgrounds but it's necessary for color support, it shouldn't be *too* visible unless you're looking for it
- int hi = 0xB8FFFFFF;
+ float px = 1 / 64f;
if (slot.isBigSlot()) {
- ScreenDrawing.drawBeveledPanel(matrices, (x * 18) + left - 4, (y * 18) + top - 4, 26, 26,
- lo, bg, hi);
+ int sx = (x * 18) + left - 4;
+ int sy = (y * 18) + top - 4;
+ ScreenDrawing.texturedRect(matrices, sx, sy, 26, 26, WItemSlot.SLOT_TEXTURE,
+ 18 * px, 0, 44 * px, 26 * px, 0xFF_FFFFFF);
if (slot.getFocusedSlot() == index) {
- int sx = (x * 18) + left - 4;
- int sy = (y * 18) + top - 4;
- ScreenDrawing.coloredRect(matrices, sx, sy, 26, 1, 0xFF_FFFFA0);
- ScreenDrawing.coloredRect(matrices, sx, sy + 1, 1, 26 - 1, 0xFF_FFFFA0);
- ScreenDrawing.coloredRect(matrices, sx + 26 - 1, sy + 1, 1, 26 - 1, 0xFF_FFFFA0);
- ScreenDrawing.coloredRect(matrices, sx + 1, sy + 26 - 1, 26 - 1, 1, 0xFF_FFFFA0);
+ ScreenDrawing.texturedRect(matrices, sx, sy, 26, 26, WItemSlot.SLOT_TEXTURE,
+ 18 * px, 26 * px, 44 * px, 52 * px, 0xFF_FFFFFF);
}
} else {
- ScreenDrawing.drawBeveledPanel(matrices, (x * 18) + left, (y * 18) + top, 16+2, 16+2,
- lo, bg, hi);
+ int sx = (x * 18) + left;
+ int sy = (y * 18) + top;
+ ScreenDrawing.texturedRect(matrices, sx, sy, 18, 18, WItemSlot.SLOT_TEXTURE,
+ 0, 0, 18 * px, 18 * px, 0xFF_FFFFFF);
if (slot.getFocusedSlot() == index) {
- int sx = (x * 18) + left;
- int sy = (y * 18) + top;
- ScreenDrawing.coloredRect(matrices, sx, sy, 18, 1, 0xFF_FFFFA0);
- ScreenDrawing.coloredRect(matrices, sx, sy + 1, 1, 18 - 1, 0xFF_FFFFA0);
- ScreenDrawing.coloredRect(matrices, sx + 18 - 1, sy + 1, 1, 18 - 1, 0xFF_FFFFA0);
- ScreenDrawing.coloredRect(matrices, sx + 1, sy + 18 - 1, 18 - 1, 1, 0xFF_FFFFA0);
+ ScreenDrawing.texturedRect(matrices, sx, sy, 18, 18, WItemSlot.SLOT_TEXTURE,
+ 0, 26 * px, 18 * px, 44 * px, 0xFF_FFFFFF);
}
}
}
diff --git a/src/main/java/io/github/cottonmc/cotton/gui/widget/WItemSlot.java b/src/main/java/io/github/cottonmc/cotton/gui/widget/WItemSlot.java
index fd94100..0ec0869 100644
--- a/src/main/java/io/github/cottonmc/cotton/gui/widget/WItemSlot.java
+++ b/src/main/java/io/github/cottonmc/cotton/gui/widget/WItemSlot.java
@@ -1,5 +1,7 @@
package io.github.cottonmc.cotton.gui.widget;
+import io.github.cottonmc.cotton.gui.impl.LibGuiCommon;
+
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.MinecraftClient;
@@ -20,6 +22,9 @@ import io.github.cottonmc.cotton.gui.impl.VisualLogger;
import io.github.cottonmc.cotton.gui.impl.client.NarrationMessages;
import io.github.cottonmc.cotton.gui.widget.data.InputResult;
import io.github.cottonmc.cotton.gui.widget.icon.Icon;
+
+import net.minecraft.util.Identifier;
+
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
@@ -65,6 +70,13 @@ import java.util.function.Predicate;
*
*/
public class WItemSlot extends WWidget {
+ /**
+ * The default texture of item slots and {@link BackgroundPainter#SLOT}.
+ *
+ * @since 6.2.0
+ */
+ public static final Identifier SLOT_TEXTURE = new Identifier(LibGuiCommon.MOD_ID, "textures/widget/item_slot.png");
+
private static final VisualLogger LOGGER = new VisualLogger(WItemSlot.class);
private final List