72 lines
1.7 KiB
C++
72 lines
1.7 KiB
C++
// Fill out your copyright notice in the Description page of Project Settings.
|
|
|
|
|
|
#include "SMidiPatternThumbnail.h"
|
|
|
|
#include "SInvalidationPanel.h"
|
|
#include "SlateOptMacros.h"
|
|
#include "Render/UpdatableTexture.h"
|
|
#include "Pattern/MidiPattern.h"
|
|
#include "PluginHost/PluginHost.h"
|
|
#include "UI/Widget/SUpdatableImage.h"
|
|
#include "UI/Widget/Thumbnail.h"
|
|
|
|
BEGIN_SLATE_FUNCTION_BUILD_OPTIMIZATION
|
|
|
|
|
|
SMidiPatternThumbnail::~SMidiPatternThumbnail()
|
|
{
|
|
if (FMidiPattern* Pattern = (FMidiPattern*)GetPattern())
|
|
Pattern->OnChanged.RemoveAll(this);
|
|
}
|
|
|
|
void SMidiPatternThumbnail::Construct(const FArguments& InArgs)
|
|
{
|
|
ChildSlot
|
|
[
|
|
SNew(SInvalidationPanel)
|
|
[
|
|
SAssignNew(UpdatableImage, SUpdatableImage)
|
|
.OnPostResize(this, &SMidiPatternThumbnail::UpdateMidiThumbnail)
|
|
]
|
|
];
|
|
}
|
|
|
|
void SMidiPatternThumbnail::Redraw()
|
|
{
|
|
OnChanged(nullptr, nullptr);
|
|
}
|
|
|
|
void SMidiPatternThumbnail::OnPatternChanged(FPattern* OldPattern, FPattern* NewPattern)
|
|
{
|
|
FMidiPattern* OldMidiPattern = (FMidiPattern*)OldPattern;
|
|
FMidiPattern* NewMidiPattern = (FMidiPattern*)NewPattern;
|
|
check(NewPattern->Type == EPatternType::Midi)
|
|
|
|
if (OldMidiPattern)
|
|
OldMidiPattern->OnChanged.RemoveAll(this);
|
|
|
|
if (!NewMidiPattern)
|
|
return;
|
|
NewMidiPattern->OnChanged_MainThread.AddRaw(this, &SMidiPatternThumbnail::OnChanged);
|
|
}
|
|
|
|
void SMidiPatternThumbnail::OnChanged(FPluginHost* Host, FMidiMessageSequence* Changed)
|
|
{
|
|
if (!GetPattern())
|
|
return;
|
|
UpdatableImage->NeedRedraw();
|
|
}
|
|
|
|
void SMidiPatternThumbnail::UpdateMidiThumbnail(FImageData& ImageData)
|
|
{
|
|
if (!GetPattern())
|
|
return;
|
|
|
|
ImageData.ClearColor(FColor::Black);
|
|
FMidiPattern* Pattern = (FMidiPattern*)GetPattern();
|
|
Thumbnail::GenerateMidiPatternThumbnail(Pattern, ImageData, FColor::White);
|
|
}
|
|
|
|
END_SLATE_FUNCTION_BUILD_OPTIMIZATION
|