yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
yaze::gfx::PaletteManager Class Reference

Centralized palette management system. More...

#include <palette_manager.h>

Collaboration diagram for yaze::gfx::PaletteManager:

Classes

struct  SaveTransactionSnapshot
 
struct  SessionState
 

Public Types

using ChangeCallback = std::function<void(const PaletteChangeEvent&)>
 

Public Member Functions

 PaletteManager (const PaletteManager &)=delete
 
PaletteManager & operator= (const PaletteManager &)=delete
 
 PaletteManager (PaletteManager &&)=delete
 
PaletteManager & operator= (PaletteManager &&)=delete
 
void Initialize (zelda3::GameData *game_data)
 Initialize the palette manager with GameData.
 
void Initialize (Rom *rom)
 Legacy initialization with ROM (deprecated, use GameData version)
 
bool IsInitialized () const
 Check if manager is initialized.
 
void ActivateSession (zelda3::GameData *game_data)
 Select the palette state for a ROM session without resnapshotting it.
 
uint64_t ColorRevision (const zelda3::GameData *game_data) const
 
bool IsSessionActive (const zelda3::GameData *game_data) const
 Check whether this exact GameData is the active palette session.
 
bool IsManaging (const zelda3::GameData *game_data) const
 Check whether the manager is bound to this exact GameData and ROM.
 
void ReleaseSession (const zelda3::GameData *game_data)
 Forget all palette tracking for a closing or reloaded ROM session.
 
void ResetForTesting ()
 Reset all state for test isolation.
 
SnesColor GetColor (const std::string &group_name, int palette_index, int color_index) const
 Get a color from a palette.
 
absl::Status SetColor (const std::string &group_name, int palette_index, int color_index, const SnesColor &new_color)
 Set a color in a palette (records change for undo)
 
absl::Status ApplyExternalChanges (const zelda3::GameData *owner, const std::vector< PaletteColorChange > &changes, const std::function< absl::Status()> &participant)
 
absl::Status ResetColor (const std::string &group_name, int palette_index, int color_index)
 Reset a single color to its original ROM value.
 
absl::Status ResetPalette (const std::string &group_name, int palette_index)
 Reset an entire palette to original ROM values.
 
absl::Status BeginColorEdit (const std::string &group_name, int palette_index, int color_index, uint64_t caller_id=0)
 
void CommitColorEdit (uint64_t caller_id=0)
 
void CancelColorEdit (uint64_t caller_id=0)
 
bool HasColorEdit (uint64_t caller_id=0) const
 
bool HasUnsavedChanges () const
 Check if there are ANY unsaved changes.
 
bool HasUnsavedChanges (const zelda3::GameData *game_data) const
 Check a specific ROM session without changing the active binding.
 
std::vector< std::string > GetModifiedGroups () const
 Get list of modified palette group names.
 
bool IsGroupModified (const std::string &group_name) const
 Check if a specific palette group has modifications.
 
bool IsPaletteModified (const std::string &group_name, int palette_index) const
 Check if a specific palette is modified.
 
bool IsColorModified (const std::string &group_name, int palette_index, int color_index) const
 Check if a specific color is modified.
 
size_t GetModifiedColorCount () const
 Get count of modified colors across all groups.
 
size_t GetModifiedColorCount (const zelda3::GameData *game_data) const
 Count modified colors for a specific ROM session.
 
std::vector< std::pair< uint32_t, uint32_t > > GetModifiedColorWriteRanges () const
 Get exact, coalesced half-open ROM ranges for modified colors.
 
std::vector< std::pair< uint32_t, uint32_t > > GetModifiedColorWriteRanges (const zelda3::GameData *game_data) const
 Get modified-color ranges for a session without activating it.
 
std::vector< std::pair< uint32_t, uint32_t > > GetModifiedGroupColorWriteRanges (const std::string &group_name) const
 Get exact, coalesced half-open ROM ranges for one modified group.
 
absl::Status SaveGroup (const std::string &group_name)
 Save a specific palette group to ROM.
 
absl::Status SaveAllToRom ()
 Save ALL modified palettes to ROM.
 
absl::Status BeginSaveTransaction ()
 
void RollbackSaveTransaction ()
 
void CommitSaveTransaction ()
 
void DiscardGroup (const std::string &group_name)
 Discard changes for a specific group.
 
void DiscardAllChanges ()
 Discard ALL unsaved changes.
 
absl::Status ApplyPreviewChanges ()
 Apply preview changes to other editors without saving to ROM.
 
void Undo ()
 Undo the most recent change.
 
void Redo ()
 Redo the most recently undone change.
 
bool CanUndo () const
 Check if the complete undo entry matches current colors. Conflicting history is retained, but unavailable until values match again.
 
bool CanRedo () const
 Check if the complete redo entry matches current colors. Conflicting history is retained, but unavailable until values match again.
 
size_t GetUndoStackSize () const
 Get size of undo stack.
 
size_t GetRedoStackSize () const
 Get size of redo stack.
 
void ClearHistory ()
 Clear undo/redo history.
 
int RegisterChangeListener (ChangeCallback callback)
 Register a callback for palette change events.
 
void UnregisterChangeListener (int callback_id)
 Unregister a change listener.
 
void BeginBatch ()
 Begin a batch operation (groups multiple changes into one undo step)
 
void EndBatch ()
 End a batch operation.
 
bool InBatch () const
 Check if currently in a batch operation.
 
SnesColor GetOriginalColor (const std::string &group_name, int palette_index, int color_index) const
 

Static Public Member Functions

static PaletteManager & Get ()
 Get the singleton instance.
 

Private Member Functions

 PaletteManager ()=default
 
 ~PaletteManager ()=default
 
PaletteGroup * GetMutableGroup (const std::string &group_name)
 Helper: Get mutable palette group.
 
const PaletteGroup * GetGroup (const std::string &group_name) const
 Helper: Get const palette group.
 
void RecordChanges (std::vector< PaletteColorChange > changes)
 Helper: Record one undo step (a gesture or an entire batch).
 
bool CanReplayHistory (const std::vector< PaletteColorChange > &changes, bool redo) const
 
void RecordChange (const PaletteColorChange &change)
 Helper: Record a single-color undo step.
 
void NotifyListeners (const PaletteChangeEvent &event)
 Helper: Notify all listeners of an event.
 
void MarkModified (const std::string &group_name, int palette_index, int color_index)
 Helper: Mark a color as modified.
 
void ClearModifiedFlags (const std::string &group_name)
 Helper: Clear modified flags for a group.
 
SessionState * CurrentState ()
 
const SessionState * CurrentState () const
 
const SessionState * FindState (const zelda3::GameData *game_data) const
 

Private Attributes

zelda3::GameData * game_data_ = nullptr
 GameData instance (not owned) - preferred.
 
Rom * rom_ = nullptr
 ROM instance (not owned) - legacy, used when game_data_ is null.
 
std::unordered_map< const zelda3::GameData *, SessionState > session_states_
 Per-GameData state. RomSession owns the keys and releases them on teardown.
 
SessionState unbound_state_
 State used only before a GameData session is selected (legacy/tests).
 
std::unordered_map< int, ChangeCallback > change_listeners_
 Change listeners.
 
int next_callback_id_ = 1
 

Static Private Attributes

static constexpr size_t kMaxUndoHistory = 500
 

Detailed Description

Centralized palette management system.

Singleton coordinator for ALL palette editing operations. Provides:

  • Global dirty tracking across all palette groups
  • Transaction-based editing with automatic ROM synchronization
  • Unified undo/redo stack shared across all editors
  • Batch operations (save all, discard all)
  • Change notifications via observer pattern
  • Conflict resolution when multiple editors modify same palette

Thread-safety: This class is NOT thread-safe. All operations must be called from the main UI thread.

Definition at line 76 of file palette_manager.h.

Member Typedef Documentation

◆ ChangeCallback

Definition at line 78 of file palette_manager.h.

Constructor & Destructor Documentation

◆ PaletteManager() [1/3]

yaze::gfx::PaletteManager::PaletteManager ( const PaletteManager & )
delete

◆ PaletteManager() [2/3]

yaze::gfx::PaletteManager::PaletteManager ( PaletteManager && )
delete

◆ PaletteManager() [3/3]

yaze::gfx::PaletteManager::PaletteManager ( )
privatedefault

◆ ~PaletteManager()

yaze::gfx::PaletteManager::~PaletteManager ( )
privatedefault

Member Function Documentation

◆ Get()

static PaletteManager & yaze::gfx::PaletteManager::Get ( )
inlinestatic

Get the singleton instance.

Definition at line 81 of file palette_manager.h.

Referenced by yaze::gui::PaletteEditorWidget::ApplyDungeonRenderColorEdit(), yaze::editor::PaletteReorderControl::Begin(), yaze::editor::DungeonEditorV2::BeginSaveTransaction(), yaze::editor::PaletteEditor::BeginSaveTransaction(), yaze::editor::PaletteGroupPanel::CanRedo(), yaze::editor::PaletteEditor::CanRedo(), yaze::editor::PaletteGroupPanel::CanUndo(), yaze::editor::PaletteEditor::CanUndo(), yaze::editor::PaletteGroupPanel::ClearHistory(), yaze::editor::DungeonEditorV2::CollectWriteRanges(), yaze::editor::DungeonEditorV2::CommitSaveTransaction(), yaze::editor::PaletteEditor::CommitSaveTransaction(), yaze::editor::PaletteGroupPanel::DiscardChanges(), yaze::editor::EditorManager::DiscardPendingRomBackupRestore(), yaze::editor::UsagePreviewView::Draw(), yaze::editor::PaletteEditor::DrawCategorizedPaletteList(), yaze::editor::PaletteGroupPanel::DrawColorPicker(), yaze::editor::PaletteEditor::DrawControlPanel(), yaze::gui::PaletteEditorWidget::DrawDungeonRenderColorPicker(), yaze::editor::UsagePreviewView::DrawSourcePreview(), yaze::editor::PaletteGroupPanel::DrawToolbar(), yaze::editor::EditorManager::EnsureGameDataLoaded(), yaze::editor::ExecutePalettePixelPlan(), yaze::editor::PaletteGroupPanel::GetOriginalColor(), yaze::editor::DungeonEditorV2::HandleArenaPaletteChanged(), yaze::editor::EditorManager::HandleSessionClosed(), yaze::editor::EditorManager::HandleSessionCreated(), yaze::editor::EditorManager::HandleSessionSwitched(), yaze::editor::PaletteGroupPanel::HasUnsavedChanges(), yaze::editor::PaletteGroupPanel::ImportFromClipboard(), yaze::editor::PaletteGroupPanel::ImportFromJson(), yaze::editor::PaletteGroupPanel::IsColorModified(), yaze::editor::PaletteGroupPanel::IsManagedSession(), yaze::editor::PaletteGroupPanel::IsPaletteModified(), yaze::editor::SessionCoordinator::IsSessionModified(), yaze::editor::DungeonEditorV2::Load(), yaze::editor::OverworldEditor::Load(), yaze::editor::PaletteEditor::Load(), yaze::editor::EditorManager::LoadAssets(), yaze::editor::EditorManager::PendingPaletteColorCountForSession(), yaze::editor::PaletteGroupPanel::Redo(), yaze::editor::PaletteEditor::Redo(), yaze::editor::RefreshGraphicsPreviewPalettes(), yaze::editor::SpriteEditor::RefreshSpritePreviewGraphics(), yaze::editor::EditorManager::ReplaceActiveSessionRom(), yaze::editor::PaletteGroupPanel::ResetColor(), yaze::editor::PaletteGroupPanel::ResetPalette(), yaze::editor::DungeonEditorV2::RollbackSaveTransaction(), yaze::editor::PaletteEditor::RollbackSaveTransaction(), yaze::editor::DungeonEditorV2::Save(), yaze::editor::PaletteEditor::Save(), yaze::editor::EditorManager::SaveRomInternal(), yaze::editor::DungeonEditorV2::SaveRoomImpl(), yaze::editor::PaletteGroupPanel::SaveToRom(), yaze::editor::EditorManager::SessionHasPendingRomWork(), yaze::editor::PaletteGroupPanel::SetColor(), yaze::editor::UsagePreviewView::SharedUsesHash(), yaze::editor::PaletteReorderControl::SourceChanged(), yaze::editor::PaletteGroupPanel::Undo(), yaze::editor::PaletteEditor::Undo(), and yaze::editor::RomSession::~RomSession().

◆ operator=() [1/2]

PaletteManager & yaze::gfx::PaletteManager::operator= ( const PaletteManager & )
delete

◆ operator=() [2/2]

PaletteManager & yaze::gfx::PaletteManager::operator= ( PaletteManager && )
delete

◆ Initialize() [1/2]

void yaze::gfx::PaletteManager::Initialize ( zelda3::GameData * game_data)

Initialize the palette manager with GameData.

Parameters
game_dataPointer to GameData instance (must outlive PaletteManager)

Definition at line 84 of file palette_manager.cc.

References ActivateSession(), CurrentState(), game_data_, yaze::gfx::PaletteGroupMap::get_group(), and yaze::zelda3::GameData::palette_groups.

Referenced by yaze::editor::EditorManager::EnsureGameDataLoaded(), yaze::editor::DungeonEditorV2::Load(), yaze::editor::PaletteEditor::Load(), and yaze::editor::EditorManager::LoadAssets().

Here is the call graph for this function:

◆ Initialize() [2/2]

void yaze::gfx::PaletteManager::Initialize ( Rom * rom)

Legacy initialization with ROM (deprecated, use GameData version)

Parameters
romPointer to ROM instance (must outlive PaletteManager)

Definition at line 146 of file palette_manager.cc.

References game_data_, rom_, and unbound_state_.

◆ IsInitialized()

bool yaze::gfx::PaletteManager::IsInitialized ( ) const

◆ ActivateSession()

void yaze::gfx::PaletteManager::ActivateSession ( zelda3::GameData * game_data)

Select the palette state for a ROM session without resnapshotting it.

Session activation may happen before GameData assets are loaded. Initialize() creates the original-palette snapshot once those assets are available.

Definition at line 76 of file palette_manager.cc.

References game_data_, yaze::zelda3::GameData::rom(), rom_, and session_states_.

Referenced by yaze::editor::EditorManager::HandleSessionClosed(), yaze::editor::EditorManager::HandleSessionCreated(), yaze::editor::EditorManager::HandleSessionSwitched(), Initialize(), and yaze::editor::EditorManager::ReplaceActiveSessionRom().

Here is the call graph for this function:

◆ ColorRevision()

◆ IsSessionActive()

bool yaze::gfx::PaletteManager::IsSessionActive ( const zelda3::GameData * game_data) const

Check whether this exact GameData is the active palette session.

Unlike IsManaging(), this may be true before lazy-loaded palette assets have been initialized.

Definition at line 126 of file palette_manager.cc.

References game_data_, yaze::zelda3::GameData::rom(), and rom_.

Referenced by IsManaging().

Here is the call graph for this function:

◆ IsManaging()

bool yaze::gfx::PaletteManager::IsManaging ( const zelda3::GameData * game_data) const

Check whether the manager is bound to this exact GameData and ROM.

Definition at line 131 of file palette_manager.cc.

References IsInitialized(), and IsSessionActive().

Referenced by ApplyExternalChanges(), and yaze::editor::PaletteGroupPanel::IsManagedSession().

Here is the call graph for this function:

◆ ReleaseSession()

void yaze::gfx::PaletteManager::ReleaseSession ( const zelda3::GameData * game_data)

Forget all palette tracking for a closing or reloaded ROM session.

Definition at line 135 of file palette_manager.cc.

References game_data_, rom_, and session_states_.

Referenced by yaze::editor::EditorManager::LoadAssets(), yaze::editor::EditorManager::ReplaceActiveSessionRom(), and yaze::editor::RomSession::~RomSession().

◆ ResetForTesting()

void yaze::gfx::PaletteManager::ResetForTesting ( )

Reset all state for test isolation.

Definition at line 157 of file palette_manager.cc.

References change_listeners_, game_data_, next_callback_id_, rom_, session_states_, and unbound_state_.

◆ GetColor()

SnesColor yaze::gfx::PaletteManager::GetColor ( const std::string & group_name,
int palette_index,
int color_index ) const

Get a color from a palette.

Parameters
group_namePalette group name
palette_indexPalette index within group
color_indexColor index within palette
Returns
The color, or default SnesColor if invalid indices

Definition at line 168 of file palette_manager.cc.

References GetGroup().

Referenced by yaze::gui::PaletteEditorWidget::DrawDungeonRenderColorPicker().

Here is the call graph for this function:

◆ SetColor()

absl::Status yaze::gfx::PaletteManager::SetColor ( const std::string & group_name,
int palette_index,
int color_index,
const SnesColor & new_color )

Set a color in a palette (records change for undo)

Parameters
group_namePalette group name
palette_indexPalette index within group
color_indexColor index within palette
new_colorThe new color value
Returns
Status of the operation

Definition at line 183 of file palette_manager.cc.

References CommitColorEdit(), CurrentState(), GetMutableGroup(), InBatch(), IsInitialized(), yaze::gfx::PaletteChangeEvent::kColorChanged, MarkModified(), NotifyListeners(), RecordChange(), and yaze::gfx::SnesColor::snes().

Referenced by ResetColor(), and yaze::editor::PaletteGroupPanel::SetColor().

◆ ApplyExternalChanges()

absl::Status yaze::gfx::PaletteManager::ApplyExternalChanges ( const zelda3::GameData * owner,
const std::vector< PaletteColorChange > & changes,
const std::function< absl::Status()> & participant )

◆ ResetColor()

absl::Status yaze::gfx::PaletteManager::ResetColor ( const std::string & group_name,
int palette_index,
int color_index )

Reset a single color to its original ROM value.

Definition at line 301 of file palette_manager.cc.

References GetOriginalColor(), and SetColor().

Referenced by yaze::editor::PaletteGroupPanel::ResetColor().

Here is the call graph for this function:

◆ ResetPalette()

absl::Status yaze::gfx::PaletteManager::ResetPalette ( const std::string & group_name,
int palette_index )

◆ BeginColorEdit()

absl::Status yaze::gfx::PaletteManager::BeginColorEdit ( const std::string & group_name,
int palette_index,
int color_index,
uint64_t caller_id = 0 )

◆ CommitColorEdit()

void yaze::gfx::PaletteManager::CommitColorEdit ( uint64_t caller_id = 0)

◆ CancelColorEdit()

void yaze::gfx::PaletteManager::CancelColorEdit ( uint64_t caller_id = 0)

◆ HasColorEdit()

bool yaze::gfx::PaletteManager::HasColorEdit ( uint64_t caller_id = 0) const

Definition at line 408 of file palette_manager.cc.

References CurrentState().

Referenced by CancelColorEdit(), CommitColorEdit(), and DiscardGroup().

Here is the call graph for this function:

◆ HasUnsavedChanges() [1/2]

bool yaze::gfx::PaletteManager::HasUnsavedChanges ( ) const

Check if there are ANY unsaved changes.

Definition at line 416 of file palette_manager.cc.

References CurrentState(), and yaze::gfx::PaletteManager::SessionState::modified_palettes.

Referenced by yaze::editor::EditorManager::SessionHasPendingRomWork().

Here is the call graph for this function:

◆ HasUnsavedChanges() [2/2]

bool yaze::gfx::PaletteManager::HasUnsavedChanges ( const zelda3::GameData * game_data) const

Check a specific ROM session without changing the active binding.

Definition at line 420 of file palette_manager.cc.

References FindState().

Here is the call graph for this function:

◆ GetModifiedGroups()

std::vector< std::string > yaze::gfx::PaletteManager::GetModifiedGroups ( ) const

Get list of modified palette group names.

Definition at line 426 of file palette_manager.cc.

References CurrentState(), and yaze::gfx::PaletteManager::SessionState::modified_palettes.

Referenced by ApplyPreviewChanges(), DiscardAllChanges(), and SaveAllToRom().

Here is the call graph for this function:

◆ IsGroupModified()

bool yaze::gfx::PaletteManager::IsGroupModified ( const std::string & group_name) const

Check if a specific palette group has modifications.

Definition at line 434 of file palette_manager.cc.

References CurrentState(), and yaze::gfx::PaletteManager::SessionState::modified_palettes.

Referenced by yaze::editor::PaletteGroupPanel::DrawToolbar(), and yaze::editor::PaletteGroupPanel::HasUnsavedChanges().

Here is the call graph for this function:

◆ IsPaletteModified()

bool yaze::gfx::PaletteManager::IsPaletteModified ( const std::string & group_name,
int palette_index ) const

Check if a specific palette is modified.

Definition at line 439 of file palette_manager.cc.

References CurrentState(), and yaze::gfx::PaletteManager::SessionState::modified_palettes.

Referenced by yaze::editor::PaletteGroupPanel::IsPaletteModified().

Here is the call graph for this function:

◆ IsColorModified()

bool yaze::gfx::PaletteManager::IsColorModified ( const std::string & group_name,
int palette_index,
int color_index ) const

Check if a specific color is modified.

Definition at line 448 of file palette_manager.cc.

References CurrentState(), and yaze::gfx::PaletteManager::SessionState::modified_colors.

Referenced by yaze::editor::PaletteGroupPanel::IsColorModified().

Here is the call graph for this function:

◆ GetModifiedColorCount() [1/2]

size_t yaze::gfx::PaletteManager::GetModifiedColorCount ( ) const

Get count of modified colors across all groups.

Definition at line 463 of file palette_manager.cc.

References game_data_, and GetModifiedColorCount().

Referenced by GetModifiedColorCount(), GetModifiedColorWriteRanges(), and yaze::editor::EditorManager::PendingPaletteColorCountForSession().

Here is the call graph for this function:

◆ GetModifiedColorCount() [2/2]

size_t yaze::gfx::PaletteManager::GetModifiedColorCount ( const zelda3::GameData * game_data) const

Count modified colors for a specific ROM session.

Definition at line 467 of file palette_manager.cc.

References FindState().

Here is the call graph for this function:

◆ GetModifiedColorWriteRanges() [1/2]

std::vector< std::pair< uint32_t, uint32_t > > yaze::gfx::PaletteManager::GetModifiedColorWriteRanges ( ) const

Get exact, coalesced half-open ROM ranges for modified colors.

Definition at line 484 of file palette_manager.cc.

References game_data_, and GetModifiedColorWriteRanges().

Referenced by GetModifiedColorWriteRanges(), and yaze::editor::anonymous_namespace{dungeon_editor_v2_persistence.cc}::ValidatePaletteManifestConflicts().

Here is the call graph for this function:

◆ GetModifiedColorWriteRanges() [2/2]

std::vector< std::pair< uint32_t, uint32_t > > yaze::gfx::PaletteManager::GetModifiedColorWriteRanges ( const zelda3::GameData * game_data) const

Get modified-color ranges for a session without activating it.

Definition at line 489 of file palette_manager.cc.

References FindState(), GetModifiedColorCount(), and yaze::gfx::GetPaletteAddress().

Here is the call graph for this function:

◆ GetModifiedGroupColorWriteRanges()

std::vector< std::pair< uint32_t, uint32_t > > yaze::gfx::PaletteManager::GetModifiedGroupColorWriteRanges ( const std::string & group_name) const

Get exact, coalesced half-open ROM ranges for one modified group.

The active palette session is used. Callers must verify session ownership before using these ranges to authorize a save.

Definition at line 512 of file palette_manager.cc.

References CurrentState(), and yaze::gfx::GetPaletteAddress().

Here is the call graph for this function:

◆ SaveGroup()

◆ SaveAllToRom()

absl::Status yaze::gfx::PaletteManager::SaveAllToRom ( )

Save ALL modified palettes to ROM.

Definition at line 603 of file palette_manager.cc.

References GetModifiedGroups(), IsInitialized(), yaze::gfx::PaletteChangeEvent::kAllSaved, NotifyListeners(), RETURN_IF_ERROR, and SaveGroup().

Here is the call graph for this function:

◆ BeginSaveTransaction()

absl::Status yaze::gfx::PaletteManager::BeginSaveTransaction ( )

Definition at line 620 of file palette_manager.cc.

References CommitColorEdit(), CurrentState(), IsInitialized(), and yaze::gfx::PaletteManager::SaveTransactionSnapshot::original_palettes.

Here is the call graph for this function:

◆ RollbackSaveTransaction()

void yaze::gfx::PaletteManager::RollbackSaveTransaction ( )

Definition at line 637 of file palette_manager.cc.

References CurrentState().

Referenced by yaze::editor::DungeonEditorV2::RollbackSaveTransaction(), and yaze::editor::PaletteEditor::RollbackSaveTransaction().

Here is the call graph for this function:

◆ CommitSaveTransaction()

void yaze::gfx::PaletteManager::CommitSaveTransaction ( )

◆ DiscardGroup()

◆ DiscardAllChanges()

void yaze::gfx::PaletteManager::DiscardAllChanges ( )

◆ ApplyPreviewChanges()

absl::Status yaze::gfx::PaletteManager::ApplyPreviewChanges ( )

Apply preview changes to other editors without saving to ROM.

This triggers bitmap propagation notification so other editors can refresh their visuals with the modified palettes. Use this for "live preview" functionality before committing to ROM.

Returns
Status of the operation

Definition at line 655 of file palette_manager.cc.

References yaze::gfx::PaletteManager::SessionState::color_revision, CurrentState(), yaze::gfx::Arena::Get(), GetModifiedGroups(), IsInitialized(), yaze::gfx::PaletteChangeEvent::kAllSaved, NotifyListeners(), and yaze::gfx::Arena::NotifyPaletteModified().

◆ Undo()

◆ Redo()

void yaze::gfx::PaletteManager::Redo ( )

◆ CanUndo()

bool yaze::gfx::PaletteManager::CanUndo ( ) const

Check if the complete undo entry matches current colors. Conflicting history is retained, but unavailable until values match again.

Definition at line 817 of file palette_manager.cc.

References CanReplayHistory(), and CurrentState().

Referenced by yaze::editor::PaletteGroupPanel::CanUndo(), yaze::editor::PaletteGroupPanel::DrawToolbar(), and Undo().

Here is the call graph for this function:

◆ CanRedo()

bool yaze::gfx::PaletteManager::CanRedo ( ) const

Check if the complete redo entry matches current colors. Conflicting history is retained, but unavailable until values match again.

Definition at line 829 of file palette_manager.cc.

References CanReplayHistory(), and CurrentState().

Referenced by yaze::editor::PaletteGroupPanel::CanRedo(), yaze::editor::PaletteGroupPanel::DrawToolbar(), and Redo().

Here is the call graph for this function:

◆ GetUndoStackSize()

size_t yaze::gfx::PaletteManager::GetUndoStackSize ( ) const

Get size of undo stack.

Definition at line 864 of file palette_manager.cc.

References CurrentState(), and yaze::gfx::PaletteManager::SessionState::undo_stack.

Here is the call graph for this function:

◆ GetRedoStackSize()

size_t yaze::gfx::PaletteManager::GetRedoStackSize ( ) const

Get size of redo stack.

Definition at line 868 of file palette_manager.cc.

References CurrentState(), and yaze::gfx::PaletteManager::SessionState::redo_stack.

Here is the call graph for this function:

◆ ClearHistory()

void yaze::gfx::PaletteManager::ClearHistory ( )

◆ RegisterChangeListener()

int yaze::gfx::PaletteManager::RegisterChangeListener ( ChangeCallback callback)

Register a callback for palette change events.

Returns
Unique ID for this callback (use to unregister)

Definition at line 874 of file palette_manager.cc.

References change_listeners_, and next_callback_id_.

◆ UnregisterChangeListener()

void yaze::gfx::PaletteManager::UnregisterChangeListener ( int callback_id)

Unregister a change listener.

Definition at line 880 of file palette_manager.cc.

References change_listeners_.

◆ BeginBatch()

void yaze::gfx::PaletteManager::BeginBatch ( )

Begin a batch operation (groups multiple changes into one undo step)

Note
A batch groups history and notifications; it does not roll back earlier successful SetColor calls if a later call fails.
Must be paired with EndBatch()

Definition at line 886 of file palette_manager.cc.

References yaze::gfx::PaletteManager::SessionState::batch_changes, yaze::gfx::PaletteManager::SessionState::batch_depth, CommitColorEdit(), and CurrentState().

Here is the call graph for this function:

◆ EndBatch()

◆ InBatch()

bool yaze::gfx::PaletteManager::InBatch ( ) const

Check if currently in a batch operation.

Definition at line 943 of file palette_manager.cc.

References yaze::gfx::PaletteManager::SessionState::batch_depth, and CurrentState().

Referenced by BeginColorEdit(), and SetColor().

Here is the call graph for this function:

◆ GetOriginalColor()

SnesColor yaze::gfx::PaletteManager::GetOriginalColor ( const std::string & group_name,
int palette_index,
int color_index ) const

Definition at line 979 of file palette_manager.cc.

References CurrentState().

Referenced by yaze::editor::PaletteGroupPanel::GetOriginalColor(), and ResetColor().

Here is the call graph for this function:

◆ GetMutableGroup()

PaletteGroup * yaze::gfx::PaletteManager::GetMutableGroup ( const std::string & group_name)
private

Helper: Get mutable palette group.

Definition at line 949 of file palette_manager.cc.

References game_data_, yaze::gfx::PaletteGroupMap::get_group(), IsInitialized(), and yaze::zelda3::GameData::palette_groups.

Referenced by ApplyExternalChanges(), CancelColorEdit(), DiscardGroup(), Redo(), ResetPalette(), SaveGroup(), SetColor(), and Undo().

Here is the call graph for this function:

◆ GetGroup()

const PaletteGroup * yaze::gfx::PaletteManager::GetGroup ( const std::string & group_name) const
private

Helper: Get const palette group.

Definition at line 963 of file palette_manager.cc.

References game_data_, IsInitialized(), and yaze::zelda3::GameData::palette_groups.

Referenced by BeginColorEdit(), CanReplayHistory(), GetColor(), and MarkModified().

Here is the call graph for this function:

◆ RecordChanges()

void yaze::gfx::PaletteManager::RecordChanges ( std::vector< PaletteColorChange > changes)
private

Helper: Record one undo step (a gesture or an entire batch).

Definition at line 1001 of file palette_manager.cc.

References CurrentState(), kMaxUndoHistory, yaze::gfx::PaletteManager::SessionState::redo_stack, and yaze::gfx::PaletteManager::SessionState::undo_stack.

Referenced by EndBatch(), and RecordChange().

Here is the call graph for this function:

◆ CanReplayHistory()

bool yaze::gfx::PaletteManager::CanReplayHistory ( const std::vector< PaletteColorChange > & changes,
bool redo ) const
private

Definition at line 838 of file palette_manager.cc.

References GetGroup().

Referenced by CanRedo(), and CanUndo().

Here is the call graph for this function:

◆ RecordChange()

void yaze::gfx::PaletteManager::RecordChange ( const PaletteColorChange & change)
private

Helper: Record a single-color undo step.

Definition at line 997 of file palette_manager.cc.

References RecordChanges().

Referenced by CommitColorEdit(), and SetColor().

Here is the call graph for this function:

◆ NotifyListeners()

◆ MarkModified()

void yaze::gfx::PaletteManager::MarkModified ( const std::string & group_name,
int palette_index,
int color_index )
private

Helper: Mark a color as modified.

Definition at line 1035 of file palette_manager.cc.

References CurrentState(), and GetGroup().

Referenced by ApplyExternalChanges(), CancelColorEdit(), Redo(), SetColor(), and Undo().

Here is the call graph for this function:

◆ ClearModifiedFlags()

void yaze::gfx::PaletteManager::ClearModifiedFlags ( const std::string & group_name)
private

Helper: Clear modified flags for a group.

Definition at line 1085 of file palette_manager.cc.

References CurrentState(), yaze::gfx::PaletteManager::SessionState::modified_colors, and yaze::gfx::PaletteManager::SessionState::modified_palettes.

Referenced by DiscardGroup(), and SaveGroup().

Here is the call graph for this function:

◆ CurrentState() [1/2]

◆ CurrentState() [2/2]

const PaletteManager::SessionState * yaze::gfx::PaletteManager::CurrentState ( ) const
private

Definition at line 45 of file palette_manager.cc.

References game_data_, session_states_, and unbound_state_.

◆ FindState()

const PaletteManager::SessionState * yaze::gfx::PaletteManager::FindState ( const zelda3::GameData * game_data) const
private

Member Data Documentation

◆ game_data_

◆ rom_

Rom* yaze::gfx::PaletteManager::rom_ = nullptr
private

ROM instance (not owned) - legacy, used when game_data_ is null.

Definition at line 445 of file palette_manager.h.

Referenced by ActivateSession(), EndBatch(), Initialize(), IsInitialized(), IsSessionActive(), NotifyListeners(), Redo(), ReleaseSession(), ResetForTesting(), SaveGroup(), and Undo().

◆ session_states_

std::unordered_map<const zelda3::GameData*, SessionState> yaze::gfx::PaletteManager::session_states_
private

Per-GameData state. RomSession owns the keys and releases them on teardown.

Definition at line 448 of file palette_manager.h.

Referenced by ActivateSession(), CurrentState(), CurrentState(), FindState(), ReleaseSession(), and ResetForTesting().

◆ unbound_state_

SessionState yaze::gfx::PaletteManager::unbound_state_
private

State used only before a GameData session is selected (legacy/tests).

Definition at line 451 of file palette_manager.h.

Referenced by CurrentState(), CurrentState(), Initialize(), and ResetForTesting().

◆ kMaxUndoHistory

constexpr size_t yaze::gfx::PaletteManager::kMaxUndoHistory = 500
staticconstexprprivate

Definition at line 453 of file palette_manager.h.

Referenced by RecordChanges().

◆ change_listeners_

std::unordered_map<int, ChangeCallback> yaze::gfx::PaletteManager::change_listeners_
private

Change listeners.

Definition at line 456 of file palette_manager.h.

Referenced by NotifyListeners(), RegisterChangeListener(), ResetForTesting(), and UnregisterChangeListener().

◆ next_callback_id_

int yaze::gfx::PaletteManager::next_callback_id_ = 1
private

Definition at line 457 of file palette_manager.h.

Referenced by RegisterChangeListener(), and ResetForTesting().


The documentation for this class was generated from the following files: