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

#include <WaveformVRulerControls.h>

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

Public Member Functions

 WaveformVRulerControls (const std::shared_ptr< ChannelView > &pChannelView)
 
 ~WaveformVRulerControls () override
 
std::vector< UIHandlePtrHitTest (const TrackPanelMouseState &state, const AudacityProject *) override
 
unsigned HandleWheelRotation (const TrackPanelMouseEvent &event, AudacityProject *pProject) override
 
std::shared_ptr< WaveChannelFindWaveChannel ()
 
- Public Member Functions inherited from ChannelVRulerControls
 ChannelVRulerControls (const std::shared_ptr< ChannelView > &pChannelView)
 
virtual ~ChannelVRulerControls ()=0
 
std::vector< UIHandlePtrHitTest (const TrackPanelMouseState &state, const AudacityProject *pProject) override
 
virtual void UpdateRuler (const wxRect &rect)=0
 
std::shared_ptr< const ChannelViewGetChannelView () const
 
- Public Member Functions inherited from CommonChannelCell
 CommonChannelCell (const std::shared_ptr< Channel > &pChannel)
 Construct from a channel. More...
 
 ~CommonChannelCell ()
 
std::shared_ptr< TrackDoFindTrack () override
 
void Reparent (const std::shared_ptr< Track > &parent, size_t iChannel) override
 Object may be shared among tracks but hold a special back-pointer to one of them; reassign it. More...
 
template<typename Subtype = Channel>
auto FindChannel () -> std::shared_ptr< Subtype >
 May return null. More...
 
template<typename Subtype = const Channel>
auto FindChannel () const -> std::enable_if_t< std::is_const_v< Subtype >, std::shared_ptr< Subtype > >
 May return null. More...
 
- Public Member Functions inherited from CommonTrackPanelCell
 CommonTrackPanelCell ()
 
virtual ~CommonTrackPanelCell ()=0
 
HitTestPreview DefaultPreview (const TrackPanelMouseState &, const AudacityProject *) override
 
std::shared_ptr< TrackFindTrack ()
 
std::shared_ptr< const TrackFindTrack () const
 
virtual std::vector< MenuItemGetMenuItems (const wxRect &rect, const wxPoint *pPosition, AudacityProject *pProject)
 Return a list of items for DoContextMenu() (empties for separators) More...
 
- Public Member Functions inherited from TrackPanelCell
 TrackPanelCell ()=default
 
 TrackPanelCell (const TrackPanelCell &)=delete
 
TrackPanelCelloperator= (const TrackPanelCell &)=delete
 
virtual ~TrackPanelCell ()=0
 
virtual HitTestPreview DefaultPreview (const TrackPanelMouseState &state, const AudacityProject *pProject)
 
virtual std::vector< UIHandlePtrHitTest (const TrackPanelMouseState &state, const AudacityProject *pProject)=0
 
virtual unsigned HandleWheelRotation (const TrackPanelMouseEvent &event, AudacityProject *pProject)
 
virtual std::shared_ptr< TrackPanelCellContextMenuDelegate ()
 
virtual unsigned DoContextMenu (const wxRect &rect, wxWindow *pParent, const wxPoint *pPosition, AudacityProject *pProject)
 
virtual unsigned CaptureKey (wxKeyEvent &event, ViewInfo &viewInfo, wxWindow *pParent, AudacityProject *project)
 
virtual unsigned KeyDown (wxKeyEvent &event, ViewInfo &viewInfo, wxWindow *pParent, AudacityProject *project)
 
virtual unsigned KeyUp (wxKeyEvent &event, ViewInfo &viewInfo, wxWindow *pParent, AudacityProject *project)
 
virtual unsigned Char (wxKeyEvent &event, ViewInfo &viewInfo, wxWindow *pParent, AudacityProject *project)
 
virtual unsigned LoseFocus (AudacityProject *project)
 
- Public Member Functions inherited from TrackPanelNode
 TrackPanelNode ()
 
virtual ~TrackPanelNode ()=0
 
- 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)
 
- Public Member Functions inherited from ChannelAttachment
virtual ~ChannelAttachment ()
 
virtual void CopyTo (Track &track, size_t iChannel) const
 Copy state, for undo/redo purposes. More...
 
virtual void Reparent (const std::shared_ptr< Track > &parent, size_t iChannel)
 Object may be shared among tracks but hold a special back-pointer to one of them; reassign it. More...
 
virtual void WriteXMLAttributes (XMLWriter &writer, size_t iChannel) const
 Serialize persistent attributes. More...
 
virtual bool HandleXMLAttribute (const std::string_view &attr, const XMLAttributeValueView &valueView, size_t iChannel)
 Deserialize an attribute, returning true if recognized. More...
 

Static Public Member Functions

static unsigned DoHandleWheelRotation (const TrackPanelMouseEvent &event, AudacityProject *pProject, WaveChannel &wc)
 
- Static Public Member Functions inherited from ChannelVRulerControls
static ChannelVRulerControlsGet (ChannelView &)
 
static const ChannelVRulerControlsGet (const ChannelView &)
 
static void DrawZooming (TrackPanelDrawingContext &context, const wxRect &rect, int zoomStart, int zoomEnd)
 
static wxRect ZoomingArea (const wxRect &rect, const wxRect &panelRect)
 
- 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

 WaveformVRulerControls (const WaveformVRulerControls &)=delete
 
WaveformVRulerControlsoperator= (const WaveformVRulerControls &)=delete
 
void Draw (TrackPanelDrawingContext &context, const wxRect &rect, unsigned iPass) override
 
void UpdateRuler (const wxRect &rect) override
 

Static Private Member Functions

static void DoUpdateVRuler (const wxRect &rect, const WaveChannel &wc)
 

Private Attributes

std::weak_ptr< WaveformVZoomHandlemVZoomHandle
 

Additional Inherited Members

- Protected Member Functions inherited from ChannelVRulerControls
std::shared_ptr< TrackDoFindTrack () override
 
wxRect DrawingArea (TrackPanelDrawingContext &, const wxRect &rect, const wxRect &panelRect, unsigned iPass) override
 
TrackGetTrack () const
 
- Protected Member Functions inherited from CommonTrackPanelCell
virtual std::shared_ptr< TrackDoFindTrack ()=0
 
unsigned DoContextMenu (const wxRect &rect, wxWindow *pParent, const wxPoint *pPosition, AudacityProject *pProject) override
 
unsigned HandleWheelRotation (const TrackPanelMouseEvent &event, AudacityProject *pProject) override
 
- Protected Attributes inherited from ChannelVRulerControls
std::weak_ptr< ChannelViewmwChannelView
 

Detailed Description

Definition at line 19 of file WaveformVRulerControls.h.

Constructor & Destructor Documentation

◆ WaveformVRulerControls() [1/2]

WaveformVRulerControls::WaveformVRulerControls ( const WaveformVRulerControls )
privatedelete

◆ WaveformVRulerControls() [2/2]

WaveformVRulerControls::WaveformVRulerControls ( const std::shared_ptr< ChannelView > &  pChannelView)
inlineexplicit

Definition at line 26 of file WaveformVRulerControls.h.

◆ ~WaveformVRulerControls()

WaveformVRulerControls::~WaveformVRulerControls ( )
overridedefault

Member Function Documentation

◆ DoHandleWheelRotation()

unsigned WaveformVRulerControls::DoHandleWheelRotation ( const TrackPanelMouseEvent event,
AudacityProject pProject,
WaveChannel wc 
)
static

Definition at line 138 of file WaveformVRulerControls.cpp.

140{
141 using namespace RefreshCode;
142 const wxMouseEvent &event = evt.event;
143
144 if (!(event.ShiftDown() || event.CmdDown()))
145 return RefreshNone;
146
147 // Always stop propagation even if the ruler didn't change. The ruler
148 // is a narrow enough target.
149 evt.event.Skip(false);
150
151 auto steps = evt.steps;
152
153 using namespace WaveChannelViewConstants;
155 auto &cache = WaveformScale::Get(wc);
156 const bool isDB = !settings.isLinear();
157 // Special cases for Waveform (logarithmic) dB only.
158 // Set the bottom of the dB scale but only if it's visible
159 if (isDB && event.ShiftDown() && event.CmdDown()) {
160 float min, max;
161 cache.GetDisplayBounds(min, max);
162 if (!(min < 0.0 && max > 0.0))
163 return RefreshNone;
164
165 float olddBRange = settings.dBRange;
166 if (steps < 0)
167 // Zoom out
168 settings.NextLowerDBRange();
169 else
170 settings.NextHigherDBRange();
171
172 float newdBRange = settings.dBRange;
173
174 // Is y coordinate within the rectangle half-height centered about
175 // the zero level?
176 const auto &rect = evt.rect;
177 const auto zeroLevel = cache.ZeroLevelYCoordinate(rect);
178 const bool fixedMagnification =
179 (4 * std::abs(event.GetY() - zeroLevel) < rect.GetHeight());
180
181 if (fixedMagnification) {
182 // Vary the db limit without changing
183 // magnification; that is, peaks and troughs move up and down
184 // rigidly, as parts of the wave near zero are exposed or hidden.
185 const float extreme = (LINEAR_TO_DB(2) + newdBRange) / newdBRange;
186 max = std::min(extreme, max * olddBRange / newdBRange);
187 min = std::max(-extreme, min * olddBRange / newdBRange);
188 SetLastdBRange(cache, wc);
189 cache.SetDisplayBounds(min, max);
190 }
191 }
192 else if (event.CmdDown() && !event.ShiftDown()) {
193 const int yy = event.m_y;
195 pProject, wc,
196 (steps < 0)
197 ? kZoomOut
198 : kZoomIn,
199 evt.rect, yy, yy, true);
200 }
201 else if (!event.CmdDown() && event.ShiftDown()) {
202 // Scroll some fixed number of pixels, independent of zoom level or track height:
203 static const float movement = 10.0f;
204 const int height = evt.rect.GetHeight();
205 {
206 float topLimit = 2.0;
207 if (isDB) {
208 const float dBRange = settings.dBRange;
209 topLimit = (LINEAR_TO_DB(topLimit) + dBRange) / dBRange;
210 }
211 const float bottomLimit = -topLimit;
212 float top, bottom;
213 cache.GetDisplayBounds(bottom, top);
214 const float range = top - bottom;
215 const float delta = range * steps * movement / height;
216 float newTop = std::min(topLimit, top + delta);
217 const float newBottom = std::max(bottomLimit, newTop - range);
218 newTop = std::min(topLimit, newBottom + range);
219 cache.SetDisplayBounds(newBottom, newTop);
220 }
221 }
222 else
223 return RefreshNone;
224
225 ProjectHistory::Get( *pProject ).ModifyState(true);
226
227 return RefreshCell | UpdateVRuler;
228}
int min(int a, int b)
#define LINEAR_TO_DB(x)
Definition: MemoryX.h:339
static Settings & settings()
Definition: TrackInfo.cpp:51
void ModifyState(bool bWantsAutoSave)
static ProjectHistory & Get(AudacityProject &project)
static WaveformScale & Get(const WaveTrack &track)
Mutative access to attachment even if the track argument is const.
static WaveformSettings & Get(const WaveTrack &track)
static void DoZoom(AudacityProject *pProject, WaveChannel &wc, WaveChannelViewConstants::ZoomActions ZoomKind, const wxRect &rect, int zoomStart, int zoomEnd, bool fixedMousePoint)
Namespace containing an enum 'what to do on a refresh?'.
Definition: RefreshCode.h:16
void SetLastdBRange(WaveformScale &cache, const WaveChannel &wc)

References WaveformVZoomHandle::DoZoom(), TrackPanelMouseEvent::event, ProjectHistory::Get(), WaveformSettings::Get(), WaveformScale::Get(), WaveChannelViewConstants::kZoomIn, WaveChannelViewConstants::kZoomOut, LINEAR_TO_DB, min(), ProjectHistory::ModifyState(), TrackPanelMouseEvent::rect, RefreshCode::RefreshCell, RefreshCode::RefreshNone, anonymous_namespace{WaveformVRulerControls.cpp}::SetLastdBRange(), settings(), TrackPanelMouseEvent::steps, and RefreshCode::UpdateVRuler.

Referenced by HandleWheelRotation().

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

◆ DoUpdateVRuler()

void WaveformVRulerControls::DoUpdateVRuler ( const wxRect &  rect,
const WaveChannel wc 
)
staticprivate

Definition at line 248 of file WaveformVRulerControls.cpp.

250{
252
253 // All waves have a ruler in the info panel
254 // The ruler needs a bevelled surround.
256 const float dBRange = settings.dBRange;
257
258 float min, max;
259 auto &cache = WaveformScale::Get(wc);
260 cache.GetDisplayBounds(min, max);
261 const float lastdBRange = cache.GetLastDBRange();
262 if (dBRange != lastdBRange)
263 SetLastdBRange(cache, wc);
264
265 auto scaleType = settings.scaleType;
266
267 if (settings.isLinear()) {
268 // Waveform
269
270 if (cache.GetLastScaleType() != WaveformSettings::stLinearAmp &&
271 cache.GetLastScaleType() != WaveformSettings::stLinearDb &&
272 cache.GetLastScaleType() != -1)
273 {
274 // do a translation into the linear space
275 SetLastScaleType(cache, wc);
276 SetLastdBRange(cache, wc);
277 float sign = (min >= 0 ? 1 : -1);
278 if (min != 0.) {
279 min = DB_TO_LINEAR(fabs(min) * dBRange - dBRange);
280 if (min < 0.0)
281 min = 0.0;
282 min *= sign;
283 }
284 sign = (max >= 0 ? 1 : -1);
285
286 if (max != 0.) {
287 max = DB_TO_LINEAR(fabs(max) * dBRange - dBRange);
288 if (max < 0.0)
289 max = 0.0;
290 max *= sign;
291 }
292 cache.SetDisplayBounds(min, max);
293 }
294
295 vruler->SetDbMirrorValue(0.0);
296 vruler->SetBounds(
297 rect.x, rect.y, rect.x + rect.width, rect.y + rect.height - 1);
298 vruler->SetOrientation(wxVERTICAL);
299 vruler->SetRange(max, min);
300 vruler->SetFormat(&RealFormat::LinearInstance());
301 if (scaleType == WaveformSettings::stLinearAmp) {
302 vruler->SetLabelEdges(false);
303 vruler->SetUnits({});
304 vruler->SetUpdater(&LinearUpdater::Instance());
305 }
306 else {
307 RegenerateLinearDBValues(dBRange, min, max, rect.GetHeight());
308 vruler->SetLabelEdges(true);
309 vruler->SetUnits(XO("dB"));
310 vruler->SetUpdater(&updater);
311 RulerUpdater::Labels major, minor, minorMinor;
312 std::vector<LinearDBValues> values =
314 for (int ii = 0; ii < 3; ii++) {
316 int size = (ii == 0) ? majorValues.size() :
317 (ii == 1) ? minorValues.size() : minorMinorValues.size();
318 for (int i = 0; i < size; i++) {
319 double value = (ii == 0) ? majorValues[i] :
320 (ii == 1) ? minorValues[i] : minorMinorValues[i];
322
323 if (value == -dBRange)
324 lab.value = 0;
325 else {
326 float sign = (value > -dBRange ? 1 : -1);
327 if (value < -dBRange)
328 value = -2 * dBRange - value;
329 lab.value = DB_TO_LINEAR(value) * sign;
330 }
331
332 wxString s = (value == -dBRange) ?
333 wxString(L"-\u221e") : wxString::FromDouble(value);
334 // \u221e represents the infinity symbol
335 // Should this just be -dBRange so it is consistent?
336 //wxString s = wxString::FromDouble(value);
337 lab.text = Verbatim(s);
338
339 labs.push_back(lab);
340 }
341 if (ii == 0)
342 major = labs;
343 else if (ii == 1)
344 minor = labs;
345 else
346 minorMinor = labs;
347 }
348 updater.SetData(major, minor, minorMinor);
349 }
350 }
351 else {
352 vruler->SetUnits(XO("dB"));
353 if (cache.GetLastScaleType() != WaveformSettings::stLogarithmicDb &&
354 // When Logarithmic Amp happens, put that here
355 cache.GetLastScaleType() != -1)
356 {
357 // do a translation into the dB space
358 SetLastScaleType(cache, wc);
359 SetLastdBRange(cache, wc);
360 float sign = (min >= 0 ? 1 : -1);
361 if (min != 0.) {
362 min = (LINEAR_TO_DB(fabs(min)) + dBRange) / dBRange;
363 if (min < 0.0)
364 min = 0.0;
365 min *= sign;
366 }
367 sign = (max >= 0 ? 1 : -1);
368
369 if (max != 0.) {
370 max = (LINEAR_TO_DB(fabs(max)) + dBRange) / dBRange;
371 if (max < 0.0)
372 max = 0.0;
373 max *= sign;
374 }
375 cache.SetDisplayBounds(min, max);
376 }
377 else if (dBRange != lastdBRange) {
378 SetLastdBRange(cache, wc);
379 // Remap the max of the scale
380 float newMax = max;
381
382 // This commented out code is problematic.
383 // min and max may be correct, and this code cause them to change.
384#ifdef ONLY_LABEL_POSITIVE
385 const float sign = (max >= 0 ? 1 : -1);
386 if (max != 0.) {
387
388 // Ugh, duplicating from TrackPanel.cpp
389#define ZOOMLIMIT 0.001f
390
391 const float extreme = LINEAR_TO_DB(2);
392 // recover dB value of max
393 const float dB = std::min(
394 extreme, (float(fabs(max)) * lastdBRange - lastdBRange));
395 // find NEW scale position, but old max may get trimmed if the db limit rises
396 // Don't trim it to zero though, but leave max and limit distinct
397 newMax = sign * std::max(ZOOMLIMIT, (dBRange + dB) / dBRange);
398 // Adjust the min of the scale if we can,
399 // so the db Limit remains where it was on screen, but don't violate extremes
400 if (min != 0.)
401 min = std::max(-extreme, newMax * min / max);
402 }
403#endif
404 cache.SetDisplayBounds(min, newMax);
405 }
406
407 // Old code was if ONLY_LABEL_POSITIVE were defined.
408 // it uses the +1 to 0 range only.
409 // the enabled code uses +1 to -1, and relies on set ticks labelling knowing about
410 // the dB scale.
411#ifdef ONLY_LABEL_POSITIVE
412 if (max > 0) {
413#endif
414 int top = 0;
415 float topval = 0;
416 int bot = rect.height;
417 float botval = -dBRange;
418
419#ifdef ONLY_LABEL_POSITIVE
420 if (min < 0) {
421 bot = top + (int)((max / (max - min))*(bot - top));
422 min = 0;
423 }
424
425 if (max > 1) {
426 top += (int)((max - 1) / (max - min) * (bot - top));
427 max = 1;
428 }
429
430 if (max < 1 && max > 0)
431 topval = -((1 - max) * dBRange);
432
433 if (min > 0) {
434 botval = -((1 - min) * dBRange);
435 }
436#else
437 topval = -((1 - max) * dBRange);
438 botval = -((1 - min) * dBRange);
439 vruler->SetDbMirrorValue( dBRange );
440#endif
441 vruler->SetBounds(rect.x, rect.y + top, rect.x + rect.width, rect.y + bot - 1);
442 vruler->SetOrientation(wxVERTICAL);
443 vruler->SetRange(topval, botval);
444#ifdef ONLY_LABEL_POSITIVE
445 }
446 else
447 vruler->SetBounds(0.0, 0.0, 0.0, 0.0); // A.C.H I couldn't find a way to just disable it?
448#endif
449 vruler->SetFormat(&RealFormat::LogInstance());
450 vruler->SetLabelEdges(true);
451 vruler->SetUpdater(&LinearUpdater::Instance());
452 }
453 auto &size = ChannelView::Get(wc).vrulerSize;
454 vruler->GetMaxSize(&size.first, &size.second);
455}
const wxChar * values
XO("Cut/Copy/Paste")
#define DB_TO_LINEAR(x)
Definition: MemoryX.h:338
TranslatableString Verbatim(wxString str)
Require calls to the one-argument constructor to go through this distinct global function name.
static CustomUpdaterValue updater
static LinearDBValues majorValues
static LinearDBValues minorMinorValues
void RegenerateLinearDBValues(int dBRange, float min, float max, int height)
static LinearDBValues minorValues
static ChannelView & Get(Channel &channel)
std::pair< int, int > vrulerSize
Definition: ChannelView.h:129
void SetData(RulerUpdater::Labels majorLabels, RulerUpdater::Labels minorLabels, RulerUpdater::Labels minorMinorLabels)
Definition: CustomUpdater.h:27
static const LinearUpdater & Instance()
static const RealFormat & LinearInstance()
Definition: RealFormat.cpp:14
static const RealFormat & LogInstance()
Definition: RealFormat.cpp:20
std::vector< Label > Labels
Definition: RulerUpdater.h:74
AUDACITY_DLL_API Ruler & ScratchRuler()
void SetLastScaleType(WaveformScale &cache, const WaveChannel &wc)
An array of these created by the Updater is used to determine what and where text annotations to the ...
Definition: RulerUpdater.h:60
std::optional< TranslatableString > text
Definition: RulerUpdater.h:67

References DB_TO_LINEAR, ChannelView::Get(), WaveformSettings::Get(), WaveformScale::Get(), LinearUpdater::Instance(), LINEAR_TO_DB, RealFormat::LinearInstance(), RealFormat::LogInstance(), majorValues, min(), minorMinorValues, minorValues, RegenerateLinearDBValues(), WaveChannelVRulerControls::ScratchRuler(), CustomUpdater::SetData(), anonymous_namespace{WaveformVRulerControls.cpp}::SetLastdBRange(), anonymous_namespace{WaveformVRulerControls.cpp}::SetLastScaleType(), settings(), size, WaveformSettings::stLinearAmp, WaveformSettings::stLinearDb, WaveformSettings::stLogarithmicDb, RulerUpdater::Label::text, updater, RulerUpdater::Label::value, values, Verbatim(), ChannelView::vrulerSize, and XO().

Referenced by UpdateRuler().

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

◆ Draw()

void WaveformVRulerControls::Draw ( TrackPanelDrawingContext context,
const wxRect &  rect,
unsigned  iPass 
)
overrideprivatevirtual

Reimplemented from TrackPanelDrawable.

Definition at line 230 of file WaveformVRulerControls.cpp.

233{
234 ChannelVRulerControls::Draw(context, rect_, iPass);
235 WaveChannelVRulerControls::DoDraw(*this, context, rect_, iPass);
236}
virtual void Draw(TrackPanelDrawingContext &context, const wxRect &rect, unsigned iPass)
AUDACITY_DLL_API void DoDraw(ChannelVRulerControls &controls, TrackPanelDrawingContext &context, const wxRect &rect, unsigned iPass)

References WaveChannelVRulerControls::DoDraw(), and TrackPanelDrawable::Draw().

Here is the call graph for this function:

◆ FindWaveChannel()

std::shared_ptr< WaveChannel > WaveformVRulerControls::FindWaveChannel ( )

Definition at line 109 of file WaveformVRulerControls.cpp.

110{
111 return FindChannel<WaveChannel>();
112}

Referenced by HandleWheelRotation(), HitTest(), and UpdateRuler().

Here is the caller graph for this function:

◆ HandleWheelRotation()

unsigned WaveformVRulerControls::HandleWheelRotation ( const TrackPanelMouseEvent event,
AudacityProject pProject 
)
overridevirtual

Reimplemented from TrackPanelCell.

Definition at line 114 of file WaveformVRulerControls.cpp.

116{
117 using namespace RefreshCode;
118 const auto pChannel = FindWaveChannel();
119 if (!pChannel)
120 return RefreshNone;
121 return DoHandleWheelRotation(evt, pProject, *pChannel);
122}
std::shared_ptr< WaveChannel > FindWaveChannel()
static unsigned DoHandleWheelRotation(const TrackPanelMouseEvent &event, AudacityProject *pProject, WaveChannel &wc)

References DoHandleWheelRotation(), FindWaveChannel(), and RefreshCode::RefreshNone.

Here is the call graph for this function:

◆ HitTest()

std::vector< UIHandlePtr > WaveformVRulerControls::HitTest ( const TrackPanelMouseState state,
const AudacityProject pProject 
)
overridevirtual

Implements TrackPanelCell.

Definition at line 88 of file WaveformVRulerControls.cpp.

91{
92 std::vector<UIHandlePtr> results;
93
94 if ( st.state.GetX() <= st.rect.GetRight() - kGuard ) {
95 if (const auto pChannel = FindWaveChannel()) {
96 auto result = std::make_shared<WaveformVZoomHandle>(
97 pChannel, st.rect, st.state.m_y );
98 result = AssignUIHandlePtr(mVZoomHandle, result);
99 results.push_back(result);
100 }
101 }
102
103 auto more = ChannelVRulerControls::HitTest(st, pProject);
104 std::copy(more.begin(), more.end(), std::back_inserter(results));
105
106 return results;
107}
const int kGuard
std::shared_ptr< Subclass > AssignUIHandlePtr(std::weak_ptr< Subclass > &holder, const std::shared_ptr< Subclass > &pNew)
Definition: UIHandle.h:164
std::vector< UIHandlePtr > HitTest(const TrackPanelMouseState &state, const AudacityProject *pProject) override
std::weak_ptr< WaveformVZoomHandle > mVZoomHandle
void copy(const T *src, T *dst, int32_t n)
Definition: VectorOps.h:40

References AssignUIHandlePtr(), staffpad::vo::copy(), FindWaveChannel(), ChannelVRulerControls::HitTest(), kGuard, mVZoomHandle, TrackPanelMouseState::rect, and TrackPanelMouseState::state.

Here is the call graph for this function:

◆ operator=()

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

◆ UpdateRuler()

void WaveformVRulerControls::UpdateRuler ( const wxRect &  rect)
overrideprivatevirtual

Implements ChannelVRulerControls.

Definition at line 238 of file WaveformVRulerControls.cpp.

239{
240 const auto pChannel = FindWaveChannel();
241 if (!pChannel)
242 return;
243 DoUpdateVRuler(rect, *pChannel);
244}
static void DoUpdateVRuler(const wxRect &rect, const WaveChannel &wc)

References DoUpdateVRuler(), and FindWaveChannel().

Here is the call graph for this function:

Member Data Documentation

◆ mVZoomHandle

std::weak_ptr<WaveformVZoomHandle> WaveformVRulerControls::mVZoomHandle
private

Definition at line 54 of file WaveformVRulerControls.h.

Referenced by HitTest().


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