Files
Brandyn / Techy fcc1b09210 init
2026-04-04 15:40:51 -05:00

61 lines
1.7 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include <StylusInput.h>
#include <Containers/Array.h>
#include <Microsoft/MinimalWindowsApi.h>
#include "WintabMessageHandler.h"
#include "WintabTabletContext.h"
#include "WintabStylus.h"
namespace UE::StylusInput
{
class IStylusInputEventHandler;
}
namespace UE::StylusInput::Wintab
{
class FWintabAPI;
class FWintabInstance : public IStylusInputInstance
{
public:
explicit FWintabInstance(uint32 ID, HWND OSWindowHandle);
virtual ~FWintabInstance() override;
virtual bool AddEventHandler(IStylusInputEventHandler* EventHandler, EEventHandlerThread Thread) override;
virtual bool RemoveEventHandler(IStylusInputEventHandler* EventHandler) override;
virtual const TSharedPtr<IStylusInputTabletContext> GetTabletContext(uint32 TabletContextID) override;
virtual const TSharedPtr<IStylusInputStylusInfo> 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:
const FTabletContext* GetTabletContextInternal(uint32 TabletContextID) const;
uint32 GetStylusID(uint32 TabletContextID, uint32 CursorIndex);
void ClearTabletContexts();
void UpdateTabletContexts();
void UpdateWindowRect();
const uint32 ID;
const FWintabAPI& WintabAPI;
const HWND OSWindowHandle;
RECT WindowRect = {};
FTabletContextContainer TabletContexts;
FStylusInfoContainer StylusInfos;
FWintabMessageHandler MessageHandler;
TArray<TTuple<uint64, uint32>> CursorIDToStylusIDMappings;
};
}