From b81a4dda9812f96cc824b49d2afee77fd89a0998 Mon Sep 17 00:00:00 2001 From: Klesti Selimaj Date: Wed, 25 Mar 2026 22:18:16 +0100 Subject: [PATCH] Improved rounded rectangles #59 --- .../java/org/saturnclient/ui/RenderScope.java | 25 ++++++++++++++- .../ui/elements/ImageTexture.java | 2 +- .../saturnclient/ui/resources/SvgTexture.java | 32 ++++++++++++------- 3 files changed, 46 insertions(+), 13 deletions(-) diff --git a/src/main/java/org/saturnclient/ui/RenderScope.java b/src/main/java/org/saturnclient/ui/RenderScope.java index 0caeb23..3ef5544 100644 --- a/src/main/java/org/saturnclient/ui/RenderScope.java +++ b/src/main/java/org/saturnclient/ui/RenderScope.java @@ -1,9 +1,14 @@ package org.saturnclient.ui; +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; + import org.saturnclient.common.ref.asset.IdentifierRef; import org.saturnclient.common.ref.asset.SpriteRef; import org.saturnclient.common.ref.game.ItemStackRef; import org.saturnclient.common.ref.render.MatrixStackRef; +import org.saturnclient.ui.resources.SvgTexture; public interface RenderScope { @@ -24,7 +29,25 @@ public interface RenderScope { // ---------------------------- void drawRectangle(int x, int y, int width, int height, int color); - void drawRoundedRectangle(int x, int y, int width, int height, int radius, int color); + default void drawRoundedRectangle(int x, int y, int width, int height, int radius, int color) { + if (color == 0) + return; + radius = Math.min(radius, Math.min(width, height)); + + String svg = String.format( + "" + + "" + + "", + width, height, + width, height, + radius, radius); + + InputStream svgStream = new ByteArrayInputStream(svg.getBytes(StandardCharsets.UTF_8)); + + drawTexture(SvgTexture.getSvg(svgStream, + IdentifierRef.ofSaturn("textures/gui/tmp_rect/rounded_" + width + "_" + height + "_" + radius), + width * 3, height * 3), x, y, 0, 0, width, height, color); + } void drawBorder(int x, int y, int width, int height, int color); diff --git a/src/main/java/org/saturnclient/ui/elements/ImageTexture.java b/src/main/java/org/saturnclient/ui/elements/ImageTexture.java index da81c02..ca73287 100644 --- a/src/main/java/org/saturnclient/ui/elements/ImageTexture.java +++ b/src/main/java/org/saturnclient/ui/elements/ImageTexture.java @@ -24,7 +24,7 @@ public class ImageTexture extends Element { int renderHeight = (int) (height * client.getWindow().getFramebufferHeight() / client.getWindow().getHeight()); - IdentifierRef pngId = SvgTexture.getSvg(client, sprite, renderWidth * 2, renderHeight * 2); + IdentifierRef pngId = SvgTexture.getSvg(sprite, renderWidth * 2, renderHeight * 2); this.sprite = pngId; if (pngId == null) { diff --git a/src/main/java/org/saturnclient/ui/resources/SvgTexture.java b/src/main/java/org/saturnclient/ui/resources/SvgTexture.java index 67a1e93..4ab40cc 100644 --- a/src/main/java/org/saturnclient/ui/resources/SvgTexture.java +++ b/src/main/java/org/saturnclient/ui/resources/SvgTexture.java @@ -12,7 +12,6 @@ import com.kitfox.svg.SVGUniverse; import org.saturnclient.common.provider.Providers; import org.saturnclient.common.ref.asset.IdentifierRef; -import org.saturnclient.common.ref.game.MinecraftClientRef; public class SvgTexture { @@ -50,22 +49,33 @@ public class SvgTexture { return image; } - public static IdentifierRef getSvg(MinecraftClientRef client, IdentifierRef svgImage, int width, int height) { - IdentifierRef id = IdentifierRef - .of(svgImage.toString().replaceAll("\\.svg$", (width + "_" + height).toString() + ".png")); - - if (svgCache.contains(id)) { - return id; + public static IdentifierRef getSvg(InputStream stream, IdentifierRef output, int width, int height) { + if (svgCache.contains(output)) { + return output; } - try (InputStream svgStream = client.getResource(svgImage)) { + try { + BufferedImage image = renderSvg(stream, width, height); + Providers.saturn.registerBufferedImageTexture(output, image); + svgCache.add(output); + } catch (Exception e) { + e.printStackTrace(); + return null; + } - BufferedImage image = renderSvg(svgStream, width, height); + return output; + } - Providers.saturn.registerBufferedImageTexture(id, image); + public static IdentifierRef getSvg(IdentifierRef svgImage, int width, int height) { + IdentifierRef output = IdentifierRef + .of(svgImage.toString().replaceAll("\\.svg$", (width + "_" + height).toString() + ".png")); - return id; + if (svgCache.contains(output)) { + return output; + } + try (InputStream svgStream = Providers.saturn.getClient().getResource(svgImage)) { + return getSvg(svgStream, output, width, height); } catch (Exception e) { e.printStackTrace(); return null;