mirror of
https://github.com/ValveSoftware/Proton.git
synced 2025-03-25 19:59:29 +03:00
370 lines
14 KiB
C++
370 lines
14 KiB
C++
//============ Copyright (c) Valve Corporation, All rights reserved. ============
|
|
|
|
#ifndef ISTEAMREMOTEPLAY_H
|
|
#define ISTEAMREMOTEPLAY_H
|
|
#ifdef _WIN32
|
|
#pragma once
|
|
#endif
|
|
|
|
#include "steam_api_common.h"
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: The form factor of a device
|
|
//-----------------------------------------------------------------------------
|
|
enum ESteamDeviceFormFactor
|
|
{
|
|
k_ESteamDeviceFormFactorUnknown = 0,
|
|
k_ESteamDeviceFormFactorPhone = 1,
|
|
k_ESteamDeviceFormFactorTablet = 2,
|
|
k_ESteamDeviceFormFactorComputer = 3,
|
|
k_ESteamDeviceFormFactorTV = 4,
|
|
k_ESteamDeviceFormFactorVRHeadset = 5,
|
|
};
|
|
|
|
|
|
// Steam Remote Play session ID
|
|
typedef uint32 RemotePlaySessionID_t;
|
|
|
|
|
|
// Steam Remote Play mouse cursor ID
|
|
typedef uint32 RemotePlayCursorID_t;
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: The type of input in ERemotePlayInput_t
|
|
//-----------------------------------------------------------------------------
|
|
enum ERemotePlayInputType
|
|
{
|
|
k_ERemotePlayInputUnknown,
|
|
k_ERemotePlayInputMouseMotion,
|
|
k_ERemotePlayInputMouseButtonDown,
|
|
k_ERemotePlayInputMouseButtonUp,
|
|
k_ERemotePlayInputMouseWheel,
|
|
k_ERemotePlayInputKeyDown,
|
|
k_ERemotePlayInputKeyUp
|
|
};
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: Mouse buttons in ERemotePlayInput_t
|
|
//-----------------------------------------------------------------------------
|
|
enum ERemotePlayMouseButton
|
|
{
|
|
k_ERemotePlayMouseButtonLeft = 0x0001,
|
|
k_ERemotePlayMouseButtonRight = 0x0002,
|
|
k_ERemotePlayMouseButtonMiddle = 0x0010,
|
|
k_ERemotePlayMouseButtonX1 = 0x0020,
|
|
k_ERemotePlayMouseButtonX2 = 0x0040,
|
|
};
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: Mouse wheel direction in ERemotePlayInput_t
|
|
//-----------------------------------------------------------------------------
|
|
enum ERemotePlayMouseWheelDirection
|
|
{
|
|
k_ERemotePlayMouseWheelUp = 1,
|
|
k_ERemotePlayMouseWheelDown = 2,
|
|
k_ERemotePlayMouseWheelLeft = 3,
|
|
k_ERemotePlayMouseWheelRight = 4,
|
|
};
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: Key scancode in ERemotePlayInput_t
|
|
//
|
|
// This is a USB scancode value as defined for the Keyboard/Keypad Page (0x07)
|
|
// This enumeration isn't a complete list, just the most commonly used keys.
|
|
//-----------------------------------------------------------------------------
|
|
enum ERemotePlayScancode
|
|
{
|
|
k_ERemotePlayScancodeUnknown = 0,
|
|
|
|
k_ERemotePlayScancodeA = 4,
|
|
k_ERemotePlayScancodeB = 5,
|
|
k_ERemotePlayScancodeC = 6,
|
|
k_ERemotePlayScancodeD = 7,
|
|
k_ERemotePlayScancodeE = 8,
|
|
k_ERemotePlayScancodeF = 9,
|
|
k_ERemotePlayScancodeG = 10,
|
|
k_ERemotePlayScancodeH = 11,
|
|
k_ERemotePlayScancodeI = 12,
|
|
k_ERemotePlayScancodeJ = 13,
|
|
k_ERemotePlayScancodeK = 14,
|
|
k_ERemotePlayScancodeL = 15,
|
|
k_ERemotePlayScancodeM = 16,
|
|
k_ERemotePlayScancodeN = 17,
|
|
k_ERemotePlayScancodeO = 18,
|
|
k_ERemotePlayScancodeP = 19,
|
|
k_ERemotePlayScancodeQ = 20,
|
|
k_ERemotePlayScancodeR = 21,
|
|
k_ERemotePlayScancodeS = 22,
|
|
k_ERemotePlayScancodeT = 23,
|
|
k_ERemotePlayScancodeU = 24,
|
|
k_ERemotePlayScancodeV = 25,
|
|
k_ERemotePlayScancodeW = 26,
|
|
k_ERemotePlayScancodeX = 27,
|
|
k_ERemotePlayScancodeY = 28,
|
|
k_ERemotePlayScancodeZ = 29,
|
|
|
|
k_ERemotePlayScancode1 = 30,
|
|
k_ERemotePlayScancode2 = 31,
|
|
k_ERemotePlayScancode3 = 32,
|
|
k_ERemotePlayScancode4 = 33,
|
|
k_ERemotePlayScancode5 = 34,
|
|
k_ERemotePlayScancode6 = 35,
|
|
k_ERemotePlayScancode7 = 36,
|
|
k_ERemotePlayScancode8 = 37,
|
|
k_ERemotePlayScancode9 = 38,
|
|
k_ERemotePlayScancode0 = 39,
|
|
|
|
k_ERemotePlayScancodeReturn = 40,
|
|
k_ERemotePlayScancodeEscape = 41,
|
|
k_ERemotePlayScancodeBackspace = 42,
|
|
k_ERemotePlayScancodeTab = 43,
|
|
k_ERemotePlayScancodeSpace = 44,
|
|
k_ERemotePlayScancodeMinus = 45,
|
|
k_ERemotePlayScancodeEquals = 46,
|
|
k_ERemotePlayScancodeLeftBracket = 47,
|
|
k_ERemotePlayScancodeRightBracket = 48,
|
|
k_ERemotePlayScancodeBackslash = 49,
|
|
k_ERemotePlayScancodeSemicolon = 51,
|
|
k_ERemotePlayScancodeApostrophe = 52,
|
|
k_ERemotePlayScancodeGrave = 53,
|
|
k_ERemotePlayScancodeComma = 54,
|
|
k_ERemotePlayScancodePeriod = 55,
|
|
k_ERemotePlayScancodeSlash = 56,
|
|
k_ERemotePlayScancodeCapsLock = 57,
|
|
|
|
k_ERemotePlayScancodeF1 = 58,
|
|
k_ERemotePlayScancodeF2 = 59,
|
|
k_ERemotePlayScancodeF3 = 60,
|
|
k_ERemotePlayScancodeF4 = 61,
|
|
k_ERemotePlayScancodeF5 = 62,
|
|
k_ERemotePlayScancodeF6 = 63,
|
|
k_ERemotePlayScancodeF7 = 64,
|
|
k_ERemotePlayScancodeF8 = 65,
|
|
k_ERemotePlayScancodeF9 = 66,
|
|
k_ERemotePlayScancodeF10 = 67,
|
|
k_ERemotePlayScancodeF11 = 68,
|
|
k_ERemotePlayScancodeF12 = 69,
|
|
|
|
k_ERemotePlayScancodeInsert = 73,
|
|
k_ERemotePlayScancodeHome = 74,
|
|
k_ERemotePlayScancodePageUp = 75,
|
|
k_ERemotePlayScancodeDelete = 76,
|
|
k_ERemotePlayScancodeEnd = 77,
|
|
k_ERemotePlayScancodePageDown = 78,
|
|
k_ERemotePlayScancodeRight = 79,
|
|
k_ERemotePlayScancodeLeft = 80,
|
|
k_ERemotePlayScancodeDown = 81,
|
|
k_ERemotePlayScancodeUp = 82,
|
|
|
|
k_ERemotePlayScancodeLeftControl = 224,
|
|
k_ERemotePlayScancodeLeftShift = 225,
|
|
k_ERemotePlayScancodeLeftAlt = 226,
|
|
k_ERemotePlayScancodeLeftGUI = 227, // windows, command (apple), meta
|
|
k_ERemotePlayScancodeRightControl = 228,
|
|
k_ERemotePlayScancodeRightShift = 229,
|
|
k_ERemotePlayScancodeRightALT = 230,
|
|
k_ERemotePlayScancodeRightGUI = 231, // windows, command (apple), meta
|
|
};
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: Key modifier in ERemotePlayInput_t
|
|
//-----------------------------------------------------------------------------
|
|
enum ERemotePlayKeyModifier
|
|
{
|
|
k_ERemotePlayKeyModifierNone = 0x0000,
|
|
k_ERemotePlayKeyModifierLeftShift = 0x0001,
|
|
k_ERemotePlayKeyModifierRightShift = 0x0002,
|
|
k_ERemotePlayKeyModifierLeftControl = 0x0040,
|
|
k_ERemotePlayKeyModifierRightControl = 0x0080,
|
|
k_ERemotePlayKeyModifierLeftAlt = 0x0100,
|
|
k_ERemotePlayKeyModifierRightAlt = 0x0200,
|
|
k_ERemotePlayKeyModifierLeftGUI = 0x0400,
|
|
k_ERemotePlayKeyModifierRightGUI = 0x0800,
|
|
k_ERemotePlayKeyModifierNumLock = 0x1000,
|
|
k_ERemotePlayKeyModifierCapsLock = 0x2000,
|
|
k_ERemotePlayKeyModifierMask = 0xFFFF,
|
|
};
|
|
|
|
|
|
#if defined( VALVE_CALLBACK_PACK_SMALL )
|
|
#pragma pack( push, 4 )
|
|
#elif defined( VALVE_CALLBACK_PACK_LARGE )
|
|
#pragma pack( push, 8 )
|
|
#else
|
|
#error steam_api_common.h should define VALVE_CALLBACK_PACK_xxx
|
|
#endif
|
|
|
|
// Mouse motion event data, valid when m_eType is k_ERemotePlayInputMouseMotion
|
|
struct RemotePlayInputMouseMotion_t
|
|
{
|
|
bool m_bAbsolute; // True if this is absolute mouse motion and m_flNormalizedX and m_flNormalizedY are valid
|
|
float m_flNormalizedX; // The absolute X position of the mouse, normalized to the display, if m_bAbsolute is true
|
|
float m_flNormalizedY; // The absolute Y position of the mouse, normalized to the display, if m_bAbsolute is true
|
|
int m_nDeltaX; // Relative mouse motion in the X direction
|
|
int m_nDeltaY; // Relative mouse motion in the Y direction
|
|
};
|
|
|
|
// Mouse wheel event data, valid when m_eType is k_ERemotePlayInputMouseWheel
|
|
struct RemotePlayInputMouseWheel_t
|
|
{
|
|
ERemotePlayMouseWheelDirection m_eDirection;
|
|
float m_flAmount; // 1.0f is a single click of the wheel, 120 units on Windows
|
|
};
|
|
|
|
// Key event data, valid when m_eType is k_ERemotePlayInputKeyDown or k_ERemotePlayInputKeyUp
|
|
struct RemotePlayInputKey_t
|
|
{
|
|
int m_eScancode; // Keyboard scancode, common values are defined in ERemotePlayScancode
|
|
uint32 m_unModifiers; // Mask of ERemotePlayKeyModifier active for this key event
|
|
uint32 m_unKeycode; // UCS-4 character generated by the keypress, or 0 if it wasn't a character key, e.g. Delete or Left Arrow
|
|
};
|
|
|
|
struct RemotePlayInput_t
|
|
{
|
|
RemotePlaySessionID_t m_unSessionID;
|
|
ERemotePlayInputType m_eType;
|
|
|
|
union
|
|
{
|
|
// Mouse motion event data, valid when m_eType is k_ERemotePlayInputMouseMotion
|
|
RemotePlayInputMouseMotion_t m_MouseMotion;
|
|
|
|
// Mouse button event data, valid when m_eType is k_ERemotePlayInputMouseButtonDown or k_ERemotePlayInputMouseButtonUp
|
|
ERemotePlayMouseButton m_eMouseButton;
|
|
|
|
// Mouse wheel event data, valid when m_eType is k_ERemotePlayInputMouseWheel
|
|
RemotePlayInputMouseWheel_t m_MouseWheel;
|
|
|
|
// Key event data, valid when m_eType is k_ERemotePlayInputKeyDown or k_ERemotePlayInputKeyUp
|
|
RemotePlayInputKey_t m_Key;
|
|
|
|
// Unused space for future use
|
|
char padding[ 64 - ( sizeof( m_unSessionID ) + sizeof( m_eType ) ) ];
|
|
} data;
|
|
};
|
|
//COMPILE_TIME_ASSERT( sizeof( RemotePlayInput_t ) == 64 );
|
|
|
|
#pragma pack( pop )
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: Functions to provide information about Steam Remote Play sessions
|
|
//-----------------------------------------------------------------------------
|
|
class ISteamRemotePlay
|
|
{
|
|
public:
|
|
// Get the number of currently connected Steam Remote Play sessions
|
|
virtual uint32 GetSessionCount() = 0;
|
|
|
|
// Get the currently connected Steam Remote Play session ID at the specified index. Returns zero if index is out of bounds.
|
|
virtual RemotePlaySessionID_t GetSessionID( int iSessionIndex ) = 0;
|
|
|
|
// Get the SteamID of the connected user
|
|
virtual CSteamID GetSessionSteamID( RemotePlaySessionID_t unSessionID ) = 0;
|
|
|
|
// Get the name of the session client device
|
|
// This returns NULL if the sessionID is not valid
|
|
virtual const char *GetSessionClientName( RemotePlaySessionID_t unSessionID ) = 0;
|
|
|
|
// Get the form factor of the session client device
|
|
virtual ESteamDeviceFormFactor GetSessionClientFormFactor( RemotePlaySessionID_t unSessionID ) = 0;
|
|
|
|
// Get the resolution, in pixels, of the session client device
|
|
// This is set to 0x0 if the resolution is not available
|
|
virtual bool BGetSessionClientResolution( RemotePlaySessionID_t unSessionID, int *pnResolutionX, int *pnResolutionY ) = 0;
|
|
|
|
// Show the Remote Play Together UI in the game overlay
|
|
// This returns false if your game is not configured for Remote Play Together
|
|
virtual bool ShowRemotePlayTogetherUI() = 0;
|
|
|
|
// Invite a friend to Remote Play Together, or create a guest invite if steamIDFriend is empty
|
|
// This will automatically start Remote Play Together if it hasn't already been started
|
|
// This returns false if the invite can't be sent or your game is not configured for Remote Play Together
|
|
virtual bool BSendRemotePlayTogetherInvite( CSteamID steamIDFriend ) = 0;
|
|
|
|
// Make mouse and keyboard input for Remote Play Together sessions available via GetInput() instead of being merged with local input
|
|
virtual bool BEnableRemotePlayTogetherDirectInput() = 0;
|
|
|
|
// Merge Remote Play Together mouse and keyboard input with local input
|
|
virtual void DisableRemotePlayTogetherDirectInput() = 0;
|
|
|
|
// Get input events from Remote Play Together sessions
|
|
// This is available after calling BEnableRemotePlayTogetherDirectInput()
|
|
//
|
|
// pInput is an array of input events that will be filled in by this function, up to unMaxEvents.
|
|
// This returns the number of events copied to pInput, or the number of events available if pInput is nullptr.
|
|
virtual uint32 GetInput( RemotePlayInput_t *pInput, uint32 unMaxEvents ) = 0;
|
|
|
|
// Set the mouse cursor visibility for a remote player
|
|
// This is available after calling BEnableRemotePlayTogetherDirectInput()
|
|
virtual void SetMouseVisibility( RemotePlaySessionID_t unSessionID, bool bVisible ) = 0;
|
|
|
|
// Set the mouse cursor position for a remote player
|
|
// This is available after calling BEnableRemotePlayTogetherDirectInput()
|
|
//
|
|
// This is used to warp the cursor to a specific location and isn't needed during normal event processing.
|
|
//
|
|
// The position is normalized relative to the window, where 0,0 is the upper left, and 1,1 is the lower right.
|
|
virtual void SetMousePosition( RemotePlaySessionID_t unSessionID, float flNormalizedX, float flNormalizedY ) = 0;
|
|
|
|
// Create a cursor that can be used with SetMouseCursor()
|
|
// This is available after calling BEnableRemotePlayTogetherDirectInput()
|
|
//
|
|
// Parameters:
|
|
// nWidth - The width of the cursor, in pixels
|
|
// nHeight - The height of the cursor, in pixels
|
|
// nHotX - The X coordinate of the cursor hot spot in pixels, offset from the left of the cursor
|
|
// nHotY - The Y coordinate of the cursor hot spot in pixels, offset from the top of the cursor
|
|
// pBGRA - A pointer to the cursor pixels, with the color channels in red, green, blue, alpha order
|
|
// nPitch - The distance between pixel rows in bytes, defaults to nWidth * 4
|
|
virtual RemotePlayCursorID_t CreateMouseCursor( int nWidth, int nHeight, int nHotX, int nHotY, const void *pBGRA, int nPitch = 0 ) = 0;
|
|
|
|
// Set the mouse cursor for a remote player
|
|
// This is available after calling BEnableRemotePlayTogetherDirectInput()
|
|
//
|
|
// The cursor ID is a value returned by CreateMouseCursor()
|
|
virtual void SetMouseCursor( RemotePlaySessionID_t unSessionID, RemotePlayCursorID_t unCursorID ) = 0;
|
|
};
|
|
|
|
#define STEAMREMOTEPLAY_INTERFACE_VERSION "STEAMREMOTEPLAY_INTERFACE_VERSION003"
|
|
|
|
// Global interface accessor
|
|
inline ISteamRemotePlay *SteamRemotePlay();
|
|
STEAM_DEFINE_USER_INTERFACE_ACCESSOR( ISteamRemotePlay *, SteamRemotePlay, STEAMREMOTEPLAY_INTERFACE_VERSION );
|
|
|
|
// callbacks
|
|
#if defined( VALVE_CALLBACK_PACK_SMALL )
|
|
#pragma pack( push, 4 )
|
|
#elif defined( VALVE_CALLBACK_PACK_LARGE )
|
|
#pragma pack( push, 8 )
|
|
#else
|
|
#error steam_api_common.h should define VALVE_CALLBACK_PACK_xxx
|
|
#endif
|
|
|
|
|
|
STEAM_CALLBACK_BEGIN( SteamRemotePlaySessionConnected_t, k_iSteamRemotePlayCallbacks + 1 )
|
|
STEAM_CALLBACK_MEMBER( 0, RemotePlaySessionID_t, m_unSessionID )
|
|
STEAM_CALLBACK_END( 0 )
|
|
|
|
|
|
STEAM_CALLBACK_BEGIN( SteamRemotePlaySessionDisconnected_t, k_iSteamRemotePlayCallbacks + 2 )
|
|
STEAM_CALLBACK_MEMBER( 0, RemotePlaySessionID_t, m_unSessionID )
|
|
STEAM_CALLBACK_END( 0 )
|
|
|
|
|
|
STEAM_CALLBACK_BEGIN( SteamRemotePlayTogetherGuestInvite_t, k_iSteamRemotePlayCallbacks + 3 )
|
|
STEAM_CALLBACK_MEMBER_ARRAY( 0, char, m_szConnectURL, 1024 )
|
|
STEAM_CALLBACK_END( 0 )
|
|
|
|
|
|
#pragma pack( pop )
|
|
|
|
|
|
#endif // #define ISTEAMREMOTEPLAY_H
|