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 139 of file WaveformVRulerControls.cpp.

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

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

234{
235 ChannelVRulerControls::Draw(context, rect_, iPass);
236 WaveChannelVRulerControls::DoDraw(*this, context, rect_, iPass);
237}
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 110 of file WaveformVRulerControls.cpp.

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

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 115 of file WaveformVRulerControls.cpp.

117{
118 using namespace RefreshCode;
119 const auto pChannel = FindWaveChannel();
120 if (!pChannel)
121 return RefreshNone;
122 return DoHandleWheelRotation(evt, pProject, *pChannel);
123}
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 89 of file WaveformVRulerControls.cpp.

92{
93 std::vector<UIHandlePtr> results;
94
95 if ( st.state.GetX() <= st.rect.GetRight() - kGuard ) {
96 if (const auto pChannel = FindWaveChannel()) {
97 auto result = std::make_shared<WaveformVZoomHandle>(
98 pChannel, st.rect, st.state.m_y );
99 result = AssignUIHandlePtr(mVZoomHandle, result);
100 results.push_back(result);
101 }
102 }
103
104 auto more = ChannelVRulerControls::HitTest(st, pProject);
105 std::copy(more.begin(), more.end(), std::back_inserter(results));
106
107 return results;
108}
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 239 of file WaveformVRulerControls.cpp.

240{
241 const auto pChannel = FindWaveChannel();
242 if (!pChannel)
243 return;
244 DoUpdateVRuler(rect, *pChannel);
245}
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: