AronaSlate/Source/Arona/UI/Widget/Pattern/SSamplePatternInstance.h

34 lines
1.1 KiB
C++

#pragma once
#include "SPatternInstance.h"
#include "PeakFile/PeakFile.h"
#include "UI/Widget/WaveformViewer.h"
class SSamplePatternInstance;
class FSamplePatternInstanceWaveformHandle : public IWaveformHandle
{
public:
FSamplePatternInstanceWaveformHandle(TSharedRef<SSamplePatternInstance> InPatternInstance);
virtual ~FSamplePatternInstanceWaveformHandle() override { delete RenderData; }
TWeakPtr<SSamplePatternInstance> PatternInstanceWidget;
virtual TArrayView<const FSamplePeak> GetWaveform(int32 SizeX) override;
virtual bool NeedUpdate() const override;
TRange<AudioFrame> GetRenderRange() const;
FWaveform* RenderData = nullptr;
TRange<AudioFrame> LastRenderRange;
};
class ARONA_API SSamplePatternInstance : public SPatternInstance
{
public:
SSamplePatternInstance();
virtual void Construct(const FArguments& InArgs) override;
virtual TSharedRef<SWidget> GetViewWidget() override;
virtual void RequestUpdate() override;
protected:
virtual FReply OpenPatternMenu() override;
TSharedPtr<FSamplePatternInstanceWaveformHandle> WaveformHandle;
TSharedPtr<SWaveformViewer> WaveformViewer;
};