Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FFmpeg/FFmpeg.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHarald Gaechter <harald.gaechter@wolfvision.net>2017-11-28 11:59:02 +0300
committerMichael Niedermayer <michael@niedermayer.cc>2018-01-12 14:31:55 +0300
commit43e510d66887fe665b2c736be6ff842418f411c6 (patch)
tree8d58b803bf6b7f88831440a73070549cfc9c8b89 /libavdevice/gdigrab.c
parent8b1b25a86f1b3c61f1c9742c9b7fff5baa5f1bc7 (diff)
avdevice/gdigrab: Fix screen size and mouse position calculations on hi-DPI screens
Signed-off-by: Harald Gaechter <harald.gaechter@wolfvision.net> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'libavdevice/gdigrab.c')
-rw-r--r--libavdevice/gdigrab.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/libavdevice/gdigrab.c b/libavdevice/gdigrab.c
index 87f5012034..ff2ef3b162 100644
--- a/libavdevice/gdigrab.c
+++ b/libavdevice/gdigrab.c
@@ -235,7 +235,9 @@ gdigrab_read_header(AVFormatContext *s1)
AVStream *st = NULL;
int bpp;
+ int horzres;
int vertres;
+ int desktophorzres;
int desktopvertres;
RECT virtual_rect;
RECT clip_rect;
@@ -279,11 +281,13 @@ gdigrab_read_header(AVFormatContext *s1)
GetClientRect(hwnd, &virtual_rect);
} else {
/* desktop -- get the right height and width for scaling DPI */
+ horzres = GetDeviceCaps(source_hdc, HORZRES);
vertres = GetDeviceCaps(source_hdc, VERTRES);
+ desktophorzres = GetDeviceCaps(source_hdc, DESKTOPHORZRES);
desktopvertres = GetDeviceCaps(source_hdc, DESKTOPVERTRES);
virtual_rect.left = GetSystemMetrics(SM_XVIRTUALSCREEN);
virtual_rect.top = GetSystemMetrics(SM_YVIRTUALSCREEN);
- virtual_rect.right = (virtual_rect.left + GetSystemMetrics(SM_CXVIRTUALSCREEN)) * desktopvertres / vertres;
+ virtual_rect.right = (virtual_rect.left + GetSystemMetrics(SM_CXVIRTUALSCREEN)) * desktophorzres / horzres;
virtual_rect.bottom = (virtual_rect.top + GetSystemMetrics(SM_CYVIRTUALSCREEN)) * desktopvertres / vertres;
}
@@ -447,7 +451,9 @@ static void paint_mouse_pointer(AVFormatContext *s1, struct gdigrab *gdigrab)
POINT pos;
RECT clip_rect = gdigrab->clip_rect;
HWND hwnd = gdigrab->hwnd;
+ int horzres = GetDeviceCaps(gdigrab->source_hdc, HORZRES);
int vertres = GetDeviceCaps(gdigrab->source_hdc, VERTRES);
+ int desktophorzres = GetDeviceCaps(gdigrab->source_hdc, DESKTOPHORZRES);
int desktopvertres = GetDeviceCaps(gdigrab->source_hdc, DESKTOPVERTRES);
info.hbmMask = NULL;
info.hbmColor = NULL;
@@ -483,7 +489,7 @@ static void paint_mouse_pointer(AVFormatContext *s1, struct gdigrab *gdigrab)
}
//that would keep the correct location of mouse with hidpi screens
- pos.x = pos.x * desktopvertres / vertres;
+ pos.x = pos.x * desktophorzres / horzres;
pos.y = pos.y * desktopvertres / vertres;
av_log(s1, AV_LOG_DEBUG, "Cursor pos (%li,%li) -> (%li,%li)\n",