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

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

◆ EnvelopeHandle() [3/3]

EnvelopeHandle::EnvelopeHandle ( EnvelopeHandle &&  )
default

◆ ~EnvelopeHandle()

EnvelopeHandle::~EnvelopeHandle ( )
virtual

Definition at line 49 of file EnvelopeHandle.cpp.

50{}

Member Function Documentation

◆ Cancel()

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

Implements UIHandle.

Definition at line 294 of file EnvelopeHandle.cpp.

295{
296 ProjectHistory::Get( *pProject ).RollbackState();
297 mpEnvelopeEditor.reset();
299}
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 pChannel = pView ? pView->FindChannel().get() : nullptr;
194
195 mpEnvelopeEditor.reset();
196
197 unsigned result = Cancelled;
198 if (const auto pWt = dynamic_cast<WaveChannel*>(pChannel)) {
199 auto &wt = *pWt;
200 if (!mEnvelope)
201 result = Cancelled;
202 else {
204 auto &cache = WaveformScale::Get(wt);
205 cache.GetDisplayBounds(mLower, mUpper);
207 mpEnvelopeEditor = std::make_unique<EnvelopeEditor>(*mEnvelope, true);
208 result = RefreshNone;
209 }
210 }
211 else if (const auto pTt = dynamic_cast<TimeTrack*>(pChannel)) {
212 auto &tt = *pTt;
213 if (!mEnvelope)
214 result = Cancelled;
215 else {
216 GetTimeTrackData( *pProject, tt, mdBRange, mLog, mLower, mUpper);
217 mpEnvelopeEditor = std::make_unique<EnvelopeEditor>(*mEnvelope, false);
218
219 result = RefreshNone;
220 }
221 }
222
223 if (result & Cancelled)
224 return result;
225
226 mRect = evt.rect;
227
228 const bool needUpdate = ForwardEventToEnvelopes(event, viewInfo);
229 return needUpdate ? RefreshCell : RefreshNone;
230}
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 232 of file EnvelopeHandle.cpp.

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

43{
44#ifdef EXPERIMENTAL_TRACK_PANEL_HIGHLIGHTING
46#endif
47}
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 52 of file EnvelopeHandle.cpp.

53{
54 return TrackFromChannel(mwChannel.lock());
55}
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 301 of file EnvelopeHandle.cpp.

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

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

59{
60 auto result = AssignUIHandlePtr(holder,
61 std::make_shared<EnvelopeHandle>(envelope, move(wChannel)));
62 result->mTimeTrack = timeTrack;
63 return result;
64}
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 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:880

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

250{
251 const bool unsafe = ProjectAudioIO::Get( *pProject ).IsAudioActive();
252 static auto disabledCursor =
253 ::MakeCursor(wxCURSOR_NO_ENTRY, DisabledCursorXpm, 16, 16);
254 static auto envelopeCursor =
255 ::MakeCursor(wxCURSOR_ARROW, EnvCursorXpm, 16, 16);
256
257 auto message = mTimeTrack
258 ? XO("Click and drag to warp playback time")
259 : XO("Click and drag to edit the amplitude envelope");
260
261 return {
262 message,
263 (unsafe
264 ? &*disabledCursor
265 : &*envelopeCursor)
266 };
267}
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 269 of file EnvelopeHandle.cpp.

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

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

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