Vital
Loading...
Searching...
No Matches
wave_window_editor.h
Go to the documentation of this file.
1#pragma once
2
3#include "JuceHeader.h"
5#include "common.h"
7
18public:
20 static constexpr float kGrabRadius = 0.05f;
22 static constexpr int kPointsPerSection = 50;
24 static constexpr int kTotalPoints = 4 * kPointsPerSection;
25
35
40 class Listener {
41 public:
42 virtual ~Listener() { }
43
50 virtual void windowChanged(bool left, bool mouse_up) = 0;
51 };
52
57
61 virtual ~WaveWindowEditor();
62
67 void paintBackground(Graphics& g) override { }
68
72 void resized() override;
73
78 virtual void init(OpenGlWrapper& open_gl) override {
80 edit_bars_.init(open_gl);
81 }
82
88 virtual void render(OpenGlWrapper& open_gl, bool animate) override {
89 OpenGlLineRenderer::render(open_gl, animate);
90 edit_bars_.render(open_gl, animate);
91 }
92
97 virtual void destroy(OpenGlWrapper& open_gl) override {
99 edit_bars_.destroy(open_gl);
100 }
101
106 void mouseDown(const MouseEvent& e) override;
107
112 void mouseUp(const MouseEvent& e) override;
113
118 void mouseMove(const MouseEvent& e) override;
119
124 void mouseExit(const MouseEvent& e) override;
125
130 void mouseDrag(const MouseEvent& e) override;
131
136 void addListener(Listener* listener) { listeners_.push_back(listener); }
137
143 ActiveSide getHover(Point<int> position);
144
149 float getLeftPosition() { return left_position_; }
150
155 float getRightPosition() { return right_position_; }
156
162 void setPositions(float left, float right) {
163 left_position_ = left;
164 right_position_ = right;
165 setPoints();
166 }
167
173 window_shape_ = window_shape;
174 setPoints();
175 }
176
177private:
182 void notifyWindowChanged(bool mouse_up);
183
188 void changeValues(const MouseEvent& e);
189
193 void setEditingQuads();
194
198 void setPoints();
199
200 std::vector<Listener*> listeners_;
201 Point<int> last_edit_position_;
202
203 OpenGlMultiQuad edit_bars_;
204
206 ActiveSide hovering_;
207 ActiveSide editing_;
208 float left_position_;
209 float right_position_;
210
211 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(WaveWindowEditor)
212};
A component for rendering lines with optional filling and boost effects using OpenGL.
Definition open_gl_line_renderer.h:16
virtual void init(OpenGlWrapper &open_gl) override
Initializes OpenGL resources for rendering the line.
Definition open_gl_line_renderer.cpp:78
virtual void destroy(OpenGlWrapper &open_gl) override
Destroys OpenGL resources allocated by this line renderer.
Definition open_gl_line_renderer.cpp:468
virtual void render(OpenGlWrapper &open_gl, bool animate) override
Renders the line using OpenGL.
Definition open_gl_line_renderer.cpp:464
A component for rendering multiple quads using OpenGL, with customizable colors, rounding,...
Definition open_gl_multi_quad.h:16
virtual void init(OpenGlWrapper &open_gl) override
Initializes OpenGL buffers and shader attributes.
Definition open_gl_multi_quad.cpp:37
virtual void render(OpenGlWrapper &open_gl, bool animate) override
Renders the quads using OpenGL.
Definition open_gl_multi_quad.cpp:92
virtual void destroy(OpenGlWrapper &open_gl) override
Releases OpenGL resources when the component is destroyed.
Definition open_gl_multi_quad.cpp:69
Interface for receiving notifications about window position changes.
Definition wave_window_editor.h:40
virtual ~Listener()
Definition wave_window_editor.h:42
virtual void windowChanged(bool left, bool mouse_up)=0
Called when the window boundaries have changed.
A UI component that allows editing of a windowing function applied to a waveform.
Definition wave_window_editor.h:17
void setPositions(float left, float right)
Sets the left and right boundary positions for the window.
Definition wave_window_editor.h:162
void mouseMove(const MouseEvent &e) override
Handles mouse move events, updating hover states over handles.
Definition wave_window_editor.cpp:47
WaveWindowEditor()
Constructs a WaveWindowEditor instance.
Definition wave_window_editor.cpp:8
void addListener(Listener *listener)
Adds a listener for window changes.
Definition wave_window_editor.h:136
ActiveSide
Enum representing which side (left or right) is being edited or hovered.
Definition wave_window_editor.h:30
@ kRight
Definition wave_window_editor.h:33
@ kLeft
Definition wave_window_editor.h:32
@ kNone
Definition wave_window_editor.h:31
static constexpr float kGrabRadius
Definition wave_window_editor.h:20
void mouseUp(const MouseEvent &e) override
Handles mouse up events, finalizing changes if a handle was being moved.
Definition wave_window_editor.cpp:37
virtual void init(OpenGlWrapper &open_gl) override
Initializes OpenGL components.
Definition wave_window_editor.h:78
virtual void destroy(OpenGlWrapper &open_gl) override
Destroys OpenGL resources.
Definition wave_window_editor.h:97
ActiveSide getHover(Point< int > position)
Determines which handle (left or right) is being hovered based on a position.
Definition wave_window_editor.cpp:140
virtual ~WaveWindowEditor()
Destructor.
Definition wave_window_editor.cpp:20
void setWindowShape(WaveWindowModifier::WindowShape window_shape)
Sets the window shape type.
Definition wave_window_editor.h:172
void resized() override
Called when the component is resized. Updates the rendering and layout.
Definition wave_window_editor.cpp:22
float getRightPosition()
Gets the right boundary's normalized position.
Definition wave_window_editor.h:155
float getLeftPosition()
Gets the left boundary's normalized position.
Definition wave_window_editor.h:149
void paintBackground(Graphics &g) override
Paints the background. Currently does nothing as rendering is handled by OpenGL.
Definition wave_window_editor.h:67
static constexpr int kPointsPerSection
Definition wave_window_editor.h:22
void mouseDrag(const MouseEvent &e) override
Handles mouse drag events, adjusting the window boundaries.
Definition wave_window_editor.cpp:63
void mouseDown(const MouseEvent &e) override
Handles mouse down events, determining which side (if any) is selected.
Definition wave_window_editor.cpp:30
void mouseExit(const MouseEvent &e) override
Handles mouse exit events, resetting hover states.
Definition wave_window_editor.cpp:57
static constexpr int kTotalPoints
Definition wave_window_editor.h:24
virtual void render(OpenGlWrapper &open_gl, bool animate) override
Renders the window editor. Draws the line and the handle bars.
Definition wave_window_editor.h:88
WindowShape
Defines different windowing curves.
Definition wave_window_modifier.h:25
A helper struct containing references to OpenGL context, shaders, and display scale.
Definition shaders.h:174