mirror of
https://github.com/kasmtech/KasmVNC.git
synced 2024-12-25 16:18:53 +01:00
25b8e64adb
This change adds support for the VMware Mouse Position pseudo-encoding[1], which is used to notify VNC clients when X11 clients call `XWarpPointer()`[2]. This function is called by SDL (and other similar libraries) when they detect that the server does not support native relative motion, like some RFB clients. With this, RFB clients can choose to adjust the local cursor position under certain circumstances to match what the server has set. For instance, if pointer lock has been enabled on the client's machine and the cursor is not being drawn locally, the local position of the cursor is irrelevant, so the RFB client can use what the server sends as the canonical absolute position of the cursor. This ultimately enables the possibility of games (especially FPS games) to behave how users expect (if the clients implement the corresponding change). Part of: #619 1: https://github.com/rfbproto/rfbproto/blob/master/rfbproto.rst#vmware-cursor-position-pseudo-encoding 2: https://tronche.com/gui/x/xlib/input/XWarpPointer.html 3: https://hg.libsdl.org/SDL/file/28e3b60e2131/src/events/SDL_mouse.c#l804
95 lines
3.6 KiB
C++
95 lines
3.6 KiB
C++
/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
|
|
* Copyeight (C) 2011 D. R. Commander. All Rights Reserved.
|
|
*
|
|
* This is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This software is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this software; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
|
* USA.
|
|
*/
|
|
#ifndef __RFB_ENCODINGS_H__
|
|
#define __RFB_ENCODINGS_H__
|
|
|
|
namespace rfb {
|
|
|
|
const int encodingRaw = 0;
|
|
const int encodingCopyRect = 1;
|
|
const int encodingRRE = 2;
|
|
const int encodingCoRRE = 4;
|
|
const int encodingHextile = 5;
|
|
const int encodingTight = 7;
|
|
const int encodingZRLE = 16;
|
|
|
|
const int encodingMax = 255;
|
|
|
|
const int pseudoEncodingXCursor = -240;
|
|
const int pseudoEncodingCursor = -239;
|
|
const int pseudoEncodingDesktopSize = -223;
|
|
const int pseudoEncodingLEDState = -261;
|
|
const int pseudoEncodingExtendedDesktopSize = -308;
|
|
const int pseudoEncodingDesktopName = -307;
|
|
const int pseudoEncodingFence = -312;
|
|
const int pseudoEncodingContinuousUpdates = -313;
|
|
const int pseudoEncodingCursorWithAlpha = -314;
|
|
const int pseudoEncodingQEMUKeyEvent = -258;
|
|
|
|
// TightVNC-specific
|
|
const int pseudoEncodingLastRect = -224;
|
|
const int pseudoEncodingQualityLevel0 = -32;
|
|
const int pseudoEncodingQualityLevel9 = -23;
|
|
const int pseudoEncodingCompressLevel0 = -256;
|
|
const int pseudoEncodingCompressLevel9 = -247;
|
|
|
|
// TurboVNC-specific
|
|
const int pseudoEncodingFineQualityLevel0 = -512;
|
|
const int pseudoEncodingFineQualityLevel100 = -412;
|
|
const int pseudoEncodingSubsamp1X = -768;
|
|
const int pseudoEncodingSubsamp4X = -767;
|
|
const int pseudoEncodingSubsamp2X = -766;
|
|
const int pseudoEncodingSubsampGray = -765;
|
|
const int pseudoEncodingSubsamp8X = -764;
|
|
const int pseudoEncodingSubsamp16X = -763;
|
|
|
|
// Kasm-specific
|
|
const int pseudoEncodingWEBP = -1024;
|
|
const int pseudoEncodingJpegVideoQualityLevel0 = -1023;
|
|
const int pseudoEncodingJpegVideoQualityLevel9 = -1014;
|
|
const int pseudoEncodingWebpVideoQualityLevel0 = -1013;
|
|
const int pseudoEncodingWebpVideoQualityLevel9 = -1004;
|
|
const int pseudoEncodingTreatLosslessLevel0 = -1003;
|
|
const int pseudoEncodingTreatLosslessLevel10 = -993;
|
|
const int pseudoEncodingPreferBandwidth = -992;
|
|
const int pseudoEncodingDynamicQualityMinLevel0 = -991;
|
|
const int pseudoEncodingDynamicQualityMinLevel9 = -982;
|
|
const int pseudoEncodingDynamicQualityMaxLevel0 = -981;
|
|
const int pseudoEncodingDynamicQualityMaxLevel9 = -972;
|
|
const int pseudoEncodingVideoAreaLevel1 = -971;
|
|
const int pseudoEncodingVideoAreaLevel100 = -871;
|
|
const int pseudoEncodingVideoTimeLevel0 = -870;
|
|
const int pseudoEncodingVideoTimeLevel100 = -770;
|
|
|
|
const int pseudoEncodingFrameRateLevel10 = -2048;
|
|
const int pseudoEncodingFrameRateLevel60 = -1998;
|
|
const int pseudoEncodingMaxVideoResolution = -1997;
|
|
const int pseudoEncodingVideoScalingLevel0 = -1996;
|
|
const int pseudoEncodingVideoScalingLevel9 = -1987;
|
|
const int pseudoEncodingVideoOutTimeLevel1 = -1986;
|
|
const int pseudoEncodingVideoOutTimeLevel100 = -1887;
|
|
|
|
// VMware-specific
|
|
const int pseudoEncodingVMwareCursorPosition = 0x574d5666;
|
|
|
|
int encodingNum(const char* name);
|
|
const char* encodingName(int num);
|
|
}
|
|
#endif
|