Fix/new gui layout - #418
Conversation
…ayout # Conflicts: # gradle.properties
…ayout # Conflicts: # .gitignore # gradle.properties
|
This PR contains changes that modified the public API. To update the reference ABI dumps: ./gradlew updateKotlinAbi
git add **/api/**
git commit -m "Update ABI reference"
git pushAfter updating, the CI will pass. Make sure the changes are backward compatible. |
|
This PR contains changes that modified the public API. To update the reference ABI dumps: ./gradlew updateKotlinAbi
git add **/api/**
git commit -m "Update ABI reference"
git pushAfter updating, the CI will pass. Make sure the changes are backward compatible. |
There was a problem hiding this comment.
🟡 Changes recommended
DefaultFontWidths currently populates advances by iterating UTF-16 Chars, which mismeasures supplementary Unicode code points and can break header text width calculations/alignment.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
This PR refactors the inventory header/title rendering to be geometry- and font-metrics driven (instead of hard-coded pixel constants), adds configurable row/header typography settings, and updates paginated view layout/overlays (page indicator + optional empty rows + switch sound). It also mirrors the same capabilities for the Minestom implementation and updates core layout infrastructure + tests.
Changes:
- Introduces
ViewHeaderGeometry+ViewFontMetricsand wires them into view settings/builders to consistently align header/title/row text across different resource-pack textures. - Reworks paginated views to support “button row + content rows” layouts, optional empty padding rows, a page counter indicator, and an optional page-switch sound.
- Replaces the old title-rendering approach with a component tree layout/measuring pipeline (
layoutViewText) backed by a vanilla font advance table (DefaultFontWidths) and shared slot geometry math (ViewSlotGeometry), with new/updated tests.
File summaries
| File | Description |
|---|---|
| surf-api-paper/surf-api-paper/src/main/kotlin/dev/slne/surf/api/paper/inventory/framework/view/settings/ViewHeaderGeometry.kt | Adds configurable pixel geometry for header/title/slot-grid alignment. |
| surf-api-paper/surf-api-paper/src/main/kotlin/dev/slne/surf/api/paper/inventory/framework/view/settings/ViewFontMetrics.kt | Adds font metrics model for measuring/transforming header text. |
| surf-api-paper/surf-api-paper/src/main/kotlin/dev/slne/surf/api/paper/inventory/framework/view/settings/SurfViewSettingsDefaults.kt | Expands defaults for header colors/geometry/fonts/pagination options. |
| surf-api-paper/surf-api-paper/src/main/kotlin/dev/slne/surf/api/paper/inventory/framework/view/settings/SurfViewSettings.kt | Extends settings contract with header color/metrics/geometry/background/row fonts. |
| surf-api-paper/surf-api-paper/src/main/kotlin/dev/slne/surf/api/paper/inventory/framework/view/settings/SimpleViewSettings.kt | Plumbs new header settings into simple view settings. |
| surf-api-paper/surf-api-paper/src/main/kotlin/dev/slne/surf/api/paper/inventory/framework/view/settings/PaginationViewRows.kt | Redefines pagination row model (button row + content rows) and adds FIVE. |
| surf-api-paper/surf-api-paper/src/main/kotlin/dev/slne/surf/api/paper/inventory/framework/view/settings/PaginationEmptyRows.kt | Adds configurable empty rows opposite the pagination button row. |
| surf-api-paper/surf-api-paper/src/main/kotlin/dev/slne/surf/api/paper/inventory/framework/view/settings/PaginatedViewSettings.kt | Adds empty rows, page indicator, and switch sound; computes content rows. |
| surf-api-paper/surf-api-paper/src/main/kotlin/dev/slne/surf/api/paper/inventory/framework/view/settings/builder/SurfViewSettingsBuilder.kt | Adds DSL setters for header color/metrics/geometry/background/row fonts. |
| surf-api-paper/surf-api-paper/src/main/kotlin/dev/slne/surf/api/paper/inventory/framework/view/settings/builder/SimpleViewSettingsBuilder.kt | Builds SimpleViewSettings with new header configuration fields. |
| surf-api-paper/surf-api-paper/src/main/kotlin/dev/slne/surf/api/paper/inventory/framework/view/settings/builder/PaginatedViewSettingsBuilder.kt | Adds DSL support for empty rows/page indicator/switch sound. |
| surf-api-paper/surf-api-paper/src/main/kotlin/dev/slne/surf/api/paper/inventory/framework/view/pagination/PaginationPageIndicatorComponent.kt | Implements rendered header component for the page counter. |
| surf-api-paper/surf-api-paper/src/main/kotlin/dev/slne/surf/api/paper/inventory/framework/view/pagination/PaginationPageIndicator.kt | Adds functional interface for rendering page counter text. |
| surf-api-paper/surf-api-paper/src/main/kotlin/dev/slne/surf/api/paper/inventory/framework/view/pagination/PaginationButtonGlyphComponent.kt | Aligns pagination overlay using slot geometry + exposes counter area math. |
| surf-api-paper/surf-api-paper/src/main/kotlin/dev/slne/surf/api/paper/inventory/framework/view/pagination/AbstractPaginatedSurfView.kt | Updates pagination overlay rendering, layout rows, and click sound behavior. |
| surf-api-paper/surf-api-paper/src/main/kotlin/dev/slne/surf/api/paper/inventory/framework/view/container/ViewContainer.kt | Tracks last rendered title to adopt external config titles safely. |
| surf-api-paper/surf-api-paper/src/main/kotlin/dev/slne/surf/api/paper/inventory/framework/view/container/component/components/ViewContainerTitleComponent.kt | Refactors title rendering to use component layout + configurable metrics/geometry. |
| surf-api-paper/surf-api-paper/src/main/kotlin/dev/slne/surf/api/paper/inventory/framework/view/container/component/components/ViewContainerRowTextComponent.kt | Adds row-centered header text component aligned to slot column spans. |
| surf-api-paper/surf-api-paper/src/main/kotlin/dev/slne/surf/api/paper/inventory/framework/view/container/component/components/ViewContainerGlyphComponent.kt | Adjusts background glyph width to match measured advance. |
| surf-api-paper/surf-api-paper/src/main/kotlin/dev/slne/surf/api/paper/inventory/framework/view/container/component/components/ViewContainerBackHintComponent.kt | Removes back-hint glyph component from header rendering. |
| surf-api-paper/surf-api-paper/src/main/kotlin/dev/slne/surf/api/paper/inventory/framework/view/container/component/components/ViewBlockCellComponent.kt | Aligns block-cell overlay via geometry; adds slot->component helper. |
| surf-api-paper/surf-api-paper/src/main/kotlin/dev/slne/surf/api/paper/inventory/framework/view/AbstractSurfView.kt | Adds “adopt external title” behavior + updateHeader API; uses new header pipeline. |
| surf-api-paper/surf-api-paper-plugin-test/src/main/kotlin/dev/slne/surf/surfapi/bukkit/test/PaperPluginMain.kt | Registers new paginated test command/view DSL. |
| surf-api-paper/surf-api-paper-plugin-test/src/main/kotlin/dev/slne/surf/surfapi/bukkit/test/command/subcommands/InventoryTest.kt | Adds paginated subcommand to open the new test view. |
| surf-api-paper/surf-api-paper-plugin-test/src/main/kotlin/dev/slne/surf/surfapi/bukkit/test/command/subcommands/inventory/TestPaginatedView.kt | Adds test paginated view showcasing new pagination settings. |
| surf-api-paper/surf-api-paper-plugin-test/src/main/kotlin/dev/slne/surf/surfapi/bukkit/test/command/subcommands/inventory/TestInventoryView.kt | Updates test view to use new header/rowText/blocking helpers. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/inventory/framework/view/settings/ViewHeaderGeometry.kt | Minestom: adds header geometry model matching Paper implementation. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/inventory/framework/view/settings/ViewFontMetrics.kt | Minestom: adds font metrics model matching Paper implementation. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/inventory/framework/view/settings/SurfViewSettingsDefaults.kt | Minestom: expands defaults for new header/pagination settings. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/inventory/framework/view/settings/SurfViewSettings.kt | Minestom: extends settings contract with new header configuration. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/inventory/framework/view/settings/SimpleViewSettings.kt | Minestom: plumbs new header settings into simple view settings. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/inventory/framework/view/settings/PaginationViewRows.kt | Minestom: updates pagination rows model and adds FIVE. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/inventory/framework/view/settings/PaginationEmptyRows.kt | Minestom: adds empty rows config enum. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/inventory/framework/view/settings/PaginatedViewSettings.kt | Minestom: adds computed content rows + page indicator + sound options. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/inventory/framework/view/settings/builder/SurfViewSettingsBuilder.kt | Minestom: adds DSL setters for new header configuration. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/inventory/framework/view/settings/builder/SimpleViewSettingsBuilder.kt | Minestom: builds SimpleViewSettings with new fields. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/inventory/framework/view/settings/builder/PaginatedViewSettingsBuilder.kt | Minestom: adds DSL for empty rows/page indicator/switch sound. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/inventory/framework/view/pagination/PaginationPageIndicatorComponent.kt | Minestom: page counter header component. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/inventory/framework/view/pagination/PaginationPageIndicator.kt | Minestom: page indicator renderer interface + default implementation. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/inventory/framework/view/pagination/PaginationButtonGlyphComponent.kt | Minestom: slot-geometry based pagination overlay positioning. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/inventory/framework/view/pagination/AbstractPaginatedSurfView.kt | Minestom: updates pagination overlay/layout/click sound behavior. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/inventory/framework/view/container/ViewContainer.kt | Minestom: tracks last rendered title for external title adoption. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/inventory/framework/view/container/component/components/ViewContainerTitleComponent.kt | Minestom: title component uses new layout + geometry/metrics. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/inventory/framework/view/container/component/components/ViewContainerRowTextComponent.kt | Minestom: adds row text component aligned to slot column spans. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/inventory/framework/view/container/component/components/ViewContainerGlyphComponent.kt | Minestom: adjusts background glyph width to match measured advance. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/inventory/framework/view/container/component/components/ViewContainerBackHintComponent.kt | Minestom: removes back-hint glyph component. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/inventory/framework/view/container/component/components/ViewBlockCellComponent.kt | Minestom: aligns block-cell overlay via geometry; adds slot helper. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/inventory/framework/view/AbstractSurfView.kt | Minestom: adopts external titles + new header pipeline and update API. |
| surf-api-core/surf-api-core/src/test/kotlin/dev/slne/surf/api/core/inventory/framework/internal/ViewTitleRenderingTest.kt | Removes old renderViewTitle-based invariants test. |
| surf-api-core/surf-api-core/src/test/kotlin/dev/slne/surf/api/core/inventory/framework/internal/ViewHeaderLayoutTest.kt | Adds comprehensive invariants tests for new layout/geometry approach. |
| surf-api-core/surf-api-core/src/main/kotlin/dev/slne/surf/api/core/inventory/framework/internal/ViewTextLayout.kt | Adds shared component layout + exact-width measurement for header text. |
| surf-api-core/surf-api-core/src/main/kotlin/dev/slne/surf/api/core/inventory/framework/internal/ViewSlotGeometry.kt | Adds shared slot grid pixel math utilities. |
| surf-api-core/surf-api-core/src/main/kotlin/dev/slne/surf/api/core/inventory/framework/internal/ViewContainerRendering.kt | Removes old title rendering helper; keeps container shifting logic. |
| surf-api-core/surf-api-core/src/main/kotlin/dev/slne/surf/api/core/inventory/framework/internal/TextAlignmentMath.kt | Adjusts alignment shifts (removes +1 offset; updates centering doc). |
| surf-api-core/surf-api-core/src/main/kotlin/dev/slne/surf/api/core/inventory/framework/internal/DefaultFontWidths.kt | Adds vanilla font advance table + component width helpers. |
| surf-api-core/surf-api-core/build.gradle.kts | Ensures Adventure API is available on test classpath via compileOnlyApi. |
| surf-api-core/surf-api-core/api/surf-api-core.api | Updates public API surface for new internal layout/geometry primitives. |
| gradle.properties | Bumps version to 3.43.0. |
| .gitignore | Minor whitespace-only adjustment. |
Review details
- Files reviewed: 62/63 changed files
- Comments generated: 1
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
|
Tick the box to add this pull request to the merge queue (same as
|
|
Benötigt Resourcepack update