Vital
Loading...
Searching...
No Matches
transpose_quantize.h
Go to the documentation of this file.
1
3
4#pragma once
5
6#include "JuceHeader.h"
7#include "common.h"
9#include "synth_section.h"
10
18public:
20 static constexpr float kTitleHeightRatio = 0.2f;
22 static constexpr float kGlobalHeightRatio = 0.2f;
24 static constexpr float kTitleTextRatio = 0.7f;
25
28 class Listener {
29 public:
31 virtual ~Listener() { }
32
34 virtual void quantizeUpdated() = 0;
35 };
36
40 TransposeQuantizeCallOut(bool* selected, bool* global_snap);
41
44 void paint(Graphics& g) override;
45
47 void resized() override;
48
50 void mouseDown(const MouseEvent& e) override;
51 void mouseDrag(const MouseEvent& e) override;
52 void mouseMove(const MouseEvent& e) override;
53 void mouseExit(const MouseEvent& e) override;
54
57 void buttonClicked(Button* clicked_button) override;
58
61 void addQuantizeListener(Listener* listener) { listeners_.push_back(listener); }
62
63private:
67 int getHoverIndex(const MouseEvent& e);
68
70 void notify() {
71 for (Listener* listener : listeners_)
72 listener->quantizeUpdated();
73 }
74
75 std::vector<Listener*> listeners_;
76 Rectangle<float> key_bounds_[vital::kNotesPerOctave];
77 std::unique_ptr<ToggleButton> global_snap_button_;
78 bool* selected_;
79 bool* global_snap_;
80 int hover_index_;
81 bool enabling_;
82 bool disabling_;
83
84 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(TransposeQuantizeCallOut)
85};
86
94public:
97 class Listener {
98 public:
100 virtual ~Listener() { }
101
103 virtual void quantizeUpdated() = 0;
104 };
105
108
111 void paint(Graphics& g) override;
112
114 void paintBackground(Graphics& g) override { }
115
117 void resized() override;
118
121 void mouseDown(const MouseEvent& e) override;
122
125 void mouseEnter(const MouseEvent& e) override;
126
129 void mouseExit(const MouseEvent& e) override;
130
132 void quantizeUpdated() override;
133
136 int getValue();
137
140 void setValue(int value);
141
144 void addQuantizeListener(Listener* listener) { listeners_.push_back(listener); }
145
146private:
147 std::vector<Listener*> listeners_;
148 bool selected_[vital::kNotesPerOctave];
149 bool global_snap_;
150 Rectangle<float> key_bounds_[vital::kNotesPerOctave];
151 bool hover_;
152
153 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(TransposeQuantizeButton)
154};
A component that uses OpenGL to render a cached image of a JUCE component or custom drawing.
Definition open_gl_image_component.h:18
Base class for all synthesizer sections, providing UI layout, painting, and interaction logic.
Definition synth_section.h:193
Interface for objects that want to be notified of quantization changes.
Definition transpose_quantize.h:97
virtual void quantizeUpdated()=0
Called when the quantization state changes.
virtual ~Listener()
Virtual destructor.
Definition transpose_quantize.h:100
A button component that shows the current transpose quantization state and opens a callout to edit it...
Definition transpose_quantize.h:93
int getValue()
Definition transpose_quantize.cpp:247
void addQuantizeListener(Listener *listener)
Definition transpose_quantize.h:144
void mouseEnter(const MouseEvent &e) override
Definition transpose_quantize.cpp:237
TransposeQuantizeButton()
Constructor.
Definition transpose_quantize.cpp:182
void setValue(int value)
Definition transpose_quantize.cpp:259
void paintBackground(Graphics &g) override
Overrides but does nothing for background painting.
Definition transpose_quantize.h:114
void quantizeUpdated() override
Called when quantization updates occur in the callout.
Definition transpose_quantize.cpp:267
void mouseDown(const MouseEvent &e) override
Definition transpose_quantize.cpp:215
void mouseExit(const MouseEvent &e) override
Definition transpose_quantize.cpp:242
void resized() override
Handles resizing to compute note layout.
Definition transpose_quantize.cpp:209
void paint(Graphics &g) override
Definition transpose_quantize.cpp:188
Interface for objects that want to be notified when quantization changes.
Definition transpose_quantize.h:28
virtual void quantizeUpdated()=0
Called when the quantization selection or global snap changes.
virtual ~Listener()
Virtual destructor for proper cleanup.
Definition transpose_quantize.h:31
A callout component that allows selecting which notes are quantized for transposition.
Definition transpose_quantize.h:17
void buttonClicked(Button *clicked_button) override
Definition transpose_quantize.cpp:163
void mouseMove(const MouseEvent &e) override
Definition transpose_quantize.cpp:150
static constexpr float kTitleHeightRatio
The ratio of the title height to the total height.
Definition transpose_quantize.h:20
void mouseDrag(const MouseEvent &e) override
Definition transpose_quantize.cpp:124
void mouseExit(const MouseEvent &e) override
Definition transpose_quantize.cpp:158
TransposeQuantizeCallOut(bool *selected, bool *global_snap)
Definition transpose_quantize.cpp:56
void resized() override
Resizes and lays out the components within the callout.
Definition transpose_quantize.cpp:99
void mouseDown(const MouseEvent &e) override
Handles mouse events to enable/disable notes.
Definition transpose_quantize.cpp:107
static constexpr float kGlobalHeightRatio
The ratio of the global section height to the total height.
Definition transpose_quantize.h:22
void addQuantizeListener(Listener *listener)
Definition transpose_quantize.h:61
static constexpr float kTitleTextRatio
The ratio of the title text size to the title height.
Definition transpose_quantize.h:24
void paint(Graphics &g) override
Definition transpose_quantize.cpp:68
constexpr int kNotesPerOctave
Number of semitones per octave.
Definition common.h:51