1#ifndef YAZE_EDITOR_MUSIC_PIANO_ROLL_VIEW_H
2#define YAZE_EDITOR_MUSIC_PIANO_ROLL_VIEW_H
6#include "imgui/imgui.h"
92 const ImVec2& canvas_size);
95 void DrawPianoKeys(ImDrawList* draw_list,
const ImVec2& key_origin,
float total_height,
96 int start_key_idx,
int visible_keys,
const RollPalette& palette);
97 void DrawGrid(ImDrawList* draw_list,
const ImVec2& grid_origin,
const ImVec2& canvas_pos,
98 const ImVec2& canvas_size,
float total_height,
float clip_bottom,
99 int start_tick,
int visible_ticks,
int start_key_idx,
int visible_keys,
102 const ImVec2& grid_origin,
float total_height,
103 int start_tick,
int end_tick,
int start_key_idx,
int visible_keys,
106 float grid_height, uint32_t segment_start_tick);
110 const ImVec2& grid_origin,
const ImVec2& grid_size,
bool is_hovered);
UI component for displaying and editing music tracks as a piano roll.
void DrawPianoKeys(ImDrawList *draw_list, const ImVec2 &key_origin, float total_height, int start_key_idx, int visible_keys, const RollPalette &palette)
std::vector< ImU32 > channel_colors_
struct yaze::editor::music::PianoRollView::EmptyContextTarget empty_context_
void DrawRollCanvas(zelda3::music::MusicSong *song, const RollPalette &palette, const ImVec2 &canvas_size)
std::vector< bool > channel_muted_
void DrawChannelList(const zelda3::music::MusicSong *song)
void DrawStatusBar(const zelda3::music::MusicSong *song)
int hovered_segment_index_
void SetFollowPlayback(bool follow)
struct yaze::editor::music::PianoRollView::ContextTarget context_target_
std::function< void()> on_edit_
int GetActiveSegment() const
static constexpr float kStatusBarHeight
int hovered_channel_index_
std::function< void(const zelda3::music::TrackEvent &, int segment_index, int channel_index) on_note_preview_)
void DrawNotes(ImDrawList *draw_list, const zelda3::music::MusicSong *song, const ImVec2 &grid_origin, float total_height, int start_tick, int end_tick, int start_key_idx, int visible_keys, const RollPalette &palette)
int dragging_event_index_
int active_channel_index_
int GetActiveChannel() const
void SetActiveSegment(int segment)
void SetPlaybackState(bool is_playing, bool is_paused, uint32_t current_tick)
void Draw(zelda3::music::MusicSong *song, const zelda3::music::MusicBank *bank=nullptr)
Draw the piano roll view for the given song.
static constexpr float kChannelListWidth
void DrawPlaybackCursor(ImDrawList *draw_list, const ImVec2 &grid_origin, float grid_height, uint32_t segment_start_tick)
void SetOnNotePreview(std::function< void(const zelda3::music::TrackEvent &, int, int)> callback)
Set callback for note preview.
bool IsFollowingPlayback() const
static constexpr float kToolbarHeight
int GetPreviewInstrument() const
void SetActiveChannel(int channel)
void DrawGrid(ImDrawList *draw_list, const ImVec2 &grid_origin, const ImVec2 &canvas_pos, const ImVec2 &canvas_size, float total_height, float clip_bottom, int start_tick, int visible_ticks, int start_key_idx, int visible_keys, float content_width, const RollPalette &palette)
int preview_instrument_index_
int active_segment_index_
void HandleMouseInput(zelda3::music::MusicSong *song, int active_channel, int active_segment, const ImVec2 &grid_origin, const ImVec2 &grid_size, bool is_hovered)
void DrawToolbar(const zelda3::music::MusicSong *song, const zelda3::music::MusicBank *bank)
std::vector< bool > channel_solo_
std::string status_note_name_
zelda3::music::TrackEvent drag_original_event_
void SetOnEditCallback(std::function< void()> callback)
Set callback for when edits occur.
std::vector< bool > channel_visible_
void SetOnSegmentPreview(std::function< void(const zelda3::music::MusicSong &, int)> callback)
Set callback for segment preview.
std::function< void(const zelda3::music::MusicSong &, int segment_index) on_segment_preview_)
Manages the collection of songs, instruments, and samples from a ROM.
constexpr uint8_t kDurationSixteenth
A complete song composed of segments.
A single event in a music track (note, command, or control).