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 TrackFindTrack () 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 TrackFindTrack () 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 WaveChannelHitTest (std::weak_ptr< EnvelopeHandle > &holder, const wxMouseState &state, const wxRect &rect, const AudacityProject *pProject, const std::shared_ptr< WaveChannel > &wt)
 
- Static Public Member Functions inherited from UIHandle
static UIHandle::Result NeedChangeHighlight (const UIHandle &, const UIHandle &)
 
static std::shared_ptr< const TrackTrackFromChannel (const std::shared_ptr< const Channel > &pChannel)
 A frequent convenience in the definition of UIHandles. More...
 
- 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 28 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 34 of file EnvelopeHandle.cpp.

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

◆ EnvelopeHandle() [3/3]

EnvelopeHandle::EnvelopeHandle ( EnvelopeHandle &&  )
default

◆ ~EnvelopeHandle()

EnvelopeHandle::~EnvelopeHandle ( )
virtual

Definition at line 48 of file EnvelopeHandle.cpp.

49{}

Member Function Documentation

◆ Cancel()

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

Implements UIHandle.

Definition at line 293 of file EnvelopeHandle.cpp.

294{
295 ProjectHistory::Get( *pProject ).RollbackState();
296 mpEnvelopeEditor.reset();
298}
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 181 of file EnvelopeHandle.cpp.

183{
184 using namespace RefreshCode;
185 const bool unsafe = ProjectAudioIO::Get( *pProject ).IsAudioActive();
186 if ( unsafe )
187 return Cancelled;
188
189 const wxMouseEvent &event = evt.event;
190 const auto &viewInfo = ViewInfo::Get( *pProject );
191 const auto pView = std::static_pointer_cast<ChannelView>(evt.pCell);
192 const auto pChannel = pView ? pView->FindChannel().get() : nullptr;
193
194 mpEnvelopeEditor.reset();
195
196 unsigned result = Cancelled;
197 if (const auto pWt = dynamic_cast<WaveChannel*>(pChannel)) {
198 auto &wt = *pWt;
199 if (!mEnvelope)
200 result = Cancelled;
201 else {
203 auto &cache = WaveformScale::Get(wt);
204 cache.GetDisplayBounds(mLower, mUpper);
206 mpEnvelopeEditor = std::make_unique<EnvelopeEditor>(*mEnvelope, true);
207 result = RefreshNone;
208 }
209 }
210 else if (const auto pTt = dynamic_cast<TimeTrack*>(pChannel)) {
211 auto &tt = *pTt;
212 if (!mEnvelope)
213 result = Cancelled;
214 else {
215 GetTimeTrackData( *pProject, tt, mdBRange, mLog, mLower, mUpper);
216 mpEnvelopeEditor = std::make_unique<EnvelopeEditor>(*mEnvelope, false);
217
218 result = RefreshNone;
219 }
220 }
221
222 if (result & Cancelled)
223 return result;
224
225 mRect = evt.rect;
226
227 const bool needUpdate = ForwardEventToEnvelopes(event, viewInfo);
228 return needUpdate ? RefreshCell : RefreshNone;
229}
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
static ViewInfo & Get(AudacityProject &project)
Definition: ViewInfo.cpp:235
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 231 of file EnvelopeHandle.cpp.

233{
234 using namespace RefreshCode;
235 const wxMouseEvent &event = evt.event;
236 const auto &viewInfo = ViewInfo::Get( *pProject );
237 const bool unsafe = ProjectAudioIO::Get( *pProject ).IsAudioActive();
238 if (unsafe) {
239 this->Cancel(pProject);
240 return RefreshCell | Cancelled;
241 }
242
243 const bool needUpdate = ForwardEventToEnvelopes(event, viewInfo);
244 return needUpdate ? RefreshCell : RefreshNone;
245}
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 41 of file EnvelopeHandle.cpp.

42{
43#ifdef EXPERIMENTAL_TRACK_PANEL_HIGHLIGHTING
45#endif
46}
Result mChangeHighlight
Definition: UIHandle.h:152

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

◆ FindTrack()

std::shared_ptr< const Track > EnvelopeHandle::FindTrack ( ) const
overridevirtual
Returns
pointer to associated track, if any

Implements UIHandle.

Definition at line 51 of file EnvelopeHandle.cpp.

52{
53 return TrackFromChannel(mwChannel.lock());
54}
static std::shared_ptr< const Track > TrackFromChannel(const std::shared_ptr< const Channel > &pChannel)
A frequent convenience in the definition of UIHandles.
Definition: UIHandle.cpp:63

References mwChannel, and UIHandle::TrackFromChannel().

Here is the call graph for this function:

◆ 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 300 of file EnvelopeHandle.cpp.

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

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 56 of file EnvelopeHandle.cpp.

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

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 125 of file EnvelopeHandle.cpp.

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

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

Referenced by TimeTrackHitTest(), and WaveChannelHitTest().

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 247 of file EnvelopeHandle.cpp.

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

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 268 of file EnvelopeHandle.cpp.

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

86{
87 auto envelope = tt->GetEnvelope();
88 if (!envelope)
89 return {};
90 bool dB;
91 double dBRange;
92 float zoomMin, zoomMax;
93 GetTimeTrackData( *pProject, *tt, dBRange, dB, zoomMin, zoomMax);
94 return EnvelopeHandle::HitEnvelope(holder, state, rect, pProject, envelope,
95 std::dynamic_pointer_cast<const Channel>(tt),
96 zoomMin, zoomMax, dB, dBRange, true);
97}
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:

◆ WaveChannelHitTest()

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

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

Definition at line 99 of file EnvelopeHandle.cpp.

103{
106 auto &viewInfo = ViewInfo::Get(*pProject);
107 auto time = viewInfo.PositionToTime(state.m_x, rect.GetX());
108 const auto envelope = WaveChannelUtilities::GetEnvelopeAtTime(*wc, time);
109 if (!envelope)
110 return {};
111
112 // Get envelope point, range 0.0 to 1.0
113 const bool dB = !WaveformSettings::Get(*wc).isLinear();
114
115 float zoomMin, zoomMax;
116 auto &cache = WaveformScale::Get(*wc);
117 cache.GetDisplayBounds(zoomMin, zoomMax);
118
119 const float dBRange = WaveformSettings::Get(*wc).dBRange;
120
121 return EnvelopeHandle::HitEnvelope(holder, state, rect, pProject, envelope,
122 wc, zoomMin, zoomMax, dB, dBRange, false);
123}
WAVE_TRACK_API Envelope * GetEnvelopeAtTime(WaveChannel &channel, double time)

References WaveformSettings::dBRange, ViewInfo::Get(), WaveformSettings::Get(), WaveformScale::Get(), WaveChannelUtilities::GetEnvelopeAtTime(), 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 FindTrack().


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