From 8d02b110ae5e3e943d4e9c8afbc7dac91fced519 Mon Sep 17 00:00:00 2001 From: Jeroen Schweitzer Date: Sun, 5 Apr 2026 10:35:05 +0200 Subject: [PATCH] =?UTF-8?q?fix(ui):=20star=20map=20info=20panel=20spacing?= =?UTF-8?q?=20=E2=80=94=20split=20separator=20padding?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Separators now have explicit above (6px) and below (12px) spacing relative to text baselines. Previously a single 8px block didn't account for baseline positioning, causing text to merge with separator lines. Line height bumped to 18px. Co-Authored-By: Claude Opus 4.6 (1M context) --- client/ui/star_map.gd | 50 +++++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/client/ui/star_map.gd b/client/ui/star_map.gd index 5bfb96072..7dbb9a536 100644 --- a/client/ui/star_map.gd +++ b/client/ui/star_map.gd @@ -403,7 +403,9 @@ func _draw_info_panel(sz: Vector2) -> void: var font := get_theme_default_font() var panel_w: float = POPUP_WIDTH var pad: float = POPUP_PADDING - var sep_h: float = 8.0 # separator line + spacing + var line_h: float = 18.0 # line height for single-line text (baseline to baseline) + var sep_above: float = 6.0 # space from last text baseline to separator line + var sep_below: float = 12.0 # space from separator line to next text baseline var inner_w: float = panel_w - pad * 2.0 var sep_color := Color(COLOR_TEXT.r, COLOR_TEXT.g, COLOR_TEXT.b, 0.12) @@ -462,23 +464,24 @@ func _draw_info_panel(sz: Vector2) -> void: adj_line, HORIZONTAL_ALIGNMENT_LEFT, inner_w, 10, 3).y # ── Calculate total panel height ───────────────────────────────────────── + var sep_total: float = sep_above + sep_below # full separator block height var panel_h: float = pad # top padding - panel_h += POPUP_LINE_H # system name (15px font) - panel_h += POPUP_LINE_H # system id (10px font) - panel_h += sep_h # separator - panel_h += POPUP_LINE_H # star type + hop - panel_h += POPUP_LINE_H # corridor - panel_h += POPUP_LINE_H # bodies + pop + panel_h += line_h # system name (15px font) + panel_h += line_h # system id (10px font) + panel_h += sep_total # separator + panel_h += line_h # star type + hop + panel_h += line_h # corridor + panel_h += line_h # bodies + pop if not gttr.is_empty(): - panel_h += sep_h + gttr_h - panel_h += sep_h + adj_h # adjacent systems + panel_h += sep_total + gttr_h + panel_h += sep_total + adj_h # adjacent systems panel_h += pad # bottom padding # ── Draw background ────────────────────────────────────────────────────── var panel_pos := Vector2(sz.x - panel_w - POPUP_MARGIN, POPUP_MARGIN) var x: float = panel_pos.x + pad var x_right: float = panel_pos.x + panel_w - pad - var y: float = panel_pos.y + pad + POPUP_LINE_H # baseline offset + var y: float = panel_pos.y + pad + line_h # first baseline draw_rect(Rect2(panel_pos, Vector2(panel_w, panel_h)), COLOR_INFO_BG) draw_rect(Rect2(panel_pos, Vector2(panel_w, panel_h)), sep_color, false, 1.0) @@ -488,45 +491,46 @@ func _draw_info_panel(sz: Vector2) -> void: # System name draw_string(font, Vector2(x, y), sys_name, HORIZONTAL_ALIGNMENT_LEFT, inner_w, 15, COLOR_TEXT) - y += POPUP_LINE_H + y += line_h # System ID draw_string(font, Vector2(x, y), node.get("system_id", ""), HORIZONTAL_ALIGNMENT_LEFT, inner_w, 10, COLOR_TEXT_DIM) - y += POPUP_LINE_H - # Separator - draw_line(Vector2(x, y + 2.0), Vector2(x_right, y + 2.0), sep_color, 1.0) - y += sep_h + # Separator — space above from baseline, line, space below to next baseline + y += sep_above + draw_line(Vector2(x, y), Vector2(x_right, y), sep_color, 1.0) + y += sep_below # Star type + hop draw_string(font, Vector2(x, y), stat_line_1, HORIZONTAL_ALIGNMENT_LEFT, inner_w, 11, COLOR_TEXT_DIM) - y += POPUP_LINE_H + y += line_h # Corridor draw_string(font, Vector2(x, y), sector_str + " corridor", HORIZONTAL_ALIGNMENT_LEFT, inner_w, 11, sector_color) - y += POPUP_LINE_H + y += line_h # Bodies + population draw_string(font, Vector2(x, y), stat_line_3, HORIZONTAL_ALIGNMENT_LEFT, inner_w, 11, COLOR_TEXT_DIM) - y += POPUP_LINE_H # GTTR excerpt if not gttr.is_empty(): - draw_line(Vector2(x, y + 2.0), Vector2(x_right, y + 2.0), sep_color, 1.0) - y += sep_h + y += sep_above + draw_line(Vector2(x, y), Vector2(x_right, y), sep_color, 1.0) + y += sep_below draw_multiline_string(font, Vector2(x, y), gttr, HORIZONTAL_ALIGNMENT_LEFT, inner_w, POPUP_GTTR_FONT_SIZE, POPUP_GTTR_MAX_LINES, Color(COLOR_TEXT.r, COLOR_TEXT.g, COLOR_TEXT.b, 0.75)) - y += gttr_h + y += gttr_h - line_h # multiline size includes first baseline # Adjacent systems - draw_line(Vector2(x, y + 2.0), Vector2(x_right, y + 2.0), sep_color, 1.0) - y += sep_h + y += sep_above + draw_line(Vector2(x, y), Vector2(x_right, y), sep_color, 1.0) + y += sep_below if adj_line.is_empty(): draw_string(font, Vector2(x, y), "No gate connections", HORIZONTAL_ALIGNMENT_LEFT, inner_w, 10, COLOR_TEXT_DIM)