diff mbox

[FFmpeg-devel] avdevice/gdigrab: Fix screen size and mouse position calculations on hi-DPI screens

Message ID 20171128085902.20047-1-harald.gaechter@wolfvision.net
State Accepted
Commit 43e510d66887fe665b2c736be6ff842418f411c6
Headers show

Commit Message

Harald Gaechter Nov. 28, 2017, 8:59 a.m. UTC
Signed-off-by: Harald Gaechter <harald.gaechter@wolfvision.net>
---
 libavdevice/gdigrab.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

Comments

Michael Niedermayer Jan. 12, 2018, 11:34 a.m. UTC | #1
On Tue, Nov 28, 2017 at 09:59:02AM +0100, Harald Gaechter wrote:
> Signed-off-by: Harald Gaechter <harald.gaechter@wolfvision.net>
> ---
>  libavdevice/gdigrab.c | 10 ++++++++--
>  1 file changed, 8 insertions(+), 2 deletions(-)

will apply

thx

[...]
diff mbox

Patch

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",