|
1 | 1 | package dev.isxander.yacl.gui; |
2 | 2 |
|
| 3 | +import com.mojang.blaze3d.systems.RenderSystem; |
3 | 4 | import dev.isxander.yacl.api.ConfigCategory; |
4 | 5 | import dev.isxander.yacl.api.Option; |
5 | 6 | import dev.isxander.yacl.api.OptionFlag; |
6 | 7 | import dev.isxander.yacl.api.YetAnotherConfigLib; |
7 | 8 | import dev.isxander.yacl.api.utils.Dimension; |
8 | 9 | import dev.isxander.yacl.api.utils.OptionUtils; |
9 | 10 | import dev.isxander.yacl.impl.YACLConstants; |
| 11 | +import net.minecraft.client.font.MultilineText; |
| 12 | +import net.minecraft.client.font.TextRenderer; |
10 | 13 | import net.minecraft.client.gui.Element; |
11 | 14 | import net.minecraft.client.gui.screen.Screen; |
| 15 | +import net.minecraft.client.gui.tooltip.TooltipComponent; |
| 16 | +import net.minecraft.client.render.*; |
12 | 17 | import net.minecraft.client.util.math.MatrixStack; |
13 | 18 | import net.minecraft.text.Text; |
14 | 19 | import net.minecraft.util.Formatting; |
| 20 | +import net.minecraft.util.math.Matrix4f; |
15 | 21 |
|
16 | 22 | import java.util.ArrayList; |
17 | 23 | import java.util.HashSet; |
@@ -130,12 +136,14 @@ public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) { |
130 | 136 | super.render(matrices, mouseX, mouseY, delta); |
131 | 137 | categoryList.render(matrices, mouseX, mouseY, delta); |
132 | 138 | searchFieldWidget.render(matrices, mouseX, mouseY, delta); |
133 | | - |
134 | 139 | optionList.render(matrices, mouseX, mouseY, delta); |
135 | 140 |
|
| 141 | + categoryList.postRender(matrices, mouseX, mouseY, delta); |
| 142 | + optionList.postRender(matrices, mouseX, mouseY, delta); |
| 143 | + |
136 | 144 | for (Element child : children()) { |
137 | 145 | if (child instanceof TooltipButtonWidget tooltipButtonWidget) { |
138 | | - tooltipButtonWidget.renderTooltip(matrices, mouseX, mouseY); |
| 146 | + tooltipButtonWidget.renderHoveredTooltip(matrices, mouseX, mouseY); |
139 | 147 | } |
140 | 148 | } |
141 | 149 | } |
@@ -232,4 +240,50 @@ public boolean shouldCloseOnEsc() { |
232 | 240 | public void close() { |
233 | 241 | client.setScreen(parent); |
234 | 242 | } |
| 243 | + |
| 244 | + public static void renderMultilineTooltip(MatrixStack matrices, TextRenderer textRenderer, MultilineText text, int x, int y, int screenWidth, int screenHeight) { |
| 245 | + if (text.count() > 0) { |
| 246 | + int maxWidth = text.getMaxWidth(); |
| 247 | + int lineHeight = textRenderer.fontHeight + 1; |
| 248 | + int height = text.count() * lineHeight; |
| 249 | + |
| 250 | + int drawX = x + 12; |
| 251 | + int drawY = y - 12; |
| 252 | + if (drawX + maxWidth > screenWidth) { |
| 253 | + drawX -= 28 + maxWidth; |
| 254 | + } |
| 255 | + |
| 256 | + if (drawY + height + 6 > screenHeight) { |
| 257 | + drawY = screenHeight - height - 6; |
| 258 | + } |
| 259 | + |
| 260 | + matrices.push(); |
| 261 | + Tessellator tessellator = Tessellator.getInstance(); |
| 262 | + BufferBuilder bufferBuilder = tessellator.getBuffer(); |
| 263 | + RenderSystem.setShader(GameRenderer::getPositionColorShader); |
| 264 | + bufferBuilder.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR); |
| 265 | + Matrix4f matrix4f = matrices.peek().getPositionMatrix(); |
| 266 | + fillGradient(matrix4f, bufferBuilder, drawX - 3, drawY - 4, drawX + maxWidth + 3, drawY - 3, 400, -267386864, -267386864); |
| 267 | + fillGradient(matrix4f, bufferBuilder, drawX - 3, drawY + height + 3, drawX + maxWidth + 3, drawY + height + 4, 400, -267386864, -267386864); |
| 268 | + fillGradient(matrix4f, bufferBuilder, drawX - 3, drawY - 3, drawX + maxWidth + 3, drawY + height + 3, 400, -267386864, -267386864); |
| 269 | + fillGradient(matrix4f, bufferBuilder, drawX - 4, drawY - 3, drawX - 3, drawY + height + 3, 400, -267386864, -267386864); |
| 270 | + fillGradient(matrix4f, bufferBuilder, drawX + maxWidth + 3, drawY - 3, drawX + maxWidth + 4, drawY + height + 3, 400, -267386864, -267386864); |
| 271 | + fillGradient(matrix4f, bufferBuilder, drawX - 3, drawY - 3 + 1, drawX - 3 + 1, drawY + height + 3 - 1, 400, 1347420415, 1344798847); |
| 272 | + fillGradient(matrix4f, bufferBuilder, drawX + maxWidth + 2, drawY - 3 + 1, drawX + maxWidth + 3, drawY + height + 3 - 1, 400, 1347420415, 1344798847); |
| 273 | + fillGradient(matrix4f, bufferBuilder, drawX - 3, drawY - 3, drawX + maxWidth + 3, drawY - 3 + 1, 400, 1347420415, 1347420415); |
| 274 | + fillGradient(matrix4f, bufferBuilder, drawX - 3, drawY + height + 2, drawX + maxWidth + 3, drawY + height + 3, 400, 1344798847, 1344798847); |
| 275 | + RenderSystem.enableDepthTest(); |
| 276 | + RenderSystem.disableTexture(); |
| 277 | + RenderSystem.enableBlend(); |
| 278 | + RenderSystem.defaultBlendFunc(); |
| 279 | + BufferRenderer.drawWithShader(bufferBuilder.end()); |
| 280 | + RenderSystem.disableBlend(); |
| 281 | + RenderSystem.enableTexture(); |
| 282 | + matrices.translate(0.0, 0.0, 400.0); |
| 283 | + |
| 284 | + text.drawWithShadow(matrices, drawX, drawY, lineHeight, -1); |
| 285 | + |
| 286 | + matrices.pop(); |
| 287 | + } |
| 288 | + } |
235 | 289 | } |
0 commit comments