fix(ui): star map info panel spacing — split separator padding
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) <noreply@anthropic.com>
This commit is contained in:
+27
-23
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user