mirror of
https://github.com/cookiengineer/audacity
synced 2025-07-05 06:59:07 +02:00
Draw a (slightly lighter) selection outside of clips in audio tracks.
This commit is contained in:
parent
c0b5fb01da
commit
50d2a5b665
@ -333,4 +333,6 @@ from there. Audacity will look for a file called "Pause.png".
|
||||
DEFINE_COLOUR( clrSyncLockSel, wxColour(192, 192, 192), wxT("SyncLockSel"));
|
||||
DEFINE_COLOUR( clrTrackInfoSyncLockSel, wxColour( 64, 64, 64), wxT("TrackInfoSyncLockSel"));
|
||||
DEFINE_COLOUR( clrSelTranslucent, wxColour(104, 104, 148, 127), wxT("SelTranslucent"));
|
||||
// This is for waveform drawing, selected outside of clips
|
||||
DEFINE_COLOUR( clrBlankSelected, wxColour(170, 170, 192), wxT("BlankSelected"));
|
||||
|
||||
|
@ -113,6 +113,7 @@ void TrackArtist::SetColours()
|
||||
theTheme.SetBrushColour( sampleBrush, clrSample);
|
||||
theTheme.SetBrushColour( selsampleBrush, clrSelSample);
|
||||
theTheme.SetBrushColour( dragsampleBrush, clrDragSample);
|
||||
theTheme.SetBrushColour( blankSelectedBrush, clrBlankSelected);
|
||||
|
||||
theTheme.SetPenColour( blankPen, clrBlank);
|
||||
theTheme.SetPenColour( unselectedPen, clrUnselected);
|
||||
@ -127,6 +128,7 @@ void TrackArtist::SetColours()
|
||||
theTheme.SetPenColour( shadowPen, clrShadow);
|
||||
theTheme.SetPenColour( clippedPen, clrClipped);
|
||||
theTheme.SetPenColour( muteClippedPen, clrMuteClipped);
|
||||
theTheme.SetPenColour( blankSelectedPen,clrBlankSelected);
|
||||
}
|
||||
|
||||
void TrackArtist::SetInset(int left, int top, int right, int bottom)
|
||||
@ -1086,10 +1088,8 @@ void TrackArtist::DrawWaveform(WaveTrack *track,
|
||||
bool dB,
|
||||
bool muted)
|
||||
{
|
||||
// MM: Draw background. We should optimize that a bit more.
|
||||
dc.SetPen(*wxTRANSPARENT_PEN);
|
||||
dc.SetBrush(blankBrush);
|
||||
dc.DrawRectangle(r);
|
||||
DrawBackgroundWithSelection(&dc, r, track, blankSelectedBrush, blankBrush,
|
||||
viewInfo->sel0, viewInfo->sel1, viewInfo->h, viewInfo->zoom);
|
||||
|
||||
for (WaveClipList::compatibility_iterator it = track->GetClipIterator(); it; it = it->GetNext())
|
||||
DrawClipWaveform(track, it->GetData(), dc, r, viewInfo,
|
||||
@ -1424,10 +1424,8 @@ void TrackArtist::DrawSpectrum(WaveTrack *track,
|
||||
bool autocorrelation,
|
||||
bool logF)
|
||||
{
|
||||
// MM: Draw background. We should optimize that a bit more.
|
||||
dc.SetPen(*wxTRANSPARENT_PEN);
|
||||
dc.SetBrush(blankBrush);
|
||||
dc.DrawRectangle(r);
|
||||
DrawBackgroundWithSelection(&dc, r, track, blankSelectedBrush, blankBrush,
|
||||
viewInfo->sel0, viewInfo->sel1, viewInfo->h, viewInfo->zoom);
|
||||
|
||||
if(!viewInfo->bUpdateTrackIndicator && viewInfo->bIsPlaying) {
|
||||
// BG: Draw (undecorated) waveform instead of spectrum
|
||||
@ -2678,3 +2676,70 @@ void TrackArtist::DrawSyncLockTiles(wxDC *dc, wxRect r)
|
||||
}
|
||||
}
|
||||
|
||||
void TrackArtist::DrawBackgroundWithSelection(wxDC *dc, const wxRect &r,
|
||||
Track *track, wxBrush &selBrush, wxBrush &unselBrush,
|
||||
double sel0, double sel1, double h, double pps)
|
||||
{
|
||||
//MM: Draw background. We should optimize that a bit more.
|
||||
//AWD: "+ 1.5" and "+ 2.5" throughout match code in
|
||||
//AdornedRulerPanel::DoDrawSelection() and make selection line up with ruler.
|
||||
//I don't know if/why this is correct.
|
||||
|
||||
dc->SetPen(*wxTRANSPARENT_PEN);
|
||||
if (track->GetSelected() || track->IsSyncLockSelected())
|
||||
{
|
||||
// Rectangles before, within, after the selction
|
||||
wxRect before = r;
|
||||
wxRect within = r;
|
||||
wxRect after = r;
|
||||
|
||||
before.width = int ((sel0 - h) * pps + 2.5);
|
||||
if (before.GetRight() > r.GetRight()) {
|
||||
before.width = r.width;
|
||||
}
|
||||
|
||||
if (before.width > 0) {
|
||||
dc->SetBrush(unselBrush);
|
||||
dc->DrawRectangle(before);
|
||||
|
||||
within.x = before.GetRight();
|
||||
}
|
||||
within.width = r.x + int ((sel1 - h) * pps + 2.5) - within.x;
|
||||
|
||||
if (within.GetRight() > r.GetRight()) {
|
||||
within.width = r.GetRight() - within.x;
|
||||
}
|
||||
|
||||
if (within.width > 0) {
|
||||
if (track->GetSelected()) {
|
||||
dc->SetBrush(selBrush);
|
||||
dc->DrawRectangle(within);
|
||||
}
|
||||
else {
|
||||
// Per condition above, track must be sync-lock selected
|
||||
dc->SetBrush(unselBrush);
|
||||
dc->DrawRectangle(within);
|
||||
DrawSyncLockTiles(dc, within);
|
||||
}
|
||||
|
||||
after.x = within.GetRight();
|
||||
}
|
||||
else {
|
||||
// `within` not drawn; start where it would have gone
|
||||
after.x = within.x;
|
||||
}
|
||||
|
||||
after.width = r.GetRight() - after.x;
|
||||
if (after.width > 0) {
|
||||
dc->SetBrush(unselBrush);
|
||||
dc->DrawRectangle(after);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Track not selected; just draw background
|
||||
dc->SetBrush(unselBrush);
|
||||
dc->DrawRectangle(r);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -94,6 +94,11 @@ class AUDACITY_DLL_API TrackArtist {
|
||||
// Helper: draws the "sync-locked" watermark tiled to a rectangle
|
||||
static void DrawSyncLockTiles(wxDC *dc, wxRect r);
|
||||
|
||||
// Helper: draws background with selection rect
|
||||
static void DrawBackgroundWithSelection(wxDC *dc, const wxRect &r,
|
||||
Track *track, wxBrush &selBrush, wxBrush &unselBrush,
|
||||
double sel0, double sel1, double h, double pps);
|
||||
|
||||
private:
|
||||
|
||||
//
|
||||
@ -194,6 +199,7 @@ class AUDACITY_DLL_API TrackArtist {
|
||||
wxBrush selsampleBrush;
|
||||
wxBrush dragsampleBrush;// for samples which are draggable.
|
||||
wxBrush muteSampleBrush;
|
||||
wxBrush blankSelectedBrush;
|
||||
wxPen blankPen;
|
||||
wxPen unselectedPen;
|
||||
wxPen selectedPen;
|
||||
@ -207,6 +213,7 @@ class AUDACITY_DLL_API TrackArtist {
|
||||
wxPen shadowPen;
|
||||
wxPen clippedPen;
|
||||
wxPen muteClippedPen;
|
||||
wxPen blankSelectedPen;
|
||||
|
||||
Ruler *vruler;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user