Skip to content

Fix/new gui layout - #418

Merged
ammodev merged 11 commits into
version/26.2from
fix/new-gui-layout
Sep 8, 2026
Merged

ammodev merged 11 commits into
version/26.2from
fix/new-gui-layout

Conversation

@TheBjoRedCraft

@TheBjoRedCraft TheBjoRedCraft commented Aug 30, 2026

Copy link
Copy Markdown
Contributor

Benötigt Resourcepack update

@TheBjoRedCraft
TheBjoRedCraft marked this pull request as draft August 30, 2026 17:12
@github-actions

Copy link
Copy Markdown
Contributor

⚠️ API/ABI changes detected!

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 push

After updating, the CI will pass. Make sure the changes are backward compatible.

@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

⚠️ API/ABI changes detected!

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 push

After updating, the CI will pass. Make sure the changes are backward compatible.

@TheBjoRedCraft
TheBjoRedCraft marked this pull request as ready for review September 7, 2026 17:43
Copilot AI lite review requested due to automatic review settings September 7, 2026 17:43

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 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 + ViewFontMetrics and 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.

@ammodev
ammodev added this pull request to the merge queue Sep 8, 2026
@mergify

mergify Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

Tick the box to add this pull request to the merge queue (same as @mergifyio queue).

  • Queue this pull request

@mergify

mergify Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

queue

⚠️ Configuration not compatible with merge_queue ruleset rule

Details

The ruleset Default requires GitHub's own merge queue on this branch, so GitHub refuses every merge Mergify performs outside it.

Possible solutions:

  • Remove the merge_queue rule from the ruleset Default and let Mergify's merge queue process the pull requests.
  • Add Mergify as a bypass actor on the ruleset Default, with exempt mode: it is the one bypass mode GitHub honours on every merge path, including the asynchronous Merge API that merges the members of a GitHub-native stack.

Learn more in the documentation.

@ammodev
ammodev removed this pull request from the merge queue due to the queue being cleared Sep 8, 2026
@ammodev
ammodev merged commit 7bfae4a into version/26.2 Sep 8, 2026
8 checks passed
@ammodev
ammodev deleted the fix/new-gui-layout branch September 8, 2026 16:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants