Krotos Modules 3
Loading...
Searching...
No Matches
TriggerButton.cpp
Go to the documentation of this file.
1#include "XYButton.h"
2#include <KrotosBinaryData.h>
3
4namespace krotos
5{
6 //======================================= TriggerButton
7 //========================================================================
8 TriggerButton::TriggerButton() : TextButton("TriggerButton") { addMouseListener(this, true); }
9
11 {
12 m_bounds = getLocalBounds().toFloat();
13 m_center = m_bounds.getCentre().toFloat();
14 m_radius = jmin((m_bounds.getWidth() / 2.0f), (m_bounds.getHeight() / 2.0f)) - layout.m_padding;
15 }
16
17 void TriggerButton::paint(Graphics& g)
18 {
19 auto& lf = getLookAndFeel();
20 lf.drawButtonText(g, *this, false, false);
21
22 Path p;
23 p.addCentredArc(m_center.getX(), m_center.getY(), m_radius, m_radius, 2.0f * MathConstants<float>::pi, 0.0f,
24 MathConstants<float>::twoPi, true);
25
26 if (isOver()) // inside the component
27 {
28 if (m_insideCircle && m_clicked) // clicked
29 {
30 g.setColour(layout.colourCircleMouseDown);
31 g.fillPath(p);
32 }
33 else if (m_insideCircle && !m_clicked) // not clicked
34 {
35 g.setColour(layout.colourCircleMouseOver);
36 g.fillPath(p);
37 }
38 else
39 {
40 g.setColour(layout.colourCircleDefault); // inside the component but out of the circle
41 g.strokePath(p, PathStrokeType(static_cast<float>(3.0f)));
42 }
43 }
44 else // outside the component completely
45 {
46 g.setColour(layout.colourCircleDefault);
47 g.strokePath(p, PathStrokeType(static_cast<float>(3.0f)));
48 }
49 }
50
52
53 void TriggerButton::mouseMove(const MouseEvent& event)
54 {
55 auto puckPosition = event.getMouseDownPosition().toFloat();
56 float distanceFromCenter = puckPosition.getDistanceFrom(m_center);
57
58 if (distanceFromCenter <= m_radius)
59 {
60 m_insideCircle = true;
61 TextButton::mouseMove(event);
62 }
63 else
64 {
65 m_insideCircle = false;
66 }
67 repaint();
68 }
69
70 void TriggerButton::mouseDown(const MouseEvent& event)
71 {
73 {
74 m_clicked = true;
75 TextButton::mouseDown(event);
76
77 if (buttonPressed != nullptr)
79 }
80 repaint();
81 }
82
83 void TriggerButton::mouseUp(const MouseEvent& event)
84 {
86 {
87 m_clicked = false;
88 TextButton::mouseUp(event);
89 if (buttonReleased != nullptr)
91 }
92
93 repaint();
94 }
95
96 //======================================= TriggerButtonParameterAttachment
97 //========================================================================
99 TriggerButton& button,
100 UndoManager* /*undoManager*/)
101 : m_triggerButton(button), m_clickAttachment(onClickParam, {})
102 {
103 sendInitialUpdate();
104
105 m_triggerButton.buttonPressed = [this] { m_clickAttachment.setValueAsCompleteGesture(1.0f); };
106
107 m_triggerButton.buttonReleased = [this] { m_clickAttachment.setValueAsCompleteGesture(0.0f); };
108 }
109
115
117
118} // namespace krotos
A circular TriggerButton UI component.
Definition TriggerButton.h:12
void mouseUp(const MouseEvent &) override
Definition TriggerButton.cpp:83
void paint(Graphics &g) override
Definition TriggerButton.cpp:17
void mouseDown(const MouseEvent &) override
Definition TriggerButton.cpp:70
bool m_insideCircle
Definition TriggerButton.h:48
bool m_clicked
Definition TriggerButton.h:49
struct krotos::TriggerButton::Layout layout
std::function< void()> buttonPressed
Definition TriggerButton.h:18
TriggerButton()
Definition TriggerButton.cpp:8
float m_radius
Definition TriggerButton.h:47
std::function< void()> buttonReleased
Definition TriggerButton.h:19
Point< float > m_center
Definition TriggerButton.h:45
Rectangle< float > m_bounds
Definition TriggerButton.h:44
~TriggerButton()
Definition TriggerButton.cpp:51
void mouseMove(const MouseEvent &) override
Definition TriggerButton.cpp:53
void resized() override
Definition TriggerButton.cpp:10
~TriggerButtonParameterAttachment()
Definition TriggerButton.cpp:110
TriggerButtonParameterAttachment(RangedAudioParameter &onClickParam, TriggerButton &button, UndoManager *undoManager=nullptr)
Definition TriggerButton.cpp:98
TriggerButton & m_triggerButton
Definition TriggerButton.h:70
ParameterAttachment m_clickAttachment
Definition TriggerButton.h:71
void sendInitialUpdate()
Definition TriggerButton.cpp:116
Definition AirAbsorptionFilter.cpp:2
const float m_padding
Definition TriggerButton.h:29
const Colour colourCircleMouseDown
Definition TriggerButton.h:31
const Colour colourCircleDefault
Definition TriggerButton.h:32
const Colour colourCircleMouseOver
Definition TriggerButton.h:30