diff --git a/src/main/java/com/terraformersmc/modmenu/gui/ModsScreen.java b/src/main/java/com/terraformersmc/modmenu/gui/ModsScreen.java index 0e5ec6ea..76c278ae 100644 --- a/src/main/java/com/terraformersmc/modmenu/gui/ModsScreen.java +++ b/src/main/java/com/terraformersmc/modmenu/gui/ModsScreen.java @@ -1,7 +1,6 @@ package com.terraformersmc.modmenu.gui; import com.google.common.base.Joiner; -import com.mojang.blaze3d.systems.RenderSystem; import com.terraformersmc.modmenu.ModMenu; import com.terraformersmc.modmenu.config.ModMenuConfig; import com.terraformersmc.modmenu.config.ModMenuConfigManager; @@ -297,24 +296,23 @@ public boolean charTyped(char chr, int keyCode) { } @Override - public void render(DrawContext DrawContext, int mouseX, int mouseY, float delta) { - super.render(DrawContext, mouseX, mouseY, delta); + public void render(DrawContext context, int mouseX, int mouseY, float delta) { + super.render(context, mouseX, mouseY, delta); ModListEntry selectedEntry = selected; if (selectedEntry != null) { - this.descriptionListWidget.render(DrawContext, mouseX, mouseY, delta); + this.descriptionListWidget.render(context, mouseX, mouseY, delta); } - this.modList.render(DrawContext, mouseX, mouseY, delta); - this.searchBox.render(DrawContext, mouseX, mouseY, delta); - RenderSystem.disableBlend(); - DrawContext.drawCenteredTextWithShadow(this.textRenderer, this.title, this.modList.getWidth() / 2, 8, 16777215); + this.modList.render(context, mouseX, mouseY, delta); + this.searchBox.render(context, mouseX, mouseY, delta); + context.drawCenteredTextWithShadow(this.textRenderer, this.title, this.modList.getWidth() / 2, 8, 16777215); if (!ModMenuConfig.DISABLE_DRAG_AND_DROP.getValue()) { - DrawContext.drawCenteredTextWithShadow(this.textRenderer, + context.drawCenteredTextWithShadow(this.textRenderer, ModMenuScreenTexts.DROP_INFO_LINE_1, this.width - this.modList.getWidth() / 2, RIGHT_PANE_Y / 2 - client.textRenderer.fontHeight - 1, Formatting.GRAY.getColorValue() ); - DrawContext.drawCenteredTextWithShadow(this.textRenderer, + context.drawCenteredTextWithShadow(this.textRenderer, ModMenuScreenTexts.DROP_INFO_LINE_2, this.width - this.modList.getWidth() / 2, RIGHT_PANE_Y / 2 + 1, @@ -327,7 +325,7 @@ public void render(DrawContext DrawContext, int mouseX, int mouseY, float delta) if (this.filterOptionsShown) { if (!ModMenuConfig.SHOW_LIBRARIES.getValue() || textRenderer.getWidth(fullModCount) <= this.filtersX - 5) { - DrawContext.drawText(textRenderer, + context.drawText(textRenderer, fullModCount.asOrderedText(), this.searchBoxX, 52, @@ -335,14 +333,14 @@ public void render(DrawContext DrawContext, int mouseX, int mouseY, float delta) true ); } else { - DrawContext.drawText(textRenderer, + context.drawText(textRenderer, computeModCountText(false, false).asOrderedText(), this.searchBoxX, 46, 0xFFFFFF, true ); - DrawContext.drawText(textRenderer, + context.drawText(textRenderer, computeLibraryCountText(false).asOrderedText(), this.searchBoxX, 57, @@ -353,7 +351,7 @@ public void render(DrawContext DrawContext, int mouseX, int mouseY, float delta) } else { if (!ModMenuConfig.SHOW_LIBRARIES.getValue() || textRenderer.getWidth(fullModCount) <= modList.getWidth() - 5) { - DrawContext.drawText(textRenderer, + context.drawText(textRenderer, fullModCount.asOrderedText(), this.searchBoxX, 52, @@ -361,14 +359,14 @@ public void render(DrawContext DrawContext, int mouseX, int mouseY, float delta) true ); } else { - DrawContext.drawText(textRenderer, + context.drawText(textRenderer, computeModCountText(false, false).asOrderedText(), this.searchBoxX, 46, 0xFFFFFF, true ); - DrawContext.drawText(textRenderer, + context.drawText(textRenderer, computeLibraryCountText(false).asOrderedText(), this.searchBoxX, 57, @@ -383,24 +381,14 @@ public void render(DrawContext DrawContext, int mouseX, int mouseY, float delta) Mod mod = selectedEntry.getMod(); int x = this.rightPaneX; if ("java".equals(mod.getId())) { - DrawingUtil.drawRandomVersionBackground(mod, DrawContext, x, RIGHT_PANE_Y, 32, 32); + DrawingUtil.drawRandomVersionBackground(mod, context, x, RIGHT_PANE_Y, 32, 32); } - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - RenderSystem.enableBlend(); - DrawContext.drawTexture(RenderLayer::getGuiTextured, this.selected.getIconTexture(), x, RIGHT_PANE_Y, 0.0F, 0.0F, 32, 32, 32, 32); - RenderSystem.disableBlend(); + context.drawTexture(RenderLayer::getGuiTextured, this.selected.getIconTexture(), x, RIGHT_PANE_Y, 0.0F, 0.0F, 32, 32, 32, 32); int lineSpacing = textRenderer.fontHeight + 1; int imageOffset = 36; Text name = Text.literal(mod.getTranslatedName()); - StringVisitable trimmedName = name; - int maxNameWidth = this.width - (x + imageOffset); - if (textRenderer.getWidth(name) > maxNameWidth) { - StringVisitable ellipsis = StringVisitable.plain("..."); - trimmedName = StringVisitable.concat(textRenderer.trimToWidth(name, - maxNameWidth - textRenderer.getWidth(ellipsis) - ), ellipsis); - } - DrawContext.drawText(textRenderer, + StringVisitable trimmedName = DrawingUtil.getTrimmedName(name, this.width - (x + imageOffset), this.textRenderer); + context.drawText(textRenderer, Language.getInstance().reorder(trimmedName), x + imageOffset, RIGHT_PANE_Y + 1, @@ -423,10 +411,10 @@ public void render(DrawContext DrawContext, int mouseX, int mouseY, float delta) this.init = false; } if (!ModMenuConfig.HIDE_BADGES.getValue()) { - modBadgeRenderer.draw(DrawContext, mouseX, mouseY); + modBadgeRenderer.draw(context, mouseX, mouseY); } if (mod.isReal()) { - DrawContext.drawText(textRenderer, + context.drawText(textRenderer, mod.getPrefixedVersion(), x + imageOffset, RIGHT_PANE_Y + 2 + lineSpacing, @@ -443,7 +431,7 @@ public void render(DrawContext DrawContext, int mouseX, int mouseY, float delta) } else { authors = names.get(0); } - DrawingUtil.drawWrappedString(DrawContext, + DrawingUtil.drawWrappedString(context, I18n.translate("modmenu.authorPrefix", authors), x + imageOffset, RIGHT_PANE_Y + 2 + lineSpacing * 2, diff --git a/src/main/java/com/terraformersmc/modmenu/gui/widget/DescriptionListWidget.java b/src/main/java/com/terraformersmc/modmenu/gui/widget/DescriptionListWidget.java index 8990b673..918e2de2 100644 --- a/src/main/java/com/terraformersmc/modmenu/gui/widget/DescriptionListWidget.java +++ b/src/main/java/com/terraformersmc/modmenu/gui/widget/DescriptionListWidget.java @@ -1,7 +1,5 @@ package com.terraformersmc.modmenu.gui.widget; -import com.mojang.blaze3d.platform.GlStateManager; -import com.mojang.blaze3d.systems.RenderSystem; import com.terraformersmc.modmenu.api.UpdateInfo; import com.terraformersmc.modmenu.config.ModMenuConfig; import com.terraformersmc.modmenu.gui.ModsScreen; @@ -9,9 +7,6 @@ import com.terraformersmc.modmenu.util.mod.Mod; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gl.GlUsage; -import net.minecraft.client.gl.ShaderProgramKeys; -import net.minecraft.client.gl.VertexBuffer; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.Element; import net.minecraft.client.gui.Selectable; @@ -21,12 +16,11 @@ import net.minecraft.client.gui.screen.option.CreditsAndAttributionScreen; import net.minecraft.client.gui.widget.ElementListWidget; import net.minecraft.client.gui.widget.EntryListWidget; -import net.minecraft.client.render.*; import net.minecraft.text.OrderedText; import net.minecraft.text.Text; +import net.minecraft.util.Colors; import net.minecraft.util.Formatting; import net.minecraft.util.Util; -import net.minecraft.util.math.MathHelper; import java.util.Collections; import java.util.List; @@ -51,6 +45,12 @@ public class DescriptionListWidget extends EntryListWidget 0) { - int p = (int) ((float) ((this.getBottom() - this.getY()) * (this.getBottom() - this.getY())) / (float) this.getContentsHeightWithPadding()); - p = MathHelper.clamp(p, 32, this.getBottom() - this.getY() - 8); - int q = (int) this.getScrollY() * (this.getBottom() - this.getY() - p) / maxScroll + this.getY(); - if (q < this.getY()) { - q = this.getY(); - } + @Override + protected void drawScrollbar(DrawContext context) { + int startX = this.getX(); + int endX = this.overflows() ? this.getScrollbarX() : this.getRight(); - bufferBuilder = tessellator.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR); - bufferBuilder.vertex(scrollbarStartX, this.getBottom(), 0.0F).color(0, 0, 0, 255); - bufferBuilder.vertex(scrollbarEndX, this.getBottom(), 0.0F).color(0, 0, 0, 255); - bufferBuilder.vertex(scrollbarEndX, this.getY(), 0.0F).color(0, 0, 0, 255); - bufferBuilder.vertex(scrollbarStartX, this.getY(), 0.0F).color(0, 0, 0, 255); - bufferBuilder.vertex(scrollbarStartX, q + p, 0.0F).color(128, 128, 128, 255); - bufferBuilder.vertex(scrollbarEndX, q + p, 0.0F).color(128, 128, 128, 255); - bufferBuilder.vertex(scrollbarEndX, q, 0.0F).color(128, 128, 128, 255); - bufferBuilder.vertex(scrollbarStartX, q, 0.0F).color(128, 128, 128, 255); - bufferBuilder.vertex(scrollbarStartX, q + p - 1, 0.0F).color(192, 192, 192, 255); - bufferBuilder.vertex(scrollbarEndX - 1, q + p - 1, 0.0F).color(192, 192, 192, 255); - bufferBuilder.vertex(scrollbarEndX - 1, q, 0.0F).color(192, 192, 192, 255); - bufferBuilder.vertex(scrollbarStartX, q, 0.0F).color(192, 192, 192, 255); - try { - builtBuffer = bufferBuilder.end(); - - try (VertexBuffer vertexBuffer = new VertexBuffer(GlUsage.STATIC_WRITE)) { - vertexBuffer.bind(); - vertexBuffer.upload(builtBuffer); - vertexBuffer.draw(RenderSystem.getModelViewMatrix(), RenderSystem.getProjectionMatrix(), RenderSystem.getShader()); - builtBuffer.close(); - } - } catch (Exception e) { - // Ignored - } - } + context.fillGradient(startX, this.getY(), endX, this.getY() + SHADOW_HEIGHT, SHADOW_Z, BLACK, TRANSPARENT); + context.fillGradient(startX, this.getBottom() - SHADOW_HEIGHT, endX, this.getBottom(), SHADOW_Z, TRANSPARENT, BLACK); + + super.drawScrollbar(context); } private Text creditsRoleText(String roleName) { @@ -420,7 +312,7 @@ public DescriptionEntry setUpdateTextEntry() { @Override public void render( - DrawContext DrawContext, + DrawContext context, int index, int y, int x, @@ -432,10 +324,10 @@ public void render( float delta ) { if (updateTextEntry) { - UpdateAvailableBadge.renderBadge(DrawContext, x + indent, y); + UpdateAvailableBadge.renderBadge(context, x + indent, y); x += 11; } - DrawContext.drawTextWithShadow(textRenderer, text, x + indent, y, 0xAAAAAA); + context.drawTextWithShadow(textRenderer, text, x + indent, y, 0xAAAAAA); } @Override diff --git a/src/main/java/com/terraformersmc/modmenu/gui/widget/ModListWidget.java b/src/main/java/com/terraformersmc/modmenu/gui/widget/ModListWidget.java index b0575980..ed9fd31d 100644 --- a/src/main/java/com/terraformersmc/modmenu/gui/widget/ModListWidget.java +++ b/src/main/java/com/terraformersmc/modmenu/gui/widget/ModListWidget.java @@ -1,6 +1,5 @@ package com.terraformersmc.modmenu.gui.widget; -import com.mojang.blaze3d.systems.RenderSystem; import com.terraformersmc.modmenu.ModMenu; import com.terraformersmc.modmenu.config.ModMenuConfig; import com.terraformersmc.modmenu.gui.ModsScreen; @@ -12,16 +11,12 @@ import com.terraformersmc.modmenu.util.mod.ModSearch; import com.terraformersmc.modmenu.util.mod.fabric.FabricIconHandler; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gl.GlUsage; -import net.minecraft.client.gl.ShaderProgramKeys; -import net.minecraft.client.gl.VertexBuffer; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.widget.AlwaysSelectedEntryListWidget; -import net.minecraft.client.render.*; import net.minecraft.text.Text; +import net.minecraft.util.Colors; import net.minecraft.util.math.MathHelper; import org.jetbrains.annotations.Nullable; -import org.joml.Matrix4f; import org.lwjgl.glfw.GLFW; import java.util.*; @@ -216,81 +211,57 @@ private void filter(String searchTerm, boolean refresh, boolean search) { @Override - protected void renderList(DrawContext DrawContext, int mouseX, int mouseY, float delta) { + protected void renderList(DrawContext context, int mouseX, int mouseY, float delta) { + int entryX = this.getRowLeft(); + int entryWidth = this.getRowWidth(); + + int entryHeight = this.itemHeight - 4; + int entryCount = this.getEntryCount(); - Tessellator tessellator = Tessellator.getInstance(); - BufferBuilder buffer; - - for (int index = 0; index < entryCount; ++index) { - int entryTop = this.getRowTop(index) + 2; - int entryBottom = this.getRowTop(index) + this.itemHeight; - if (entryBottom >= this.getY() && entryTop <= this.getBottom()) { - int entryHeight = this.itemHeight - 4; + + for (int index = 0; index < entryCount; index++) { + int entryY = this.getRowTop(index) + 2; + int entryBottom = this.getRowBottom(index); + + // Skip rendering entries not scrolled on screen + if (entryBottom >= this.getY() && entryY <= this.getBottom()) { ModListEntry entry = this.getEntry(index); - int rowWidth = this.getRowWidth(); - int entryLeft; + + // Draw the selection highlight, shifting right to account for the parent lines if (this.isSelectedEntry(index)) { - entryLeft = getRowLeft() - 2 + entry.getXOffset(); - int selectionRight = this.getRowLeft() + rowWidth + 2; - float float_2 = this.isFocused() ? 1.0F : 0.5F; - RenderSystem.setShader(ShaderProgramKeys.POSITION); - RenderSystem.setShaderColor(float_2, float_2, float_2, 1.0F); - Matrix4f matrix = DrawContext.getMatrices().peek().getPositionMatrix(); - BuiltBuffer builtBuffer; - buffer = tessellator.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); - buffer.vertex(matrix, entryLeft, entryTop + entryHeight + 2, 0.0F); - buffer.vertex(matrix, selectionRight, entryTop + entryHeight + 2, 0.0F); - buffer.vertex(matrix, selectionRight, entryTop - 2, 0.0F); - buffer.vertex(matrix, entryLeft, entryTop - 2, 0.0F); - try { - builtBuffer = buffer.end(); - - try (VertexBuffer vertexBuffer = new VertexBuffer(GlUsage.STATIC_WRITE)) { - vertexBuffer.bind(); - vertexBuffer.upload(builtBuffer); - vertexBuffer.draw(RenderSystem.getModelViewMatrix(), RenderSystem.getProjectionMatrix(), RenderSystem.getShader()); - builtBuffer.close(); - } - } catch (Exception e) { - // Ignored - } - RenderSystem.setShader(ShaderProgramKeys.POSITION); - RenderSystem.setShaderColor(0.0F, 0.0F, 0.0F, 1.0F); - buffer = tessellator.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); - buffer.vertex(matrix, entryLeft + 1, entryTop + entryHeight + 1, 0.0F); - buffer.vertex(matrix, selectionRight - 1, entryTop + entryHeight + 1, 0.0F); - buffer.vertex(matrix, selectionRight - 1, entryTop - 1, 0.0F); - buffer.vertex(matrix, entryLeft + 1, entryTop - 1, 0.0F); - try { - builtBuffer = buffer.end(); - - try (VertexBuffer vertexBuffer = new VertexBuffer(GlUsage.STATIC_WRITE)) { - vertexBuffer.bind(); - vertexBuffer.upload(builtBuffer); - vertexBuffer.draw(RenderSystem.getModelViewMatrix(), RenderSystem.getProjectionMatrix(), RenderSystem.getShader()); - builtBuffer.close(); - } - } catch (Exception e) { - // Ignored - } + int entryContentX = entryX + entry.getXOffset() - 2; + int entryContentWidth = entryWidth - entry.getXOffset() + 4; + + int outlineColor = this.isFocused() ? Colors.WHITE : Colors.GRAY; + + this.drawSelectionHighlight(context, entryContentX, entryY, entryContentWidth, entryHeight, outlineColor, Colors.BLACK); } - entryLeft = this.getRowLeft(); - entry.render(DrawContext, + boolean hovered = this.isMouseOver(mouseX, mouseY) && Objects.equals(this.getEntryAtPos(mouseX, mouseY), entry); + + entry.render(context, index, - entryTop, - entryLeft, - rowWidth, + entryY, + entryX, + entryWidth, entryHeight, mouseX, mouseY, - this.isMouseOver(mouseX, mouseY) && Objects.equals(this.getEntryAtPos(mouseX, mouseY), entry), + hovered, delta ); } } } + /** + * Version of {@link #drawSelectionHighlight(DrawContext, int, int, int, int, int)} with unconstrained positioning and sizing. + */ + protected void drawSelectionHighlight(DrawContext context, int x, int y, int width, int height, int borderColor, int fillColor) { + context.fill(x, y - 2, x + width, y + height + 2, borderColor); + context.fill(x + 1, y - 1, x + width - 1, y + height + 1, fillColor); + } + public void ensureVisible(ModListEntry entry) { super.ensureVisible(entry); } diff --git a/src/main/java/com/terraformersmc/modmenu/gui/widget/ModMenuButtonWidget.java b/src/main/java/com/terraformersmc/modmenu/gui/widget/ModMenuButtonWidget.java index 7fd7746e..10b16455 100644 --- a/src/main/java/com/terraformersmc/modmenu/gui/widget/ModMenuButtonWidget.java +++ b/src/main/java/com/terraformersmc/modmenu/gui/widget/ModMenuButtonWidget.java @@ -22,10 +22,10 @@ public ModMenuButtonWidget(int x, int y, int width, int height, Text text, Scree } @Override - public void renderWidget(DrawContext DrawContext, int mouseX, int mouseY, float delta) { - super.renderWidget(DrawContext, mouseX, mouseY, delta); + public void renderWidget(DrawContext context, int mouseX, int mouseY, float delta) { + super.renderWidget(context, mouseX, mouseY, delta); if (ModMenuConfig.BUTTON_UPDATE_BADGE.getValue() && ModMenu.areModUpdatesAvailable()) { - UpdateAvailableBadge.renderBadge(DrawContext, + UpdateAvailableBadge.renderBadge(context, this.width + this.getX() - 16, this.height / 2 + this.getY() - 4 ); diff --git a/src/main/java/com/terraformersmc/modmenu/gui/widget/UpdateAvailableBadge.java b/src/main/java/com/terraformersmc/modmenu/gui/widget/UpdateAvailableBadge.java index 07489ef0..1da9b32d 100644 --- a/src/main/java/com/terraformersmc/modmenu/gui/widget/UpdateAvailableBadge.java +++ b/src/main/java/com/terraformersmc/modmenu/gui/widget/UpdateAvailableBadge.java @@ -1,20 +1,13 @@ package com.terraformersmc.modmenu.gui.widget; -import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.render.RenderLayer; import net.minecraft.util.Identifier; -import net.minecraft.util.Util; public class UpdateAvailableBadge { private static final Identifier UPDATE_ICON = Identifier.ofVanilla("icon/trial_available"); - public static void renderBadge(DrawContext DrawContext, int x, int y) { - RenderSystem.setShaderColor(1f, 1f, 1f, 1f); - int animOffset = 0; - if ((Util.getMeasuringTimeMs() / 800L & 1L) == 1L) { - animOffset = 8; - } - DrawContext.drawGuiTexture(RenderLayer::getGuiTextured, UPDATE_ICON, x, y, 8, 8); + public static void renderBadge(DrawContext context, int x, int y) { + context.drawGuiTexture(RenderLayer::getGuiTextured, UPDATE_ICON, x, y, 8, 8); } } diff --git a/src/main/java/com/terraformersmc/modmenu/gui/widget/UpdateCheckerTexturedButtonWidget.java b/src/main/java/com/terraformersmc/modmenu/gui/widget/UpdateCheckerTexturedButtonWidget.java index 7e254e3d..b53981c6 100644 --- a/src/main/java/com/terraformersmc/modmenu/gui/widget/UpdateCheckerTexturedButtonWidget.java +++ b/src/main/java/com/terraformersmc/modmenu/gui/widget/UpdateCheckerTexturedButtonWidget.java @@ -27,10 +27,10 @@ public UpdateCheckerTexturedButtonWidget( } @Override - public void renderWidget(DrawContext DrawContext, int mouseX, int mouseY, float delta) { - super.renderWidget(DrawContext, mouseX, mouseY, delta); + public void renderWidget(DrawContext context, int mouseX, int mouseY, float delta) { + super.renderWidget(context, mouseX, mouseY, delta); if (ModMenuConfig.BUTTON_UPDATE_BADGE.getValue() && ModMenu.areModUpdatesAvailable()) { - UpdateAvailableBadge.renderBadge(DrawContext, this.getX() + this.width - 5, this.getY() - 3); + UpdateAvailableBadge.renderBadge(context, this.getX() + this.width - 5, this.getY() - 3); } } } diff --git a/src/main/java/com/terraformersmc/modmenu/gui/widget/entries/ChildEntry.java b/src/main/java/com/terraformersmc/modmenu/gui/widget/entries/ChildEntry.java index 3dcced89..aed2d78b 100644 --- a/src/main/java/com/terraformersmc/modmenu/gui/widget/entries/ChildEntry.java +++ b/src/main/java/com/terraformersmc/modmenu/gui/widget/entries/ChildEntry.java @@ -17,7 +17,7 @@ public ChildEntry(Mod mod, ParentEntry parent, ModListWidget list, boolean botto @Override public void render( - DrawContext DrawContext, + DrawContext context, int index, int y, int x, @@ -28,11 +28,11 @@ public void render( boolean isSelected, float delta ) { - super.render(DrawContext, index, y, x, rowWidth, rowHeight, mouseX, mouseY, isSelected, delta); + super.render(context, index, y, x, rowWidth, rowHeight, mouseX, mouseY, isSelected, delta); x += 4; int color = 0xFFA0A0A0; - DrawContext.fill(x, y - 2, x + 1, y + (bottomChild ? rowHeight / 2 : rowHeight + 2), color); - DrawContext.fill(x, y + rowHeight / 2, x + 7, y + rowHeight / 2 + 1, color); + context.fill(x, y - 2, x + 1, y + (bottomChild ? rowHeight / 2 : rowHeight + 2), color); + context.fill(x, y + rowHeight / 2, x + 7, y + rowHeight / 2 + 1, color); } @Override diff --git a/src/main/java/com/terraformersmc/modmenu/gui/widget/entries/ModListEntry.java b/src/main/java/com/terraformersmc/modmenu/gui/widget/entries/ModListEntry.java index 612649ce..72780328 100644 --- a/src/main/java/com/terraformersmc/modmenu/gui/widget/entries/ModListEntry.java +++ b/src/main/java/com/terraformersmc/modmenu/gui/widget/entries/ModListEntry.java @@ -1,6 +1,5 @@ package com.terraformersmc.modmenu.gui.widget.entries; -import com.mojang.blaze3d.systems.RenderSystem; import com.terraformersmc.modmenu.ModMenu; import com.terraformersmc.modmenu.config.ModMenuConfig; import com.terraformersmc.modmenu.gui.widget.ModListWidget; @@ -50,7 +49,7 @@ public Text getNarration() { @Override public void render( - DrawContext DrawContext, + DrawContext context, int index, int y, int x, @@ -66,23 +65,13 @@ public void render( int iconSize = ModMenuConfig.COMPACT_LIST.getValue() ? COMPACT_ICON_SIZE : FULL_ICON_SIZE; String modId = mod.getId(); if ("java".equals(modId)) { - DrawingUtil.drawRandomVersionBackground(mod, DrawContext, x, y, iconSize, iconSize); + DrawingUtil.drawRandomVersionBackground(mod, context, x, y, iconSize, iconSize); } - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - RenderSystem.enableBlend(); - DrawContext.drawTexture(RenderLayer::getGuiTextured, this.getIconTexture(), x, y, 0.0F, 0.0F, iconSize, iconSize, iconSize, iconSize); - RenderSystem.disableBlend(); + context.drawTexture(RenderLayer::getGuiTextured, this.getIconTexture(), x, y, 0.0F, 0.0F, iconSize, iconSize, iconSize, iconSize); Text name = Text.literal(mod.getTranslatedName()); - StringVisitable trimmedName = name; - int maxNameWidth = rowWidth - iconSize - 3; TextRenderer font = this.client.textRenderer; - if (font.getWidth(name) > maxNameWidth) { - StringVisitable ellipsis = StringVisitable.plain("..."); - trimmedName = StringVisitable.concat(font.trimToWidth(name, maxNameWidth - font.getWidth(ellipsis)), - ellipsis - ); - } - DrawContext.drawText(font, + StringVisitable trimmedName = DrawingUtil.getTrimmedName(name, rowWidth - iconSize - 3, font); + context.drawText(font, Language.getInstance().reorder(trimmedName), x + iconSize + 3, y + 1, @@ -92,7 +81,7 @@ public void render( var updateBadgeXOffset = 0; if (ModMenuConfig.UPDATE_CHECKER.getValue() && !ModMenuConfig.DISABLE_UPDATE_CHECKER.getValue() .contains(modId) && (mod.hasUpdate() || mod.getChildHasUpdate())) { - UpdateAvailableBadge.renderBadge(DrawContext, x + iconSize + 3 + font.getWidth(name) + 2, y); + UpdateAvailableBadge.renderBadge(context, x + iconSize + 3 + font.getWidth(name) + 2, y); updateBadgeXOffset = 11; } if (!ModMenuConfig.HIDE_BADGES.getValue()) { @@ -101,11 +90,11 @@ public void render( x + rowWidth, mod, list.getParent() - ).draw(DrawContext, mouseX, mouseY); + ).draw(context, mouseX, mouseY); } if (!ModMenuConfig.COMPACT_LIST.getValue()) { String summary = mod.getSummary(); - DrawingUtil.drawWrappedString(DrawContext, + DrawingUtil.drawWrappedString(context, summary, (x + iconSize + 3 + 4), (y + client.textRenderer.fontHeight + 2), @@ -114,7 +103,7 @@ public void render( 0x808080 ); } else { - DrawingUtil.drawWrappedString(DrawContext, + DrawingUtil.drawWrappedString(context, mod.getPrefixedVersion(), (x + iconSize + 3), (y + client.textRenderer.fontHeight + 2), @@ -130,10 +119,10 @@ public void render( (int) (256 / (FULL_ICON_SIZE / (double) COMPACT_ICON_SIZE)) : 256; if (this.client.options.getTouchscreen().getValue() || hovered) { - DrawContext.fill(x, y, x + iconSize, y + iconSize, -1601138544); + context.fill(x, y, x + iconSize, y + iconSize, -1601138544); boolean hoveringIcon = mouseX - x < iconSize; if (this.list.getParent().modScreenErrors.containsKey(modId)) { - DrawContext.drawGuiTexture(RenderLayer::getGuiTextured, hoveringIcon ? ERROR_HIGHLIGHTED_ICON : ERROR_ICON, + context.drawGuiTexture(RenderLayer::getGuiTextured, hoveringIcon ? ERROR_HIGHLIGHTED_ICON : ERROR_ICON, x, y, iconSize, @@ -149,7 +138,7 @@ public void render( } } else { int v = hoveringIcon ? iconSize : 0; - DrawContext.drawTexture(RenderLayer::getGuiTextured, MOD_CONFIGURATION_ICON, + context.drawTexture(RenderLayer::getGuiTextured, MOD_CONFIGURATION_ICON, x, y, 0.0F, diff --git a/src/main/java/com/terraformersmc/modmenu/gui/widget/entries/ParentEntry.java b/src/main/java/com/terraformersmc/modmenu/gui/widget/entries/ParentEntry.java index 6915a2b1..11599b24 100644 --- a/src/main/java/com/terraformersmc/modmenu/gui/widget/entries/ParentEntry.java +++ b/src/main/java/com/terraformersmc/modmenu/gui/widget/entries/ParentEntry.java @@ -1,6 +1,5 @@ package com.terraformersmc.modmenu.gui.widget.entries; -import com.mojang.blaze3d.systems.RenderSystem; import com.terraformersmc.modmenu.ModMenu; import com.terraformersmc.modmenu.config.ModMenuConfig; import com.terraformersmc.modmenu.gui.widget.ModListWidget; @@ -32,7 +31,7 @@ public ParentEntry(Mod parent, List children, ModListWidget list) { @Override public void render( - DrawContext DrawContext, + DrawContext context, int index, int y, int x, @@ -43,7 +42,7 @@ public void render( boolean isSelected, float delta ) { - super.render(DrawContext, index, y, x, rowWidth, rowHeight, mouseX, mouseY, isSelected, delta); + super.render(context, index, y, x, rowWidth, rowHeight, mouseX, mouseY, isSelected, delta); TextRenderer font = client.textRenderer; int childrenBadgeHeight = font.fontHeight; int childrenBadgeWidth = font.fontHeight; @@ -60,37 +59,37 @@ public void render( int childrenBadgeY = y + iconSize - childrenBadgeHeight; int childrenOutlineColor = 0xff107454; int childrenFillColor = 0xff093929; - DrawContext.fill(childrenBadgeX + 1, + context.fill(childrenBadgeX + 1, childrenBadgeY, childrenBadgeX + childrenBadgeWidth - 1, childrenBadgeY + 1, childrenOutlineColor ); - DrawContext.fill(childrenBadgeX, + context.fill(childrenBadgeX, childrenBadgeY + 1, childrenBadgeX + 1, childrenBadgeY + childrenBadgeHeight - 1, childrenOutlineColor ); - DrawContext.fill(childrenBadgeX + childrenBadgeWidth - 1, + context.fill(childrenBadgeX + childrenBadgeWidth - 1, childrenBadgeY + 1, childrenBadgeX + childrenBadgeWidth, childrenBadgeY + childrenBadgeHeight - 1, childrenOutlineColor ); - DrawContext.fill(childrenBadgeX + 1, + context.fill(childrenBadgeX + 1, childrenBadgeY + 1, childrenBadgeX + childrenBadgeWidth - 1, childrenBadgeY + childrenBadgeHeight - 1, childrenFillColor ); - DrawContext.fill(childrenBadgeX + 1, + context.fill(childrenBadgeX + 1, childrenBadgeY + childrenBadgeHeight - 1, childrenBadgeX + childrenBadgeWidth - 1, childrenBadgeY + childrenBadgeHeight, childrenOutlineColor ); - DrawContext.drawText(font, + context.drawText(font, str.asOrderedText(), (int) (childrenBadgeX + (float) childrenBadgeWidth / 2 - (float) childrenWidth / 2), childrenBadgeY + 1, @@ -99,11 +98,10 @@ public void render( ); this.hoveringIcon = mouseX >= x - 1 && mouseX <= x - 1 + iconSize && mouseY >= y - 1 && mouseY <= y - 1 + iconSize; if (isMouseOver(mouseX, mouseY)) { - DrawContext.fill(x, y, x + iconSize, y + iconSize, 0xA0909090); + context.fill(x, y, x + iconSize, y + iconSize, 0xA0909090); int xOffset = list.getParent().showModChildren.contains(getMod().getId()) ? iconSize : 0; int yOffset = hoveringIcon ? iconSize : 0; - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - DrawContext.drawTexture(RenderLayer::getGuiTextured, PARENT_MOD_TEXTURE, + context.drawTexture(RenderLayer::getGuiTextured, PARENT_MOD_TEXTURE, x, y, xOffset, diff --git a/src/main/java/com/terraformersmc/modmenu/util/DrawingUtil.java b/src/main/java/com/terraformersmc/modmenu/util/DrawingUtil.java index e03274fd..e9a9a892 100644 --- a/src/main/java/com/terraformersmc/modmenu/util/DrawingUtil.java +++ b/src/main/java/com/terraformersmc/modmenu/util/DrawingUtil.java @@ -1,11 +1,11 @@ package com.terraformersmc.modmenu.util; -import com.mojang.blaze3d.systems.RenderSystem; import com.terraformersmc.modmenu.config.ModMenuConfig; import com.terraformersmc.modmenu.util.mod.Mod; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; import net.minecraft.text.OrderedText; import net.minecraft.text.StringVisitable; @@ -21,9 +21,11 @@ public class DrawingUtil { private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); + private static final StringVisitable ELLIPSIS = StringVisitable.plain("..."); + public static void drawRandomVersionBackground( Mod mod, - DrawContext DrawContext, + DrawContext context, int x, int y, int width, @@ -35,12 +37,11 @@ public static void drawRandomVersionBackground( if (!ModMenuConfig.RANDOM_JAVA_COLORS.getValue()) { color = 0xFFDD5656; } - RenderSystem.setShaderColor(1f, 1f, 1f, 1f); - DrawContext.fill(x, y, x + width, y + height, color); + context.fill(x, y, x + width, y + height, color); } public static void drawWrappedString( - DrawContext DrawContext, + DrawContext context, String string, int x, int y, @@ -59,7 +60,7 @@ public static void drawWrappedString( } StringVisitable renderable = strings.get(i); if (i == lines - 1 && strings.size() > lines) { - renderable = StringVisitable.concat(strings.get(i), StringVisitable.plain("...")); + renderable = StringVisitable.concat(strings.get(i), ELLIPSIS); } OrderedText line = Language.getInstance().reorder(renderable); int x1 = x; @@ -67,12 +68,12 @@ public static void drawWrappedString( int width = CLIENT.textRenderer.getWidth(line); x1 += (float) (wrapWidth - width); } - DrawContext.drawText(CLIENT.textRenderer, line, x1, y + i * CLIENT.textRenderer.fontHeight, color, true); + context.drawText(CLIENT.textRenderer, line, x1, y + i * CLIENT.textRenderer.fontHeight, color, true); } } public static void drawBadge( - DrawContext DrawContext, + DrawContext context, int x, int y, int tagWidth, @@ -81,17 +82,17 @@ public static void drawBadge( int fillColor, int textColor ) { - DrawContext.fill(x + 1, y - 1, x + tagWidth, y, outlineColor); - DrawContext.fill(x, y, x + 1, y + CLIENT.textRenderer.fontHeight, outlineColor); - DrawContext.fill(x + 1, + context.fill(x + 1, y - 1, x + tagWidth, y, outlineColor); + context.fill(x, y, x + 1, y + CLIENT.textRenderer.fontHeight, outlineColor); + context.fill(x + 1, y + 1 + CLIENT.textRenderer.fontHeight - 1, x + tagWidth, y + CLIENT.textRenderer.fontHeight + 1, outlineColor ); - DrawContext.fill(x + tagWidth, y, x + tagWidth + 1, y + CLIENT.textRenderer.fontHeight, outlineColor); - DrawContext.fill(x + 1, y, x + tagWidth, y + CLIENT.textRenderer.fontHeight, fillColor); - DrawContext.drawText(CLIENT.textRenderer, + context.fill(x + tagWidth, y, x + tagWidth + 1, y + CLIENT.textRenderer.fontHeight, outlineColor); + context.fill(x + 1, y, x + tagWidth, y + CLIENT.textRenderer.fontHeight, fillColor); + context.drawText(CLIENT.textRenderer, text, (int) (x + 1 + (tagWidth - CLIENT.textRenderer.getWidth(text)) / (float) 2), y + 1, @@ -99,4 +100,15 @@ public static void drawBadge( false ); } + + public static StringVisitable getTrimmedName(StringVisitable name, int maxWidth, TextRenderer textRenderer) { + if (textRenderer.getWidth(name) > maxWidth) { + int ellipsisWidth = textRenderer.getWidth(ELLIPSIS); + + StringVisitable trimmed = textRenderer.trimToWidth(name, maxWidth - ellipsisWidth); + return StringVisitable.concat(trimmed, ELLIPSIS); + } + + return name; + } } diff --git a/src/main/java/com/terraformersmc/modmenu/util/mod/ModBadgeRenderer.java b/src/main/java/com/terraformersmc/modmenu/util/mod/ModBadgeRenderer.java index 73d69b39..39c77dda 100644 --- a/src/main/java/com/terraformersmc/modmenu/util/mod/ModBadgeRenderer.java +++ b/src/main/java/com/terraformersmc/modmenu/util/mod/ModBadgeRenderer.java @@ -23,15 +23,15 @@ public ModBadgeRenderer(int startX, int startY, int endX, Mod mod, ModsScreen sc this.client = MinecraftClient.getInstance(); } - public void draw(DrawContext DrawContext, int mouseX, int mouseY) { + public void draw(DrawContext context, int mouseX, int mouseY) { this.badgeX = startX; this.badgeY = startY; Set badges = mod.getBadges(); - badges.forEach(badge -> drawBadge(DrawContext, badge, mouseX, mouseY)); + badges.forEach(badge -> drawBadge(context, badge, mouseX, mouseY)); } - public void drawBadge(DrawContext DrawContext, Mod.Badge badge, int mouseX, int mouseY) { - this.drawBadge(DrawContext, + public void drawBadge(DrawContext context, Mod.Badge badge, int mouseX, int mouseY) { + this.drawBadge(context, badge.getText().asOrderedText(), badge.getOutlineColor(), badge.getFillColor(), @@ -41,7 +41,7 @@ public void drawBadge(DrawContext DrawContext, Mod.Badge badge, int mouseX, int } public void drawBadge( - DrawContext DrawContext, + DrawContext context, OrderedText text, int outlineColor, int fillColor, @@ -50,7 +50,7 @@ public void drawBadge( ) { int width = client.textRenderer.getWidth(text) + 6; if (badgeX + width < badgeMax) { - DrawingUtil.drawBadge(DrawContext, badgeX, badgeY, width, text, outlineColor, fillColor, 0xCACACA); + DrawingUtil.drawBadge(context, badgeX, badgeY, width, text, outlineColor, fillColor, 0xCACACA); badgeX += width + 3; } }