// 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 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 SAutoPatternThumbnail::CreateThumbnail(FPattern* InPattern) { TSharedPtr 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(InPattern)->GetSampler()); break; default: ; } } Out->SetPattern(InPattern); return Out; } END_SLATE_FUNCTION_BUILD_OPTIMIZATION