yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
palette_editor.h
Go to the documentation of this file.
1#ifndef YAZE_APP_EDITOR_PALETTE_EDITOR_H
2#define YAZE_APP_EDITOR_PALETTE_EDITOR_H
3
4#include <deque>
5#include <string>
6#include <vector>
7
8#include "absl/status/status.h"
9#include "app/editor/editor.h"
12
15#include "rom/rom.h"
16#include "imgui/imgui.h"
17
18namespace yaze {
19namespace editor {
20
21namespace palette_internal {
22
30
32 public:
33 void RecordChange(const std::string& group_name, size_t palette_index,
34 size_t color_index, const gfx::SnesColor& original_color,
35 const gfx::SnesColor& new_color) {
36 if (recent_changes_.size() >= kMaxHistorySize) {
37 recent_changes_.pop_front();
38 }
39
40 recent_changes_.push_back(
41 {group_name, palette_index, color_index, original_color, new_color});
42 }
43
44 gfx::SnesColor RestoreOriginalColor(const std::string& group_name,
45 size_t palette_index,
46 size_t color_index) const {
47 for (const auto& change : recent_changes_) {
48 if (change.group_name == group_name &&
49 change.palette_index == palette_index &&
50 change.color_index == color_index) {
51 return change.original_color;
52 }
53 }
54 return gfx::SnesColor();
55 }
56
57 auto size() const { return recent_changes_.size(); }
58
60 return recent_changes_[index].new_color;
61 }
63 return recent_changes_[index].original_color;
64 }
65
66 const std::deque<PaletteChange>& GetRecentChanges() const {
67 return recent_changes_;
68 }
69
70 private:
71 std::deque<PaletteChange> recent_changes_;
72 static const size_t kMaxHistorySize = 50;
73};
74} // namespace palette_internal
75
76absl::Status DisplayPalette(gfx::SnesPalette& palette, bool loaded);
77
82class PaletteEditor : public Editor {
83 public:
84 explicit PaletteEditor(Rom* rom = nullptr) : rom_(rom) {
86 custom_palette_.push_back(gfx::SnesColor(0x7FFF));
87 }
88
89 void Initialize() override;
90 absl::Status Load() override;
91 absl::Status Update() override;
92 absl::Status Cut() override { return absl::OkStatus(); }
93 absl::Status Copy() override { return absl::OkStatus(); }
94 absl::Status Paste() override { return absl::OkStatus(); }
95 absl::Status Undo() override;
96 absl::Status Redo() override;
97 absl::Status Find() override { return absl::OkStatus(); }
98 absl::Status Save() override;
99
100 void set_rom(Rom* rom) { rom_ = rom; }
101 Rom* rom() const { return rom_; }
102
103 // Override to propagate game_data to embedded components
108
114 void JumpToPalette(const std::string& group_name, int palette_index);
115
116 private:
117 void DrawToolset();
118 void DrawControlPanel();
121
122 // Category and search UI methods
124 void DrawSearchBar();
125 bool PassesSearchFilter(const std::string& group_name) const;
126 bool* GetShowFlagForGroup(const std::string& group_name);
127
128 // Legacy methods (for backward compatibility if needed)
129 void DrawQuickAccessTab();
130 void DrawCustomPalette();
131 absl::Status DrawPaletteGroup(int category, bool right_side = false);
132 absl::Status EditColorInPalette(gfx::SnesPalette& palette, int index);
133 absl::Status ResetColorToOriginal(gfx::SnesPalette& palette, int index,
134 const gfx::SnesPalette& originalPalette);
135 void AddRecentlyUsedColor(const gfx::SnesColor& color);
136 absl::Status HandleColorPopup(gfx::SnesPalette& palette, int i, int j, int n);
137
138 absl::Status status_;
140
142
143 std::vector<gfx::SnesColor> custom_palette_;
144 std::vector<gfx::SnesColor> recently_used_colors_;
145
147
148 ImVec4 saved_palette_[256] = {};
149
151
153
154 // Search filter for palette groups
155 char search_buffer_[256] = "";
156
157 // Panel visibility flags (legacy; superseded by PanelManager visibility)
160
161 // Palette panel visibility flags
165 bool show_sprite_panel_ = false;
170 bool show_quick_access_ = false;
172
173 // Palette Panels (formerly Cards)
174 // We keep raw pointers to the panels which are owned by PanelManager
183};
184
185} // namespace editor
186} // namespace yaze
187
188#endif
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
Definition rom.h:24
Dungeon Main palette group panel.
Interface for editor classes.
Definition editor.h:179
virtual void SetGameData(zelda3::GameData *game_data)
Definition editor.h:187
zelda3::GameData * game_data() const
Definition editor.h:228
EditorType type_
Definition editor.h:236
Equipment/Armor palette group panel.
Manage graphics group configurations in a Rom.
void SetGameData(zelda3::GameData *data)
Overworld Animated palette group panel.
Overworld Main palette group panel.
Allows the user to view and edit in game palettes.
absl::Status DrawPaletteGroup(int category, bool right_side=false)
bool * GetShowFlagForGroup(const std::string &group_name)
OverworldAnimatedPalettePanel * ow_anim_panel_
absl::Status ResetColorToOriginal(gfx::SnesPalette &palette, int index, const gfx::SnesPalette &originalPalette)
std::vector< gfx::SnesColor > custom_palette_
SpritesAux1PalettePanel * sprite_aux1_panel_
absl::Status Find() override
void DrawCustomPalette()
Draw custom palette editor with enhanced ROM hacking features.
void AddRecentlyUsedColor(const gfx::SnesColor &color)
absl::Status Update() override
bool PassesSearchFilter(const std::string &group_name) const
PaletteEditor(Rom *rom=nullptr)
absl::Status Undo() override
absl::Status Copy() override
EquipmentPalettePanel * equipment_panel_
SpritePalettePanel * sprite_global_panel_
absl::Status HandleColorPopup(gfx::SnesPalette &palette, int i, int j, int n)
SpritesAux2PalettePanel * sprite_aux2_panel_
std::vector< gfx::SnesColor > recently_used_colors_
palette_internal::PaletteEditorHistory history_
absl::Status Save() override
absl::Status Paste() override
absl::Status Load() override
absl::Status Cut() override
void JumpToPalette(const std::string &group_name, int palette_index)
Jump to a specific palette by group and index.
DungeonMainPalettePanel * dungeon_main_panel_
void SetGameData(zelda3::GameData *game_data) override
SpritesAux3PalettePanel * sprite_aux3_panel_
OverworldMainPalettePanel * ow_main_panel_
absl::Status Redo() override
absl::Status EditColorInPalette(gfx::SnesPalette &palette, int index)
Global Sprite palette group panel.
Sprites Aux1 palette group panel.
Sprites Aux2 palette group panel.
Sprites Aux3 palette group panel.
gfx::SnesColor RestoreOriginalColor(const std::string &group_name, size_t palette_index, size_t color_index) const
void RecordChange(const std::string &group_name, size_t palette_index, size_t color_index, const gfx::SnesColor &original_color, const gfx::SnesColor &new_color)
const std::deque< PaletteChange > & GetRecentChanges() const
SNES Color container.
Definition snes_color.h:110
Represents a palette of colors for the Super Nintendo Entertainment System (SNES).
absl::Status DisplayPalette(gfx::SnesPalette &palette, bool loaded)
Display SNES palette with enhanced ROM hacking features.