104 lines
2.3 KiB
C++
104 lines
2.3 KiB
C++
// Fill out your copyright notice in the Description page of Project Settings.
|
|
|
|
|
|
#include "SPatternThumbnail.h"
|
|
|
|
#include "Async.h"
|
|
#include "SInvalidationPanel.h"
|
|
#include "SlateOptMacros.h"
|
|
#include "SMidiPatternThumbnail.h"
|
|
#include "SSamplePatternThumbnail.h"
|
|
#include "STextBlock.h"
|
|
#include "Pattern/Pattern.h"
|
|
|
|
BEGIN_SLATE_FUNCTION_BUILD_OPTIMIZATION
|
|
|
|
void SNullPatternThumbnail::Construct(const FArguments& InArgs, FText InText)
|
|
{
|
|
ChildSlot
|
|
[
|
|
SNew(STextBlock)
|
|
.Justification(ETextJustify::Center)
|
|
.Text(InText)
|
|
];
|
|
}
|
|
|
|
TSharedRef<SPatternThumbnail> SNullPatternThumbnail::Create(FText InText)
|
|
{
|
|
return SNew(SNullPatternThumbnail, InText);
|
|
}
|
|
|
|
void SAutoPatternThumbnail::Construct(const FArguments& InArgs, FPattern* InPattern)
|
|
{
|
|
SetPattern(InPattern);
|
|
}
|
|
|
|
void SAutoPatternThumbnail::SetPattern(FPattern* InPattern)
|
|
{
|
|
Pattern = InPattern;
|
|
ChildSlot.DetachWidget();
|
|
Thumbnail = CreateThumbnail(InPattern);
|
|
ChildSlot
|
|
[
|
|
SNew(SInvalidationPanel)
|
|
[
|
|
Thumbnail.ToSharedRef()
|
|
]
|
|
];
|
|
}
|
|
|
|
FReply SAutoPatternThumbnail::OnMouseButtonDown(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent)
|
|
{
|
|
if (MouseEvent.GetEffectingButton() == EKeys::LeftMouseButton && Thumbnail.IsValid())
|
|
{
|
|
if (Thumbnail->GetPattern())
|
|
{
|
|
OnPatternClicked.Broadcast(Thumbnail->GetPattern());
|
|
}
|
|
}
|
|
return FReply::Unhandled();
|
|
}
|
|
|
|
FVector2D SAutoPatternThumbnail::ComputeDesiredSize(float LayoutScaleMultiplier) const
|
|
{
|
|
return FVector2D(0, 36) * LayoutScaleMultiplier;
|
|
}
|
|
|
|
void SAutoPatternThumbnail::Tick(const FGeometry& AllottedGeometry, const double InCurrentTime, const float InDeltaTime)
|
|
{
|
|
SCompoundWidget::Tick(AllottedGeometry, InCurrentTime, InDeltaTime);
|
|
if (bNeedRedraw)
|
|
{
|
|
Thumbnail->Redraw();
|
|
bNeedRedraw = false;
|
|
}
|
|
}
|
|
|
|
TSharedPtr<SPatternThumbnail> SAutoPatternThumbnail::CreateThumbnail(FPattern* InPattern)
|
|
{
|
|
TSharedPtr<SPatternThumbnail> Out;
|
|
if (!InPattern)
|
|
{
|
|
Out = SNullPatternThumbnail::Create(FText::FromString(TEXT("Null Pattern")));
|
|
}
|
|
else
|
|
{
|
|
switch (Pattern->Type)
|
|
{
|
|
case EPatternType::Midi:
|
|
SAssignNew(Out, SMidiPatternThumbnail);
|
|
break;
|
|
case EPatternType::Automation:
|
|
break;
|
|
case EPatternType::Sample:
|
|
SAssignNew(Out, SSamplePatternThumbnail, static_cast<FSamplePattern*>(InPattern)->GetSampler());
|
|
break;
|
|
default: ;
|
|
}
|
|
}
|
|
Out->SetPattern(InPattern);
|
|
return Out;
|
|
}
|
|
|
|
END_SLATE_FUNCTION_BUILD_OPTIMIZATION
|