Skip to content
Snippets Groups Projects
Commit 95b70728 authored by Sebastian Pape's avatar Sebastian Pape
Browse files

Backporting the mousehandling etc from the study

parent 712c25a1
No related branches found
No related tags found
1 merge request!2Backporting many features from the study on top of the Dasher3D-Core
[FilterPlugin]
; This section lists additional files which will be packaged along with your plugin. Paths should be listed relative to the root plugin directory, and
; may include "...", "*", and "?" wildcards to match directories, files, and individual characters respectively.
;
; Examples:
; /README.txt
; /Extras/...
; /Binaries/ThirdParty/*.dll
This diff is collapsed.
......@@ -30,91 +30,86 @@ void UDasherWidget::SynchronizeProperties()
//Check if we're in Editor
DasherScreen->SetEditor(IsDesignTime());
DasherScreen->CharacterEntered.BindLambda([this](FString Char, FString Buffer)
{
CharacterEntered.Broadcast(Char, Buffer);
BufferAltered.Broadcast(Buffer);
});
DasherScreen->CharacterDeleted.BindLambda([this](FString Char, FString Buffer)
{
CharacterDeleted.Broadcast(Char, Buffer);
BufferAltered.Broadcast(Buffer);
});
DasherScreen->CharacterSwitched.BindLambda([this](FString Char, FString Buffer)
{
CharacterSwitched.Broadcast(Char, Buffer);
BufferAltered.Broadcast(Buffer);
});
DasherScreen->MouseUpListeners.BindLambda([this]() {MouseEvent.Broadcast(false); });
DasherScreen->MouseDownListeners.BindLambda([this]() {MouseEvent.Broadcast(true); });
DasherScreen->CharacterEntered.BindLambda([this](FString Char, FString Buffer){CharacterEntered.Broadcast(Char, Buffer); });
DasherScreen->CharacterDeleted.BindLambda([this](FString Char, FString Buffer){CharacterDeleted.Broadcast(Char, Buffer); });
DasherScreen->MouseListeners.BindLambda([this](int index, bool pressed) { MouseEvent.Broadcast(index, pressed); });
DasherScreen->BoostListeners.BindLambda([this](int index, bool pressed) { BoostEvent.Broadcast(index, pressed); });
DasherScreen->BufferAltered.BindLambda([this](FString Buffer) { BufferAltered.Broadcast(Buffer); });
DasherScreen->CharacterEnteredLastFrame.BindLambda([this](){ CharacterEnteredLastFrame.Broadcast(); });
DasherScreen->CharacterDeletedLastFrame.BindLambda([this](){ CharacterDeletedLastFrame.Broadcast(); });
DasherScreen->CharacterSwitchedLastFrame.BindLambda([this](){ CharacterSwitchedLastFrame.Broadcast(); });
DasherScreen->DasherFrameCompleted.BindLambda([this]() { DasherFrameCompleted.Broadcast(); });
}
void UDasherWidget::ReleaseSlateResources(bool bReleaseChildren)
{
Super::ReleaseSlateResources(bReleaseChildren);
DasherScreen.Reset();
if(bReleaseChildren) DasherScreen.Reset();
}
FString UDasherWidget::GetBuffer()
{
if(!DasherScreen) return "";
return DasherScreen->GetBuffer();
}
void UDasherWidget::ResetBuffer()
{
if(!DasherScreen) return;
DasherScreen->ResetBuffer();
BufferAltered.Broadcast("");
}
void UDasherWidget::StartTraining(FString PathToTextFile)
{
if(!DasherScreen) return;
DasherScreen->StartTraining(PathToTextFile);
}
void UDasherWidget::SetBoolParamter(FString ParameterName, bool Value)
{
if(!DasherScreen) return;
DasherScreen->SetParameter(ParameterName, Value);
}
void UDasherWidget::SetLongParamter(FString ParameterName, int64 Value)
{
if(!DasherScreen) return;
DasherScreen->SetParameter(ParameterName, Value);
}
void UDasherWidget::SetStringParamter(FString ParameterName, FString Value)
{
if(!DasherScreen) return;
DasherScreen->SetParameter(ParameterName, Value);
}
void UDasherWidget::InputButton(bool Pressed)
{
DasherScreen->InputButton(Pressed);
if(!DasherScreen) return;
DasherScreen->VectorInputButton(Pressed);
}
void UDasherWidget::InputVector(FVector2D InputVector)
{
if(!DasherScreen) return;
DasherScreen->InputVector(InputVector);
}
void UDasherWidget::PauseInput()
bool UDasherWidget::GetInputEnabled() const
{
DasherScreen->PauseInput();
if(!DasherScreen) return false;
return DasherScreen->GetInputEnabled();
}
void UDasherWidget::UnpauseInput()
void UDasherWidget::EnableInput(bool enabled)
{
DasherScreen->UnpauseInput();
if(!DasherScreen) return;
DasherScreen->EnableInput(enabled);
}
#if WITH_EDITOR
//const FSlateBrush* UDasherWidget::GetEditorIcon()
//{
// return FUMGStyle::Get().GetBrush("Widget.Image");
//}
const FText UDasherWidget::GetPaletteCategory()
{
return LOCTEXT("Common", "Common");
......
......@@ -16,6 +16,7 @@
enum class GeometryType : uint8
{
Rectangle = 0,
Writing = 1,
PolyLine = 2
......@@ -48,7 +49,6 @@ struct FWriting : DasherDrawGeometry{
FVector2D pos;
int size;
FLinearColor color;
FWriting(FString Label, FVector2D Pos, int Size, FLinearColor Color) : DasherDrawGeometry(GeometryType::Writing), label(Label), pos(Pos), size(Size), color(Color) {}
};
......@@ -61,15 +61,26 @@ struct FPolyLine : DasherDrawGeometry{
FPolyLine(TArray<FVector2D> Points, float LineWidth, FLinearColor Color, bool AntiAliasing): DasherDrawGeometry(GeometryType::PolyLine), points(Points), linewidth(LineWidth), AntiAliasing(AntiAliasing), color(Color) {}
};
DECLARE_DELEGATE(FDasherMouseUpDelegate);
DECLARE_DELEGATE(FDasherMouseDownDelegate);
DECLARE_DELEGATE_TwoParams(FBufferManiputlationDelegate, FString, FString);
struct FMouseState
{
bool PrimaryButtonPressed = false;
bool SecondaryButtonPressed = false;
bool DisabledDueToMouseLeave = false;
FVector2D CursorPosition = {0,0};
bool CurrentlyHovering = true;
};
DECLARE_DELEGATE(FDasherEventDelegate);
DECLARE_DELEGATE_TwoParams(FDasherMouseDelegate, int, bool);
DECLARE_DELEGATE_OneParam(FBufferManiputlationDelegate, FString);
DECLARE_DELEGATE_TwoParams(FCharManiputlationDelegate, FString, FString);
class DASHERVR_API SDasherWidget : public SCompoundWidget, public Dasher::CDasherScreen, public Dasher::CScreenCoordInput
{
public:
SLATE_BEGIN_ARGS(SDasherWidget)
{}
......@@ -122,30 +133,35 @@ public:
void SetEditor(bool EditorState);
//mouse handling function
FReply HandleMouseMoveEvent(const FGeometry& Geometry, const FPointerEvent& MouseEvent);
FReply HandleMouseDownEvent(const FGeometry& Geometry, const FPointerEvent& MouseEvent);
FReply HandleMouseUpEvent(const FGeometry& Geometry, const FPointerEvent& MouseEvent);
FReply HandleMouseDoubleClickEvent(const FGeometry& Geometry, const FPointerEvent& MouseEvent);
virtual FReply OnMouseButtonDown(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent) override;
virtual FReply OnMouseMove(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent) override;
virtual void OnMouseEnter(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent) override;
virtual void OnMouseLeave(const FPointerEvent& MouseEvent) override;
virtual FReply OnMouseButtonDoubleClick(const FGeometry& InMyGeometry, const FPointerEvent& InMouseEvent) override;
virtual FReply OnMouseButtonUp(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent) override;
virtual bool SupportsKeyboardFocus() const override {return true;}
virtual bool GetScreenCoords(screenint& iX, screenint& iY, Dasher::CDasherView* pView) override;
void HandleClusterEvent(const FDisplayClusterClusterEventBinary& Event);
void InputVector(FVector2D InputVector);
void InputButton(bool Pressed);
void VectorInputButton(bool Pressed);
void VectorBoostButton(bool Pressed);
FVector2D GetCursorPosition() const;
//Allows to Pause Input
void PauseInput();
void UnpauseInput();
FDasherMouseUpDelegate MouseUpListeners;
FDasherMouseUpDelegate MouseDownListeners;
FBufferManiputlationDelegate CharacterEntered;
FBufferManiputlationDelegate CharacterDeleted;
void EnableInput(bool enable);
bool GetInputEnabled() const;
FBufferManiputlationDelegate CharacterSwitched;
FDasherMouseDelegate MouseListeners;
FDasherMouseDelegate BoostListeners;
FCharManiputlationDelegate CharacterEntered;
FCharManiputlationDelegate CharacterDeleted;
FDasherEventDelegate CharacterEnteredLastFrame;
FDasherEventDelegate CharacterDeletedLastFrame;
FDasherEventDelegate CharacterSwitchedLastFrame;
FBufferManiputlationDelegate BufferAltered;
FDasherEventDelegate DasherFrameCompleted;
private:
......@@ -157,18 +173,23 @@ private:
int Height = 0;
int Width = 0;
bool HasBeenPainted = false;
bool CurrentlyUsingVectorInput = false;
point CursorPosition = {0,0};
point NewMousePosition = {0,0};
bool CharacterEnteredFlag = false;
bool CharacterDeletedFlag = false;
FString AlteredChar = "";
//are we in the Editor?
bool IsEditor = true;
//is the input paused
bool InputPaused = false;
bool IsEditor = true; //are we in the Editor?
bool CharDeletedInFrame = false;
bool CharEnteredInFrame = false;
bool InputPaused = false; //is the input paused
//Mouse States
TMap<int, FMouseState> MouseStates;
TArray<int> MouseInteractions;
const int VectorInputPointerIndex = 42;
FMouseState& GetMouseState(int Index);
void UpdateMouseInteraction(int Index);
int GetLastActiveMouseInteraction() const;
//set up the font measure service to ... measure fonts.
TSharedPtr<FSlateFontMeasure> FontMeasureService;
......
......@@ -14,7 +14,8 @@
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FCharManipulatedEvent, FString, Char, FString, Buffer);
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FBufferManipulatedEvent, FString, Buffer);
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FMouseEvent, bool, IsMouseDown);
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FMouseEvent, int, PointerIndex, bool, IsMouseDown);
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FDasherEvent);
UCLASS(BlueprintType)
class DASHERVR_API UDasherWidget : public UWidget
......@@ -40,15 +41,19 @@ public:
UFUNCTION(BlueprintCallable) void InputButton(bool Pressed);
UFUNCTION(BlueprintCallable) void InputVector(FVector2D InputVector);
UFUNCTION(BlueprintCallable) void PauseInput();
UFUNCTION(BlueprintCallable) void UnpauseInput();
UFUNCTION(BlueprintPure) bool GetInputEnabled() const;
UFUNCTION(BlueprintCallable) void EnableInput(bool enabled);
UPROPERTY(BlueprintAssignable) FCharManipulatedEvent CharacterEntered;
UPROPERTY(BlueprintAssignable) FCharManipulatedEvent CharacterDeleted;
UPROPERTY(BlueprintAssignable) FCharManipulatedEvent CharacterSwitched;
UPROPERTY(BlueprintAssignable) FBufferManipulatedEvent BufferAltered;
UPROPERTY(BlueprintAssignable) FMouseEvent MouseEvent;
UPROPERTY(BlueprintAssignable) FMouseEvent BoostEvent;
UPROPERTY(BlueprintAssignable) FDasherEvent DasherFrameCompleted;
UPROPERTY(BlueprintAssignable) FDasherEvent CharacterSwitchedLastFrame;
UPROPERTY(BlueprintAssignable) FDasherEvent CharacterEnteredLastFrame;
UPROPERTY(BlueprintAssignable) FDasherEvent CharacterDeletedLastFrame;
public:
// UWidget interface
......
......@@ -8,7 +8,8 @@ public class Dasher : ModuleRules
{
public Dasher(ReadOnlyTargetRules Target) : base(Target)
{
PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs;
PCHUsage = PCHUsageMode.NoSharedPCHs;
CppStandard = CppStandardVersion.Cpp17;
Type = ModuleType.External;
PrivateDefinitions.Add("HAVE_OWN_FILEUTILS");
......
services:
builder:
image: ghcr.io/epicgames/unreal-engine:dev-5.3
volumes:
- ./:/build
command: bash -c "sudo apt-get update && sudo apt-get install -y cmake && cd /build && rm -rf build && mkdir build && cd build && cmake .. && make"
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment