1 /********************************************************************** 2 3 Audacity: A Digital Audio Editor 4 5 TrackArtist.h 6 7 Dominic Mazzoni 8 9 This singleton class handles the actual rendering of WaveTracks 10 (both waveforms and spectra), NoteTracks, and LabelTracks. 11 12 It's actually a little harder than it looks, because for 13 waveforms at least it needs to cache the samples that are 14 currently on-screen. 15 16 **********************************************************************/ 17 18 #ifndef __AUDACITY_TRACKARTIST__ 19 #define __AUDACITY_TRACKARTIST__ 20 21 22 23 24 #include <wx/brush.h> // member variable 25 #include <wx/pen.h> // member variables 26 27 #include "Prefs.h" 28 29 class wxRect; 30 31 class TrackList; 32 class TrackPanel; 33 class SelectedRegion; 34 class Track; 35 class TrackPanel; 36 struct TrackPanelDrawingContext; 37 class ZoomInfo; 38 39 namespace TrackArt { 40 41 static constexpr int ClipFrameRadius{ 6 }; 42 43 AUDACITY_DLL_API 44 void DrawClipAffordance(wxDC& dc, const wxRect& affordanceRect, const wxString& title, bool highlight = false, bool selected = false); 45 46 AUDACITY_DLL_API 47 wxRect GetAffordanceTitleRect(const wxRect& affordanceRect); 48 49 AUDACITY_DLL_API 50 void DrawClipEdges(wxDC& dc, const wxRect& clipRect, bool selected = false); 51 52 //Used to draw clip boundaries without contents/details when it's not 53 //sensible to show them 54 AUDACITY_DLL_API 55 void DrawClipFolded(wxDC& dc, const wxRect& rect); 56 57 // Helper: draws the "sync-locked" watermark tiled to a rectangle 58 AUDACITY_DLL_API 59 void DrawSyncLockTiles( 60 TrackPanelDrawingContext &context, const wxRect &rect ); 61 62 // Helper: draws background with selection rect 63 AUDACITY_DLL_API 64 void DrawBackgroundWithSelection(TrackPanelDrawingContext &context, 65 const wxRect &rect, const Track *track, 66 const wxBrush &selBrush, const wxBrush &unselBrush, 67 bool useSelection = true); 68 69 AUDACITY_DLL_API 70 void DrawCursor(TrackPanelDrawingContext& context, 71 const wxRect& rect, const Track* track); 72 73 AUDACITY_DLL_API 74 void DrawNegativeOffsetTrackArrows( TrackPanelDrawingContext &context, 75 const wxRect & rect ); 76 77 AUDACITY_DLL_API 78 wxString TruncateText(wxDC& dc, const wxString& text, const int maxWidth); 79 } 80 81 class AUDACITY_DLL_API TrackArtist final : private PrefsListener { 82 83 public: 84 85 enum : unsigned { 86 PassTracks, 87 PassMargins, 88 PassBorders, 89 PassControls, 90 PassZooming, 91 PassBackground, 92 PassFocus, 93 PassSnapping, 94 95 NPasses 96 }; 97 98 TrackArtist( TrackPanel *parent_ ); 99 ~TrackArtist(); 100 static TrackArtist *Get( TrackPanelDrawingContext & ); 101 SetBackgroundBrushes(wxBrush unselectedBrushIn,wxBrush selectedBrushIn,wxPen unselectedPenIn,wxPen selectedPenIn)102 void SetBackgroundBrushes(wxBrush unselectedBrushIn, wxBrush selectedBrushIn, 103 wxPen unselectedPenIn, wxPen selectedPenIn) { 104 this->unselectedBrush = unselectedBrushIn; 105 this->selectedBrush = selectedBrushIn; 106 this->unselectedPen = unselectedPenIn; 107 this->selectedPen = selectedPenIn; 108 } 109 110 void SetColours(int iColorIndex); 111 112 void UpdatePrefs() override; 113 void UpdateSelectedPrefs( int id ) override; 114 115 TrackPanel *parent; 116 117 // Preference values 118 float mdBrange; // "/GUI/EnvdBRange" 119 bool mShowClipping; // "/GUI/ShowClipping" 120 int mSampleDisplay; 121 bool mbShowTrackNameInTrack; // "/GUI/ShowTrackNameInWaveform" 122 123 wxBrush blankBrush; 124 wxBrush unselectedBrush; 125 wxBrush selectedBrush; 126 wxBrush sampleBrush; 127 wxBrush selsampleBrush; 128 wxBrush dragsampleBrush;// for samples which are draggable. 129 wxBrush muteSampleBrush; 130 wxBrush blankSelectedBrush; 131 wxPen blankPen; 132 wxPen unselectedPen; 133 wxPen selectedPen; 134 wxPen samplePen; 135 wxPen rmsPen; 136 wxPen muteRmsPen; 137 wxPen selsamplePen; 138 wxPen muteSamplePen; 139 wxPen odProgressNotYetPen; 140 wxPen odProgressDonePen; 141 wxPen shadowPen; 142 wxPen clippedPen; 143 wxPen muteClippedPen; 144 wxPen blankSelectedPen; 145 146 #ifdef EXPERIMENTAL_FFT_Y_GRID 147 bool fftYGridOld; 148 #endif //EXPERIMENTAL_FFT_Y_GRID 149 150 #ifdef EXPERIMENTAL_FIND_NOTES 151 bool fftFindNotesOld; 152 int findNotesMinAOld; 153 int findNotesNOld; 154 bool findNotesQuantizeOld; 155 #endif 156 157 const SelectedRegion *pSelectedRegion{}; 158 ZoomInfo *pZoomInfo{}; 159 160 bool drawEnvelope{ false }; 161 bool bigPoints{ false }; 162 bool drawSliders{ false }; 163 bool onBrushTool{ false }; 164 bool hasSolo{ false }; 165 }; 166 167 extern AUDACITY_DLL_API int GetWaveYPos(float value, float min, float max, 168 int height, bool dB, bool outer, float dBr, 169 bool clip); 170 extern float FromDB(float value, double dBRange); 171 extern AUDACITY_DLL_API float ValueOfPixel(int yy, int height, bool offset, 172 bool dB, double dBRange, float zoomMin, float zoomMax); 173 174 #endif // define __AUDACITY_TRACKARTIST__ 175