Audacity 3.2.0
Public Member Functions | Static Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes | List of all members
EnvelopeHandle Class Referencefinal

#include <EnvelopeHandle.h>

Inheritance diagram for EnvelopeHandle:
[legend]
Collaboration diagram for EnvelopeHandle:
[legend]

Public Member Functions

 EnvelopeHandle (Envelope *pEnvelope, std::weak_ptr< const Channel > wChannel)
 
 EnvelopeHandle (EnvelopeHandle &&)=default
 
EnvelopeHandleoperator= (EnvelopeHandle &&)=default
 
virtual ~EnvelopeHandle ()
 
std::shared_ptr< const ChannelFindChannel () const override
 
EnvelopeGetEnvelope () const
 
void Enter (bool forward, AudacityProject *) override
 
Result Click (const TrackPanelMouseEvent &event, AudacityProject *pProject) override
 
Result Drag (const TrackPanelMouseEvent &event, AudacityProject *pProject) override
 
HitTestPreview Preview (const TrackPanelMouseState &state, AudacityProject *pProject) override
 
Result Release (const TrackPanelMouseEvent &event, AudacityProject *pProject, wxWindow *pParent) override
 
Result Cancel (AudacityProject *pProject) override
 
bool StopsOnKeystroke () override
 
- Public Member Functions inherited from UIHandle
virtual ~UIHandle ()=0
 
virtual void Enter (bool forward, AudacityProject *pProject)
 
virtual bool HasRotation () const
 
virtual bool Rotate (bool forward)
 
virtual bool HasEscape (AudacityProject *pProject) const
 
virtual bool Escape (AudacityProject *pProject)
 
virtual bool HandlesRightClick ()
 Whether the handle has any special right-button handling. More...
 
virtual Result Click (const TrackPanelMouseEvent &event, AudacityProject *pProject)=0
 
virtual Result Drag (const TrackPanelMouseEvent &event, AudacityProject *pProject)=0
 
virtual HitTestPreview Preview (const TrackPanelMouseState &state, AudacityProject *pProject)=0
 
virtual Result Release (const TrackPanelMouseEvent &event, AudacityProject *pProject, wxWindow *pParent)=0
 
virtual Result Cancel (AudacityProject *pProject)=0
 
virtual bool StopsOnKeystroke ()
 
virtual void OnProjectChange (AudacityProject *pProject)
 
virtual std::shared_ptr< const ChannelFindChannel () const =0
 
virtual bool IsDragging () const
 
Result GetChangeHighlight () const
 
void SetChangeHighlight (Result val)
 
- Public Member Functions inherited from TrackPanelDrawable
virtual ~TrackPanelDrawable ()=0
 
virtual void Draw (TrackPanelDrawingContext &context, const wxRect &rect, unsigned iPass)
 
virtual wxRect DrawingArea (TrackPanelDrawingContext &context, const wxRect &rect, const wxRect &panelRect, unsigned iPass)
 

Static Public Member Functions

static UIHandlePtr HitAnywhere (std::weak_ptr< EnvelopeHandle > &holder, Envelope *envelope, std::weak_ptr< const Channel > wChannel, bool timeTrack)
 
static UIHandlePtr TimeTrackHitTest (std::weak_ptr< EnvelopeHandle > &holder, const wxMouseState &state, const wxRect &rect, const AudacityProject *pProject, const std::shared_ptr< TimeTrack > &tt)
 
static UIHandlePtr WaveTrackHitTest (std::weak_ptr< EnvelopeHandle > &holder, const wxMouseState &state, const wxRect &rect, const AudacityProject *pProject, const std::shared_ptr< WaveTrack > &wt)
 
- Static Public Member Functions inherited from UIHandle
static UIHandle::Result NeedChangeHighlight (const UIHandle &, const UIHandle &)
 
- Static Public Member Functions inherited from TrackPanelDrawable
static wxRect MaximizeWidth (const wxRect &rect, const wxRect &panelRect)
 
static wxRect MaximizeHeight (const wxRect &rect, const wxRect &panelRect)
 

Private Member Functions

 EnvelopeHandle (const EnvelopeHandle &)=delete
 
EnvelopeHandleoperator= (const EnvelopeHandle &)=delete
 
bool ForwardEventToEnvelopes (const wxMouseEvent &event, const ViewInfo &viewInfo)
 

Static Private Member Functions

static UIHandlePtr HitEnvelope (std::weak_ptr< EnvelopeHandle > &holder, const wxMouseState &state, const wxRect &rect, const AudacityProject *pProject, Envelope *envelope, std::weak_ptr< const Channel > wChannel, float zoomMin, float zoomMax, bool dB, float dBRange, bool timeTrack)
 

Private Attributes

wxRect mRect {}
 
bool mLog {}
 
float mLower {}
 
float mUpper {}
 
double mdBRange {}
 
EnvelopemEnvelope {}
 
std::weak_ptr< const ChannelmwChannel
 
std::unique_ptr< EnvelopeEditormpEnvelopeEditor
 
bool mTimeTrack {}
 

Additional Inherited Members

- Public Types inherited from UIHandle
using Result = unsigned
 
using Cell = TrackPanelCell
 
- Protected Attributes inherited from UIHandle
Result mChangeHighlight { 0 }
 

Detailed Description

Definition at line 27 of file EnvelopeHandle.h.

Constructor & Destructor Documentation

◆ EnvelopeHandle() [1/3]

EnvelopeHandle::EnvelopeHandle ( const EnvelopeHandle )
privatedelete

◆ EnvelopeHandle() [2/3]

EnvelopeHandle::EnvelopeHandle ( Envelope pEnvelope,
std::weak_ptr< const Channel wChannel 
)

Definition at line 33 of file EnvelopeHandle.cpp.

35 : mEnvelope{ pEnvelope }
36 , mwChannel{ move(wChannel) }
37{
38}
std::weak_ptr< const Channel > mwChannel
Envelope * mEnvelope

◆ EnvelopeHandle() [3/3]

EnvelopeHandle::EnvelopeHandle ( EnvelopeHandle &&  )
default

◆ ~EnvelopeHandle()

EnvelopeHandle::~EnvelopeHandle ( )
virtual

Definition at line 47 of file EnvelopeHandle.cpp.

48{}

Member Function Documentation

◆ Cancel()

UIHandle::Result EnvelopeHandle::Cancel ( AudacityProject pProject)
overridevirtual

Implements UIHandle.

Definition at line 295 of file EnvelopeHandle.cpp.

296{
297 ProjectHistory::Get( *pProject ).RollbackState();
298 mpEnvelopeEditor.reset();
300}
std::unique_ptr< EnvelopeEditor > mpEnvelopeEditor
static ProjectHistory & Get(AudacityProject &project)

References ProjectHistory::Get(), mpEnvelopeEditor, RefreshCode::RefreshCell, and ProjectHistory::RollbackState().

Referenced by Drag(), and Release().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Click()

UIHandle::Result EnvelopeHandle::Click ( const TrackPanelMouseEvent event,
AudacityProject pProject 
)
overridevirtual

Implements UIHandle.

Definition at line 182 of file EnvelopeHandle.cpp.

184{
185 using namespace RefreshCode;
186 const bool unsafe = ProjectAudioIO::Get( *pProject ).IsAudioActive();
187 if ( unsafe )
188 return Cancelled;
189
190 const wxMouseEvent &event = evt.event;
191 const auto &viewInfo = ViewInfo::Get( *pProject );
192 const auto pView = std::static_pointer_cast<ChannelView>(evt.pCell);
193 const auto pTrack = pView ? pView->FindTrack().get() : nullptr;
194
195 mpEnvelopeEditor.reset();
196
197 unsigned result = Cancelled;
198 if (pTrack)
199 result = pTrack->TypeSwitch< decltype(RefreshNone) >(
200 [&](WaveTrack &wt) {
201 if (!mEnvelope)
202 return Cancelled;
203
205 auto &cache = WaveformScale::Get(wt);
206 cache.GetDisplayBounds(mLower, mUpper);
208 mpEnvelopeEditor = std::make_unique<EnvelopeEditor>(*mEnvelope, true);
209 return RefreshNone;
210 },
211 [&](TimeTrack &tt) {
212 if (!mEnvelope)
213 return Cancelled;
214 GetTimeTrackData( *pProject, tt, mdBRange, mLog, mLower, mUpper);
215 mpEnvelopeEditor = std::make_unique<EnvelopeEditor>(*mEnvelope, false);
216
217 return RefreshNone;
218 },
219 [](Track &) {
220 return Cancelled;
221 }
222 );
223
224 if (result & Cancelled)
225 return result;
226
227 mRect = evt.rect;
228
229 const bool needUpdate = ForwardEventToEnvelopes(event, viewInfo);
230 return needUpdate ? RefreshCell : RefreshNone;
231}
bool ForwardEventToEnvelopes(const wxMouseEvent &event, const ViewInfo &viewInfo)
bool IsAudioActive() const
static ProjectAudioIO & Get(AudacityProject &project)
A kind of Track used to 'warp time'.
Definition: TimeTrack.h:24
Abstract base class for an object holding data associated with points on a time axis.
Definition: Track.h:122
static ViewInfo & Get(AudacityProject &project)
Definition: ViewInfo.cpp:235
A Track that contains audio waveform data.
Definition: WaveTrack.h:227
static WaveformScale & Get(const WaveTrack &track)
Mutative access to attachment even if the track argument is const.
bool isLinear() const
static WaveformSettings & Get(const WaveTrack &track)
Namespace containing an enum 'what to do on a refresh?'.
Definition: RefreshCode.h:16
void GetTimeTrackData(const AudacityProject &project, const TimeTrack &tt, double &dBRange, bool &dB, float &zoomMin, float &zoomMax)

References Cancelled, WaveformSettings::dBRange, TrackPanelMouseEvent::event, ForwardEventToEnvelopes(), ProjectAudioIO::Get(), ViewInfo::Get(), WaveformSettings::Get(), WaveformScale::Get(), anonymous_namespace{EnvelopeHandle.cpp}::GetTimeTrackData(), ProjectAudioIO::IsAudioActive(), WaveformSettings::isLinear(), mdBRange, mEnvelope, mLog, mLower, mpEnvelopeEditor, mRect, mUpper, TrackPanelMouseEvent::pCell, TrackPanelMouseEvent::rect, RefreshCode::RefreshCell, and RefreshCode::RefreshNone.

Here is the call graph for this function:

◆ Drag()

UIHandle::Result EnvelopeHandle::Drag ( const TrackPanelMouseEvent event,
AudacityProject pProject 
)
overridevirtual

Implements UIHandle.

Definition at line 233 of file EnvelopeHandle.cpp.

235{
236 using namespace RefreshCode;
237 const wxMouseEvent &event = evt.event;
238 const auto &viewInfo = ViewInfo::Get( *pProject );
239 const bool unsafe = ProjectAudioIO::Get( *pProject ).IsAudioActive();
240 if (unsafe) {
241 this->Cancel(pProject);
242 return RefreshCell | Cancelled;
243 }
244
245 const bool needUpdate = ForwardEventToEnvelopes(event, viewInfo);
246 return needUpdate ? RefreshCell : RefreshNone;
247}
Result Cancel(AudacityProject *pProject) override

References Cancel(), Cancelled, TrackPanelMouseEvent::event, ForwardEventToEnvelopes(), ProjectAudioIO::Get(), ViewInfo::Get(), ProjectAudioIO::IsAudioActive(), RefreshCode::RefreshCell, and RefreshCode::RefreshNone.

Here is the call graph for this function:

◆ Enter()

void EnvelopeHandle::Enter ( bool  forward,
AudacityProject  
)
overridevirtual

Reimplemented from UIHandle.

Definition at line 40 of file EnvelopeHandle.cpp.

41{
42#ifdef EXPERIMENTAL_TRACK_PANEL_HIGHLIGHTING
44#endif
45}
Result mChangeHighlight
Definition: UIHandle.h:147

References UIHandle::mChangeHighlight, and RefreshCode::RefreshCell.

◆ FindChannel()

std::shared_ptr< const Channel > EnvelopeHandle::FindChannel ( ) const
overridevirtual
Returns
pointer to associated channel, if any

Implements UIHandle.

Definition at line 50 of file EnvelopeHandle.cpp.

51{
52 return mwChannel.lock();
53}

References mwChannel.

◆ ForwardEventToEnvelopes()

bool EnvelopeHandle::ForwardEventToEnvelopes ( const wxMouseEvent &  event,
const ViewInfo viewInfo 
)
private

The Envelope class actually handles things at the mouse event level, so we have to forward the events over. Envelope will then tell us whether or not we need to redraw.

Definition at line 302 of file EnvelopeHandle.cpp.

304{
308
309 // AS: I'm not sure why we can't let the Envelope take care of
310 // redrawing itself. ?
311 return mpEnvelopeEditor && mpEnvelopeEditor->MouseEvent(
312 event, mRect, viewInfo, mLog, mdBRange, mLower, mUpper);
313}

References mdBRange, mLog, mLower, mpEnvelopeEditor, mRect, and mUpper.

Referenced by Click(), Drag(), and Release().

Here is the caller graph for this function:

◆ GetEnvelope()

Envelope * EnvelopeHandle::GetEnvelope ( ) const
inline

Definition at line 61 of file EnvelopeHandle.h.

61{ return mEnvelope; }

Referenced by anonymous_namespace{WaveformView.cpp}::DrawClipWaveform(), anonymous_namespace{TimeTrackView.cpp}::DrawHorzRulerAndCurve(), and EnvelopeEditor::DrawPoints().

Here is the caller graph for this function:

◆ HitAnywhere()

UIHandlePtr EnvelopeHandle::HitAnywhere ( std::weak_ptr< EnvelopeHandle > &  holder,
Envelope envelope,
std::weak_ptr< const Channel wChannel,
bool  timeTrack 
)
static

Definition at line 55 of file EnvelopeHandle.cpp.

57{
58 auto result = AssignUIHandlePtr(holder,
59 std::make_shared<EnvelopeHandle>(envelope, move(wChannel)));
60 result->mTimeTrack = timeTrack;
61 return result;
62}
std::shared_ptr< Subclass > AssignUIHandlePtr(std::weak_ptr< Subclass > &holder, const std::shared_ptr< Subclass > &pNew)
Definition: UIHandle.h:159

References AssignUIHandlePtr().

Referenced by WaveformView::DetailedHitTest(), and HitEnvelope().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ HitEnvelope()

UIHandlePtr EnvelopeHandle::HitEnvelope ( std::weak_ptr< EnvelopeHandle > &  holder,
const wxMouseState &  state,
const wxRect &  rect,
const AudacityProject pProject,
Envelope envelope,
std::weak_ptr< const Channel wChannel,
float  zoomMin,
float  zoomMax,
bool  dB,
float  dBRange,
bool  timeTrack 
)
staticprivate

Definition at line 126 of file EnvelopeHandle.cpp.

132{
133 const auto &viewInfo = ViewInfo::Get( *pProject );
134
135 const double envValue =
136 envelope->GetValue(viewInfo.PositionToTime(state.m_x, rect.x));
137
138 // Get y position of envelope point.
139 int yValue = GetWaveYPos(envValue,
140 zoomMin, zoomMax,
141 rect.height, dB, true, dBRange, false) + rect.y;
142
143 // Get y position of center line
144 int ctr = GetWaveYPos(0.0,
145 zoomMin, zoomMax,
146 rect.height, dB, true, dBRange, false) + rect.y;
147
148 // Get y distance of mouse from center line (in pixels).
149 int yMouse = abs(ctr - state.m_y);
150 // Get y distance of envelope from center line (in pixels)
151 yValue = abs(ctr - yValue);
152
153 // JKC: It happens that the envelope is actually drawn offset from its
154 // 'true' position (it is 3 pixels wide). yMisalign is really a fudge
155 // factor to allow us to hit it exactly, but I wouldn't dream of
156 // calling it yFudgeFactor :)
157 const int yMisalign = 2;
158 // Perhaps yTolerance should be put into preferences?
159 const int yTolerance = 5; // how far from envelope we may be and count as a hit.
160 int distance;
161
162 // For amplification using the envelope we introduced the idea of contours.
163 // The contours have the same shape as the envelope, which may be partially off-screen.
164 // The contours are closer in to the center line.
165 // Beware very short rectangles! Make this at least 1
166 int ContourSpacing = std::max(1,
167 static_cast<int>(rect.height / (2 * (zoomMax - zoomMin))));
168 const int MaxContours = 2;
169
170 // Adding ContourSpacing/2 selects a region either side of the contour.
171 int yDisplace = yValue - yMisalign - yMouse + ContourSpacing / 2;
172 if (yDisplace > (MaxContours * ContourSpacing))
173 return {};
174 // Subtracting the ContourSpacing/2 we added earlier ensures distance is centred on the contour.
175 distance = abs((yDisplace % ContourSpacing) - ContourSpacing / 2);
176 if (distance >= yTolerance)
177 return {};
178
179 return HitAnywhere(holder, envelope, move(wChannel), timeTrack);
180}
int GetWaveYPos(float value, float min, float max, int height, bool dB, bool outer, float dBr, bool clip)
Definition: TrackArt.cpp:66
static UIHandlePtr HitAnywhere(std::weak_ptr< EnvelopeHandle > &holder, Envelope *envelope, std::weak_ptr< const Channel > wChannel, bool timeTrack)
double GetValue(double t, double sampleDur=0) const
Get envelope value at time t.
Definition: Envelope.cpp:837

References ViewInfo::Get(), Envelope::GetValue(), GetWaveYPos(), and HitAnywhere().

Referenced by TimeTrackHitTest(), and WaveTrackHitTest().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ operator=() [1/2]

EnvelopeHandle & EnvelopeHandle::operator= ( const EnvelopeHandle )
privatedelete

◆ operator=() [2/2]

EnvelopeHandle & EnvelopeHandle::operator= ( EnvelopeHandle &&  )
default

◆ Preview()

HitTestPreview EnvelopeHandle::Preview ( const TrackPanelMouseState state,
AudacityProject pProject 
)
overridevirtual

Implements UIHandle.

Definition at line 249 of file EnvelopeHandle.cpp.

251{
252 const bool unsafe = ProjectAudioIO::Get( *pProject ).IsAudioActive();
253 static auto disabledCursor =
254 ::MakeCursor(wxCURSOR_NO_ENTRY, DisabledCursorXpm, 16, 16);
255 static auto envelopeCursor =
256 ::MakeCursor(wxCURSOR_ARROW, EnvCursorXpm, 16, 16);
257
258 auto message = mTimeTrack
259 ? XO("Click and drag to warp playback time")
260 : XO("Click and drag to edit the amplitude envelope");
261
262 return {
263 message,
264 (unsafe
265 ? &*disabledCursor
266 : &*envelopeCursor)
267 };
268}
XO("Cut/Copy/Paste")
std::unique_ptr< wxCursor > MakeCursor(int WXUNUSED(CursorId), const char *const pXpm[36], int HotX, int HotY)
Definition: TrackPanel.cpp:188

References ProjectAudioIO::Get(), ProjectAudioIO::IsAudioActive(), MakeCursor(), mTimeTrack, and XO().

Here is the call graph for this function:

◆ Release()

UIHandle::Result EnvelopeHandle::Release ( const TrackPanelMouseEvent event,
AudacityProject pProject,
wxWindow *  pParent 
)
overridevirtual

Implements UIHandle.

Definition at line 270 of file EnvelopeHandle.cpp.

273{
274 const wxMouseEvent &event = evt.event;
275 const auto &viewInfo = ViewInfo::Get( *pProject );
276 const bool unsafe = ProjectAudioIO::Get( *pProject ).IsAudioActive();
277 if (unsafe)
278 return this->Cancel(pProject);
279
280 const bool needUpdate = ForwardEventToEnvelopes(event, viewInfo);
281
282 ProjectHistory::Get( *pProject ).PushState(
283 /* i18n-hint: (verb) Audacity has just adjusted the envelope .*/
284 XO("Adjusted envelope."),
285 /* i18n-hint: The envelope is a curve that controls the audio loudness.*/
286 XO("Envelope")
287 );
288
289 mpEnvelopeEditor.reset();
290
291 using namespace RefreshCode;
292 return needUpdate ? RefreshCell : RefreshNone;
293}
void PushState(const TranslatableString &desc, const TranslatableString &shortDesc)

References Cancel(), TrackPanelMouseEvent::event, ForwardEventToEnvelopes(), ProjectAudioIO::Get(), ProjectHistory::Get(), ViewInfo::Get(), ProjectAudioIO::IsAudioActive(), mpEnvelopeEditor, ProjectHistory::PushState(), RefreshCode::RefreshCell, RefreshCode::RefreshNone, and XO().

Here is the call graph for this function:

◆ StopsOnKeystroke()

bool EnvelopeHandle::StopsOnKeystroke ( )
inlineoverridevirtual

Reimplemented from UIHandle.

Definition at line 81 of file EnvelopeHandle.h.

81{ return true; }

◆ TimeTrackHitTest()

UIHandlePtr EnvelopeHandle::TimeTrackHitTest ( std::weak_ptr< EnvelopeHandle > &  holder,
const wxMouseState &  state,
const wxRect &  rect,
const AudacityProject pProject,
const std::shared_ptr< TimeTrack > &  tt 
)
static

Definition at line 81 of file EnvelopeHandle.cpp.

85{
86 auto envelope = tt->GetEnvelope();
87 if (!envelope)
88 return {};
89 bool dB;
90 double dBRange;
91 float zoomMin, zoomMax;
92 GetTimeTrackData( *pProject, *tt, dBRange, dB, zoomMin, zoomMax);
93 return EnvelopeHandle::HitEnvelope(holder, state, rect, pProject, envelope,
94 std::dynamic_pointer_cast<const Channel>(tt),
95 zoomMin, zoomMax, dB, dBRange, true);
96}
static UIHandlePtr HitEnvelope(std::weak_ptr< EnvelopeHandle > &holder, const wxMouseState &state, const wxRect &rect, const AudacityProject *pProject, Envelope *envelope, std::weak_ptr< const Channel > wChannel, float zoomMin, float zoomMax, bool dB, float dBRange, bool timeTrack)

References anonymous_namespace{EnvelopeHandle.cpp}::GetTimeTrackData(), and HitEnvelope().

Referenced by TimeTrackView::DetailedHitTest().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ WaveTrackHitTest()

UIHandlePtr EnvelopeHandle::WaveTrackHitTest ( std::weak_ptr< EnvelopeHandle > &  holder,
const wxMouseState &  state,
const wxRect &  rect,
const AudacityProject pProject,
const std::shared_ptr< WaveTrack > &  wt 
)
static

method that tells us if the mouse event landed on an envelope boundary.

Definition at line 98 of file EnvelopeHandle.cpp.

102{
105 auto &viewInfo = ViewInfo::Get(*pProject);
106 auto time = viewInfo.PositionToTime(state.m_x, rect.GetX());
107 Envelope *const envelope = wt->GetEnvelopeAtTime(time);
108
109 if (!envelope)
110 return {};
111
112 // Get envelope point, range 0.0 to 1.0
113 const bool dB = !WaveformSettings::Get(*wt).isLinear();
114
115 float zoomMin, zoomMax;
116 auto &cache = WaveformScale::Get(*wt);
117 cache.GetDisplayBounds(zoomMin, zoomMax);
118
119 const float dBRange = WaveformSettings::Get(*wt).dBRange;
120
121 return EnvelopeHandle::HitEnvelope(holder, state, rect, pProject, envelope,
122 std::dynamic_pointer_cast<const Channel>(wt),
123 zoomMin, zoomMax, dB, dBRange, false);
124}
Piecewise linear or piecewise exponential function from double to double.
Definition: Envelope.h:72

References WaveformSettings::dBRange, ViewInfo::Get(), WaveformSettings::Get(), WaveformScale::Get(), HitEnvelope(), and WaveformSettings::isLinear().

Referenced by WaveformView::DetailedHitTest().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ mdBRange

double EnvelopeHandle::mdBRange {}
private

Definition at line 90 of file EnvelopeHandle.h.

Referenced by Click(), and ForwardEventToEnvelopes().

◆ mEnvelope

Envelope* EnvelopeHandle::mEnvelope {}
private

Definition at line 92 of file EnvelopeHandle.h.

Referenced by Click().

◆ mLog

bool EnvelopeHandle::mLog {}
private

Definition at line 88 of file EnvelopeHandle.h.

Referenced by Click(), and ForwardEventToEnvelopes().

◆ mLower

float EnvelopeHandle::mLower {}
private

Definition at line 89 of file EnvelopeHandle.h.

Referenced by Click(), and ForwardEventToEnvelopes().

◆ mpEnvelopeEditor

std::unique_ptr<EnvelopeEditor> EnvelopeHandle::mpEnvelopeEditor
private

Definition at line 94 of file EnvelopeHandle.h.

Referenced by Cancel(), Click(), ForwardEventToEnvelopes(), and Release().

◆ mRect

wxRect EnvelopeHandle::mRect {}
private

Definition at line 87 of file EnvelopeHandle.h.

Referenced by Click(), and ForwardEventToEnvelopes().

◆ mTimeTrack

bool EnvelopeHandle::mTimeTrack {}
private

Definition at line 96 of file EnvelopeHandle.h.

Referenced by Preview().

◆ mUpper

float EnvelopeHandle::mUpper {}
private

Definition at line 89 of file EnvelopeHandle.h.

Referenced by Click(), and ForwardEventToEnvelopes().

◆ mwChannel

std::weak_ptr<const Channel> EnvelopeHandle::mwChannel
private

Definition at line 93 of file EnvelopeHandle.h.

Referenced by FindChannel().


The documentation for this class was generated from the following files: