1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-05-04 17:49:45 +02:00

Split class TrackArtist from namespace TrackArt...

... The first is just extended drawing context info, and the second has
functions that retrieve TrackArtist from TrackPanelDrawingContext as needed.
This commit is contained in:
Paul Licameli 2018-11-05 08:46:44 -05:00
parent fe35146464
commit 4ebfbd9c50
6 changed files with 114 additions and 66 deletions

View File

@ -360,7 +360,7 @@ void Envelope::DrawPoints
true, dBRange, false); true, dBRange, false);
// This follows the same logic as the envelop drawing in // This follows the same logic as the envelop drawing in
// TrackArtist::DrawEnvelope(). // TrackArt::DrawEnvelope().
// TODO: make this calculation into a reusable function. // TODO: make this calculation into a reusable function.
if (y2 - y < 9) { if (y2 - y < 9) {
int value = (int)((zoomMax / (zoomMax - zoomMin)) * r.height); int value = (int)((zoomMax / (zoomMax - zoomMin)) * r.height);

View File

@ -796,7 +796,7 @@ void LabelTrack::Draw
if (mFontHeight == -1) if (mFontHeight == -1)
calculateFontHeight(dc); calculateFontHeight(dc);
TrackArtist::DrawBackgroundWithSelection( context, r, this, TrackArt::DrawBackgroundWithSelection( context, r, this,
AColor::labelSelectedBrush, AColor::labelUnselectedBrush, AColor::labelSelectedBrush, AColor::labelUnselectedBrush,
( GetSelected() || IsSyncLockSelected() ) ); ( GetSelected() || IsSyncLockSelected() ) );

View File

@ -104,7 +104,7 @@ bool AudacityPrintout::OnPrintPage(int WXUNUSED(page))
TrackPanelDrawingContext context{ TrackPanelDrawingContext context{
*dc, {}, {}, &artist *dc, {}, {}, &artist
}; };
artist.DrawTrack( context, n, r ); TrackArt::DrawTrack( context, n, r );
dc->SetPen(*wxBLACK_PEN); dc->SetPen(*wxBLACK_PEN);
AColor::Line(*dc, 0, r.y, width, r.y); AColor::Line(*dc, 0, r.y, width, r.y);

View File

@ -153,7 +153,7 @@ const int notePos[12] = { 1, 6, 11, 16, 21, 27,
// IPITCH_TO_Y above, which computes coordinates relative to GetBottom() // IPITCH_TO_Y above, which computes coordinates relative to GetBottom()
// Note the -NOTE_MARGIN, which leaves a little margin to draw notes that // Note the -NOTE_MARGIN, which leaves a little margin to draw notes that
// are out of bounds. I'm not sure why the -2 is necessary. // are out of bounds. I'm not sure why the -2 is necessary.
int TrackArtist::GetBottom(NoteTrack *t, const wxRect &rect) int TrackArt::GetBottom(NoteTrack *t, const wxRect &rect)
{ {
int bottomNote = t->GetBottomNote(); int bottomNote = t->GetBottomNote();
int bottom = rect.y + rect.height - 2 - t->GetNoteMargin() + int bottom = rect.y + rect.height - 2 - t->GetNoteMargin() +
@ -233,17 +233,18 @@ void TrackArtist::SetColours( int iColorIndex)
} }
} }
void TrackArtist::DrawTracks(TrackPanelDrawingContext &context, void TrackArt::DrawTracks(TrackPanelDrawingContext &context,
const TrackList * tracks, const TrackList * tracks,
const wxRegion & reg, const wxRegion & reg,
const wxRect & clip) const wxRect & clip)
{ {
// Fix the horizontal extent; will later change only the vertical extent. // Fix the horizontal extent; will later change only the vertical extent.
const auto artist = TrackArtist::Get( context );
const auto leftOffset = artist->leftOffset;
wxRect teamRect{ wxRect teamRect{
clip.x + leftOffset, 0, clip.width - (leftOffset + kRightMargin), 0 clip.x + leftOffset, 0, clip.width - (leftOffset + kRightMargin), 0
}; };
const auto artist = TrackArtist::Get( context );
const auto &zoomInfo = *artist->pZoomInfo; const auto &zoomInfo = *artist->pZoomInfo;
for(auto leader : tracks->Leaders()) { for(auto leader : tracks->Leaders()) {
@ -284,7 +285,7 @@ void TrackArtist::DrawTracks(TrackPanelDrawingContext &context,
} }
} }
void TrackArtist::DrawTrack(TrackPanelDrawingContext &context, void TrackArt::DrawTrack(TrackPanelDrawingContext &context,
const Track * t, const Track * t,
const wxRect & rect) const wxRect & rect)
{ {
@ -296,6 +297,8 @@ void TrackArtist::DrawTrack(TrackPanelDrawingContext &context,
clip->ClearDisplayRect(); clip->ClearDisplayRect();
} }
const auto artist = TrackArtist::Get( context );
const auto hasSolo = artist->hasSolo;
bool muted = (hasSolo || wt->GetMute()) && bool muted = (hasSolo || wt->GetMute()) &&
!wt->GetSolo(); !wt->GetSolo();
@ -319,7 +322,9 @@ void TrackArtist::DrawTrack(TrackPanelDrawingContext &context,
dc.GetGraphicsContext()->SetAntialiasMode(aamode); dc.GetGraphicsContext()->SetAntialiasMode(aamode);
#endif #endif
if (mbShowTrackNameInWaveform && const auto bShowTrackNameInWaveform =
artist->mbShowTrackNameInWaveform;
if (bShowTrackNameInWaveform &&
wt->IsLeader() && wt->IsLeader() &&
// Exclude empty name. // Exclude empty name.
!wt->GetName().IsEmpty()) { !wt->GetName().IsEmpty()) {
@ -339,6 +344,8 @@ void TrackArtist::DrawTrack(TrackPanelDrawingContext &context,
[&](const NoteTrack *nt) { [&](const NoteTrack *nt) {
bool muted = false; bool muted = false;
#ifdef EXPERIMENTAL_MIDI_OUT #ifdef EXPERIMENTAL_MIDI_OUT
const auto artist = TrackArtist::Get( context );
const auto hasSolo = artist->hasSolo;
muted = (hasSolo || nt->GetMute()) && !nt->GetSolo(); muted = (hasSolo || nt->GetMute()) && !nt->GetSolo();
#endif #endif
DrawNoteTrack( context, nt, rect, muted ); DrawNoteTrack( context, nt, rect, muted );
@ -353,7 +360,7 @@ void TrackArtist::DrawTrack(TrackPanelDrawingContext &context,
); );
} }
void TrackArtist::DrawVRuler void TrackArt::DrawVRuler
( TrackPanelDrawingContext &context, const Track *t, const wxRect & rect_, ( TrackPanelDrawingContext &context, const Track *t, const wxRect & rect_,
bool bSelected ) bool bSelected )
{ {
@ -403,8 +410,10 @@ void TrackArtist::DrawVRuler
rr.width -= adj; rr.width -= adj;
} }
UpdateVRuler(t, rr); const auto artist = TrackArtist::Get( context );
artist->UpdateVRuler(t, rr);
const auto &vruler = artist->vruler;
vruler->SetTickColour( theTheme.Colour( clrTrackPanelText )); vruler->SetTickColour( theTheme.Colour( clrTrackPanelText ));
vruler->Draw(*dc); vruler->Draw(*dc);
}, },
@ -426,8 +435,10 @@ void TrackArtist::DrawVRuler
rr.width -= adj; rr.width -= adj;
} }
UpdateVRuler(t, rr); const auto artist = TrackArtist::Get( context );
artist->UpdateVRuler(t, rr);
const auto &vruler = artist->vruler;
vruler->SetTickColour( theTheme.Colour( clrTrackPanelText )); vruler->SetTickColour( theTheme.Colour( clrTrackPanelText ));
vruler->Draw(*dc); vruler->Draw(*dc);
} }
@ -436,7 +447,8 @@ void TrackArtist::DrawVRuler
, ,
[&](const NoteTrack *track) { [&](const NoteTrack *track) {
// The note track draws a vertical keyboard to label pitches // The note track draws a vertical keyboard to label pitches
UpdateVRuler(t, rect); const auto artist = TrackArtist::Get( context );
artist->UpdateVRuler(t, rect);
dc->SetPen(highlight ? AColor::uglyPen : *wxTRANSPARENT_PEN); dc->SetPen(highlight ? AColor::uglyPen : *wxTRANSPARENT_PEN);
dc->SetBrush(*wxWHITE_BRUSH); dc->SetBrush(*wxWHITE_BRUSH);
@ -884,7 +896,7 @@ float ValueOfPixel(int yy, int height, bool offset,
return v; return v;
} }
void TrackArtist::DrawNegativeOffsetTrackArrows( void TrackArt::DrawNegativeOffsetTrackArrows(
TrackPanelDrawingContext &context, const wxRect &rect ) TrackPanelDrawingContext &context, const wxRect &rect )
{ {
auto &dc = context.dc; auto &dc = context.dc;
@ -914,7 +926,7 @@ void TrackArtist::DrawNegativeOffsetTrackArrows(
rect.x + 6, rect.y + rect.height - 12); rect.x + 6, rect.y + rect.height - 12);
} }
void TrackArtist::DrawWaveformBackground(TrackPanelDrawingContext &context, void TrackArt::DrawWaveformBackground(TrackPanelDrawingContext &context,
int leftOffset, const wxRect &rect, int leftOffset, const wxRect &rect,
const double env[], const double env[],
float zoomMin, float zoomMax, float zoomMin, float zoomMax,
@ -947,6 +959,10 @@ void TrackArtist::DrawWaveformBackground(TrackPanelDrawingContext &context,
int xx, lx = 0; int xx, lx = 0;
int l, w; int l, w;
const auto &blankBrush = artist->blankBrush;
const auto &selectedBrush = artist->selectedBrush;
const auto &unselectedBrush = artist->unselectedBrush;
dc.SetPen(*wxTRANSPARENT_PEN); dc.SetPen(*wxTRANSPARENT_PEN);
dc.SetBrush(blankBrush); dc.SetBrush(blankBrush);
dc.DrawRectangle(rect); dc.DrawRectangle(rect);
@ -972,6 +988,7 @@ void TrackArtist::DrawWaveformBackground(TrackPanelDrawingContext &context,
mintop +=1; mintop +=1;
minbot +=1; minbot +=1;
const auto drawEnvelope = artist->drawEnvelope;
if (!drawEnvelope || maxbot > mintop) { if (!drawEnvelope || maxbot > mintop) {
maxbot = halfHeight; maxbot = halfHeight;
mintop = halfHeight; mintop = halfHeight;
@ -1047,7 +1064,7 @@ void TrackArtist::DrawWaveformBackground(TrackPanelDrawingContext &context,
} }
void TrackArtist::DrawMinMaxRMS( void TrackArt::DrawMinMaxRMS(
TrackPanelDrawingContext &context, const wxRect & rect, const double env[], TrackPanelDrawingContext &context, const wxRect & rect, const double env[],
float zoomMin, float zoomMax, float zoomMin, float zoomMax,
bool dB, float dBRange, bool dB, float dBRange,
@ -1067,7 +1084,9 @@ void TrackArtist::DrawMinMaxRMS(
ArrayOf<int> clipped; ArrayOf<int> clipped;
int clipcnt = 0; int clipcnt = 0;
if (mShowClipping) { const auto artist = TrackArtist::Get( context );
const auto bShowClipping = artist->mShowClipping;
if (bShowClipping) {
clipped.reinit( size_t(rect.width) ); clipped.reinit( size_t(rect.width) );
} }
@ -1077,12 +1096,15 @@ void TrackArtist::DrawMinMaxRMS(
bool drawStripes = true; bool drawStripes = true;
bool drawWaveform = true; bool drawWaveform = true;
const auto &muteSamplePen = artist->muteSamplePen;
const auto &samplePen = artist->samplePen;
dc.SetPen(muted ? muteSamplePen : samplePen); dc.SetPen(muted ? muteSamplePen : samplePen);
for (int x0 = 0; x0 < rect.width; ++x0) { for (int x0 = 0; x0 < rect.width; ++x0) {
int xx = rect.x + x0; int xx = rect.x + x0;
double v; double v;
v = min[x0] * env[x0]; v = min[x0] * env[x0];
if (clipped && mShowClipping && (v <= -MAX_AUDIO)) if (clipped && bShowClipping && (v <= -MAX_AUDIO))
{ {
if (clipcnt == 0 || clipped[clipcnt - 1] != xx) { if (clipcnt == 0 || clipped[clipcnt - 1] != xx) {
clipped[clipcnt++] = xx; clipped[clipcnt++] = xx;
@ -1092,7 +1114,7 @@ void TrackArtist::DrawMinMaxRMS(
rect.height, dB, true, dBRange, true); rect.height, dB, true, dBRange, true);
v = max[x0] * env[x0]; v = max[x0] * env[x0];
if (clipped && mShowClipping && (v >= MAX_AUDIO)) if (clipped && bShowClipping && (v >= MAX_AUDIO))
{ {
if (clipcnt == 0 || clipped[clipcnt - 1] != xx) { if (clipcnt == 0 || clipped[clipcnt - 1] != xx) {
clipped[clipcnt++] = xx; clipped[clipcnt++] = xx;
@ -1165,6 +1187,9 @@ void TrackArtist::DrawMinMaxRMS(
} }
// Stroke rms over the min-max // Stroke rms over the min-max
const auto &muteRmsPen = artist->muteRmsPen;
const auto &rmsPen = artist->rmsPen;
dc.SetPen(muted ? muteRmsPen : rmsPen); dc.SetPen(muted ? muteRmsPen : rmsPen);
for (int x0 = 0; x0 < rect.width; ++x0) { for (int x0 = 0; x0 < rect.width; ++x0) {
int xx = rect.x + x0; int xx = rect.x + x0;
@ -1177,6 +1202,9 @@ void TrackArtist::DrawMinMaxRMS(
// Draw the clipping lines // Draw the clipping lines
if (clipcnt) { if (clipcnt) {
const auto &muteClippedPen = artist->muteClippedPen;
const auto &clippedPen = artist->clippedPen;
dc.SetPen(muted ? muteClippedPen : clippedPen); dc.SetPen(muted ? muteClippedPen : clippedPen);
while (--clipcnt >= 0) { while (--clipcnt >= 0) {
int xx = clipped[clipcnt]; int xx = clipped[clipcnt];
@ -1185,7 +1213,7 @@ void TrackArtist::DrawMinMaxRMS(
} }
} }
void TrackArtist::DrawIndividualSamples(TrackPanelDrawingContext &context, void TrackArt::DrawIndividualSamples(TrackPanelDrawingContext &context,
int leftOffset, const wxRect &rect, int leftOffset, const wxRect &rect,
float zoomMin, float zoomMax, float zoomMin, float zoomMax,
bool dB, float dBRange, bool dB, float dBRange,
@ -1225,9 +1253,12 @@ void TrackArtist::DrawIndividualSamples(TrackPanelDrawingContext &context,
ArrayOf<int> clipped; ArrayOf<int> clipped;
int clipcnt = 0; int clipcnt = 0;
if (mShowClipping) const auto bShowClipping = artist->mShowClipping;
if (bShowClipping)
clipped.reinit( size_t(slen) ); clipped.reinit( size_t(slen) );
const auto &muteSamplePen = artist->muteSamplePen;
const auto &samplePen = artist->samplePen;
auto &pen = highlight ? AColor::uglyPen : muted ? muteSamplePen : samplePen; auto &pen = highlight ? AColor::uglyPen : muted ? muteSamplePen : samplePen;
dc.SetPen( pen ); dc.SetPen( pen );
@ -1243,7 +1274,7 @@ void TrackArtist::DrawIndividualSamples(TrackPanelDrawingContext &context,
clip->GetEnvelope()->GetValue( time, 1.0 / clip->GetRate() ); clip->GetEnvelope()->GetValue( time, 1.0 / clip->GetRate() );
const double tt = buffer[s] * value; const double tt = buffer[s] * value;
if (clipped && mShowClipping && ((tt <= -MAX_AUDIO) || (tt >= MAX_AUDIO))) if (clipped && bShowClipping && ((tt <= -MAX_AUDIO) || (tt >= MAX_AUDIO)))
clipped[clipcnt++] = xx; clipped[clipcnt++] = xx;
ypos[s] = ypos[s] =
std::max(-1, std::max(-1,
@ -1255,11 +1286,14 @@ void TrackArtist::DrawIndividualSamples(TrackPanelDrawingContext &context,
if (showPoints) { if (showPoints) {
// Draw points where spacing is enough // Draw points where spacing is enough
const auto bigPoints = artist->bigPoints;
const int tickSize = bigPoints ? 4 : 3;// Bigger ellipses when draggable. const int tickSize = bigPoints ? 4 : 3;// Bigger ellipses when draggable.
wxRect pr; wxRect pr;
pr.width = tickSize; pr.width = tickSize;
pr.height = tickSize; pr.height = tickSize;
//different colour when draggable. //different colour when draggable.
const auto &dragsampleBrush = artist->dragsampleBrush;
const auto &sampleBrush = artist->sampleBrush;
auto &brush = highlight auto &brush = highlight
? AColor::uglyBrush ? AColor::uglyBrush
: bigPoints ? dragsampleBrush : sampleBrush; : bigPoints ? dragsampleBrush : sampleBrush;
@ -1273,7 +1307,8 @@ void TrackArtist::DrawIndividualSamples(TrackPanelDrawingContext &context,
} }
} }
if (showPoints && (mSampleDisplay == (int) WaveTrack::StemPlot)) { const auto sampleDisplay = artist->mSampleDisplay;
if (showPoints && (sampleDisplay == (int) WaveTrack::StemPlot)) {
// Draw vertical lines // Draw vertical lines
int yZero = GetWaveYPos(0.0, zoomMin, zoomMax, rect.height, dB, true, dBRange, false); int yZero = GetWaveYPos(0.0, zoomMin, zoomMax, rect.height, dB, true, dBRange, false);
yZero = rect.y + std::max(-1, std::min(rect.height, yZero)); yZero = rect.y + std::max(-1, std::min(rect.height, yZero));
@ -1294,6 +1329,8 @@ void TrackArtist::DrawIndividualSamples(TrackPanelDrawingContext &context,
// Draw clipping // Draw clipping
if (clipcnt) { if (clipcnt) {
const auto &muteClippedPen = artist->muteClippedPen;
const auto &clippedPen = artist->clippedPen;
dc.SetPen(muted ? muteClippedPen : clippedPen); dc.SetPen(muted ? muteClippedPen : clippedPen);
while (--clipcnt >= 0) { while (--clipcnt >= 0) {
auto s = clipped[clipcnt]; auto s = clipped[clipcnt];
@ -1302,7 +1339,7 @@ void TrackArtist::DrawIndividualSamples(TrackPanelDrawingContext &context,
} }
} }
void TrackArtist::DrawEnvelope(TrackPanelDrawingContext &context, void TrackArt::DrawEnvelope(TrackPanelDrawingContext &context,
const wxRect &rect, const double env[], const wxRect &rect, const double env[],
float zoomMin, float zoomMax, float zoomMin, float zoomMax,
bool dB, float dBRange, bool highlight) bool dB, float dBRange, bool highlight)
@ -1339,7 +1376,7 @@ void TrackArtist::DrawEnvelope(TrackPanelDrawingContext &context,
} }
} }
void TrackArtist::DrawEnvLine( void TrackArt::DrawEnvLine(
TrackPanelDrawingContext &context, TrackPanelDrawingContext &context,
const wxRect &rect, int x0, int y0, int cy, bool top ) const wxRect &rect, int x0, int y0, int cy, bool top )
{ {
@ -1370,7 +1407,7 @@ void TrackArtist::DrawEnvLine(
#include "tracks/ui/TimeShiftHandle.h" #include "tracks/ui/TimeShiftHandle.h"
#include "tracks/playabletrack/wavetrack/ui/CutlineHandle.h" #include "tracks/playabletrack/wavetrack/ui/CutlineHandle.h"
void TrackArtist::DrawWaveform(TrackPanelDrawingContext &context, void TrackArt::DrawWaveform(TrackPanelDrawingContext &context,
const WaveTrack *track, const WaveTrack *track,
const wxRect & rect, const wxRect & rect,
bool muted) bool muted)
@ -1388,6 +1425,8 @@ void TrackArtist::DrawWaveform(TrackPanelDrawingContext &context,
const bool dB = !track->GetWaveformSettings().isLinear(); const bool dB = !track->GetWaveformSettings().isLinear();
const auto &blankSelectedBrush = artist->blankSelectedBrush;
const auto &blankBrush = artist->blankBrush;
DrawBackgroundWithSelection( DrawBackgroundWithSelection(
context, rect, track, blankSelectedBrush, blankBrush ); context, rect, track, blankSelectedBrush, blankBrush );
@ -1431,6 +1470,7 @@ void TrackArtist::DrawWaveform(TrackPanelDrawingContext &context,
} }
} }
const auto drawSliders = artist->drawSliders;
if (drawSliders) { if (drawSliders) {
DrawTimeSlider( context, rect, true, highlight && gripHit ); // directed right DrawTimeSlider( context, rect, true, highlight && gripHit ); // directed right
DrawTimeSlider( context, rect, false, highlight && gripHit ); // directed left DrawTimeSlider( context, rect, false, highlight && gripHit ); // directed left
@ -1654,7 +1694,7 @@ void FindWavePortions
#include "tracks/playabletrack/wavetrack/ui/SampleHandle.h" #include "tracks/playabletrack/wavetrack/ui/SampleHandle.h"
#include "tracks/ui/EnvelopeHandle.h" #include "tracks/ui/EnvelopeHandle.h"
void TrackArtist::DrawClipWaveform(TrackPanelDrawingContext &context, void TrackArt::DrawClipWaveform(TrackPanelDrawingContext &context,
const WaveTrack *track, const WaveTrack *track,
const WaveClip *clip, const WaveClip *clip,
const wxRect & rect, const wxRect & rect,
@ -1700,7 +1740,7 @@ void TrackArtist::DrawClipWaveform(TrackPanelDrawingContext &context,
dc.SetPen(*wxTRANSPARENT_PEN); dc.SetPen(*wxTRANSPARENT_PEN);
int iColorIndex = clip->GetColourIndex(); int iColorIndex = clip->GetColourIndex();
SetColours( iColorIndex ); artist->SetColours( iColorIndex );
// If we get to this point, the clip is actually visible on the // If we get to this point, the clip is actually visible on the
// screen, so remember the display rectangle. // screen, so remember the display rectangle.
@ -1884,6 +1924,7 @@ void TrackArtist::DrawClipWaveform(TrackPanelDrawingContext &context,
leftOffset += rectPortion.width + skippedRight; leftOffset += rectPortion.width + skippedRight;
} }
const auto drawEnvelope = artist->drawEnvelope;
if (drawEnvelope) { if (drawEnvelope) {
DrawEnvelope( DrawEnvelope(
context, mid, env, zoomMin, zoomMax, dB, dBRange, highlightEnvelope ); context, mid, env, zoomMin, zoomMax, dB, dBRange, highlightEnvelope );
@ -1912,7 +1953,7 @@ void TrackArtist::DrawClipWaveform(TrackPanelDrawingContext &context,
} }
void TrackArtist::DrawTimeSlider( TrackPanelDrawingContext &context, void TrackArt::DrawTimeSlider( TrackPanelDrawingContext &context,
const wxRect & rect, const wxRect & rect,
bool rightwards, bool highlight ) bool rightwards, bool highlight )
{ {
@ -1970,10 +2011,13 @@ void TrackArtist::DrawTimeSlider( TrackPanelDrawingContext &context,
} }
} }
void TrackArtist::DrawSpectrum( TrackPanelDrawingContext &context, void TrackArt::DrawSpectrum( TrackPanelDrawingContext &context,
const WaveTrack *track, const WaveTrack *track,
const wxRect & rect ) const wxRect & rect )
{ {
const auto artist = TrackArtist::Get( context );
const auto &blankSelectedBrush = artist->blankSelectedBrush;
const auto &blankBrush = artist->blankBrush;
DrawBackgroundWithSelection( DrawBackgroundWithSelection(
context, rect, track, blankSelectedBrush, blankBrush ); context, rect, track, blankSelectedBrush, blankBrush );
@ -2063,7 +2107,7 @@ AColor::ColorGradientChoice ChooseColorSet( float bin0, float bin1, float selBin
} }
void TrackArtist::DrawClipSpectrum(TrackPanelDrawingContext &context, void TrackArt::DrawClipSpectrum(TrackPanelDrawingContext &context,
WaveTrackCache &waveTrackCache, WaveTrackCache &waveTrackCache,
const WaveClip *clip, const WaveClip *clip,
const wxRect & rect) const wxRect & rect)
@ -2685,7 +2729,7 @@ int PitchToY(double p, int bottom)
sel is equal to rect, and the entire region is drawn with unselected sel is equal to rect, and the entire region is drawn with unselected
background colors. background colors.
*/ */
void TrackArtist::DrawNoteBackground(TrackPanelDrawingContext &context, void TrackArt::DrawNoteBackground(TrackPanelDrawingContext &context,
const NoteTrack *track, const NoteTrack *track,
const wxRect &rect, const wxRect &sel, const wxRect &rect, const wxRect &sel,
const wxBrush &wb, const wxPen &wp, const wxBrush &wb, const wxPen &wp,
@ -2785,7 +2829,7 @@ graphics. Since there may be notes outside of the display region,
reserve a half-note-height margin at the top and bottom of the reserve a half-note-height margin at the top and bottom of the
window and draw out-of-bounds notes here instead. window and draw out-of-bounds notes here instead.
*/ */
void TrackArtist::DrawNoteTrack(TrackPanelDrawingContext &context, void TrackArt::DrawNoteTrack(TrackPanelDrawingContext &context,
const NoteTrack *track, const NoteTrack *track,
const wxRect & rect, const wxRect & rect,
bool muted) bool muted)
@ -2836,6 +2880,8 @@ void TrackArtist::DrawNoteTrack(TrackPanelDrawingContext &context,
wxPen barLinePen; wxPen barLinePen;
barLinePen.SetColour(theTheme.Colour( clrMidiLines)); barLinePen.SetColour(theTheme.Colour( clrMidiLines));
const auto &blankBrush = artist->blankBrush;
const auto &blankPen = artist->blankPen;
DrawNoteBackground(context, track, rect, rect, blankBrush, blankPen, DrawNoteBackground(context, track, rect, rect, blankBrush, blankPen,
blackStripeBrush, blackStripePen, barLinePen); blackStripeBrush, blackStripePen, barLinePen);
@ -3148,7 +3194,7 @@ void TrackArtist::DrawNoteTrack(TrackPanelDrawingContext &context,
#endif // USE_MIDI #endif // USE_MIDI
void TrackArtist::DrawTimeTrack(TrackPanelDrawingContext &context, void TrackArt::DrawTimeTrack(TrackPanelDrawingContext &context,
const TimeTrack *track, const TimeTrack *track,
const wxRect & rect) const wxRect & rect)
{ {
@ -3156,14 +3202,16 @@ void TrackArtist::DrawTimeTrack(TrackPanelDrawingContext &context,
wxRect envRect = rect; wxRect envRect = rect;
envRect.height -= 2; envRect.height -= 2;
double lower = track->GetRangeLower(), upper = track->GetRangeUpper(); double lower = track->GetRangeLower(), upper = track->GetRangeUpper();
const auto artist = TrackArtist::Get( context );
const auto dbRange = artist->mdBrange;
if(track->GetDisplayLog()) { if(track->GetDisplayLog()) {
// MB: silly way to undo the work of GetWaveYPos while still getting a logarithmic scale // MB: silly way to undo the work of GetWaveYPos while still getting a logarithmic scale
lower = LINEAR_TO_DB(std::max(1.0e-7, lower)) / mdBrange + 1.0; lower = LINEAR_TO_DB(std::max(1.0e-7, lower)) / dbRange + 1.0;
upper = LINEAR_TO_DB(std::max(1.0e-7, upper)) / mdBrange + 1.0; upper = LINEAR_TO_DB(std::max(1.0e-7, upper)) / dbRange + 1.0;
} }
track->GetEnvelope()->DrawPoints track->GetEnvelope()->DrawPoints
( context, envRect, ( context, envRect,
track->GetDisplayLog(), mdBrange, lower, upper, false ); track->GetDisplayLog(), dbRange, lower, upper, false );
} }
void TrackArtist::UpdatePrefs() void TrackArtist::UpdatePrefs()
@ -3191,7 +3239,7 @@ void TrackArtist::UpdatePrefs()
// 5x5 box. // 5x5 box.
// //
// There may be a better way to do this, or a more appealing pattern. // There may be a better way to do this, or a more appealing pattern.
void TrackArtist::DrawSyncLockTiles( void TrackArt::DrawSyncLockTiles(
TrackPanelDrawingContext &context, const wxRect &rect ) TrackPanelDrawingContext &context, const wxRect &rect )
{ {
const auto dc = &context.dc; const auto dc = &context.dc;
@ -3301,7 +3349,7 @@ void TrackArtist::DrawSyncLockTiles(
} }
} }
void TrackArtist::DrawBackgroundWithSelection( void TrackArt::DrawBackgroundWithSelection(
TrackPanelDrawingContext &context, const wxRect &rect, TrackPanelDrawingContext &context, const wxRect &rect,
const Track *track, const wxBrush &selBrush, const wxBrush &unselBrush, const Track *track, const wxBrush &selBrush, const wxBrush &unselBrush,
bool useSelection) bool useSelection)

View File

@ -46,14 +46,7 @@ struct TrackPanelDrawingContext;
typedef unsigned char uchar; typedef unsigned char uchar;
#endif #endif
class AUDACITY_DLL_API TrackArtist { namespace TrackArt {
public:
TrackArtist();
~TrackArtist();
static TrackArtist *Get( TrackPanelDrawingContext & );
void SetColours(int iColorIndex);
void DrawTracks(TrackPanelDrawingContext &context, void DrawTracks(TrackPanelDrawingContext &context,
const TrackList *tracks, const TrackList *tracks,
const wxRegion & reg, const wxRegion & reg,
@ -66,30 +59,16 @@ class AUDACITY_DLL_API TrackArtist {
void DrawVRuler(TrackPanelDrawingContext &context, void DrawVRuler(TrackPanelDrawingContext &context,
const Track *t, const wxRect & rect, bool bSelected ); const Track *t, const wxRect & rect, bool bSelected );
void UpdateVRuler(const Track *t, const wxRect & rect);
void UpdatePrefs();
void SetBackgroundBrushes(wxBrush unselectedBrushIn, wxBrush selectedBrushIn,
wxPen unselectedPenIn, wxPen selectedPenIn) {
this->unselectedBrush = unselectedBrushIn;
this->selectedBrush = selectedBrushIn;
this->unselectedPen = unselectedPenIn;
this->selectedPen = selectedPenIn;
}
// Helper: draws the "sync-locked" watermark tiled to a rectangle // Helper: draws the "sync-locked" watermark tiled to a rectangle
static void DrawSyncLockTiles( void DrawSyncLockTiles(
TrackPanelDrawingContext &context, const wxRect &rect ); TrackPanelDrawingContext &context, const wxRect &rect );
// Helper: draws background with selection rect // Helper: draws background with selection rect
static void DrawBackgroundWithSelection(TrackPanelDrawingContext &contex, void DrawBackgroundWithSelection(TrackPanelDrawingContext &contex,
const wxRect &rect, const Track *track, const wxRect &rect, const Track *track,
const wxBrush &selBrush, const wxBrush &unselBrush, const wxBrush &selBrush, const wxBrush &unselBrush,
bool useSelection = true); bool useSelection = true);
private:
// //
// Lower-level drawing functions // Lower-level drawing functions
// //
@ -167,6 +146,28 @@ class AUDACITY_DLL_API TrackArtist {
bool dB, float dBRange, bool highlight); bool dB, float dBRange, bool highlight);
void DrawEnvLine(TrackPanelDrawingContext &context, void DrawEnvLine(TrackPanelDrawingContext &context,
const wxRect & rect, int x0, int y0, int cy, bool top); const wxRect & rect, int x0, int y0, int cy, bool top);
}
class AUDACITY_DLL_API TrackArtist {
public:
TrackArtist();
~TrackArtist();
static TrackArtist *Get( TrackPanelDrawingContext & );
void SetBackgroundBrushes(wxBrush unselectedBrushIn, wxBrush selectedBrushIn,
wxPen unselectedPenIn, wxPen selectedPenIn) {
this->unselectedBrush = unselectedBrushIn;
this->selectedBrush = selectedBrushIn;
this->unselectedPen = unselectedPenIn;
this->selectedPen = selectedPenIn;
}
void SetColours(int iColorIndex);
void UpdatePrefs();
void UpdateVRuler(const Track *t, const wxRect & rect);
// Preference values // Preference values
float mdBrange; // "/GUI/EnvdBRange" float mdBrange; // "/GUI/EnvdBRange"
@ -210,7 +211,6 @@ class AUDACITY_DLL_API TrackArtist {
bool findNotesQuantizeOld; bool findNotesQuantizeOld;
#endif #endif
public:
SelectedRegion *pSelectedRegion{}; SelectedRegion *pSelectedRegion{};
ZoomInfo *pZoomInfo{}; ZoomInfo *pZoomInfo{};

View File

@ -1080,7 +1080,7 @@ void TrackPanel::DrawTracks(wxDC * dc)
mTrackArtist->bigPoints = bigPointsFlag; mTrackArtist->bigPoints = bigPointsFlag;
mTrackArtist->drawSliders = sliderFlag; mTrackArtist->drawSliders = sliderFlag;
mTrackArtist->hasSolo = hasSolo; mTrackArtist->hasSolo = hasSolo;
mTrackArtist->DrawTracks( context, GetTracks(), region, clip ); TrackArt::DrawTracks( context, GetTracks(), region, clip );
// Draw the rest, including the click-to-deselect blank area below all // Draw the rest, including the click-to-deselect blank area below all
// tracks // tracks
@ -1154,7 +1154,7 @@ void TrackPanel::DrawEverythingElse(TrackPanelDrawingContext &context,
GetVRulerWidth() + 1, GetVRulerWidth() + 1,
trackRect.height - kSeparatorThickness trackRect.height - kSeparatorThickness
}; };
mTrackArtist->DrawVRuler(context, channel, rect, bSelected); TrackArt::DrawVRuler(context, channel, rect, bSelected);
} }
} }
} }
@ -1650,7 +1650,7 @@ void TrackPanel::DrawOutside
// wxRect tileFill = rect; // wxRect tileFill = rect;
// tileFill.x = GetVRulerOffset(); // tileFill.x = GetVRulerOffset();
// tileFill.width = GetVRulerWidth(); // tileFill.width = GetVRulerWidth();
// TrackArtist::DrawSyncLockTiles(dc, tileFill); // TrackArt::DrawSyncLockTiles(dc, tileFill);
//} //}
DrawBordersAroundTrack( dc, rect ); DrawBordersAroundTrack( dc, rect );