You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit c54c72a
Browse filesBrowse the repository at this point in the historyBrowse files
Copy file name to clipboardExpand all lines: docs/DESIGN.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -180,7 +180,7 @@ Panels use restrained `#0C2444 → #08192E` depth, with `#135582` outlines. The
180
180
- Use an application-wide Material `Surface` for proper light text over the dark theme. Do not depend on default `Text` content colors after drawing raw backgrounds.
181
181
- The main window chooses an initial size constrained by the desktop work area. The instance panel is vertically scrollable, with a visible scrollbar; crucial controls should be visible without scrolling on typical full-HD screens.
182
182
- Compact hero typography avoids text collisions. Below 760 dp of content width, stack the hero/Play and setup panel with a visible page scrollbar; otherwise keep Play visible and scroll the setup panel independently. Very short windows scroll the page as well. The minimum native window is 400 × 400. Never make unsupported future features appear as active navigation.
183
-
- Optimized JPEG/PNG resources load locally via painterResource without network access, runtime blur, repeated animation or dynamic downloads. Shared vector icons, 18 dp panel radii, 9 dp field radii and typography live in `SyntaxTheme.kt` / `SyntaxComponents.kt`. Account setup details belong behind the Player information action, keeping the normal launch screen concise.
183
+
- Optimized JPEG/PNG resources load locally via `rememberBrandingPainter` and the Compose resources bitmap decoder, retaining the packaged classpath paths. Decoding is remembered per resource path and streams are closed after reading; no network access, runtime blur, repeated animation or dynamic downloads. Shared vector icons, 18 dp panel radii, 9 dp field radii and typography live in `SyntaxTheme.kt` / `SyntaxComponents.kt`. Account setup details belong behind the Player information action, keeping the normal launch screen concise.
Copy file name to clipboardExpand all lines: docs/DEVELOPMENT.md
+4Lines changed: 4 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -351,6 +351,10 @@ remain separate roadmap items.
351
351
352
352
`MinecraftVersionCatalog` uses the shared HTTP client with a 15-second request deadline. Desktop supplies `cacheDir/minecraft/version_manifest_v2.json`; tests may omit the path. Each fetch requests fresh data, validates JSON and catalog consistency, then publishes the raw Mojang document through a unique sibling temporary file and atomic replacement where supported. This is disposable remote metadata, not a launcher settings schema. Invalid/missing caches are never silently treated as an empty catalog. Failed refreshes can use a re-parsed valid cache, cancellation propagates, and cache-write failures are logged without discarding a valid online result. Disk work runs on the IO dispatcher. Deterministic MockEngine tests cover restart reuse, replacement, malformed/HTTP failures, corruption, unavailable storage and cancellation. Full offline launching remains a separate concern.
353
353
354
+
## Desktop resource and dialog APIs
355
+
356
+
Brand PNG/JPEG files remain in `src/main/resources/branding` for the native package, classpath tools and existing image-dimension regressions. Use `rememberBrandingPainter` instead of deprecated `androidx.compose.ui.res.painterResource`: the helper remembers a `BitmapPainter` by path, closes the classpath stream and decodes with `org.jetbrains.compose.resources.decodeToImageBitmap`, following [JetBrains’ classpath migration example](https://github.com/JetBrains/compose-multiplatform-core/pull/1457). Native instance/mod windows use `DialogWindow` with the existing dialog state and close guards. Material3 and resources dependencies use explicit coordinates because the old Compose Gradle accessors are deprecated; keep the resources version aligned with the Compose plugin and retain the resolved Material3 version when changing notation.
357
+
354
358
## Interface localization (EN / PL / DE)
355
359
356
360
`desktop/i18n/UiStrings` loads UTF-8 `resources/i18n/{en,pl,de}.properties` bundles once. Use stable keys with numbered `{0}` placeholders; format runtime values through `strings.text(key, arguments…)` rather than embedding translated content in core. `LocalStrings` scopes language to the application composition. `LauncherLanguageHost` loads the system/saved choice off the UI thread and publishes a new localizer only after an atomic successful preference save. A save failure leaves the current language active and presents a translated retry explanation. No JVM-wide locale mutation is used.
Copy file name to clipboardExpand all lines: docs/ROADMAP.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -14,6 +14,7 @@ Agents and contributors MUST keep this file synchronized with actual repository
14
14
15
15
## Cross-milestone desktop development ergonomics (October 2026)
16
16
17
+
-[x] Replace deprecated desktop resource/dialog calls with Compose resource bitmap decoding and `DialogWindow`; align OfflineAccount copy visibility with its private constructor and remove redundant loader null checks. Full local tests/build and Linux package verification pass; native window acceptance remains separate.
17
18
-[x] Embed the semantic product version, CI run number and source SHA at build time; show exact CI build identity in the launcher header and updater without altering release-version comparisons. Local builds have an explicit non-CI label.
18
19
-[ ] 🚧 IN PROGRESS — Consolidate product SemVer in root `gradle.properties` for Gradle modules, embedded metadata, jpackage numeric version derivation, update bundles, GitHub Actions tags and Build Explorer publication; source and deterministic tests committed, final CI acceptance pending.
19
20
-[ ] 🚧 IN PROGRESS — Replace native window decorations with branded controls integrated into the existing Compose header (drag, minimize, maximize/restore, close, 8 resize grips, 400×400 minimum). Source implementation and unit coverage for resize geometry added; real native/manual acceptance on Windows, macOS and Linux X11/Wayland, DPI and small screens remains open.
- Applied `@ConsistentCopyVisibility` to OfflineAccount so the generated copy method respects its private constructor; all repository creation remains through validated `create`.
19
+
- Removed redundant Elvis/safe calls where Kotlin already proves that the delayed installer has a selected loader and registry. Loader resolution, preparation order and errors for missing services remain unchanged.
20
+
- Replaced deprecated image calls in the main window, header, hero and startup updater with one remembered classpath bitmap helper using the Compose resources decoder. Existing PNG/JPEG paths, artwork, sizing and native package icon remain intact; input streams close after reading.
21
+
- Migrated the instance and local-mod native windows from Dialog to DialogWindow, preserving size/state, resize support, busy close guards and content.
22
+
- Declared Material3 explicitly at its existing resolved version and Compose resources at the plugin version, avoiding deprecated Gradle dependency accessors. No warning suppressions or product-version bump introduced.
-`docs/{DESIGN,DEVELOPMENT,ROADMAP,WORKLOG}.md` — current resource/dependency conventions, maintenance progress and evidence.
32
+
33
+
### Verification
34
+
-`./gradlew test` — PASS via `./gradlew --offline --no-daemon -PlauncherBuildNumber=156 -PlauncherCommit=e96b70e7be7a41a3ee0e15f32cf9fc3d1145ef67 -PlauncherUpdateChannel=dev test build :launcher-desktop:createDistributable --rerun-tasks --no-build-cache --warning-mode all`; 136 core and 25 desktop tests passed, two opt-in live tests skipped. All 19 actionable tasks executed.
35
+
-`./gradlew build` — PASS in the same invocation; zero Kotlin source or Gradle-script compiler warnings. Only the two upstream plugin deprecations listed below remain.
36
+
-`:launcher-desktop:createDistributable` — PASS for Linux. Verified that the packaged desktop JAR includes the new helper and all three original branding files. `scripts/package_update.py` and `:launcher-desktop:verifyUpdateBundle` also PASS for the complete Linux update archive.
37
+
- Manual verification — inspected regenerated Polish home (1440×810) and startup updater (440×600) renders. Branding, transparency and geometry preserved; native dialogs and Windows/macOS still require platform acceptance.
38
+
-`git diff --check` — PASS.
39
+
40
+
### Roadmap updates
41
+
-`[x] Cross-milestone desktop development ergonomics / Deprecated core/Compose APIs` — local migration/verification complete.
42
+
-`[ ] Native UI and Windows/macOS/platform acceptance` — remains open; headless rendering and Linux packaging do not replace native checks.
43
+
44
+
### Follow-ups / known issues
45
+
- Two upstream Compose/Hot Reload Gradle deprecations remain: Configuration.setVisible and the HotReloadUsageType attribute value type. No repository calls use these APIs; upgrading or disabling plugins is outside the supplied source-warning cleanup.
46
+
- No authentication, loader feature, persistence-schema, artwork, canonical product-version or release-policy change. Hosted CI and native dialog focus/resize acceptance remain separate.
47
+
48
+
---
49
+
11
50
## 2026-10-21 — Fix nested home scrolling in CI render tests
12
51
13
52
**Milestone:** v0.1 — translated home regression coverage; v0.12 — CI reliability
0 commit comments