mirror of
https://github.com/gnif/LookingGlass.git
synced 2025-08-05 10:14:04 +00:00
get display DPI info to scale mouse movement
This commit is contained in:
@@ -57,7 +57,7 @@ typedef enum CursorType
|
||||
CursorType;
|
||||
|
||||
#define KVMFR_MAGIC "KVMFR---"
|
||||
#define KVMFR_VERSION 5
|
||||
#define KVMFR_VERSION 6
|
||||
|
||||
typedef struct KVMFR
|
||||
{
|
||||
@@ -80,12 +80,13 @@ KVMFRCursor;
|
||||
|
||||
typedef struct KVMFRFrame
|
||||
{
|
||||
uint32_t formatVer; // the frame format version number
|
||||
FrameType type; // the frame data type
|
||||
uint32_t width; // the width
|
||||
uint32_t height; // the height
|
||||
uint32_t stride; // the row stride (zero if compressed data)
|
||||
uint32_t pitch; // the row pitch (stride in bytes or the compressed frame size)
|
||||
uint32_t offset; // offset from the start of this header to the FrameBuffer header
|
||||
uint32_t formatVer; // the frame format version number
|
||||
FrameType type; // the frame data type
|
||||
uint32_t width; // the width
|
||||
uint32_t height; // the height
|
||||
uint32_t stride; // the row stride (zero if compressed data)
|
||||
uint32_t pitch; // the row pitch (stride in bytes or the compressed frame size)
|
||||
uint32_t offset; // offset from the start of this header to the FrameBuffer header
|
||||
uint32_t mouseScalePercent; // movement scale factor of the mouse (relates to DPI of display, 100 = no scale)
|
||||
}
|
||||
KVMFRFrame;
|
||||
|
25
common/include/common/dpi.h
Normal file
25
common/include/common/dpi.h
Normal file
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
Looking Glass - KVM FrameRelay (KVMFR) Client
|
||||
Copyright (C) 2017-2020 Geoffrey McRae <geoff@hostfission.com>
|
||||
https://looking-glass.hostfission.com
|
||||
|
||||
This program 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 program 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 program; if not, write to the Free Software Foundation, Inc., 59 Temple
|
||||
Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
// At 100% scaling, Windows reports 96 DPI.
|
||||
#define DPI_100_PERCENT 96
|
||||
|
||||
UINT monitor_dpi(HMONITOR hMonitor);
|
@@ -7,6 +7,7 @@ include_directories(
|
||||
|
||||
add_library(lg_common_platform_code STATIC
|
||||
crash.c
|
||||
dpi.c
|
||||
sysinfo.c
|
||||
thread.c
|
||||
event.c
|
||||
|
37
common/src/platform/windows/dpi.c
Normal file
37
common/src/platform/windows/dpi.c
Normal file
@@ -0,0 +1,37 @@
|
||||
#include "common/dpi.h"
|
||||
#include "common/windebug.h"
|
||||
|
||||
typedef enum MONITOR_DPI_TYPE {
|
||||
MDT_EFFECTIVE_DPI,
|
||||
MDT_ANGULAR_DPI,
|
||||
MDT_RAW_DPI,
|
||||
MDT_DEFAULT
|
||||
} MONITOR_DPI_TYPE;
|
||||
typedef HRESULT (WINAPI *GetDpiForMonitor_t)(HMONITOR hmonitor, MONITOR_DPI_TYPE dpiType, UINT * dpiX, UINT * dpiY);
|
||||
|
||||
UINT monitor_dpi(HMONITOR hMonitor)
|
||||
{
|
||||
HMODULE shcore = LoadLibraryA("shcore.dll");
|
||||
if (!shcore)
|
||||
{
|
||||
DEBUG_ERROR("Could not load shcore.dll");
|
||||
return DPI_100_PERCENT;
|
||||
}
|
||||
|
||||
GetDpiForMonitor_t GetDpiForMonitor = (GetDpiForMonitor_t) GetProcAddress(shcore, "GetDpiForMonitor");
|
||||
if (!GetDpiForMonitor)
|
||||
{
|
||||
DEBUG_ERROR("Could not find GetDpiForMonitor");
|
||||
return DPI_100_PERCENT;
|
||||
}
|
||||
|
||||
UINT dpiX, dpiY;
|
||||
HRESULT status = GetDpiForMonitor(hMonitor, MDT_EFFECTIVE_DPI, &dpiX, &dpiY);
|
||||
if (FAILED(status))
|
||||
{
|
||||
DEBUG_WINERROR("GetDpiForMonitor failed", status);
|
||||
return DPI_100_PERCENT;
|
||||
}
|
||||
|
||||
return dpiX;
|
||||
}
|
Reference in New Issue
Block a user