Krotos Modules 3
Loading...
Searching...
No Matches
XYButton.h
Go to the documentation of this file.
1#pragma once
2namespace krotos
3{
4 //==============================================================================
14 class XYButton : public Button, public ActionBroadcaster
15 {
16 public:
17 // NOTE This may be used to instantiate a `static const std::map` of
18 // the various analytics events tracked by your project. Using
19 // juce::String as its type causes a runtime exception being thrown,
20 // so it needs to be of std::string type
21 static const std::string analyticsEventMouseDown;
22
23 XYButton(String xLabel = "X", String yLabel = "Y");
28 void setNormalisedPuckPosition(Point<float> pos);
29
34 void setPuckPosition(Point<int> pos);
35
36 void setToggleValue(float x);
37 bool getToggleValue();
38
42 Point<float> getPuckPosition() { return m_puckPosition; }
43
48 std::function<void(Point<float>)> puckPositionChanged{nullptr};
49
53 std::function<void()> dragStarted{nullptr};
54
58 std::function<void()> dragEnded{nullptr};
59
61 void createMask(const void* data, const size_t numBytes);
62
64 void setPaintBackground(bool val) { m_paintBackground = val; }
65
68
70
71 private:
76 struct Layout
77 {
78 const float crosshairLength{320.0f};
79 const float crosshairGap{12.0f};
80 const int crosshairLineWidth{2};
81 const int puckDiameter{16};
82 const int puckLineWidth{2};
83 const int puckRadius{puckDiameter / 2};
84 const Colour colourPuckMouseOver{Colour::fromFloatRGBA(0.7f, 0.7f, 0.7f, 1.0f)};
85 const Colour colourPuckMouseDown{Colour::fromFloatRGBA(1.0f, 1.0f, 1.0f, 1.0f)};
86 const Colour colourPuckDefault{Colour::fromFloatRGBA(0.5f, 0.5f, 0.5f, 1.0f)};
88
89 void resized() override;
90 void paintButton(Graphics&, bool /*shouldDrawButtonAsHighlighted*/,
91 bool /*shouldDrawButtonAsDown*/) override{}; // pure virtual function
92 void paintOverChildren(Graphics& g) override;
93 void mouseDrag(const MouseEvent&) override;
94 void mouseDown(const MouseEvent&) override;
95 void mouseUp(const MouseEvent&) override;
96 void mouseMove(const MouseEvent&) override;
97
98 void drawGradientLine(Graphics& g, float startX, float startY, float endX, float endY, float lineWidth,
99 float minOpacity, float maxOpacity);
100
101 bool m_maskStreched{true};
102
103 std::unique_ptr<Drawable> m_background;
104 std::unique_ptr<Drawable> m_twoZoneMask;
105
106 Point<float> m_puckPosition;
108
109 bool m_mouseIsDown = false;
110 bool m_mouseOverPuck = false;
111
112 Rectangle<int> m_bounds;
113 Rectangle<float> m_puckBounds;
114 Rectangle<int> m_puckBoundary;
115 Rectangle<int> m_maskBounds;
116 Rectangle<int> m_wholeBounds;
117
119
121
122 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(XYButton)
123 };
124
131 {
132 public:
133 XYButtonParameterAttachment(RangedAudioParameter& xParam, RangedAudioParameter& yParam,
134 RangedAudioParameter& clickParam, RangedAudioParameter& toggleParam,
135 XYButton& slider, UndoManager* undoManager = nullptr);
136
138
139 void sendInitialUpdate();
140
141 private:
147 void setXValue(float xValue);
148
154 void setYValue(float yValue);
155
156 void setToggleValue(float x);
157
160
161 bool m_ignoreCallbacks{false};
162 };
163} // namespace krotos
An XY Button UI component with a puck following the mouse position.
Definition XYButton.h:15
Point< float > m_scaledPuckPosition
Definition XYButton.h:107
void drawGradientLine(Graphics &g, float startX, float startY, float endX, float endY, float lineWidth, float minOpacity, float maxOpacity)
Definition XYButton.cpp:121
void mouseDrag(const MouseEvent &) override
Definition XYButton.cpp:240
void setToggleValue(float x)
Definition XYButton.cpp:165
bool getPaintBackground()
Definition XYButton.h:67
void setMaskNotStreched()
Definition XYButton.h:69
bool m_toggleValue
Definition XYButton.h:120
void setPuckPosition(Point< int > pos)
Definition XYButton.cpp:175
XYButton(String xLabel="X", String yLabel="Y")
Definition XYButton.cpp:7
bool m_maskStreched
Definition XYButton.h:101
Rectangle< float > m_puckBounds
Definition XYButton.h:113
Rectangle< int > m_bounds
Definition XYButton.h:112
std::function< void(Point< float >)> puckPositionChanged
Definition XYButton.h:48
static const std::string analyticsEventMouseDown
Definition XYButton.h:21
std::function< void()> dragStarted
Definition XYButton.h:53
void setPaintBackground(bool val)
Definition XYButton.h:64
void mouseUp(const MouseEvent &) override
Definition XYButton.cpp:262
Rectangle< int > m_puckBoundary
Definition XYButton.h:114
void mouseDown(const MouseEvent &) override
Definition XYButton.cpp:246
Rectangle< int > m_maskBounds
Definition XYButton.h:115
Point< float > m_puckPosition
Definition XYButton.h:106
bool m_mouseOverPuck
Definition XYButton.h:110
bool getToggleValue()
Definition XYButton.cpp:173
struct krotos::XYButton::Layout m_layout
std::function< void()> dragEnded
Definition XYButton.h:58
void createMask(const void *data, const size_t numBytes)
Definition XYButton.cpp:274
void setNormalisedPuckPosition(Point< float > pos)
Definition XYButton.cpp:187
void paintOverChildren(Graphics &g) override
Definition XYButton.cpp:13
bool m_mouseIsDown
Definition XYButton.h:109
std::unique_ptr< Drawable > m_background
Definition XYButton.h:103
void paintButton(Graphics &, bool, bool) override
Definition XYButton.h:90
void mouseMove(const MouseEvent &) override
Definition XYButton.cpp:195
void resized() override
Definition XYButton.cpp:146
std::unique_ptr< Drawable > m_twoZoneMask
Definition XYButton.h:104
Point< float > getPuckPosition()
Definition XYButton.h:42
Rectangle< int > m_wholeBounds
Definition XYButton.h:116
bool m_paintBackground
Definition XYButton.h:118
A class that creates a custom ParameterAttachment between the x and y axis positions of the puck with...
Definition XYButton.h:131
void sendInitialUpdate()
Definition XYButton.cpp:318
ParameterAttachment m_xAttachment
Definition XYButton.h:159
~XYButtonParameterAttachment()
Definition XYButton.cpp:316
ParameterAttachment m_clickAttachment
Definition XYButton.h:159
void setYValue(float yValue)
Definition XYButton.cpp:335
bool m_ignoreCallbacks
Definition XYButton.h:161
XYButton & m_xyButton
Definition XYButton.h:158
void setXValue(float xValue)
Definition XYButton.cpp:325
XYButtonParameterAttachment(RangedAudioParameter &xParam, RangedAudioParameter &yParam, RangedAudioParameter &clickParam, RangedAudioParameter &toggleParam, XYButton &slider, UndoManager *undoManager=nullptr)
Definition XYButton.cpp:279
ParameterAttachment m_toggleAttachment
Definition XYButton.h:159
ParameterAttachment m_yAttachment
Definition XYButton.h:159
void setToggleValue(float x)
Definition XYButton.cpp:345
Definition AirAbsorptionFilter.cpp:2
Definition XYButton.h:77
const Colour colourPuckDefault
Definition XYButton.h:86
const int crosshairLineWidth
Definition XYButton.h:80
const int puckDiameter
Definition XYButton.h:81
const int puckLineWidth
Definition XYButton.h:82
const float crosshairLength
Definition XYButton.h:78
const Colour colourPuckMouseDown
Definition XYButton.h:85
const float crosshairGap
Definition XYButton.h:79
const Colour colourPuckMouseOver
Definition XYButton.h:84
const int puckRadius
Definition XYButton.h:83