Files
SubMiner/backlog/completed/task-11 - Break-up-the-applyInvisibleSubtitleLayoutFromMpvMetrics-mega-function.md
2026-02-17 22:54:09 -08:00

2.4 KiB

id, title, status, assignee, created_date, updated_date, labels, milestone, dependencies, references, priority
id title status assignee created_date updated_date labels milestone dependencies references priority
TASK-11 Break up the applyInvisibleSubtitleLayoutFromMpvMetrics mega function Done
2026-02-11 08:21 2026-02-16 01:34
refactor
renderer
complexity
Codebase Clarity & Composability
TASK-27.5
src/renderer/renderer.ts
medium

Description

In renderer.ts (around lines 865-1075), applyInvisibleSubtitleLayoutFromMpvMetrics is a 211-line function with up to 5 levels of nesting. It handles OSD scaling calculations, platform-specific font compensation (macOS vs Linux), DPR calculations, ASS alignment tag interpretation (\an tags), baseline compensation, line-height fixes, font property application, and transform origin — all interleaved.

Extract into focused helpers:

  • calculateOsdScale(metrics, renderAreaHeight) — pure scaling math
  • calculateSubtitlePosition(metrics, scale, alignment) — ASS \an tag interpretation + positioning
  • applyPlatformFontCompensation(style, platform) — macOS kerning/size adjustments
  • applySubtitleStyle(element, computedStyle) — DOM style application

This can be done independently of or as part of TASK-6 (renderer split).

Acceptance Criteria

  • #1 No single function exceeds ~50 lines in the positioning logic
  • #2 Helper functions are pure where possible (take inputs, return outputs)
  • #3 Platform-specific branches isolated into dedicated helpers
  • #4 Invisible overlay positioning still works correctly on Linux and macOS

Implementation Notes

Helpers were split so positioning math, base layout, and typography/vertical handling are no longer in one monolith; see src/renderer/positioning/invisible-layout.ts and peer files.

Applied as part of TASK-27.5 with helper extraction: moved mpv subtitle layout orchestration to invisible-layout.ts and extracted metric/base/style helpers into invisible-layout-metrics.ts and invisible-layout-helpers.ts.

Final Summary

Decomposition of applyInvisibleSubtitleLayoutFromMpvMetrics completed as part of TASK-27.5: function body split into metric/layout/typography helpers and small coordinator preserved. Manual validation completed by user; behavior remains stable.