// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include #include #include #include #include #include #include "RealTimeStylusTabletContext.h" namespace UE::StylusInput { class IStylusInputEventHandler; } namespace UE::StylusInput::RealTimeStylus { class FRealTimeStylusPluginSync; class FRealTimeStylusPluginAsync; class FRealTimeStylusAPI; class FRealTimeStylusInstance : public IStylusInputInstance { public: explicit FRealTimeStylusInstance(uint32 ID, HWND OSWindowHandle); virtual ~FRealTimeStylusInstance() override; virtual bool AddEventHandler(IStylusInputEventHandler* EventHandler, EEventHandlerThread Thread) override; virtual bool RemoveEventHandler(IStylusInputEventHandler* EventHandler) override; virtual const TSharedPtr GetTabletContext(uint32 TabletContextID) override; virtual const TSharedPtr GetStylusInfo(uint32 StylusID) override; virtual float GetPacketsPerSecond(EEventHandlerThread EventHandlerThread) const override; virtual FName GetInterfaceName() override; virtual FText GetName() override; virtual bool WasInitializedSuccessfully() const override; private: void EnablePlugin(EEventHandlerThread EventHandlerThread, IStylusInputEventHandler* EventHandler); void DisablePlugin(EEventHandlerThread EventHandlerThread); void SetupWindowContext(HWND HWindow); const FWindowContext& GetWindowContext() const; void UpdateStylusInfo(STYLUS_ID StylusID); void UpdateTabletContexts(const FTabletContextContainer& InTabletContexts); const uint32 ID; const FRealTimeStylusAPI& RealTimeStylusAPI; FWindowContext WindowContext; TComPtr RealTimeStylus; TUniquePtr AsyncPlugin; TUniquePtr SyncPlugin; FTabletContextThreadSafeContainer TabletContexts; FStylusInfoThreadSafeContainer StylusInfos; bool bWasInitializedSuccessfully = true; }; }