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"
14#include "app/rom.h"
15#include "imgui/imgui.h"
16
17namespace yaze {
18namespace editor {
19
20namespace palette_internal {
21
29
31 public:
32 void RecordChange(const std::string& group_name, size_t palette_index,
33 size_t color_index, const gfx::SnesColor& original_color,
34 const gfx::SnesColor& new_color) {
35 if (recent_changes_.size() >= kMaxHistorySize) {
36 recent_changes_.pop_front();
37 }
38
39 recent_changes_.push_back(
40 {group_name, palette_index, color_index, original_color, new_color});
41 }
42
43 gfx::SnesColor RestoreOriginalColor(const std::string& group_name,
44 size_t palette_index,
45 size_t color_index) const {
46 for (const auto& change : recent_changes_) {
47 if (change.group_name == group_name &&
48 change.palette_index == palette_index &&
49 change.color_index == color_index) {
50 return change.original_color;
51 }
52 }
53 return gfx::SnesColor();
54 }
55
56 auto size() const { return recent_changes_.size(); }
57
59 return recent_changes_[index].new_color;
60 }
62 return recent_changes_[index].original_color;
63 }
64
65 const std::deque<PaletteChange>& GetRecentChanges() const {
66 return recent_changes_;
67 }
68
69 private:
70 std::deque<PaletteChange> recent_changes_;
71 static const size_t kMaxHistorySize = 50;
72};
73} // namespace palette_internal
74
75absl::Status DisplayPalette(gfx::SnesPalette& palette, bool loaded);
76
81class PaletteEditor : public Editor {
82 public:
83 explicit PaletteEditor(Rom* rom = nullptr) : rom_(rom) {
85 custom_palette_.push_back(gfx::SnesColor(0x7FFF));
86 }
87
88 void Initialize() override;
89 absl::Status Load() override;
90 absl::Status Update() override;
91 absl::Status Cut() override { return absl::OkStatus(); }
92 absl::Status Copy() override { return absl::OkStatus(); }
93 absl::Status Paste() override { return absl::OkStatus(); }
94 absl::Status Undo() override { return absl::OkStatus(); }
95 absl::Status Redo() override { return absl::OkStatus(); }
96 absl::Status Find() override { return absl::OkStatus(); }
97 absl::Status Save() override { return absl::UnimplementedError("Save"); }
98
99 void set_rom(Rom* rom) { rom_ = rom; }
100 Rom* rom() const { return rom_; }
101
107 void JumpToPalette(const std::string& group_name, int palette_index);
108
109 private:
110 void DrawToolset();
111 void DrawControlPanel();
112 void DrawQuickAccessCard();
114
115 // Legacy methods (for backward compatibility if needed)
116 void DrawQuickAccessTab();
117 void DrawCustomPalette();
118 absl::Status DrawPaletteGroup(int category, bool right_side = false);
119 absl::Status EditColorInPalette(gfx::SnesPalette& palette, int index);
120 absl::Status ResetColorToOriginal(gfx::SnesPalette& palette, int index,
121 const gfx::SnesPalette& originalPalette);
122 void AddRecentlyUsedColor(const gfx::SnesColor& color);
123 absl::Status HandleColorPopup(gfx::SnesPalette& palette, int i, int j, int n);
124
125 absl::Status status_;
127
129
130 std::vector<gfx::SnesColor> custom_palette_;
131 std::vector<gfx::SnesColor> recently_used_colors_;
132
134
135 ImVec4 saved_palette_[256] = {};
136
138
140
141 // Card visibility flags (registered with EditorCardManager)
143 bool show_ow_main_card_ = false;
146 bool show_sprite_card_ = false;
151 bool show_quick_access_ = false;
154
155 // Palette card instances
156 std::unique_ptr<OverworldMainPaletteCard> ow_main_card_;
157 std::unique_ptr<OverworldAnimatedPaletteCard> ow_animated_card_;
158 std::unique_ptr<DungeonMainPaletteCard> dungeon_main_card_;
159 std::unique_ptr<SpritePaletteCard> sprite_card_;
160 std::unique_ptr<SpritesAux1PaletteCard> sprites_aux1_card_;
161 std::unique_ptr<SpritesAux2PaletteCard> sprites_aux2_card_;
162 std::unique_ptr<SpritesAux3PaletteCard> sprites_aux3_card_;
163 std::unique_ptr<EquipmentPaletteCard> equipment_card_;
164};
165
166} // namespace editor
167} // namespace yaze
168
169#endif
The Rom class is used to load, save, and modify Rom data.
Definition rom.h:74
Interface for editor classes.
Definition editor.h:122
EditorType type_
Definition editor.h:164
Manage graphics group configurations in a Rom.
Allows the user to view and edit in game palettes.
std::unique_ptr< SpritesAux3PaletteCard > sprites_aux3_card_
absl::Status DrawPaletteGroup(int category, bool right_side=false)
std::unique_ptr< DungeonMainPaletteCard > dungeon_main_card_
std::unique_ptr< OverworldAnimatedPaletteCard > ow_animated_card_
absl::Status ResetColorToOriginal(gfx::SnesPalette &palette, int index, const gfx::SnesPalette &originalPalette)
std::vector< gfx::SnesColor > custom_palette_
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
PaletteEditor(Rom *rom=nullptr)
absl::Status Undo() override
absl::Status Copy() override
absl::Status HandleColorPopup(gfx::SnesPalette &palette, int i, int j, int n)
std::unique_ptr< SpritesAux2PaletteCard > sprites_aux2_card_
std::vector< gfx::SnesColor > recently_used_colors_
palette_internal::PaletteEditorHistory history_
absl::Status Save() override
absl::Status Paste() override
std::unique_ptr< EquipmentPaletteCard > equipment_card_
absl::Status Load() override
absl::Status Cut() override
std::unique_ptr< SpritePaletteCard > sprite_card_
void JumpToPalette(const std::string &group_name, int palette_index)
Jump to a specific palette by group and index.
absl::Status Redo() override
absl::Status EditColorInPalette(gfx::SnesPalette &palette, int index)
std::unique_ptr< SpritesAux1PaletteCard > sprites_aux1_card_
std::unique_ptr< OverworldMainPaletteCard > ow_main_card_
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:109
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.
Main namespace for the application.
Definition controller.cc:20