77 lines
2.0 KiB
C++
77 lines
2.0 KiB
C++
// Fill out your copyright notice in the Description page of Project Settings.
|
|
|
|
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "SCompoundWidget.h"
|
|
#include "Singleton/MidiSequencer.h"
|
|
|
|
class SUpdatableTexture;
|
|
class FPatternInstance;
|
|
class FUpdatableTexture;
|
|
|
|
struct FPatternInstanceClickData
|
|
{
|
|
FPatternInstance* PatternInstance;
|
|
double MidiTimestampOffset;
|
|
};
|
|
|
|
DECLARE_DELEGATE_RetVal_OneParam(FReply, FPatternInstanceClickDelegate, FPatternInstanceClickData)
|
|
|
|
/**
|
|
*
|
|
*/
|
|
class ARONA_API SPatternInstance : public SCompoundWidget
|
|
{
|
|
public:
|
|
|
|
enum class ResizeDir
|
|
{
|
|
None,
|
|
Left,
|
|
Right,
|
|
};
|
|
SLATE_BEGIN_ARGS(SPatternInstance)
|
|
{}
|
|
|
|
SLATE_ARGUMENT(FPatternInstance*, PatternInstance)
|
|
SLATE_ATTRIBUTE(float, FrameToPixel)
|
|
|
|
SLATE_ATTRIBUTE(AudioFrame, SnapFrame)
|
|
SLATE_ATTRIBUTE(TRange<AudioFrame>, FrameViewRange)
|
|
|
|
SLATE_END_ARGS()
|
|
|
|
/** Constructs this widget with InArgs */
|
|
virtual void Construct(const FArguments& InArgs);
|
|
|
|
virtual FReply OnMouseButtonDown(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent) override;
|
|
virtual FReply OnMouseButtonUp(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent) override;
|
|
virtual FReply OnMouseMove(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent) override;
|
|
|
|
virtual TSharedRef<SWidget> GetViewWidget() = 0;
|
|
virtual void RequestUpdate() = 0;
|
|
|
|
FPatternInstance* GetPatternInstance() const { return PatternInstance; }
|
|
TRange<AudioFrame> GetTimeRange() const { return PatternInstance->TimeRange; }
|
|
TRange<AudioFrame> GetFrameViewRange() const { return FrameViewRange.Get(); }
|
|
float ResizeHandleSize = 5.f;
|
|
protected:
|
|
virtual FReply OpenPatternMenu() { return FReply::Unhandled(); }
|
|
|
|
ResizeDir ResizeDirection = ResizeDir::None;
|
|
|
|
FPatternInstance* PatternInstance = nullptr;
|
|
|
|
TAttribute<float> FrameToPixel;
|
|
TAttribute<AudioFrame> SnapFrame;
|
|
TAttribute<TRange<AudioFrame>> FrameViewRange;
|
|
|
|
FVector2f MouseDownPos; // 屏幕坐标
|
|
AudioFrame BeginPatternEnd;
|
|
AudioFrame BeginPatternStart;
|
|
AudioFrame BeginPatternPos;
|
|
|
|
mutable FVector2f LastSize;
|
|
};
|