From e3ed7053369cfc5ac5b0bc00136559dcc95ee120 Mon Sep 17 00:00:00 2001 From: scawful Date: Wed, 13 Nov 2024 09:42:54 -0500 Subject: [PATCH] Refactor tab handling in Dungeon and Graphics editors for improved readability --- src/app/core/constants.h | 5 --- src/app/editor/dungeon/dungeon_editor.cc | 44 +++++++++++----------- src/app/editor/graphics/graphics_editor.cc | 27 +++++++------ src/app/editor/graphics/screen_editor.cc | 40 ++++++++++++-------- src/app/editor/utils/flags.h | 1 + src/app/rom.cc | 4 +- 6 files changed, 64 insertions(+), 57 deletions(-) diff --git a/src/app/core/constants.h b/src/app/core/constants.h index 1b2dc1f4..4594aae6 100644 --- a/src/app/core/constants.h +++ b/src/app/core/constants.h @@ -1,11 +1,6 @@ #ifndef YAZE_APP_CORE_CONSTANTS_H #define YAZE_APP_CORE_CONSTANTS_H -#define TAB_BAR(w) if (ImGui::BeginTabBar(w)) { -#define END_TAB_BAR() \ - ImGui::EndTabBar(); \ - } - #define TAB_ITEM(w) if (ImGui::BeginTabItem(w)) { #define END_TAB_ITEM() \ ImGui::EndTabItem(); \ diff --git a/src/app/editor/dungeon/dungeon_editor.cc b/src/app/editor/dungeon/dungeon_editor.cc index cbedd60b..67e4bb55 100644 --- a/src/app/editor/dungeon/dungeon_editor.cc +++ b/src/app/editor/dungeon/dungeon_editor.cc @@ -49,21 +49,22 @@ absl::Status DungeonEditor::Update() { refresh_graphics_ = false; } - TAB_BAR("##DungeonEditorTabBar") - TAB_ITEM("Room Editor") - status_ = UpdateDungeonRoomView(); - END_TAB_ITEM() - TAB_ITEM("Usage Statistics") - if (is_loaded_) { - static bool calc_stats = false; - if (!calc_stats) { - CalculateUsageStats(); - calc_stats = true; + if (ImGui::BeginTabBar("##DungeonEditorTabBar")) { + TAB_ITEM("Room Editor") + status_ = UpdateDungeonRoomView(); + END_TAB_ITEM() + TAB_ITEM("Usage Statistics") + if (is_loaded_) { + static bool calc_stats = false; + if (!calc_stats) { + CalculateUsageStats(); + calc_stats = true; + } + DrawUsageStats(); } - DrawUsageStats(); + END_TAB_ITEM() + ImGui::EndTabBar(); } - END_TAB_ITEM() - END_TAB_BAR() return absl::OkStatus(); } @@ -194,14 +195,15 @@ absl::Status DungeonEditor::UpdateDungeonRoomView() { TableNextRow(); TableNextColumn(); - TAB_BAR("##DungeonRoomTabBar"); - TAB_ITEM("Rooms"); - DrawRoomSelector(); - END_TAB_ITEM(); - TAB_ITEM("Entrances"); - DrawEntranceSelector(); - END_TAB_ITEM(); - END_TAB_BAR(); + if (ImGui::BeginTabBar("##DungeonRoomTabBar")) { + TAB_ITEM("Rooms"); + DrawRoomSelector(); + END_TAB_ITEM(); + TAB_ITEM("Entrances"); + DrawEntranceSelector(); + END_TAB_ITEM(); + ImGui::EndTabBar(); + } TableNextColumn(); DrawDungeonTabView(); diff --git a/src/app/editor/graphics/graphics_editor.cc b/src/app/editor/graphics/graphics_editor.cc index 60a632f8..3ce0b43d 100644 --- a/src/app/editor/graphics/graphics_editor.cc +++ b/src/app/editor/graphics/graphics_editor.cc @@ -34,25 +34,11 @@ using ImGui::InputText; using ImGui::SameLine; using ImGui::TableNextColumn; -static constexpr absl::string_view kGfxToolsetColumnNames[] = { - "#memoryEditor", - "##separator_gfx1", -}; - constexpr ImGuiTableFlags kGfxEditTableFlags = ImGuiTableFlags_Borders | ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable | ImGuiTableFlags_SizingFixedFit; -constexpr ImGuiTabBarFlags kGfxEditTabBarFlags = - ImGuiTabBarFlags_AutoSelectNewTabs | ImGuiTabBarFlags_Reorderable | - ImGuiTabBarFlags_FittingPolicyResizeDown | - ImGuiTabBarFlags_TabListPopupButton; - -constexpr ImGuiTableFlags kGfxEditFlags = ImGuiTableFlags_Reorderable | - ImGuiTableFlags_Resizable | - ImGuiTableFlags_SizingStretchSame; - absl::Status GraphicsEditor::Update() { if (ImGui::BeginTabBar("##TabBar")) { status_ = UpdateGfxEdit(); @@ -260,6 +246,10 @@ absl::Status GraphicsEditor::UpdateGfxSheetList() { absl::Status GraphicsEditor::UpdateGfxTabView() { static int next_tab_id = 0; + constexpr ImGuiTabBarFlags kGfxEditTabBarFlags = + ImGuiTabBarFlags_AutoSelectNewTabs | ImGuiTabBarFlags_Reorderable | + ImGuiTabBarFlags_FittingPolicyResizeDown | + ImGuiTabBarFlags_TabListPopupButton; if (ImGui::BeginTabBar("##GfxEditTabBar", kGfxEditTabBarFlags)) { if (ImGui::TabItemButton(ICON_MD_ADD, ImGuiTabItemFlags_Trailing | @@ -439,6 +429,10 @@ absl::Status GraphicsEditor::UpdateScadView() { ImGui::End(); } + constexpr ImGuiTableFlags kGfxEditFlags = ImGuiTableFlags_Reorderable | + ImGuiTableFlags_Resizable | + ImGuiTableFlags_SizingStretchSame; + BEGIN_TABLE("#gfxEditTable", 4, kGfxEditFlags) SETUP_COLUMN("File Import (BIN, CGX, ROM)") SETUP_COLUMN("Palette (COL)") @@ -490,6 +484,11 @@ absl::Status GraphicsEditor::UpdateScadView() { } absl::Status GraphicsEditor::DrawToolset() { + static constexpr absl::string_view kGfxToolsetColumnNames[] = { + "#memoryEditor", + "##separator_gfx1", + }; + if (ImGui::BeginTable("GraphicsToolset", 2, ImGuiTableFlags_SizingFixedFit, ImVec2(0, 0))) { for (const auto& name : kGfxToolsetColumnNames) diff --git a/src/app/editor/graphics/screen_editor.cc b/src/app/editor/graphics/screen_editor.cc index a92677e9..22a2b2aa 100644 --- a/src/app/editor/graphics/screen_editor.cc +++ b/src/app/editor/graphics/screen_editor.cc @@ -26,17 +26,19 @@ using core::Renderer; constexpr uint32_t kRedPen = 0xFF0000FF; absl::Status ScreenEditor::Update() { - TAB_BAR("##TabBar") - TAB_ITEM("Dungeon Maps") - if (rom()->is_loaded()) { - DrawDungeonMapsEditor(); + if (ImGui::BeginTabBar("##ScreenEditorTabBar")) { + if (ImGui::BeginTabItem("Dungeon Maps")) { + if (rom()->is_loaded()) { + DrawDungeonMapsEditor(); + } + ImGui::EndTabItem(); + } + DrawInventoryMenuEditor(); + DrawOverworldMapEditor(); + DrawTitleScreenEditor(); + DrawNamingScreenEditor(); + ImGui::EndTabBar(); } - END_TAB_ITEM() - DrawInventoryMenuEditor(); - DrawOverworldMapEditor(); - DrawTitleScreenEditor(); - DrawNamingScreenEditor(); - END_TAB_BAR() return status_; } @@ -483,6 +485,7 @@ void ScreenEditor::DrawDungeonMapsEditor() { ImGui::TableNextColumn(); tilemap_canvas_.DrawBackground(ImVec2(128 * 2 + 2, (192 * 2) + 4)); tilemap_canvas_.DrawContextMenu(); + tilemap_canvas_.DrawTileSelector(8.f); tilemap_canvas_.DrawBitmapTable(sheets_); tilemap_canvas_.DrawGrid(); tilemap_canvas_.DrawOverlay(); @@ -524,16 +527,21 @@ void ScreenEditor::LoadBinaryGfx() { } void ScreenEditor::DrawTitleScreenEditor() { - TAB_ITEM("Title Screen") - END_TAB_ITEM() + if (ImGui::BeginTabItem("Title Screen")) { + ImGui::EndTabItem(); + } } + void ScreenEditor::DrawNamingScreenEditor() { - TAB_ITEM("Naming Screen") - END_TAB_ITEM() + if (ImGui::BeginTabItem("Naming Screen")) { + ImGui::EndTabItem(); + } } + void ScreenEditor::DrawOverworldMapEditor() { - TAB_ITEM("Overworld Map") - END_TAB_ITEM() + if (ImGui::BeginTabItem("Overworld Map")) { + ImGui::EndTabItem(); + } } void ScreenEditor::DrawToolset() { diff --git a/src/app/editor/utils/flags.h b/src/app/editor/utils/flags.h index 39b0eb4b..1b0035d2 100644 --- a/src/app/editor/utils/flags.h +++ b/src/app/editor/utils/flags.h @@ -52,6 +52,7 @@ struct FlagsMenu : public core::ExperimentFlags { &mutable_flags()->kLogInstructions); Checkbox("Save All Palettes", &mutable_flags()->kSaveAllPalettes); Checkbox("Save Gfx Groups", &mutable_flags()->kSaveGfxGroups); + Checkbox("Save Graphics Sheets", &mutable_flags()->kSaveGraphicsSheet); Checkbox("Use New ImGui Input", &mutable_flags()->kUseNewImGuiInput); } }; diff --git a/src/app/rom.cc b/src/app/rom.cc index 76e23bc7..220b65ce 100644 --- a/src/app/rom.cc +++ b/src/app/rom.cc @@ -150,7 +150,9 @@ absl::Status Rom::SaveAllGraphicsData() { auto sheet_data = graphics_sheets_[i].vector(); final_data = gfx::ConvertBpp(sheet_data, from_bpp, to_bpp); if (compressed) { - final_data = gfx::lc_lz2::CompressV2(final_data); + ASSIGN_OR_RETURN( + final_data, + gfx::lc_lz2::CompressV2(final_data.data(), 0, final_data.size())); } auto offset = GetGraphicsAddress(data(), i, version_constants().kOverworldGfxPtr1,