diff --git a/mod/src/main/java/dev/loki/lovisual/features/gui/clickgui/layout/screen/modules/render/ModulesMenuDescriptionRenderer.java b/mod/src/main/java/dev/loki/lovisual/features/gui/clickgui/layout/screen/modules/render/ModulesMenuDescriptionRenderer.java index 7dc070d..4c1dca9 100644 --- a/mod/src/main/java/dev/loki/lovisual/features/gui/clickgui/layout/screen/modules/render/ModulesMenuDescriptionRenderer.java +++ b/mod/src/main/java/dev/loki/lovisual/features/gui/clickgui/layout/screen/modules/render/ModulesMenuDescriptionRenderer.java @@ -14,7 +14,7 @@ import java.util.List; * cursor and fades out when nothing is hovered. */ final class ModulesMenuDescriptionRenderer { - private static final int MAX_LINES = 3; + private static final int MAX_LINES = 2; private ModulesMenuDescriptionRenderer() { } @@ -35,25 +35,25 @@ final class ModulesMenuDescriptionRenderer { ModulesMenuChromeRenderer.ensureFonts(); TextRenderer titleFont = ModulesMenuChromeRenderer.medium; TextRenderer bodyFont = ModulesMenuChromeRenderer.regular; - float titleSize = 9.0f * scale; - float bodySize = 7.5f * scale; - float pad = 9.0f * scale; - float w = Math.min(screen.areaW * 0.6f, 300.0f * scale); + float titleSize = 7.4f * scale; + float bodySize = 6.2f * scale; + float pad = 6.0f * scale; + float w = Math.min(screen.areaW * 0.36f, 190.0f * scale); List lines = DescriptionLines.wrap(screen.descText, w - pad * 2.0f, s -> ClickGuiRenderer.textWidth(bodyFont, s, bodySize), MAX_LINES); float titleH = ModulesMenuLayout.textHeight(titleFont, titleSize); float lineH = ModulesMenuLayout.textHeight(bodyFont, bodySize) + 1.5f * scale; - float h = pad * 2.0f + titleH + 3.0f * scale + lines.size() * lineH; + float h = pad * 2.0f + titleH + 2.0f * scale + lines.size() * lineH; float x = screen.areaX + (screen.areaW - w) * 0.5f; - float y = Math.max(screen.areaY + 6.0f * scale, panelsTop(screen) - h - 10.0f * scale) + (1.0f - alpha) * 6.0f * scale; + float y = Math.max(screen.areaY + 6.0f * scale, panelsTop(screen) - h - 8.0f * scale) + (1.0f - alpha) * 6.0f * scale; - float radius = 8.0f * scale; + float radius = 6.0f * scale; ModulesMenuGlassRenderer.drawLiquidGlass(x, y, w, h, radius, false, alpha >= 0.999f ? 1.0f : alpha, scale); int veil = ModulesMenuLayout.withAlpha(ModulesMenuStyle.panelBgGlassDark(), alpha * 0.35f); LayoutRender2D.roundedQuad(x, y, w, h, radius, veil, veil, veil, veil); ClickGuiRenderer.drawText(titleFont, screen.descTitle, x + pad, y + pad, titleSize, ModulesMenuLayout.withAlpha(ModulesMenuStyle.text(), alpha), false); - float ty = y + pad + titleH + 3.0f * scale; + float ty = y + pad + titleH + 2.0f * scale; int bodyColor = ModulesMenuLayout.withAlpha(ModulesMenuStyle.textMuted(), alpha); for (String line : lines) { ClickGuiRenderer.drawText(bodyFont, line, x + pad, ty, bodySize, bodyColor, false); diff --git a/mod/src/main/java/dev/loki/lovisual/features/gui/hud/nondraggable/impl/tooltips/BetterTooltips.java b/mod/src/main/java/dev/loki/lovisual/features/gui/hud/nondraggable/impl/tooltips/BetterTooltips.java index c3926a2..16b2a82 100644 --- a/mod/src/main/java/dev/loki/lovisual/features/gui/hud/nondraggable/impl/tooltips/BetterTooltips.java +++ b/mod/src/main/java/dev/loki/lovisual/features/gui/hud/nondraggable/impl/tooltips/BetterTooltips.java @@ -60,6 +60,7 @@ public final class BetterTooltips extends AbstractHudElement { private final BooleanValue itemInfoColorize = bool("item_info_colorize", true); private final ModeValue tooltipFont = mode("tooltip_font", "Iosevka", TOOLTIP_FONT_OPTIONS); private final NumberValue tooltipTextSize = num("tooltip_text_size", 1.0f, 0.5f, 2.0f); + private final BooleanValue tooltipAutoScale = bool("tooltip_auto_scale", true); private final ItemIdSetValue topIgnore = registerTopIgnore(); private final NumberValue shulkerPreviewSlotSize = visibleWhen(num("shulker_slot_size", 18.0f, 12.0f, 24.0f), this::isShulkerPreviewEnabled); @@ -101,6 +102,13 @@ public final class BetterTooltips extends AbstractHudElement { } String tooltipFontValue() { return tooltipFont.get(); } float tooltipTextSizeValue() { return tooltipTextSize.get(); } + + /** Множитель под масштаб интерфейса: эталон GUI Scale 3, при 2 тултип крупнее, при 4 мельче. */ + float tooltipAutoScale() { + if (!tooltipAutoScale.get()) return 1.0f; + double gui = Math.max(1.0, net.minecraft.client.Minecraft.getInstance().getWindow().getGuiScale()); + return (float) Math.max(0.7, Math.min(2.2, 3.0 / gui)); + } UiScriptModuleHandle tooltipPanelHandle() { return tooltipPanelHandle; } CachedUiScriptRuntime tooltipRuntime() { return tooltipRuntime; } diff --git a/mod/src/main/java/dev/loki/lovisual/features/gui/hud/nondraggable/impl/tooltips/render/TooltipPanelRenderer.java b/mod/src/main/java/dev/loki/lovisual/features/gui/hud/nondraggable/impl/tooltips/render/TooltipPanelRenderer.java index 59a3a75..52caa5f 100644 --- a/mod/src/main/java/dev/loki/lovisual/features/gui/hud/nondraggable/impl/tooltips/render/TooltipPanelRenderer.java +++ b/mod/src/main/java/dev/loki/lovisual/features/gui/hud/nondraggable/impl/tooltips/render/TooltipPanelRenderer.java @@ -127,19 +127,23 @@ final class TooltipPanelRenderer { if (tr == null) return; PreviewLayout preview = ShulkerPreviewCache.buildLayout(); List finalLines = TooltipState.prepareLines(lines, preview != null); - float scale = BetterTooltips.TOOLTIP_TEXT_SCALE * TooltipState.getScaleOverride() * instance.tooltipTextSizeValue(); + float auto = instance.tooltipAutoScale(); + float scale = BetterTooltips.TOOLTIP_TEXT_SCALE * TooltipState.getScaleOverride() * instance.tooltipTextSizeValue() * auto; + int padX = Math.round(BetterTooltips.TOOLTIP_PAD_X * auto); + int padY = Math.round(BetterTooltips.TOOLTIP_PAD_Y * auto); + int titleGap = Math.round(BetterTooltips.TOOLTIP_TITLE_GAP * auto); tr.begin(scale, false, false); int maxW = 0; for (TooltipLine l : finalLines) maxW = Math.max(maxW, (int) Math.ceil(tr.getWidth(l.text(), false))); int lh = (int) Math.ceil(tr.getHeight(false)); tr.end(); if (finalLines.isEmpty()) finalLines = List.of(new TooltipLine(" ", Theme.theme().textPrimary())); - int textH = finalLines.size() * lh + (finalLines.size() > 1 ? BetterTooltips.TOOLTIP_TITLE_GAP : 0) + Math.max(0, finalLines.size() - 2) * BetterTooltips.TOOLTIP_LINE_GAP; + int textH = finalLines.size() * lh + (finalLines.size() > 1 ? titleGap : 0) + Math.max(0, finalLines.size() - 2) * BetterTooltips.TOOLTIP_LINE_GAP; int pw = preview != null ? preview.width() : 0; int ph = preview != null ? preview.height() : 0; int contentW = Math.max(maxW, pw); - int totalW = contentW + BetterTooltips.TOOLTIP_PAD_X * 2; - int totalH = BetterTooltips.TOOLTIP_PAD_Y * 2 + textH + (preview != null ? BetterTooltips.TOOLTIP_PREVIEW_GAP + ph : 0); + int totalW = contentW + padX * 2; + int totalH = padY * 2 + textH + (preview != null ? BetterTooltips.TOOLTIP_PREVIEW_GAP + ph : 0); int x = mouseX, y = mouseY; if (pos != null) { Vector2ic p = pos.positionTooltip(mc.getWindow().getGuiScaledWidth(), mc.getWindow().getGuiScaledHeight(), mouseX, mouseY, totalW, totalH); @@ -157,20 +161,20 @@ final class TooltipPanelRenderer { ViewportContext.beginScaled(ctx); boolean rendered = renderScripted(mc, Renderer2D.COLOR, tr, x, y, totalW, totalH, bg, tl, trc, br, bl, glow, BetterTooltips.TOOLTIP_STROKE_WIDTH, BetterTooltips.TOOLTIP_GLOW_SIZE, 1.0f, instance.tooltipPanelHandle(), instance.tooltipRuntime(), ctx); if (!rendered) drawFallback(x, y, totalW, totalH, bg, tl, trc, br, bl, glow); - int tx = x + BetterTooltips.TOOLTIP_PAD_X, ty = y + BetterTooltips.TOOLTIP_PAD_Y; + int tx = x + padX, ty = y + padY; tr.begin(scale, false, false); for (int i = 0; i < finalLines.size(); i++) { TooltipLine l = finalLines.get(i); tr.render(l.text(), tx, ty, new RenderColor(l.color()), true); ty += lh; - if (i == 0 && finalLines.size() > 1) ty += BetterTooltips.TOOLTIP_TITLE_GAP; else if (i + 1 < finalLines.size()) ty += BetterTooltips.TOOLTIP_LINE_GAP; + if (i == 0 && finalLines.size() > 1) ty += titleGap; else if (i + 1 < finalLines.size()) ty += BetterTooltips.TOOLTIP_LINE_GAP; } tr.end(); ViewportContext.end(ctx); if (preview != null) { - int cw = totalW - BetterTooltips.TOOLTIP_PAD_X * 2; - int px = x + BetterTooltips.TOOLTIP_PAD_X + Math.max(0, (cw - preview.width()) / 2); - int py = y + BetterTooltips.TOOLTIP_PAD_Y + textH + BetterTooltips.TOOLTIP_PREVIEW_GAP; + int cw = totalW - padX * 2; + int px = x + padX + Math.max(0, (cw - preview.width()) / 2); + int py = y + padY + textH + BetterTooltips.TOOLTIP_PREVIEW_GAP; ShulkerPreviewRenderer.render(preview, px, py, ctx); } } diff --git a/mod/src/main/resources/assets/lovisual/lang/en_us.json b/mod/src/main/resources/assets/lovisual/lang/en_us.json index 1e8d1be..a234cbc 100644 --- a/mod/src/main/resources/assets/lovisual/lang/en_us.json +++ b/mod/src/main/resources/assets/lovisual/lang/en_us.json @@ -2925,6 +2925,7 @@ "setting.common.shulker_bg_softness": "Background softness", "setting.common.shulker_padding": "Padding", "setting.common.tooltip_font": "Tooltip font", + "setting.common.tooltip_auto_scale": "Auto-scale to GUI scale", "setting.common.tooltip_text_size": "Tooltip text size", "setting.common.shulker_preview": "Shulker Preview", "setting.common.shulker_preview_hold": "Preview hold", diff --git a/mod/src/main/resources/assets/lovisual/lang/ru_ru.json b/mod/src/main/resources/assets/lovisual/lang/ru_ru.json index ab6e1e7..6601fcf 100644 --- a/mod/src/main/resources/assets/lovisual/lang/ru_ru.json +++ b/mod/src/main/resources/assets/lovisual/lang/ru_ru.json @@ -2729,6 +2729,7 @@ "setting.common.shulker_bg_softness": "Мягкость фона", "setting.common.shulker_padding": "Отступ", "setting.common.tooltip_font": "Шрифт тултипа", + "setting.common.tooltip_auto_scale": "Автоподстройка под размер интерфейса", "setting.common.tooltip_text_size": "Размер текста тултипа", "setting.common.shulker_preview": "Превью шалкера", "setting.common.shulker_preview_hold": "Удержание превью",