Audacity 3.2.0
Public Member Functions | Public Attributes | Private Member Functions | List of all members
anonymous_namespace{TrackArt.cpp}::BeatsGridlinePainter Struct Referencefinal
Collaboration diagram for anonymous_namespace{TrackArt.cpp}::BeatsGridlinePainter:
[legend]

Public Member Functions

 BeatsGridlinePainter (const ZoomInfo &zoomInfo, const AudacityProject &project) noexcept
 
void DrawSeparators (wxDC &dc, const wxRect &rect, const wxPen &beatSepearatorPen, const wxPen &barSeparatorPen) const
 
void DrawBackground (wxDC &dc, const wxRect &subRect, const wxRect &fullRect, const wxBrush &strongBeatBrush, const wxBrush &weakBeatBrush) const
 

Public Attributes

const ZoomInfozoomInfo
 
const bool enabled
 
const BeatsFormatbeatsRulerFormat
 
const BeatsFormat::Tick majorTick
 
const BeatsFormat::Tick minorTick
 
const double noteDuration
 
const double noteWidth
 
const int64_t notesInBeat
 

Private Member Functions

int64_t CalculateNotesInBeat () const
 
bool IsFirstInMajorTick (int64_t noteIndex) const
 
bool UseAlternatingColors () const
 
double GetPositionInRect (int64_t index, const wxRect &rect, double duration) const
 
std::pair< int64_t, int64_t > GetBoundaries (const wxRect &subRect, const wxRect &fullRect, double width) const
 
BeatsFormat::Tick GetMinorTick () const
 

Detailed Description

Definition at line 489 of file TrackArt.cpp.

Constructor & Destructor Documentation

◆ BeatsGridlinePainter()

anonymous_namespace{TrackArt.cpp}::BeatsGridlinePainter::BeatsGridlinePainter ( const ZoomInfo zoomInfo,
const AudacityProject project 
)
inlinenoexcept

Definition at line 507 of file TrackArt.cpp.

509 : zoomInfo { zoomInfo }
514 , minorTick { GetMinorTick() }
518 {
519 }
const auto project
TimeDisplayModeSetting TimeDisplayModePreference
const Ticks & GetSubdivision() const
Enum ReadEnum() const
Definition: Prefs.h:534
static ProjectTimeRuler & Get(AudacityProject &project)
BeatsFormat & GetBeatsFormat()
double TimeRangeToPixelWidth(double timeRange) const
Definition: ZoomInfo.cpp:60

Member Function Documentation

◆ CalculateNotesInBeat()

int64_t anonymous_namespace{TrackArt.cpp}::BeatsGridlinePainter::CalculateNotesInBeat ( ) const
inlineprivate

Definition at line 584 of file TrackArt.cpp.

585 {
587 return minorTick.lower / 4;
588
589 return 1;
590 }

References BeatsFormat::Tick::lower.

◆ DrawBackground()

void anonymous_namespace{TrackArt.cpp}::BeatsGridlinePainter::DrawBackground ( wxDC &  dc,
const wxRect &  subRect,
const wxRect &  fullRect,
const wxBrush &  strongBeatBrush,
const wxBrush &  weakBeatBrush 
) const
inline

Definition at line 544 of file TrackArt.cpp.

547{
548 if (!UseAlternatingColors ())
549 {
550 dc.SetBrush(strongBeatBrush);
551 dc.DrawRectangle(subRect);
552 return;
553 }
554
555 auto [firstIndex, lastIndex] =
556 GetBoundaries (subRect, fullRect, noteWidth);
557
558 // Make first index to be on notesInBeatBoundary
559 firstIndex = (firstIndex / notesInBeat) * notesInBeat;
560
561 const auto beatDuration = noteDuration;
562
563 const auto top = fullRect.GetTop ();
564 const auto height = fullRect.GetHeight ();
565
566 bool strongBeat = (firstIndex / notesInBeat) % 2 == 0;
567 for (auto index = firstIndex; index < lastIndex; index += notesInBeat, strongBeat = !strongBeat)
568 {
569 const auto left = std::max<int> (
570 GetPositionInRect(index, fullRect, beatDuration),
571 subRect.GetLeft());
572 const auto right = std::min<int> (
573 GetPositionInRect(index + notesInBeat, fullRect, beatDuration),
574 subRect.GetRight());
575
576 const auto& brush = strongBeat ? strongBeatBrush : weakBeatBrush;
577
578 dc.SetBrush (brush);
579 dc.DrawRectangle (left, top, right - left + 1, height);
580 }
581}
std::pair< int64_t, int64_t > GetBoundaries(const wxRect &subRect, const wxRect &fullRect, double width) const
Definition: TrackArt.cpp:613
double GetPositionInRect(int64_t index, const wxRect &rect, double duration) const
Definition: TrackArt.cpp:608

◆ DrawSeparators()

void anonymous_namespace{TrackArt.cpp}::BeatsGridlinePainter::DrawSeparators ( wxDC &  dc,
const wxRect &  rect,
const wxPen &  beatSepearatorPen,
const wxPen &  barSeparatorPen 
) const
inline

Definition at line 521 of file TrackArt.cpp.

523{
524 dc.SetPen (beatSepearatorPen);
525
527 const auto minorTick = GetMinorTick();
528
529 const auto [firstNote, lastNote] = GetBoundaries(
530 rect, rect, noteWidth);
531
532 for (auto noteIndex = firstNote; noteIndex < lastNote; ++noteIndex)
533 {
534 const auto position = GetPositionInRect (noteIndex, rect, noteDuration);
535
536 if (position < rect.GetLeft () || position >= rect.GetRight ())
537 continue;
538
539 dc.SetPen(IsFirstInMajorTick(noteIndex) ? barSeparatorPen : beatSepearatorPen);
540 dc.DrawLine (position, rect.GetTop (), position, rect.GetBottom () + 1);
541 }
542}

References BeatsFormat::GetSubdivision(), and BeatsFormat::Ticks::major.

Here is the call graph for this function:

◆ GetBoundaries()

std::pair< int64_t, int64_t > anonymous_namespace{TrackArt.cpp}::BeatsGridlinePainter::GetBoundaries ( const wxRect &  subRect,
const wxRect &  fullRect,
double  width 
) const
inlineprivate

Definition at line 613 of file TrackArt.cpp.

614 {
615 const auto offset = subRect.x - fullRect.x;
616
617 return { std::floor(zoomInfo.GetAbsoluteOffset(offset) / width),
618 std::ceil(
619 zoomInfo.GetAbsoluteOffset(offset + subRect.GetWidth()) /
620 width) };
621 }
double GetAbsoluteOffset(double offset) const
Definition: ZoomInfo.cpp:77

References ZoomInfo::GetAbsoluteOffset().

Here is the call graph for this function:

◆ GetMinorTick()

BeatsFormat::Tick anonymous_namespace{TrackArt.cpp}::BeatsGridlinePainter::GetMinorTick ( ) const
inlineprivate

Definition at line 623 of file TrackArt.cpp.

624 {
625 const auto& subdivision = beatsRulerFormat.GetSubdivision();
626
627 auto tick = subdivision.minorMinor;
628
629 auto minorMinorLength =
630 zoomInfo.TimeRangeToPixelWidth(subdivision.minorMinor.duration);
631
632 const auto nextSubdivision = subdivision.minor.duration == 0.0 ?
633 subdivision.major :
634 subdivision.minor;
635
636 while (minorMinorLength <= minSubdivisionWidth)
637 {
638 tick.lower /= 2;
639 tick.duration *= 2.0;
640 minorMinorLength *= 2.0;
641
642 if (nextSubdivision.lower >= tick.lower)
643 return nextSubdivision;
644 }
645
646 return tick;
647 }
constexpr double minSubdivisionWidth
Definition: TrackArt.cpp:477

References BeatsFormat::GetSubdivision(), BeatsFormat::Ticks::minorMinor, anonymous_namespace{TrackArt.cpp}::minSubdivisionWidth, and ZoomInfo::TimeRangeToPixelWidth().

Here is the call graph for this function:

◆ GetPositionInRect()

double anonymous_namespace{TrackArt.cpp}::BeatsGridlinePainter::GetPositionInRect ( int64_t  index,
const wxRect &  rect,
double  duration 
) const
inlineprivate

Definition at line 608 of file TrackArt.cpp.

609 {
610 return zoomInfo.TimeToPosition(index * duration) + rect.x + 1;
611 }
int64 TimeToPosition(double time, int64 origin=0, bool ignoreFisheye=false) const
STM: Converts a project time to screen x position.
Definition: ZoomInfo.cpp:44

References ZoomInfo::TimeToPosition().

Here is the call graph for this function:

◆ IsFirstInMajorTick()

bool anonymous_namespace{TrackArt.cpp}::BeatsGridlinePainter::IsFirstInMajorTick ( int64_t  noteIndex) const
inlineprivate

Definition at line 592 of file TrackArt.cpp.

593 {
594 const auto notesInMajorTick =
596
597 if (notesInMajorTick == 0)
598 return false;
599
600 return noteIndex % notesInMajorTick == 0;
601 }

References BeatsFormat::Tick::lower, and BeatsFormat::Tick::upper.

◆ UseAlternatingColors()

bool anonymous_namespace{TrackArt.cpp}::BeatsGridlinePainter::UseAlternatingColors ( ) const
inlineprivate

Definition at line 603 of file TrackArt.cpp.

604 {
605 return minorTick.lower >= 4 && minorTick.upper == 1;
606 }

References BeatsFormat::Tick::lower, and BeatsFormat::Tick::upper.

Member Data Documentation

◆ beatsRulerFormat

const BeatsFormat& anonymous_namespace{TrackArt.cpp}::BeatsGridlinePainter::beatsRulerFormat

Definition at line 494 of file TrackArt.cpp.

◆ enabled

const bool anonymous_namespace{TrackArt.cpp}::BeatsGridlinePainter::enabled

Definition at line 492 of file TrackArt.cpp.

◆ majorTick

const BeatsFormat::Tick anonymous_namespace{TrackArt.cpp}::BeatsGridlinePainter::majorTick

Definition at line 496 of file TrackArt.cpp.

◆ minorTick

const BeatsFormat::Tick anonymous_namespace{TrackArt.cpp}::BeatsGridlinePainter::minorTick

Definition at line 497 of file TrackArt.cpp.

◆ noteDuration

const double anonymous_namespace{TrackArt.cpp}::BeatsGridlinePainter::noteDuration

Definition at line 500 of file TrackArt.cpp.

◆ notesInBeat

const int64_t anonymous_namespace{TrackArt.cpp}::BeatsGridlinePainter::notesInBeat

Definition at line 504 of file TrackArt.cpp.

◆ noteWidth

const double anonymous_namespace{TrackArt.cpp}::BeatsGridlinePainter::noteWidth

Definition at line 502 of file TrackArt.cpp.

◆ zoomInfo

const ZoomInfo& anonymous_namespace{TrackArt.cpp}::BeatsGridlinePainter::zoomInfo

Definition at line 491 of file TrackArt.cpp.


The documentation for this struct was generated from the following file: