[FFmpeg-devel] [patch] gdigrab-mouse-dpi-awareness
Γιώργος Μεταξάκης
metaxas4 at gmail.com
Fri Feb 12 09:21:13 CET 2016
i'm very sorry for those mistakes
i'm sending you a new patch with only 6 changes.
The problem was that when you where capturing the screen, the mouse wasn't
on the correct location.
On Fri, Feb 12, 2016 at 2:01 AM James Darnley <james.darnley at gmail.com>
wrote:
> On 2016-02-11 23:19, Γιώργος Μεταξάκης wrote:
> > Subject: [PATCH] mouse dpi awareness
> >
> > ---
> > libavdevice/gdigrab.c | 28 +++++++++++++++-------------
> > 1 file changed, 15 insertions(+), 13 deletions(-)
> >
> > diff --git a/libavdevice/gdigrab.c b/libavdevice/gdigrab.c
> > index 4428a34..60f184e 100644
> > --- a/libavdevice/gdigrab.c
> > +++ b/libavdevice/gdigrab.c
> > @@ -71,6 +71,8 @@ struct gdigrab {
> >
> > #define REGION_WND_BORDER 3
> >
> > +
> > +
> > /**
> > * Callback to handle Windows messages for the region outline window.
> > *
>
> Please don't add random whitespace changes.
>
> > @@ -235,8 +237,7 @@ gdigrab_read_header(AVFormatContext *s1)
> > AVStream *st = NULL;
> >
> > int bpp;
> > - int vertres;
> > - int desktopvertres;
> > +
> > RECT virtual_rect;
> > RECT clip_rect;
> > BITMAP bmp;
> > @@ -279,8 +280,8 @@ gdigrab_read_header(AVFormatContext *s1)
> > GetClientRect(hwnd, &virtual_rect);
> > } else {
> > /* desktop -- get the right height and width for scaling DPI */
> > - vertres = GetDeviceCaps(source_hdc, VERTRES);
> > - desktopvertres = GetDeviceCaps(source_hdc, DESKTOPVERTRES);
> > + int vertres = GetDeviceCaps(source_hdc, VERTRES);
> > + int 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;
>
> Is this change just moving the declaration?
>
> > @@ -431,8 +432,10 @@ error:
> > static void paint_mouse_pointer(AVFormatContext *s1, struct gdigrab
> *gdigrab)
> > {
> > CURSORINFO ci = {0};
> > + int vertres = GetDeviceCaps(gdigrab->source_hdc, VERTRES);
> > + int desktopvertres = GetDeviceCaps(gdigrab->source_hdc,
> DESKTOPVERTRES);
> >
> > -#define CURSOR_ERROR(str) \
> > + #define CURSOR_ERROR(str) \
> > if (!gdigrab->cursor_error_printed) { \
> > WIN32_API_ERROR(str); \
> > gdigrab->cursor_error_printed = 1; \
> > @@ -459,12 +462,7 @@ static void paint_mouse_pointer(AVFormatContext
> *s1, struct gdigrab *gdigrab)
> > icon = CopyCursor(LoadCursor(NULL, IDC_ARROW));
> > }
> >
> > - if (!GetIconInfo(icon, &info)) {
> > - CURSOR_ERROR("Could not get icon info");
> > - goto icon_error;
> > - }
> > -
> > - pos.x = ci.ptScreenPos.x - clip_rect.left - info.xHotspot;
> > + pos.x = ci.ptScreenPos.x - clip_rect.left - info.xHotspot;
> > pos.y = ci.ptScreenPos.y - clip_rect.top - info.yHotspot;
> >
> > if (hwnd) {
>
> No Tabs!
>
> Why did you remove the GetIconInfo() call? You need that to fill the
> info data structure you use right here.
>
> > @@ -478,7 +476,11 @@ static void paint_mouse_pointer(AVFormatContext
> *s1, struct gdigrab *gdigrab)
> > goto icon_error;
> > }
> > }
> > -
> > +
> > + //that would keep the correct location of mouse with hidpi
> screens
> > + pos.x = pos.x * desktopvertres / vertres;
> > + pos.y = pos.y * desktopvertres / vertres;
> > +
> > av_log(s1, AV_LOG_DEBUG, "Cursor pos (%li,%li) -> (%li,%li)\n",
> > ci.ptScreenPos.x, ci.ptScreenPos.y, pos.x, pos.y);
> >
>
> You probably want to round that division and add some brackets so the
> division happens last. The change you want to make is probably right
> but I would have to check the docs before signing off.
>
> > @@ -639,4 +641,4 @@ AVInputFormat ff_gdigrab_demuxer = {
> > .read_close = gdigrab_read_close,
> > .flags = AVFMT_NOFILE,
> > .priv_class = &gdigrab_class,
> > -};
> > +};
> > \ No newline at end of file
>
> I think you need a better editor.
>
> What were the symptoms of the problem before your fix? Was the cursor
> being drawn too large or to small? The second last chunk suggests it
> was in the wrong position.
>
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
--
Metaksakis Georgios
FORTH - ICS
Work : (0030) 281 139 2583
Mobile : (0030) 697 369 3871
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-mouse-dpi-awareness.patch
Type: application/octet-stream
Size: 1294 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20160212/cfdfbe82/attachment.obj>
More information about the ffmpeg-devel
mailing list