自定义预设,缩放,导出
This commit is contained in:
parent
5b1640d4f3
commit
d96cd4370f
@ -28,7 +28,10 @@
|
|||||||
{
|
{
|
||||||
"Name": "SoundUtilities",
|
"Name": "SoundUtilities",
|
||||||
"Enabled": true
|
"Enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "RiderSourceCodeAccess",
|
||||||
|
"Enabled": false
|
||||||
}
|
}
|
||||||
|
|
||||||
]
|
]
|
||||||
}
|
}
|
@ -32,6 +32,7 @@ public:
|
|||||||
inline static FString BasePath = FPaths::ProjectDir();
|
inline static FString BasePath = FPaths::ProjectDir();
|
||||||
inline static FString Version = "1.0.0";
|
inline static FString Version = "1.0.0";
|
||||||
inline static FString ExportPath = "";
|
inline static FString ExportPath = "";
|
||||||
|
|
||||||
inline static TArray<FColor> Colors =
|
inline static TArray<FColor> Colors =
|
||||||
{
|
{
|
||||||
FColor(175, 93, 81, 255),
|
FColor(175, 93, 81, 255),
|
||||||
@ -96,6 +97,7 @@ enum class EPresetType
|
|||||||
Video,
|
Video,
|
||||||
DisableProjector,
|
DisableProjector,
|
||||||
EnableProjector,
|
EnableProjector,
|
||||||
|
Custom, // Use Preset Custom Data
|
||||||
};
|
};
|
||||||
|
|
||||||
struct FClipData;
|
struct FClipData;
|
||||||
@ -165,16 +167,26 @@ struct CUT5_API FPresetsData
|
|||||||
|
|
||||||
struct CUT5_API FPresetsCustomData
|
struct CUT5_API FPresetsCustomData
|
||||||
{
|
{
|
||||||
TArray<FLinearColor> Colors = { FLinearColor::White };
|
enum class EPresetCustomType
|
||||||
int32 Times;
|
{
|
||||||
|
None,
|
||||||
|
Breathe,
|
||||||
|
Flash,
|
||||||
|
};
|
||||||
|
|
||||||
|
TArray<FLinearColor> Colors = { FLinearColor(1, 1 , 1) };
|
||||||
|
int32 Times = 1;
|
||||||
float Angle;
|
float Angle;
|
||||||
int32 Time;
|
float Time;
|
||||||
|
EPresetCustomType PresetCustomType = EPresetCustomType::None;
|
||||||
|
|
||||||
friend FArchive& operator<<(FArchive& Ar, FPresetsCustomData& PresetsData)
|
friend FArchive& operator<<(FArchive& Ar, FPresetsCustomData& PresetsData)
|
||||||
{
|
{
|
||||||
Ar << PresetsData.Colors;
|
Ar << PresetsData.Colors;
|
||||||
Ar << PresetsData.Times;
|
Ar << PresetsData.Times;
|
||||||
Ar << PresetsData.Angle;
|
Ar << PresetsData.Angle;
|
||||||
Ar << PresetsData.Time;
|
Ar << PresetsData.Time;
|
||||||
|
Ar << PresetsData.PresetCustomType;
|
||||||
return Ar;
|
return Ar;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -200,6 +212,7 @@ struct CUT5_API FClipData
|
|||||||
Ar << ClipData.Cursors;
|
Ar << ClipData.Cursors;
|
||||||
Ar << ClipData.PresetType;
|
Ar << ClipData.PresetType;
|
||||||
Ar << ClipData.bCanDrag;
|
Ar << ClipData.bCanDrag;
|
||||||
|
Ar << ClipData.PresetsCustomData;
|
||||||
return Ar;
|
return Ar;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -223,7 +236,7 @@ struct CUT5_API FClipData
|
|||||||
int32 GetClipEndFrame() const { return ClipEndTime / FGlobalData::DefaultTimeTickSpace; };
|
int32 GetClipEndFrame() const { return ClipEndTime / FGlobalData::DefaultTimeTickSpace; };
|
||||||
|
|
||||||
int32 GetClipRelativeEndFrame() const { return ClipEndFrame - ClipStartFrame; }
|
int32 GetClipRelativeEndFrame() const { return ClipEndFrame - ClipStartFrame; }
|
||||||
|
FPresetsCustomData PresetsCustomData;
|
||||||
|
|
||||||
enum class ECropMethod
|
enum class ECropMethod
|
||||||
{
|
{
|
||||||
@ -379,6 +392,7 @@ public:
|
|||||||
ColorDragH,
|
ColorDragH,
|
||||||
ColorDragS,
|
ColorDragS,
|
||||||
ColorDragV,
|
ColorDragV,
|
||||||
|
MovePanel,
|
||||||
};
|
};
|
||||||
FCutDragDropBase() {};
|
FCutDragDropBase() {};
|
||||||
FCutDragDropBase(EType InType)
|
FCutDragDropBase(EType InType)
|
||||||
|
@ -23,6 +23,18 @@ void DragDropOperator::OnDragOver(const FGeometry& MyGeometry, const FDragDropEv
|
|||||||
{
|
{
|
||||||
if (TSharedPtr<FCutDragDropBase> DragDropBase = DragDropEvent.GetOperationAs<FCutDragDropBase>())
|
if (TSharedPtr<FCutDragDropBase> DragDropBase = DragDropEvent.GetOperationAs<FCutDragDropBase>())
|
||||||
{
|
{
|
||||||
|
if (DragDropBase->DragDropType == FCutDragDropBase::EType::MovePanel)
|
||||||
|
{
|
||||||
|
TSharedPtr<SCutTimeline> CutTimeline = StaticCastSharedPtr<SCutTimeline>(DragDropBase->DraggingWidget);
|
||||||
|
float ChangedValue = (MyGeometry.AbsoluteToLocal(DragDropEvent.GetScreenSpacePosition()).X - DragDropEvent.GetOperationAs<FCutDragDropBase>()->DragOffset); // / TrackBodyHScrollBox->GetScrollOffsetOfEnd();
|
||||||
|
CutTimeline->TrackBodyHScrollBox->SetScrollOffset(CutTimeline->TrackBodyHScrollBox->GetScrollOffset() - ChangedValue);
|
||||||
|
CutTimeline->TickScrollBox->SetScrollOffset(CutTimeline->TickScrollBox->GetScrollOffset() - ChangedValue);
|
||||||
|
DragDropEvent.GetOperationAs<FCutDragDropBase>()->DragOffset = (MyGeometry.AbsoluteToLocal(DragDropEvent.GetScreenSpacePosition()).X);
|
||||||
|
FGlobalData::CurrentTimeScroll = ChangedValue;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (DragDropBase->DragDropType == FCutDragDropBase::EType::ColorDragH || DragDropBase->DragDropType == FCutDragDropBase::EType::ColorDragV)
|
if (DragDropBase->DragDropType == FCutDragDropBase::EType::ColorDragH || DragDropBase->DragDropType == FCutDragDropBase::EType::ColorDragV)
|
||||||
{
|
{
|
||||||
TSharedPtr<SColorBar> ColorBar = StaticCastSharedPtr<SColorBar>(DragDropBase->DraggingWidget);
|
TSharedPtr<SColorBar> ColorBar = StaticCastSharedPtr<SColorBar>(DragDropBase->DraggingWidget);
|
||||||
@ -203,6 +215,7 @@ void DragDropOperator::OnDrop(const FGeometry& MyGeometry, const FDragDropEvent&
|
|||||||
FTrackData NewTrackData;
|
FTrackData NewTrackData;
|
||||||
NewTrackData.TrackType = CutDragDropBase->TrackType;
|
NewTrackData.TrackType = CutDragDropBase->TrackType;
|
||||||
NewTrackData.TrackName = CutDragDropBase->DeviceName;
|
NewTrackData.TrackName = CutDragDropBase->DeviceName;
|
||||||
|
|
||||||
CutDragDropBase->MainInterface->GetCutTimeline()->AddNewTrackToGroup(TrackHead->GroupName, NewTrackData);
|
CutDragDropBase->MainInterface->GetCutTimeline()->AddNewTrackToGroup(TrackHead->GroupName, NewTrackData);
|
||||||
CutDragDropBase->MainInterface->OnAddNewTrack(ETrackType::PlayerTrack);
|
CutDragDropBase->MainInterface->OnAddNewTrack(ETrackType::PlayerTrack);
|
||||||
return;
|
return;
|
||||||
@ -216,6 +229,30 @@ void DragDropOperator::OnDrop(const FGeometry& MyGeometry, const FDragDropEvent&
|
|||||||
FTrackClipDragOperation& ClipDragOperation = *ClipDragOperationShared.Get();
|
FTrackClipDragOperation& ClipDragOperation = *ClipDragOperationShared.Get();
|
||||||
if (!ClipDragOperationShared.IsValid())
|
if (!ClipDragOperationShared.IsValid())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
||||||
|
FClipData NewClipData;
|
||||||
|
NewClipData.ClipGuid = FGuid::NewGuid();
|
||||||
|
|
||||||
|
ETrackType TrackType = TrackHead->TrackData.TrackType;
|
||||||
|
ETrackType ClipType = ClipDragOperation.TimelinePropertyData->Type;
|
||||||
|
float TrackDropFrame = MyGeometry.AbsoluteToLocal(DragDropEvent.GetScreenSpacePosition()).X / FGlobalData::DefaultTimeTickSpace;
|
||||||
|
|
||||||
|
// If custom preset
|
||||||
|
if (ClipDragOperation.TimelinePropertyData->bIsCustomPresetData)
|
||||||
|
{
|
||||||
|
if (TrackType == ETrackType::AudioTrack || TrackType == ETrackType::ProjectorTrack || TrackType == ETrackType::AudioTrackR)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
NewClipData.PresetType = EPresetType::Custom;
|
||||||
|
NewClipData.PresetsCustomData = ClipDragOperation.TimelinePropertyData->PresetsCustomData;
|
||||||
|
NewClipData.ClipStartFrame = TrackDropFrame;
|
||||||
|
NewClipData.ClipEndFrame = NewClipData.ClipStartFrame + (float(NewClipData.PresetsCustomData.Time) * 30);
|
||||||
|
NewClipData.ClipType = TrackType;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
if (ClipDragOperation.TimelinePropertyData->Type != TrackHead->TrackData.TrackType)
|
if (ClipDragOperation.TimelinePropertyData->Type != TrackHead->TrackData.TrackType)
|
||||||
{
|
{
|
||||||
if ((ClipDragOperation.TimelinePropertyData->Type == ETrackType::VideoTrack && TrackHead->TrackData.TrackType == ETrackType::LightArrayTrack)
|
if ((ClipDragOperation.TimelinePropertyData->Type == ETrackType::VideoTrack && TrackHead->TrackData.TrackType == ETrackType::LightArrayTrack)
|
||||||
@ -230,13 +267,8 @@ void DragDropOperator::OnDrop(const FGeometry& MyGeometry, const FDragDropEvent&
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
FClipData NewClipData;
|
|
||||||
NewClipData.ClipGuid = FGuid::NewGuid();
|
|
||||||
|
|
||||||
NewClipData.ClipType = TrackHead->TrackData.TrackType;
|
NewClipData.ClipType = TrackHead->TrackData.TrackType;
|
||||||
NewClipData.ClipStartFrame = MyGeometry.AbsoluteToLocal(DragDropEvent.GetScreenSpacePosition()).X / FGlobalData::DefaultTimeTickSpace;
|
NewClipData.ClipStartFrame = TrackDropFrame;
|
||||||
NewClipData.ClipColors.Add(FLinearColor(1, 1, 1, 1));
|
NewClipData.ClipColors.Add(FLinearColor(1, 1, 1, 1));
|
||||||
NewClipData.ResourcePropertyGuid = ClipDragOperation.TimelinePropertyData->Guid;
|
NewClipData.ResourcePropertyGuid = ClipDragOperation.TimelinePropertyData->Guid;
|
||||||
NewClipData.ResourcePropertyDataPtr = ClipDragOperation.TimelinePropertyData;
|
NewClipData.ResourcePropertyDataPtr = ClipDragOperation.TimelinePropertyData;
|
||||||
@ -286,6 +318,8 @@ void DragDropOperator::OnDrop(const FGeometry& MyGeometry, const FDragDropEvent&
|
|||||||
NewClipData.VideoEndFrame = ClipDragOperation.TimelinePropertyData->MovieFrameLength;
|
NewClipData.VideoEndFrame = ClipDragOperation.TimelinePropertyData->MovieFrameLength;
|
||||||
NewClipData.ResourcePropertyDataPtr = ClipDragOperation.TimelinePropertyData;
|
NewClipData.ResourcePropertyDataPtr = ClipDragOperation.TimelinePropertyData;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -16,6 +16,12 @@ BEGIN_SLATE_FUNCTION_BUILD_OPTIMIZATION
|
|||||||
void SColorPanel::Construct(const FArguments& InArgs)
|
void SColorPanel::Construct(const FArguments& InArgs)
|
||||||
{
|
{
|
||||||
ColorPtr = InArgs._ColorPtr;
|
ColorPtr = InArgs._ColorPtr;
|
||||||
|
|
||||||
|
CurrentSelectColor = ColorPtr->LinearRGBToHSV();
|
||||||
|
|
||||||
|
ColorS = ColorPtr->LinearRGBToHSV().G;
|
||||||
|
|
||||||
|
|
||||||
FTextBlockStyle TextBlockStyle = FAppStyle::GetWidgetStyle<FTextBlockStyle>("NormalText");
|
FTextBlockStyle TextBlockStyle = FAppStyle::GetWidgetStyle<FTextBlockStyle>("NormalText");
|
||||||
TextBlockStyle.SetFontSize(16);
|
TextBlockStyle.SetFontSize(16);
|
||||||
ChildSlot
|
ChildSlot
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
#include "Widgets/Input/SComboBox.h"
|
#include "Widgets/Input/SComboBox.h"
|
||||||
#include "Widgets/Input/SSpinBox.h"
|
#include "Widgets/Input/SSpinBox.h"
|
||||||
#include "Widgets/Input/NumericTypeInterface.h"
|
#include "Widgets/Input/NumericTypeInterface.h"
|
||||||
|
#include "Widgets/Layout/SSpacer.h"
|
||||||
|
|
||||||
BEGIN_SLATE_FUNCTION_BUILD_OPTIMIZATION
|
BEGIN_SLATE_FUNCTION_BUILD_OPTIMIZATION
|
||||||
|
|
||||||
@ -76,6 +77,12 @@ void SEffectPreset::Construct(const FArguments& InArgs)
|
|||||||
|
|
||||||
TSharedPtr<SWidget> SEffectPreset::GetPropertiesWidget()
|
TSharedPtr<SWidget> SEffectPreset::GetPropertiesWidget()
|
||||||
{
|
{
|
||||||
|
Selectable.Empty();
|
||||||
|
Selectable.Add(MakeShared<FString>(TEXT("无")));
|
||||||
|
Selectable.Add(MakeShared<FString>(TEXT("呼吸")));
|
||||||
|
Selectable.Add(MakeShared<FString>(TEXT("闪烁")));
|
||||||
|
|
||||||
|
|
||||||
FTextBlockStyle NormalText = FAppStyle::GetWidgetStyle<FTextBlockStyle>("NormalText");
|
FTextBlockStyle NormalText = FAppStyle::GetWidgetStyle<FTextBlockStyle>("NormalText");
|
||||||
NormalText.SetFontSize(13);
|
NormalText.SetFontSize(13);
|
||||||
PropertiesWidget =
|
PropertiesWidget =
|
||||||
@ -152,6 +159,35 @@ TSharedPtr<SWidget> SEffectPreset::GetPropertiesWidget()
|
|||||||
.HeightOverride(32)
|
.HeightOverride(32)
|
||||||
[
|
[
|
||||||
SNew(SComboBox<TSharedPtr<FString>>)
|
SNew(SComboBox<TSharedPtr<FString>>)
|
||||||
|
.OptionsSource(&Selectable)
|
||||||
|
.OnGenerateWidget_Lambda([this](TSharedPtr<FString> InItem)
|
||||||
|
{
|
||||||
|
return SNew(STextBlock).Text(FText::FromString(*InItem));
|
||||||
|
})
|
||||||
|
.OnSelectionChanged_Lambda([this](TSharedPtr<FString> InItem, ESelectInfo::Type SelectInfo)
|
||||||
|
{
|
||||||
|
switch (Selectable.Find(InItem))
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
CustomData.PresetCustomType = FPresetsCustomData::EPresetCustomType::None;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
CustomData.PresetCustomType = FPresetsCustomData::EPresetCustomType::Breathe;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
CustomData.PresetCustomType = FPresetsCustomData::EPresetCustomType::Flash;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
[
|
||||||
|
SNew(STextBlock)
|
||||||
|
.Text_Lambda([this]()
|
||||||
|
{
|
||||||
|
return FText::FromString( CustomData.PresetCustomType == FPresetsCustomData::EPresetCustomType::None ? TEXT("无") : CustomData.PresetCustomType == FPresetsCustomData::EPresetCustomType::Breathe ? TEXT("呼吸") : TEXT("闪烁"));
|
||||||
|
})
|
||||||
|
]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
@ -185,7 +221,8 @@ TSharedPtr<SWidget> SEffectPreset::GetPropertiesWidget()
|
|||||||
.HeightOverride(32)
|
.HeightOverride(32)
|
||||||
[
|
[
|
||||||
SNew(SSpinBox<int32>)
|
SNew(SSpinBox<int32>)
|
||||||
.MinValue(0)
|
.Value(1)
|
||||||
|
.MinValue(1)
|
||||||
.OnValueChanged_Lambda([this](const int32& Value)
|
.OnValueChanged_Lambda([this](const int32& Value)
|
||||||
{
|
{
|
||||||
CustomData.Times = Value;
|
CustomData.Times = Value;
|
||||||
@ -196,46 +233,6 @@ TSharedPtr<SWidget> SEffectPreset::GetPropertiesWidget()
|
|||||||
]
|
]
|
||||||
+ SVerticalBox::Slot()
|
+ SVerticalBox::Slot()
|
||||||
.Padding(0, 13, 0, 0)
|
.Padding(0, 13, 0, 0)
|
||||||
[
|
|
||||||
SNew(SBox).HeightOverride(32).WidthOverride(214)
|
|
||||||
[
|
|
||||||
SNew(SHorizontalBox)
|
|
||||||
+ SHorizontalBox::Slot()
|
|
||||||
.SizeParam(FAuto())
|
|
||||||
.VAlign(VAlign_Center)
|
|
||||||
[
|
|
||||||
SNew(SBox)
|
|
||||||
.WidthOverride(62)
|
|
||||||
.HeightOverride(32)
|
|
||||||
.VAlign(VAlign_Center)
|
|
||||||
[
|
|
||||||
SNew(STextBlock)
|
|
||||||
.Text(FText::FromString(TEXT("角度")))
|
|
||||||
.Font(NormalText.Font)
|
|
||||||
.Justification(ETextJustify::Center)
|
|
||||||
]
|
|
||||||
]
|
|
||||||
+ SHorizontalBox::Slot()
|
|
||||||
.SizeParam(FAuto())
|
|
||||||
[
|
|
||||||
SNew(SBox)
|
|
||||||
.WidthOverride(136)
|
|
||||||
.HeightOverride(32)
|
|
||||||
[
|
|
||||||
SNew(SSpinBox<float>)
|
|
||||||
.MinValue(0.0)
|
|
||||||
.MaxValue(360.0)
|
|
||||||
.OnValueChanged_Lambda([this](const float& Value)
|
|
||||||
{
|
|
||||||
CustomData.Angle = Value;
|
|
||||||
})
|
|
||||||
// .TypeInterface(MakeShared<TNumericUnitTypeInterface<float>>(EUnit::Degrees))
|
|
||||||
]
|
|
||||||
]
|
|
||||||
]
|
|
||||||
]
|
|
||||||
+ SVerticalBox::Slot()
|
|
||||||
.Padding(0, 13, 0, 0)
|
|
||||||
[
|
[
|
||||||
SNew(SBox).HeightOverride(32).WidthOverride(214)
|
SNew(SBox).HeightOverride(32).WidthOverride(214)
|
||||||
[
|
[
|
||||||
@ -262,9 +259,10 @@ TSharedPtr<SWidget> SEffectPreset::GetPropertiesWidget()
|
|||||||
.WidthOverride(136)
|
.WidthOverride(136)
|
||||||
.HeightOverride(32)
|
.HeightOverride(32)
|
||||||
[
|
[
|
||||||
SNew(SSpinBox<int32>)
|
SNew(SSpinBox<float>)
|
||||||
.MinValue(0.0)
|
.Value(0.3)
|
||||||
.OnValueChanged_Lambda([this](const int32& Value)
|
.MinValue(0.3)
|
||||||
|
.OnValueChanged_Lambda([this](const float& Value)
|
||||||
{
|
{
|
||||||
CustomData.Time = Value;
|
CustomData.Time = Value;
|
||||||
})
|
})
|
||||||
@ -274,6 +272,11 @@ TSharedPtr<SWidget> SEffectPreset::GetPropertiesWidget()
|
|||||||
]
|
]
|
||||||
]
|
]
|
||||||
+ SVerticalBox::Slot()
|
+ SVerticalBox::Slot()
|
||||||
|
.SizeParam(FStretch(1.0))
|
||||||
|
[
|
||||||
|
SNew(SSpacer)
|
||||||
|
]
|
||||||
|
+ SVerticalBox::Slot()
|
||||||
.HAlign(HAlign_Center)
|
.HAlign(HAlign_Center)
|
||||||
.VAlign(VAlign_Bottom)
|
.VAlign(VAlign_Bottom)
|
||||||
.Padding(0, 0, 0, 24)
|
.Padding(0, 0, 0, 24)
|
||||||
@ -306,6 +309,7 @@ TSharedPtr<SWidget> SEffectPreset::GetPropertiesWidget()
|
|||||||
.Visibility(EVisibility::HitTestInvisible)
|
.Visibility(EVisibility::HitTestInvisible)
|
||||||
.Text(FText::FromString((TEXT("保存自定义效果"))))
|
.Text(FText::FromString((TEXT("保存自定义效果"))))
|
||||||
.Font(NormalText.Font)
|
.Font(NormalText.Font)
|
||||||
|
.Justification(ETextJustify::Center)
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
@ -33,7 +33,7 @@ public:
|
|||||||
EPresetType PresetType;
|
EPresetType PresetType;
|
||||||
TSharedPtr<SComboBox<TSharedPtr<FString>>> GroupComboBox;
|
TSharedPtr<SComboBox<TSharedPtr<FString>>> GroupComboBox;
|
||||||
virtual TSharedPtr<SWidget> GetPropertiesWidget() override;
|
virtual TSharedPtr<SWidget> GetPropertiesWidget() override;
|
||||||
|
TArray<TSharedPtr<FString>> Selectable;
|
||||||
FPresetsCustomData CustomData;
|
FPresetsCustomData CustomData;
|
||||||
virtual FReply OnDragDetected(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent) override;
|
virtual FReply OnDragDetected(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent) override;
|
||||||
};
|
};
|
||||||
|
@ -1040,6 +1040,45 @@ tinyxml2::XMLElement* SCutMainWindow::GetDeviceElement(tinyxml2::XMLElement* Par
|
|||||||
}
|
}
|
||||||
tinyxml2::XMLElement* PlayerLightList = Light->InsertNewChildElement("PlayerLightList");
|
tinyxml2::XMLElement* PlayerLightList = Light->InsertNewChildElement("PlayerLightList");
|
||||||
{
|
{
|
||||||
|
int32 j = 0;
|
||||||
|
for (int32 i = 0; i < CutTimeline->TrackGroupInstances.Num(); i++)
|
||||||
|
{
|
||||||
|
const FTrackData& TrackData = StaticCastSharedPtr<STrackHead>(CutTimeline->TrackGroupInstances[i].Head)->TrackData;
|
||||||
|
if (TrackData.TrackType == ETrackType::AtomSphereLightTrack)
|
||||||
|
{
|
||||||
|
tinyxml2::XMLElement* PlayerLight = PlayerLightList->InsertNewChildElement(TCHAR_TO_UTF8(*FString::Printf(TEXT("PlayerLight(%d)"), j)));
|
||||||
|
tinyxml2::XMLElement* SpeicalEffect = PlayerLight->InsertNewChildElement("Special_Effects_List");
|
||||||
|
for (int32 k = 0; k < TrackData.ClipData.Num(); k++)
|
||||||
|
{
|
||||||
|
|
||||||
|
const FClipData& TempClipData = TrackData.ClipData[k];
|
||||||
|
if (TempClipData.PresetsCustomData.PresetCustomType == FPresetsCustomData::EPresetCustomType::Breathe)
|
||||||
|
{
|
||||||
|
tinyxml2::XMLElement* NewSpeicalEffect = SpeicalEffect->InsertNewChildElement("Special_Effect");
|
||||||
|
NewSpeicalEffect->InsertNewChildElement("Mode")->InsertNewText("0");
|
||||||
|
NewSpeicalEffect->InsertNewChildElement("InitialColor")->InsertNewText(TCHAR_TO_UTF8(*FString::Printf(TEXT("%ls"), *TempClipData.PresetsCustomData.Colors[0].ToFColor(false).ToHex())));
|
||||||
|
NewSpeicalEffect->InsertNewChildElement("EndColor")->InsertNewText(TCHAR_TO_UTF8(*FString::Printf(TEXT("%ls"), *FLinearColor::Black.ToFColor(false).ToHex())));
|
||||||
|
float PerLength = (TempClipData.PresetsCustomData.Time / TempClipData.PresetsCustomData.Times);
|
||||||
|
NewSpeicalEffect->InsertNewChildElement("TimeLength")->InsertNewText(TCHAR_TO_UTF8(*FString::Printf(TEXT("%d"), int32(PerLength * 1000))));
|
||||||
|
NewSpeicalEffect->InsertNewChildElement("TimeCode")->InsertNewText(TCHAR_TO_UTF8(*FString::Printf(TEXT("%ls"), *FUtils::GetMsFromString(FGlobalData::GetTimeData(TempClipData.ClipStartFrame)))));
|
||||||
|
NewSpeicalEffect->InsertNewChildElement("Cycle")->InsertNewText(TCHAR_TO_UTF8(*FString::Printf(TEXT("%d"), TempClipData.PresetsCustomData.Times)));
|
||||||
|
}
|
||||||
|
if (TempClipData.PresetsCustomData.PresetCustomType == FPresetsCustomData::EPresetCustomType::Flash)
|
||||||
|
{
|
||||||
|
tinyxml2::XMLElement* NewSpeicalEffect = SpeicalEffect->InsertNewChildElement("Special_Effect");
|
||||||
|
NewSpeicalEffect->InsertNewChildElement("Mode")->InsertNewText("0");
|
||||||
|
NewSpeicalEffect->InsertNewChildElement("InitialColor")->InsertNewText(TCHAR_TO_UTF8(*FString::Printf(TEXT("%ls"), *TempClipData.PresetsCustomData.Colors[0].ToFColor(false).ToHex())));
|
||||||
|
NewSpeicalEffect->InsertNewChildElement("EndColor")->InsertNewText(TCHAR_TO_UTF8(*FString::Printf(TEXT("%ls"), *TempClipData.PresetsCustomData.Colors[0].ToFColor(false).ToHex())));
|
||||||
|
float PerLength = (TempClipData.PresetsCustomData.Time / TempClipData.PresetsCustomData.Times) / 2;
|
||||||
|
NewSpeicalEffect->InsertNewChildElement("TimeLength")->InsertNewText(TCHAR_TO_UTF8(*FString::Printf(TEXT("%d"), int32(PerLength * 1000))));
|
||||||
|
NewSpeicalEffect->InsertNewChildElement("TimeCode")->InsertNewText(TCHAR_TO_UTF8(*FString::Printf(TEXT("%ls"), *FUtils::GetMsFromString(FGlobalData::GetTimeData(TempClipData.ClipStartFrame)))));
|
||||||
|
NewSpeicalEffect->InsertNewChildElement("Cycle")->InsertNewText(TCHAR_TO_UTF8(*FString::Printf(TEXT("%d"), TempClipData.PresetsCustomData.Times)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
tinyxml2::XMLElement* GuangZhenList = Light->InsertNewChildElement("GuangZhenList");
|
tinyxml2::XMLElement* GuangZhenList = Light->InsertNewChildElement("GuangZhenList");
|
||||||
|
@ -18,6 +18,22 @@
|
|||||||
|
|
||||||
BEGIN_SLATE_FUNCTION_BUILD_OPTIMIZATION
|
BEGIN_SLATE_FUNCTION_BUILD_OPTIMIZATION
|
||||||
|
|
||||||
|
FReply SCutTimeline::OnMouseButtonDown(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent)
|
||||||
|
{
|
||||||
|
TSharedPtr<FCutDragDropBase> DragDropOperator = MakeShared<FCutDragDropBase>();
|
||||||
|
DragDropOperator->DragDropType = FCutDragDropBase::EType::MovePanel;
|
||||||
|
DragDropOperator->DragOffset = MyGeometry.AbsoluteToLocal(MouseEvent.GetScreenSpacePosition()).X;
|
||||||
|
DragDropOperator->DraggingWidget = SharedThis(this);
|
||||||
|
return FReply::Handled().DetectDrag(SharedThis(this), EKeys::LeftMouseButton).BeginDragDrop(DragDropOperator.ToSharedRef());
|
||||||
|
}
|
||||||
|
|
||||||
|
FReply SCutTimeline::OnDragOver(const FGeometry& MyGeometry, const FDragDropEvent& DragDropEvent)
|
||||||
|
{
|
||||||
|
DragDropOperator* DragDropOperator = DragDropOperator::GetDragDropOperator();
|
||||||
|
DragDropOperator->OnDragOver(MyGeometry, DragDropEvent);
|
||||||
|
return SCompoundWidget::OnDragOver(MyGeometry, DragDropEvent);
|
||||||
|
}
|
||||||
|
|
||||||
void SCutTimeline::UpdateTimelineLength()
|
void SCutTimeline::UpdateTimelineLength()
|
||||||
{
|
{
|
||||||
TimelineTickBox->SetWidthOverride(FGlobalData::TrackLength * FGlobalData::DefaultTimeTickSpace);
|
TimelineTickBox->SetWidthOverride(FGlobalData::TrackLength * FGlobalData::DefaultTimeTickSpace);
|
||||||
@ -34,7 +50,7 @@ void SCutTimeline::UpdateCursorPosition(int32 Frame)
|
|||||||
{
|
{
|
||||||
if (Frame >= 0 && Frame <= FGlobalData::TrackLength)
|
if (Frame >= 0 && Frame <= FGlobalData::TrackLength)
|
||||||
{
|
{
|
||||||
TimelineTick->UpdateNewCursorPosition(Frame * FGlobalData::DefaultTimeTickSpace);
|
TimelineTick->UpdateNewCursorPosition(Frame);
|
||||||
MainWidgetInterface->PreSettingBeforeSeek();
|
MainWidgetInterface->PreSettingBeforeSeek();
|
||||||
for (const FSingleTrackGroupInstance& Interface : TrackGroupInstances)
|
for (const FSingleTrackGroupInstance& Interface : TrackGroupInstances)
|
||||||
{
|
{
|
||||||
@ -156,9 +172,8 @@ void SCutTimeline::Construct(const FArguments& InArgs)
|
|||||||
.Value(0.0f)
|
.Value(0.0f)
|
||||||
.OnValueChanged_Lambda([this](float ChangedValue)
|
.OnValueChanged_Lambda([this](float ChangedValue)
|
||||||
{
|
{
|
||||||
TrackBodyHScrollBox->SetScrollOffset(ChangedValue * TrackBodyHScrollBox->GetScrollOffsetOfEnd());
|
FGlobalData::DefaultTimeTickSpace = 1 + ChangedValue * 10;
|
||||||
TickScrollBox->SetScrollOffset(ChangedValue * TickScrollBox->GetScrollOffsetOfEnd());
|
RenderGroup();
|
||||||
FGlobalData::CurrentTimeScroll = ChangedValue;
|
|
||||||
})
|
})
|
||||||
]
|
]
|
||||||
+ SHorizontalBox::Slot()
|
+ SHorizontalBox::Slot()
|
||||||
@ -448,6 +463,8 @@ void SCutTimeline::RenderGroup()
|
|||||||
FTextBlockStyle BlackHugeText = FAppStyle::GetWidgetStyle<FTextBlockStyle>("NormalText");
|
FTextBlockStyle BlackHugeText = FAppStyle::GetWidgetStyle<FTextBlockStyle>("NormalText");
|
||||||
BlackHugeText.SetFontSize(16);
|
BlackHugeText.SetFontSize(16);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
for (int32 i = 0; i < TrackGroups.Num(); i++)
|
for (int32 i = 0; i < TrackGroups.Num(); i++)
|
||||||
{
|
{
|
||||||
// Group Render
|
// Group Render
|
||||||
@ -517,6 +534,11 @@ void SCutTimeline::RenderGroup()
|
|||||||
TrackIndex++;
|
TrackIndex++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Update Instance Position
|
||||||
|
StaticCastSharedPtr<STrackBody>(SingleTrackGroupInstance.GetBody())->CallRender();
|
||||||
|
StaticCastSharedPtr<STrackBody>(SingleTrackGroupInstance.GetBody())->TrackBodyBox->SetWidthOverride(FGlobalData::TrackLength * FGlobalData::DefaultTimeTickSpace);
|
||||||
|
|
||||||
TrackHeadScrollBox->AddSlot()
|
TrackHeadScrollBox->AddSlot()
|
||||||
[
|
[
|
||||||
SingleTrackGroupInstance.GetHead().ToSharedRef()
|
SingleTrackGroupInstance.GetHead().ToSharedRef()
|
||||||
|
@ -55,7 +55,8 @@ public:
|
|||||||
}
|
}
|
||||||
SLATE_ARGUMENT(ICutMainWidgetInterface*, MainWidgetInterface)
|
SLATE_ARGUMENT(ICutMainWidgetInterface*, MainWidgetInterface)
|
||||||
SLATE_END_ARGS()
|
SLATE_END_ARGS()
|
||||||
|
virtual FReply OnMouseButtonDown(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent) override;
|
||||||
|
virtual FReply OnDragOver(const FGeometry& MyGeometry, const FDragDropEvent& DragDropEvent) override;
|
||||||
void UpdateTimelineLength();
|
void UpdateTimelineLength();
|
||||||
void UpdateCursorPosition(int32 Frame);
|
void UpdateCursorPosition(int32 Frame);
|
||||||
int32 GetCursorPosition() const;
|
int32 GetCursorPosition() const;
|
||||||
|
@ -272,6 +272,49 @@ void STimelineClip::Seek(int32 Frame)
|
|||||||
{
|
{
|
||||||
const int32 Offset = Frame - ClipData->ClipStartFrame;
|
const int32 Offset = Frame - ClipData->ClipStartFrame;
|
||||||
const int32 SeekMovieFrame = ClipData->VideoStartFrame + Offset;
|
const int32 SeekMovieFrame = ClipData->VideoStartFrame + Offset;
|
||||||
|
|
||||||
|
if (ClipData->PresetsCustomData.PresetCustomType != FPresetsCustomData::EPresetCustomType::None)
|
||||||
|
{
|
||||||
|
if (ClipData->PresetsCustomData.PresetCustomType == FPresetsCustomData::EPresetCustomType::Breathe)
|
||||||
|
{
|
||||||
|
// 先拿到目前位置在第几个区间
|
||||||
|
float Between = -1;
|
||||||
|
int32 SingleAreaLength = (ClipData->ClipEndFrame - ClipData->ClipStartFrame) / ClipData->PresetsCustomData.Times / 2;
|
||||||
|
if (SeekMovieFrame > 0)
|
||||||
|
{
|
||||||
|
Between = (float)SeekMovieFrame / (float)SingleAreaLength;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Between != -1)
|
||||||
|
{
|
||||||
|
FLinearColor LinearColor = FLinearColor::Black;
|
||||||
|
FLinearColor CustomColor = ClipData->PresetsCustomData.Colors[0];
|
||||||
|
LinearColor = FMath::Lerp((int32)Between % 2 == 0 ? CustomColor : FLinearColor::Black, (int32)Between % 2 == 0 ? FLinearColor::Black : CustomColor, Between - (int32)Between);
|
||||||
|
GEngine->AddOnScreenDebugMessage(-1, 0.1f, FColor::Red, FString::Printf(TEXT("Between %s"), *CustomColor.ToString()));
|
||||||
|
MainWidgetInterface->OnUpdateSpotLight(0, LinearColor.ToFColor(false));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (ClipData->PresetsCustomData.PresetCustomType == FPresetsCustomData::EPresetCustomType::Flash)
|
||||||
|
{
|
||||||
|
float Between = -1;
|
||||||
|
int32 SingleAreaLength = (ClipData->ClipEndFrame - ClipData->ClipStartFrame) / ClipData->PresetsCustomData.Times / 2;
|
||||||
|
if (SeekMovieFrame > 0)
|
||||||
|
{
|
||||||
|
Between = (float)SeekMovieFrame / (float)SingleAreaLength;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Between != -1)
|
||||||
|
{
|
||||||
|
MainWidgetInterface->OnUpdateSpotLight(0, (int32)Between % 2 == 1 ? ClipData->PresetsCustomData.Colors[0].ToFColor(false) : FLinearColor::Black.ToFColor(false));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (ClipData->PresetType == EPresetType::NotAPresets)
|
if (ClipData->PresetType == EPresetType::NotAPresets)
|
||||||
{
|
{
|
||||||
if (SeekMovieFrame < ClipData->PlayerLightData.Num())
|
if (SeekMovieFrame < ClipData->PlayerLightData.Num())
|
||||||
@ -309,6 +352,52 @@ void STimelineClip::Seek(int32 Frame)
|
|||||||
const int32 Offset = Frame - ClipData->ClipStartFrame;
|
const int32 Offset = Frame - ClipData->ClipStartFrame;
|
||||||
const int32 SeekMovieFrame = ClipData->VideoStartFrame + Offset;
|
const int32 SeekMovieFrame = ClipData->VideoStartFrame + Offset;
|
||||||
|
|
||||||
|
|
||||||
|
if (ClipData->PresetsCustomData.PresetCustomType != FPresetsCustomData::EPresetCustomType::None)
|
||||||
|
{
|
||||||
|
if (ClipData->PresetsCustomData.PresetCustomType == FPresetsCustomData::EPresetCustomType::Breathe)
|
||||||
|
{
|
||||||
|
// 先拿到目前位置在第几个区间
|
||||||
|
float Between = -1;
|
||||||
|
int32 SingleAreaLength = (ClipData->ClipEndFrame - ClipData->ClipStartFrame) / ClipData->PresetsCustomData.Times / 2;
|
||||||
|
if (SeekMovieFrame > 0)
|
||||||
|
{
|
||||||
|
Between = (float)SeekMovieFrame / (float)SingleAreaLength;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Between != -1)
|
||||||
|
{
|
||||||
|
FLinearColor LinearColor = FLinearColor::Black;
|
||||||
|
FLinearColor CustomColor = ClipData->PresetsCustomData.Colors[0];
|
||||||
|
LinearColor = FMath::Lerp((int32)Between % 2 == 0 ? CustomColor : FLinearColor::Black, (int32)Between % 2 == 0 ? FLinearColor::Black : CustomColor, Between - (int32)Between);
|
||||||
|
TArray<FColor> Colors;
|
||||||
|
Colors.Init(LinearColor.ToFColor(false), FGlobalData::LightArrayX * FGlobalData::LightArrayY * 4);
|
||||||
|
MainWidgetInterface->OnUpdateLightArray(Colors);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (ClipData->PresetsCustomData.PresetCustomType == FPresetsCustomData::EPresetCustomType::Flash)
|
||||||
|
{
|
||||||
|
float Between = -1;
|
||||||
|
int32 SingleAreaLength = (ClipData->ClipEndFrame - ClipData->ClipStartFrame) / ClipData->PresetsCustomData.Times / 2;
|
||||||
|
if (SeekMovieFrame > 0)
|
||||||
|
{
|
||||||
|
Between = (float)SeekMovieFrame / (float)SingleAreaLength;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Between != -1)
|
||||||
|
{
|
||||||
|
TArray<FColor> Colors;
|
||||||
|
Colors.Init((int32)Between % 2 == 1 ? ClipData->PresetsCustomData.Colors[0].ToFColor(false) : FLinearColor::Black.ToFColor(false), FGlobalData::LightArrayX * FGlobalData::LightArrayY * 4);
|
||||||
|
MainWidgetInterface->OnUpdateLightArray(Colors);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (ClipData->PresetType == EPresetType::Color)
|
if (ClipData->PresetType == EPresetType::Color)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -397,6 +486,47 @@ void STimelineClip::Seek(int32 Frame)
|
|||||||
{
|
{
|
||||||
const int32 Offset = Frame - ClipData->ClipStartFrame;
|
const int32 Offset = Frame - ClipData->ClipStartFrame;
|
||||||
const int32 SeekMovieFrame = ClipData->VideoStartFrame + Offset;
|
const int32 SeekMovieFrame = ClipData->VideoStartFrame + Offset;
|
||||||
|
if (ClipData->PresetsCustomData.PresetCustomType != FPresetsCustomData::EPresetCustomType::None)
|
||||||
|
{
|
||||||
|
if (ClipData->PresetsCustomData.PresetCustomType == FPresetsCustomData::EPresetCustomType::Breathe)
|
||||||
|
{
|
||||||
|
// 先拿到目前位置在第几个区间
|
||||||
|
float Between = -1;
|
||||||
|
int32 SingleAreaLength = (ClipData->ClipEndFrame - ClipData->ClipStartFrame) / ClipData->PresetsCustomData.Times / 2;
|
||||||
|
if (SeekMovieFrame > 0)
|
||||||
|
{
|
||||||
|
Between = (float)SeekMovieFrame / (float)SingleAreaLength;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Between != -1)
|
||||||
|
{
|
||||||
|
FLinearColor LinearColor = FLinearColor::Black;
|
||||||
|
FLinearColor CustomColor = ClipData->PresetsCustomData.Colors[0];
|
||||||
|
LinearColor = FMath::Lerp((int32)Between % 2 == 0 ? CustomColor : FLinearColor::Black, (int32)Between % 2 == 0 ? FLinearColor::Black : CustomColor, Between - (int32)Between);
|
||||||
|
GEngine->AddOnScreenDebugMessage(-1, 0.1f, FColor::Red, FString::Printf(TEXT("Between %s"), *CustomColor.ToString()));
|
||||||
|
MainWidgetInterface->OnUpdatePlayers(Body, LinearColor.ToFColor(false));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (ClipData->PresetsCustomData.PresetCustomType == FPresetsCustomData::EPresetCustomType::Flash)
|
||||||
|
{
|
||||||
|
float Between = -1;
|
||||||
|
int32 SingleAreaLength = (ClipData->ClipEndFrame - ClipData->ClipStartFrame) / ClipData->PresetsCustomData.Times / 2;
|
||||||
|
if (SeekMovieFrame > 0)
|
||||||
|
{
|
||||||
|
Between = (float)SeekMovieFrame / (float)SingleAreaLength;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Between != -1)
|
||||||
|
{
|
||||||
|
MainWidgetInterface->OnUpdatePlayers(Body, (int32)Between % 2 == 1 ? ClipData->PresetsCustomData.Colors[0].ToFColor(false) : FLinearColor::Black.ToFColor(false));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (ClipData->PresetType == EPresetType::NotAPresets)
|
if (ClipData->PresetType == EPresetType::NotAPresets)
|
||||||
{
|
{
|
||||||
if (SeekMovieFrame < ClipData->PlayerLightData.Num())
|
if (SeekMovieFrame < ClipData->PlayerLightData.Num())
|
||||||
@ -520,6 +650,33 @@ int32 STimelineClip::OnPaint(const FPaintArgs& Args, const FGeometry& AllottedGe
|
|||||||
bool bParentEnabled) const
|
bool bParentEnabled) const
|
||||||
{
|
{
|
||||||
|
|
||||||
|
TArray<FSlateGradientStop> BreatheGradientStops;
|
||||||
|
if (ClipData->PresetsCustomData.PresetCustomType == FPresetsCustomData::EPresetCustomType::Breathe)
|
||||||
|
{
|
||||||
|
for (int32 i = 0; i < ClipData->PresetsCustomData.Times * 2; i++)
|
||||||
|
{
|
||||||
|
int32 CurrentSpace = i * (AllottedGeometry.Size.X / ClipData->PresetsCustomData.Times);
|
||||||
|
BreatheGradientStops.Add(FSlateGradientStop(FVector2f(CurrentSpace / 2, 0), i % 2 == 0 ? ClipData->PresetsCustomData.Colors[0] : FLinearColor::Black));
|
||||||
|
}
|
||||||
|
BreatheGradientStops.Add(FSlateGradientStop(FVector2f(AllottedGeometry.Size.X, 0), ClipData->PresetsCustomData.Colors[0]));
|
||||||
|
FSlateDrawElement::MakeGradient(OutDrawElements, LayerId + 4, AllottedGeometry.ToPaintGeometry(),
|
||||||
|
BreatheGradientStops,
|
||||||
|
EOrientation::Orient_Vertical, ESlateDrawEffect::None);
|
||||||
|
return SCompoundWidget::OnPaint(Args, AllottedGeometry, MyCullingRect, OutDrawElements, LayerId + 1, InWidgetStyle,
|
||||||
|
bParentEnabled);
|
||||||
|
}
|
||||||
|
if (ClipData->PresetsCustomData.PresetCustomType == FPresetsCustomData::EPresetCustomType::Flash)
|
||||||
|
{
|
||||||
|
for (int32 i = 0; i < ClipData->PresetsCustomData.Times * 2; i++)
|
||||||
|
{
|
||||||
|
const FSlateBrush SlateBrush;
|
||||||
|
int32 CurrentSpace = i * (AllottedGeometry.Size.X / ClipData->PresetsCustomData.Times);
|
||||||
|
FSlateDrawElement::MakeBox(OutDrawElements, LayerId + 4, AllottedGeometry.ToPaintGeometry(FVector2f((AllottedGeometry.Size.X / ClipData->PresetsCustomData.Times) / 2, AllottedGeometry.Size.Y), FSlateLayoutTransform(FVector2f(CurrentSpace / 2, 0))),
|
||||||
|
&SlateBrush, ESlateDrawEffect::None, i % 2 == 0 ? ClipData->PresetsCustomData.Colors[0] : FLinearColor::Black);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (ClipData->PresetType == EPresetType::Color)
|
if (ClipData->PresetType == EPresetType::Color)
|
||||||
{
|
{
|
||||||
const FSlateBrush Brush;
|
const FSlateBrush Brush;
|
||||||
@ -535,7 +692,7 @@ int32 STimelineClip::OnPaint(const FPaintArgs& Args, const FGeometry& AllottedGe
|
|||||||
GradientStops.Add(FSlateGradientStop(FVector2D(ClipData->Cursors[i].CursorFrameOffset * FGlobalData::DefaultTimeTickSpace, 0), ClipData->Cursors[i].Color));
|
GradientStops.Add(FSlateGradientStop(FVector2D(ClipData->Cursors[i].CursorFrameOffset * FGlobalData::DefaultTimeTickSpace, 0), ClipData->Cursors[i].Color));
|
||||||
}
|
}
|
||||||
|
|
||||||
FSlateDrawElement::MakeGradient(OutDrawElements, LayerId + 10000, AllottedGeometry.ToPaintGeometry(),
|
FSlateDrawElement::MakeGradient(OutDrawElements, LayerId + 4, AllottedGeometry.ToPaintGeometry(),
|
||||||
GradientStops,
|
GradientStops,
|
||||||
EOrientation::Orient_Vertical, ESlateDrawEffect::None);
|
EOrientation::Orient_Vertical, ESlateDrawEffect::None);
|
||||||
}
|
}
|
||||||
|
@ -32,14 +32,14 @@ void STimelineTick::Construct(const FArguments& InArgs)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void STimelineTick::UpdateNewCursorPosition(const float Position)
|
void STimelineTick::UpdateNewCursorPosition(const int32 Position)
|
||||||
{
|
{
|
||||||
const FSlateRenderTransform NewRenderTransform =
|
const FSlateRenderTransform NewRenderTransform =
|
||||||
::Concatenate(FScale2D(0.3, 38), FShear2D(0, 0), FQuat2D(FMath::DegreesToRadians(0)), FVector2D(Position, -2));
|
::Concatenate(FScale2D(0.3, 38), FShear2D(0, 0), FQuat2D(FMath::DegreesToRadians(0)), FVector2D(Position * FGlobalData::DefaultTimeTickSpace, -2));
|
||||||
if (TickCursor)
|
if (TickCursor)
|
||||||
{
|
{
|
||||||
TickCursor->SetRenderTransform(NewRenderTransform);
|
TickCursor->SetRenderTransform(NewRenderTransform);
|
||||||
CursorPosition = Position / FGlobalData::DefaultTimeTickSpace;
|
CursorPosition = Position;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -99,7 +99,7 @@ FReply STimelineTick::OnMouseButtonDown(const FGeometry& MyGeometry, const FPoin
|
|||||||
|
|
||||||
FReply STimelineTick::OnDragOver(const FGeometry& MyGeometry, const FDragDropEvent& DragDropEvent)
|
FReply STimelineTick::OnDragOver(const FGeometry& MyGeometry, const FDragDropEvent& DragDropEvent)
|
||||||
{
|
{
|
||||||
UpdateNewCursorPosition((MyGeometry.AbsoluteToLocal(DragDropEvent.GetScreenSpacePosition()).X));
|
UpdateNewCursorPosition((MyGeometry.AbsoluteToLocal(DragDropEvent.GetScreenSpacePosition()).X) / FGlobalData::DefaultTimeTickSpace);
|
||||||
|
|
||||||
return SCompoundWidget::OnDragOver(MyGeometry, DragDropEvent);
|
return SCompoundWidget::OnDragOver(MyGeometry, DragDropEvent);
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,7 @@ public:
|
|||||||
|
|
||||||
/** Constructs this widget with InArgs */
|
/** Constructs this widget with InArgs */
|
||||||
void Construct(const FArguments& InArgs);
|
void Construct(const FArguments& InArgs);
|
||||||
void UpdateNewCursorPosition(const float Position);
|
void UpdateNewCursorPosition(const int32 Position);
|
||||||
void GenerateTickBox(int32 TickCount);
|
void GenerateTickBox(int32 TickCount);
|
||||||
virtual int32 OnPaint(const FPaintArgs& Args, const FGeometry& AllottedGeometry, const FSlateRect& MyCullingRect, FSlateWindowElementList& OutDrawElements, int32 LayerId, const FWidgetStyle& InWidgetStyle, bool bParentEnabled) const override;
|
virtual int32 OnPaint(const FPaintArgs& Args, const FGeometry& AllottedGeometry, const FSlateRect& MyCullingRect, FSlateWindowElementList& OutDrawElements, int32 LayerId, const FWidgetStyle& InWidgetStyle, bool bParentEnabled) const override;
|
||||||
int32 GetCursorPosition() const { return CursorPosition; };
|
int32 GetCursorPosition() const { return CursorPosition; };
|
||||||
|
@ -103,6 +103,8 @@ FReply STrackBody::OnDragOver(const FGeometry& MyGeometry, const FDragDropEvent&
|
|||||||
{
|
{
|
||||||
CutDragDropBase->OverrideWidget = SharedThis(this);
|
CutDragDropBase->OverrideWidget = SharedThis(this);
|
||||||
}
|
}
|
||||||
|
// DragDropOperator* DragDropOperator = DragDropOperator::GetDragDropOperator();
|
||||||
|
// DragDropOperator->OnDragOver(MyGeometry, DragDropEvent);
|
||||||
return SCompoundWidget::OnDragOver(MyGeometry, DragDropEvent);
|
return SCompoundWidget::OnDragOver(MyGeometry, DragDropEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -116,6 +118,15 @@ void STrackBody::OnDragLeave(const FDragDropEvent& DragDropEvent)
|
|||||||
SCompoundWidget::OnDragLeave(DragDropEvent);
|
SCompoundWidget::OnDragLeave(DragDropEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FReply STrackBody::OnMouseButtonDown(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent)
|
||||||
|
{
|
||||||
|
TSharedPtr<FCutDragDropBase> DragDropOperator = MakeShared<FCutDragDropBase>();
|
||||||
|
DragDropOperator->DragDropType = FCutDragDropBase::EType::MovePanel;
|
||||||
|
DragDropOperator->DragOffset = MyGeometry.AbsoluteToLocal(MouseEvent.GetScreenSpacePosition()).X;
|
||||||
|
DragDropOperator->DraggingWidget = TrackHead->CutTimeline;
|
||||||
|
return FReply::Handled().DetectDrag(SharedThis(this), EKeys::LeftMouseButton).BeginDragDrop(DragDropOperator.ToSharedRef());
|
||||||
|
}
|
||||||
|
|
||||||
void STrackBody::RemoveClip(const FGuid& Guid)
|
void STrackBody::RemoveClip(const FGuid& Guid)
|
||||||
{
|
{
|
||||||
for (int32 i = 0; i < SlateClips.Num(); i++)
|
for (int32 i = 0; i < SlateClips.Num(); i++)
|
||||||
|
@ -29,6 +29,7 @@ public:
|
|||||||
virtual FReply OnDragOver(const FGeometry& MyGeometry, const FDragDropEvent& DragDropEvent) override;
|
virtual FReply OnDragOver(const FGeometry& MyGeometry, const FDragDropEvent& DragDropEvent) override;
|
||||||
virtual void OnDragEnter(const FGeometry& MyGeometry, const FDragDropEvent& DragDropEvent) override;
|
virtual void OnDragEnter(const FGeometry& MyGeometry, const FDragDropEvent& DragDropEvent) override;
|
||||||
virtual void OnDragLeave(const FDragDropEvent& DragDropEvent) override;
|
virtual void OnDragLeave(const FDragDropEvent& DragDropEvent) override;
|
||||||
|
virtual FReply OnMouseButtonDown(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent) override;
|
||||||
|
|
||||||
virtual void RemoveClip(const FGuid& Guid) override;
|
virtual void RemoveClip(const FGuid& Guid) override;
|
||||||
virtual void BreakClip(const FGuid& Guid) override;
|
virtual void BreakClip(const FGuid& Guid) override;
|
||||||
|
Loading…
Reference in New Issue
Block a user