1
0
mirror of https://github.com/cookiengineer/audacity synced 2026-01-13 16:15:48 +01:00

New base classes of TrackPanel just for the bitmap backing and overlay system...

... to make it reusable by other classes.

Also, don't create a second DC when repainting TrackPanel.
This commit is contained in:
Paul Licameli
2016-05-07 13:00:48 -04:00
parent 3569851609
commit 7c2a531486
20 changed files with 419 additions and 253 deletions

View File

@@ -65,9 +65,12 @@ std::pair<wxRect, bool> EditCursorOverlay::DoGetRectangle(wxSize size)
}
void EditCursorOverlay::Draw
(wxDC &dc, TrackPanelCellIterator begin, TrackPanelCellIterator end)
void EditCursorOverlay::Draw(OverlayPanel &panel, wxDC &dc)
{
TrackPanel &tp = static_cast<TrackPanel&>(panel);
TrackPanelCellIterator begin(&tp, true);
TrackPanelCellIterator end(&tp, false);
mLastCursorX = mNewCursorX;
if (mLastCursorX == -1)
return;

View File

@@ -11,11 +11,11 @@ Paul Licameli split from TrackPanel.cpp
#ifndef __AUDACITY_EDIT_CURSOR_OVERLAY__
#define __AUDACITY_EDIT_CURSOR_OVERLAY__
#include "../../TrackPanelOverlay.h"
#include "../../widgets/Overlay.h"
class AudacityProject;
class EditCursorOverlay final : public TrackPanelOverlay
class EditCursorOverlay final : public Overlay
{
public:
EditCursorOverlay(AudacityProject *project);
@@ -23,8 +23,7 @@ public:
private:
std::pair<wxRect, bool> DoGetRectangle(wxSize size) override;
void Draw
(wxDC &dc, TrackPanelCellIterator begin, TrackPanelCellIterator end) override;
void Draw(OverlayPanel &panel, wxDC &dc) override;
AudacityProject *mProject;

View File

@@ -61,9 +61,12 @@ std::pair<wxRect, bool> PlayIndicatorOverlay::DoGetRectangle(wxSize size)
}
void PlayIndicatorOverlay::Draw
(wxDC &dc, TrackPanelCellIterator begin, TrackPanelCellIterator end)
void PlayIndicatorOverlay::Draw(OverlayPanel &panel, wxDC &dc)
{
TrackPanel &tp = static_cast<TrackPanel&>(panel);
TrackPanelCellIterator begin(&tp, true);
TrackPanelCellIterator end(&tp, false);
mLastIndicatorX = mNewIndicatorX;
if (!between_incexc(0, mLastIndicatorX, dc.GetSize().GetWidth()))
return;
@@ -106,7 +109,7 @@ void PlayIndicatorOverlay::Draw
void PlayIndicatorOverlay::Erase(wxDC &dc, wxDC &src)
{
TrackPanelOverlay::Erase(dc, src);
Overlay::Erase(dc, src);
mProject->GetRulerPanel()->ClearIndicator();
}

View File

@@ -11,13 +11,13 @@ Paul Licameli split from TrackPanel.cpp
#ifndef __AUDACITY_PLAY_INDICATOR_OVERLAY__
#define __AUDACITY_PLAY_INDICATOR_OVERLAY__
#include "../../TrackPanelOverlay.h"
#include <wx/event.h>
#include "../../widgets/Overlay.h"
class AudacityProject;
class PlayIndicatorOverlay final : public wxEvtHandler, public TrackPanelOverlay
class PlayIndicatorOverlay final : public wxEvtHandler, public Overlay
{
public:
PlayIndicatorOverlay(AudacityProject *project);
@@ -25,8 +25,7 @@ public:
private:
std::pair<wxRect, bool> DoGetRectangle(wxSize size) override;
void Draw
(wxDC &dc, TrackPanelCellIterator begin, TrackPanelCellIterator end) override;
void Draw(OverlayPanel &panel, wxDC &dc) override;
void Erase(wxDC &dc, wxDC &src) override;
void OnTimer(wxCommandEvent &event);

View File

@@ -8,6 +8,7 @@ Paul Licameli split from TrackPanel.cpp
**********************************************************************/
#include "../../Audacity.h"
#include "Scrubbing.h"
#include "../../Experimental.h"
#include <functional>
@@ -532,8 +533,7 @@ std::pair<wxRect, bool> ScrubbingOverlay::DoGetRectangle(wxSize)
);
}
void ScrubbingOverlay::Draw
(wxDC &dc, TrackPanelCellIterator, TrackPanelCellIterator)
void ScrubbingOverlay::Draw(OverlayPanel &, wxDC &dc)
{
mLastScrubRect = mNextScrubRect;
mLastScrubSpeedText = mNextScrubSpeedText;

View File

@@ -16,7 +16,7 @@ Paul Licameli split from TrackPanel.cpp
#include <wx/longlong.h>
#include "../../Experimental.h"
#include "../../TrackPanelOverlay.h"
#include "../../widgets/Overlay.h"
class AudacityProject;
@@ -128,7 +128,7 @@ private:
};
// Specialist in drawing the scrub speed, and listening for certain events
class ScrubbingOverlay final : public wxEvtHandler, public TrackPanelOverlay
class ScrubbingOverlay final : public wxEvtHandler, public Overlay
{
public:
ScrubbingOverlay(AudacityProject *project);
@@ -136,8 +136,7 @@ public:
private:
std::pair<wxRect, bool> DoGetRectangle(wxSize size) override;
void Draw
(wxDC &dc, TrackPanelCellIterator begin, TrackPanelCellIterator end) override;
void Draw(OverlayPanel &panel, wxDC &dc) override;
void OnTimer(wxCommandEvent &event);