refactor(editor): improve card visibility checks across various editors
- Updated multiple editor components to check visibility flags before rendering cards, ensuring that only visible cards are displayed. - Refactored card rendering logic in GraphicsEditor, ScreenEditor, MessageEditor, MusicEditor, SpriteEditor, and Emulator to enhance user experience and performance. - Improved maintainability by centralizing visibility checks and ensuring consistent behavior across different editor types. Benefits: - Streamlines the rendering process, leading to a more efficient UI experience. - Enhances code clarity and maintainability by standardizing visibility handling across editors.
This commit is contained in:
@@ -114,30 +114,44 @@ absl::Status GraphicsEditor::Update() {
|
||||
player_anims_card.SetDefaultSize(500, 600);
|
||||
prototype_card.SetDefaultSize(600, 500);
|
||||
|
||||
// Get visibility flags from card manager and pass to Begin()
|
||||
// Always call End() after Begin() - End() handles ImGui state safely
|
||||
if (sheet_editor_card.Begin(card_registry->GetVisibilityFlag("graphics.sheet_editor"))) {
|
||||
status_ = UpdateGfxEdit();
|
||||
}
|
||||
sheet_editor_card.End();
|
||||
|
||||
if (sheet_browser_card.Begin(card_registry->GetVisibilityFlag("graphics.sheet_browser"))) {
|
||||
if (asset_browser_.Initialized == false) {
|
||||
asset_browser_.Initialize(gfx::Arena::Get().gfx_sheets());
|
||||
// Sheet Editor Card - Check visibility flag exists and is true before rendering
|
||||
bool* sheet_editor_visible = card_registry->GetVisibilityFlag("graphics.sheet_editor");
|
||||
if (sheet_editor_visible && *sheet_editor_visible) {
|
||||
if (sheet_editor_card.Begin(sheet_editor_visible)) {
|
||||
status_ = UpdateGfxEdit();
|
||||
}
|
||||
asset_browser_.Draw(gfx::Arena::Get().gfx_sheets());
|
||||
sheet_editor_card.End();
|
||||
}
|
||||
sheet_browser_card.End();
|
||||
|
||||
if (player_anims_card.Begin(card_registry->GetVisibilityFlag("graphics.player_animations"))) {
|
||||
status_ = UpdateLinkGfxView();
|
||||
// Sheet Browser Card - Check visibility flag exists and is true before rendering
|
||||
bool* sheet_browser_visible = card_registry->GetVisibilityFlag("graphics.sheet_browser");
|
||||
if (sheet_browser_visible && *sheet_browser_visible) {
|
||||
if (sheet_browser_card.Begin(sheet_browser_visible)) {
|
||||
if (asset_browser_.Initialized == false) {
|
||||
asset_browser_.Initialize(gfx::Arena::Get().gfx_sheets());
|
||||
}
|
||||
asset_browser_.Draw(gfx::Arena::Get().gfx_sheets());
|
||||
}
|
||||
sheet_browser_card.End();
|
||||
}
|
||||
player_anims_card.End();
|
||||
|
||||
if (prototype_card.Begin(card_registry->GetVisibilityFlag("graphics.prototype_viewer"))) {
|
||||
status_ = UpdateScadView();
|
||||
// Player Animations Card - Check visibility flag exists and is true before rendering
|
||||
bool* player_anims_visible = card_registry->GetVisibilityFlag("graphics.player_animations");
|
||||
if (player_anims_visible && *player_anims_visible) {
|
||||
if (player_anims_card.Begin(player_anims_visible)) {
|
||||
status_ = UpdateLinkGfxView();
|
||||
}
|
||||
player_anims_card.End();
|
||||
}
|
||||
|
||||
// Prototype Viewer Card - Check visibility flag exists and is true before rendering
|
||||
bool* prototype_visible = card_registry->GetVisibilityFlag("graphics.prototype_viewer");
|
||||
if (prototype_visible && *prototype_visible) {
|
||||
if (prototype_card.Begin(prototype_visible)) {
|
||||
status_ = UpdateScadView();
|
||||
}
|
||||
prototype_card.End();
|
||||
}
|
||||
prototype_card.End();
|
||||
|
||||
CLEAR_AND_RETURN_STATUS(status_)
|
||||
return absl::OkStatus();
|
||||
|
||||
@@ -122,32 +122,50 @@ absl::Status ScreenEditor::Update() {
|
||||
title_screen_card.SetDefaultSize(600, 500);
|
||||
naming_screen_card.SetDefaultSize(500, 400);
|
||||
|
||||
// Get visibility flags from card manager and pass to Begin()
|
||||
// Always call End() after Begin() - End() handles ImGui state safely
|
||||
if (dungeon_maps_card.Begin(card_registry->GetVisibilityFlag("screen.dungeon_maps"))) {
|
||||
DrawDungeonMapsEditor();
|
||||
// Dungeon Maps Card - Check visibility flag exists and is true before rendering
|
||||
bool* dungeon_maps_visible = card_registry->GetVisibilityFlag("screen.dungeon_maps");
|
||||
if (dungeon_maps_visible && *dungeon_maps_visible) {
|
||||
if (dungeon_maps_card.Begin(dungeon_maps_visible)) {
|
||||
DrawDungeonMapsEditor();
|
||||
}
|
||||
dungeon_maps_card.End();
|
||||
}
|
||||
dungeon_maps_card.End();
|
||||
|
||||
if (inventory_menu_card.Begin(card_registry->GetVisibilityFlag("screen.inventory_menu"))) {
|
||||
DrawInventoryMenuEditor();
|
||||
// Inventory Menu Card - Check visibility flag exists and is true before rendering
|
||||
bool* inventory_menu_visible = card_registry->GetVisibilityFlag("screen.inventory_menu");
|
||||
if (inventory_menu_visible && *inventory_menu_visible) {
|
||||
if (inventory_menu_card.Begin(inventory_menu_visible)) {
|
||||
DrawInventoryMenuEditor();
|
||||
}
|
||||
inventory_menu_card.End();
|
||||
}
|
||||
inventory_menu_card.End();
|
||||
|
||||
if (overworld_map_card.Begin(card_registry->GetVisibilityFlag("screen.overworld_map"))) {
|
||||
DrawOverworldMapEditor();
|
||||
// Overworld Map Card - Check visibility flag exists and is true before rendering
|
||||
bool* overworld_map_visible = card_registry->GetVisibilityFlag("screen.overworld_map");
|
||||
if (overworld_map_visible && *overworld_map_visible) {
|
||||
if (overworld_map_card.Begin(overworld_map_visible)) {
|
||||
DrawOverworldMapEditor();
|
||||
}
|
||||
overworld_map_card.End();
|
||||
}
|
||||
overworld_map_card.End();
|
||||
|
||||
if (title_screen_card.Begin(card_registry->GetVisibilityFlag("screen.title_screen"))) {
|
||||
DrawTitleScreenEditor();
|
||||
// Title Screen Card - Check visibility flag exists and is true before rendering
|
||||
bool* title_screen_visible = card_registry->GetVisibilityFlag("screen.title_screen");
|
||||
if (title_screen_visible && *title_screen_visible) {
|
||||
if (title_screen_card.Begin(title_screen_visible)) {
|
||||
DrawTitleScreenEditor();
|
||||
}
|
||||
title_screen_card.End();
|
||||
}
|
||||
title_screen_card.End();
|
||||
|
||||
if (naming_screen_card.Begin(card_registry->GetVisibilityFlag("screen.naming_screen"))) {
|
||||
DrawNamingScreenEditor();
|
||||
// Naming Screen Card - Check visibility flag exists and is true before rendering
|
||||
bool* naming_screen_visible = card_registry->GetVisibilityFlag("screen.naming_screen");
|
||||
if (naming_screen_visible && *naming_screen_visible) {
|
||||
if (naming_screen_card.Begin(naming_screen_visible)) {
|
||||
DrawNamingScreenEditor();
|
||||
}
|
||||
naming_screen_card.End();
|
||||
}
|
||||
naming_screen_card.End();
|
||||
|
||||
return status_;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user