diff --git a/deps/nostalgia/src/nostalgia/modules/gfx/include/nostalgia/gfx/tilesheet.hpp b/deps/nostalgia/src/nostalgia/modules/gfx/include/nostalgia/gfx/tilesheet.hpp index 14652ec..7593e09 100644 --- a/deps/nostalgia/src/nostalgia/modules/gfx/include/nostalgia/gfx/tilesheet.hpp +++ b/deps/nostalgia/src/nostalgia/modules/gfx/include/nostalgia/gfx/tilesheet.hpp @@ -426,6 +426,8 @@ ox::Error resizeSubsheet(TileSheet::SubSheet &ss, ox::Size const&sz) noexcept; [[nodiscard]] TileSheet::SubSheetIdx validateSubSheetIdx(TileSheet const&ts, TileSheet::SubSheetIdx idx) noexcept; +ox::Result getSubSheetIdx(TileSheet const &ts, SubSheetId pId) noexcept; + [[nodiscard]] TileSheet::SubSheet &getSubSheet( ox::SpanView const&idx, diff --git a/deps/nostalgia/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditor-imgui.cpp b/deps/nostalgia/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditor-imgui.cpp index 2bea079..2c574aa 100644 --- a/deps/nostalgia/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditor-imgui.cpp +++ b/deps/nostalgia/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditor-imgui.cpp @@ -388,6 +388,17 @@ ox::Error TileSheetEditorImGui::saveItem() noexcept { return m_model.saveFile(); } +void TileSheetEditorImGui::navigateTo(ox::StringViewCR arg) noexcept { + auto const subSheetId = strToInt(arg); + if (subSheetId.error) { + return; + } + if (auto const [val, err] = getSubSheetIdx(m_model.img(), subSheetId.value); + !err) { + setActiveSubsheet(val); + } +} + void TileSheetEditorImGui::showSubsheetEditor() noexcept { auto const&sheet = m_model.activeSubSheet(); if (!sheet.subsheets.empty()) { @@ -451,7 +462,7 @@ void TileSheetEditorImGui::drawTileSheet(ox::Vec2 const&fbSize) noexcept { if (wheelh != 0) { m_view.scrollH(fbSize, wheelh); } - if (ImGui::IsMouseDown(0) && m_prevMouseDownPos != mousePos) { + if (ImGui::IsMouseClicked(0) && m_prevMouseDownPos != mousePos) { m_prevMouseDownPos = mousePos; switch (m_tool) { case TileSheetTool::Draw: diff --git a/deps/nostalgia/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditor-imgui.hpp b/deps/nostalgia/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditor-imgui.hpp index e16a2ce..53cac5b 100644 --- a/deps/nostalgia/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditor-imgui.hpp +++ b/deps/nostalgia/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditor-imgui.hpp @@ -87,6 +87,8 @@ class TileSheetEditorImGui: public studio::Editor { protected: ox::Error saveItem() noexcept override; + void navigateTo(ox::StringViewCR arg) noexcept override; + private: void showSubsheetEditor() noexcept; diff --git a/deps/nostalgia/src/nostalgia/modules/gfx/src/tilesheet.cpp b/deps/nostalgia/src/nostalgia/modules/gfx/src/tilesheet.cpp index d30e51a..796ce31 100644 --- a/deps/nostalgia/src/nostalgia/modules/gfx/src/tilesheet.cpp +++ b/deps/nostalgia/src/nostalgia/modules/gfx/src/tilesheet.cpp @@ -2,6 +2,8 @@ * Copyright 2016 - 2025 Gary Talent (gary@drinkingtea.net). All rights reserved. */ +#include "nostalgia/gfx/tilesheet.hpp" + #include #include @@ -187,6 +189,28 @@ TileSheet::SubSheetIdx validateSubSheetIdx(TileSheet const&ts, TileSheet::SubShe return validateSubSheetIdx(std::move(idx), 0, ts.subsheet); } +static ox::Error getSubSheetIdx(TileSheet::SubSheet const &ss, SubSheetId const pId, TileSheet::SubSheetIdx &idx) noexcept { + if (ss.id == pId) { + return {}; + } + for (uint32_t i{}; auto const &sub : ss.subsheets) { + idx.emplace_back(i); + auto const err = getSubSheetIdx(sub, pId, idx); + if (!err) { + return {}; + } + idx.pop_back(); + ++i; + } + return ox::Error{1, "SubSheet not found"}; +} + +ox::Result getSubSheetIdx(TileSheet const &ts, SubSheetId const pId) noexcept { + ox::Result out; + OX_RETURN_ERROR(getSubSheetIdx(ts.subsheet, pId, out.value)); + return out; +} + #if defined(__GNUC__) && __GNUC__ >= 13 #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdangling-reference"