From 9c56a28ef42ec2c2789e7081e67faed84dc345bb Mon Sep 17 00:00:00 2001 From: mo Date: Sun, 19 Jul 2026 20:32:10 +0100 Subject: [PATCH] fix: apply menu item origin as an offset (#917) Add `origin` values to the existing item rectangle instead of replacing its coordinates. --- .../Parsing/Menu/Sequence/ItemScopeSequences.cpp | 4 ++-- .../Menu/Sequence/ItemScopeSequencesTests.cpp | 15 ++++++++------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/ObjLoading/Parsing/Menu/Sequence/ItemScopeSequences.cpp b/src/ObjLoading/Parsing/Menu/Sequence/ItemScopeSequences.cpp index be82745d..2b7d36b9 100644 --- a/src/ObjLoading/Parsing/Menu/Sequence/ItemScopeSequences.cpp +++ b/src/ObjLoading/Parsing/Menu/Sequence/ItemScopeSequences.cpp @@ -255,8 +255,8 @@ namespace menu::item_scope_sequences { assert(state->m_current_item); - state->m_current_item->m_rect.x = MenuMatcherFactory::TokenNumericExpressionValue(state, result); - state->m_current_item->m_rect.y = MenuMatcherFactory::TokenNumericExpressionValue(state, result); + state->m_current_item->m_rect.x += MenuMatcherFactory::TokenNumericExpressionValue(state, result); + state->m_current_item->m_rect.y += MenuMatcherFactory::TokenNumericExpressionValue(state, result); } }; diff --git a/test/ObjLoadingTests/Parsing/Menu/Sequence/ItemScopeSequencesTests.cpp b/test/ObjLoadingTests/Parsing/Menu/Sequence/ItemScopeSequencesTests.cpp index c87ae2b7..6324e102 100644 --- a/test/ObjLoadingTests/Parsing/Menu/Sequence/ItemScopeSequencesTests.cpp +++ b/test/ObjLoadingTests/Parsing/Menu/Sequence/ItemScopeSequencesTests.cpp @@ -303,10 +303,11 @@ namespace test::parsing::menu::sequence::item REQUIRE(item->m_rect.verticalAlign == 2); } - TEST_CASE("ItemScopeSequences: Can specify origin", "[parsing][sequence][menu]") + TEST_CASE("ItemScopeSequences: Origin offsets the item rect", "[parsing][sequence][menu]") { ItemSequenceTestsHelper helper(FeatureLevel::IW4, false); const TokenPos pos; + helper.m_item->m_rect = CommonRect{10.0f, 20.0f, 30.0f, 40.0f, 1, 2}; helper.Tokens({ SimpleParserValue::Identifier(pos, new std::string("origin")), SimpleParserValue::FloatingPoint(pos, 4.20), @@ -326,12 +327,12 @@ namespace test::parsing::menu::sequence::item const auto* item = helper.m_state->m_current_item; REQUIRE(item); - REQUIRE_THAT(item->m_rect.x, WithinRel(4.20)); - REQUIRE_THAT(item->m_rect.y, WithinRel(13.37)); - REQUIRE_THAT(item->m_rect.w, WithinRel(0.0)); - REQUIRE_THAT(item->m_rect.h, WithinRel(0.0)); - REQUIRE(item->m_rect.horizontalAlign == 0); - REQUIRE(item->m_rect.verticalAlign == 0); + REQUIRE_THAT(item->m_rect.x, WithinRel(14.20)); + REQUIRE_THAT(item->m_rect.y, WithinRel(33.37)); + REQUIRE_THAT(item->m_rect.w, WithinRel(30.0)); + REQUIRE_THAT(item->m_rect.h, WithinRel(40.0)); + REQUIRE(item->m_rect.horizontalAlign == 1); + REQUIRE(item->m_rect.verticalAlign == 2); } TEST_CASE("ItemScopeSequences: Ownerdraw sets the ownerdraw item type", "[parsing][sequence][menu]")