mirror of
git://source.winehq.org/git/wine.git
synced 2024-09-30 05:31:39 +00:00
win32u: Call NtUserMapWindowPoints with per-monitor DPI from the drivers.
This commit is contained in:
parent
74172e340c
commit
8ba51a6f71
|
@ -760,7 +760,8 @@ HWND WINAPI ChildWindowFromPointEx( HWND parent, POINT pt, UINT flags )
|
|||
*/
|
||||
INT WINAPI MapWindowPoints( HWND hwnd_from, HWND hwnd_to, POINT *points, UINT count )
|
||||
{
|
||||
return NtUserMapWindowPoints( hwnd_from, hwnd_to, points, count );
|
||||
UINT dpi = NTUSER_DPI_CONTEXT_GET_DPI( (UINT_PTR)GetThreadDpiAwarenessContext() );
|
||||
return NtUserMapWindowPoints( hwnd_from, hwnd_to, points, count, dpi );
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -5585,8 +5585,7 @@ ULONG_PTR WINAPI NtUserCallHwndParam( HWND hwnd, DWORD_PTR param, DWORD code )
|
|||
case NtUserCallHwndParam_MapWindowPoints:
|
||||
{
|
||||
struct map_window_points_params *params = (void *)param;
|
||||
return map_window_points( hwnd, params->hwnd_to, params->points, params->count,
|
||||
get_thread_dpi() );
|
||||
return map_window_points( hwnd, params->hwnd_to, params->points, params->count, params->dpi );
|
||||
}
|
||||
|
||||
case NtUserCallHwndParam_MirrorRgn:
|
||||
|
|
|
@ -315,7 +315,10 @@ BOOL query_ime_char_rect(macdrv_query* query)
|
|||
|
||||
if (NtUserGetGUIThreadInfo(0, &info))
|
||||
{
|
||||
NtUserMapWindowPoints(info.hwndCaret, 0, (POINT*)&info.rcCaret, 2);
|
||||
/* NtUserGetGUIThreadInfo always return client-relative rcCaret in window DPI */
|
||||
NtUserMapWindowPoints(info.hwndCaret, 0, (POINT *)&info.rcCaret, 2, NtUserGetDpiForWindow(info.hwndCaret));
|
||||
NtUserLogicalToPerMonitorDPIPhysicalPoint(info.hwndCaret, (POINT *)&info.rcCaret.left);
|
||||
NtUserLogicalToPerMonitorDPIPhysicalPoint(info.hwndCaret, (POINT *)&info.rcCaret.right);
|
||||
if (range->length && info.rcCaret.left == info.rcCaret.right) info.rcCaret.right++;
|
||||
query->ime_char_rect.rect = cgrect_from_rect(info.rcCaret);
|
||||
ret = TRUE;
|
||||
|
|
|
@ -2230,7 +2230,7 @@ void macdrv_window_frame_changed(HWND hwnd, const macdrv_event *event)
|
|||
|
||||
rect = rect_from_cgrect(event->window_frame_changed.frame);
|
||||
macdrv_mac_to_window_rect(data, &rect);
|
||||
NtUserMapWindowPoints(0, parent, (POINT *)&rect, 2);
|
||||
NtUserMapWindowPoints(0, parent, (POINT *)&rect, 2, 0 /* per-monitor DPI */);
|
||||
|
||||
width = rect.right - rect.left;
|
||||
height = rect.bottom - rect.top;
|
||||
|
@ -2465,7 +2465,7 @@ void macdrv_window_restore_requested(HWND hwnd, const macdrv_event *event)
|
|||
|
||||
rect = rect_from_cgrect(event->window_restore_requested.frame);
|
||||
macdrv_mac_to_window_rect(data, &rect);
|
||||
NtUserMapWindowPoints(0, parent, (POINT *)&rect, 2);
|
||||
NtUserMapWindowPoints(0, parent, (POINT *)&rect, 2, 0 /* per-monitor DPI */);
|
||||
|
||||
release_win_data(data);
|
||||
|
||||
|
|
|
@ -917,7 +917,7 @@ static BOOL X11DRV_Expose( HWND hwnd, XEvent *xev )
|
|||
if (NtUserGetWindowLongW( data->hwnd, GWL_EXSTYLE ) & WS_EX_LAYOUTRTL)
|
||||
mirror_rect( &data->client_rect, &rect );
|
||||
abs_rect = rect;
|
||||
NtUserMapWindowPoints( hwnd, 0, (POINT *)&abs_rect, 2 );
|
||||
NtUserMapWindowPoints( hwnd, 0, (POINT *)&abs_rect, 2, 0 /* per-monitor DPI */ );
|
||||
|
||||
SERVER_START_REQ( update_window_zorder )
|
||||
{
|
||||
|
@ -1088,7 +1088,7 @@ static BOOL X11DRV_ConfigureNotify( HWND hwnd, XEvent *xev )
|
|||
else pos = root_to_virtual_screen( x, y );
|
||||
|
||||
X11DRV_X_to_window_rect( data, &rect, pos.x, pos.y, event->width, event->height );
|
||||
if (root_coords) NtUserMapWindowPoints( 0, parent, (POINT *)&rect, 2 );
|
||||
if (root_coords) NtUserMapWindowPoints( 0, parent, (POINT *)&rect, 2, 0 /* per-monitor DPI */ );
|
||||
|
||||
TRACE( "win %p/%lx new X rect %d,%d,%dx%d (event %d,%d,%dx%d)\n",
|
||||
hwnd, data->whole_window, (int)rect.left, (int)rect.top,
|
||||
|
@ -1418,7 +1418,7 @@ static HWND find_drop_window( HWND hQueryWnd, LPPOINT lpPt )
|
|||
if (!(NtUserGetWindowLongW( hQueryWnd, GWL_STYLE ) & WS_MINIMIZE))
|
||||
{
|
||||
POINT pt = *lpPt;
|
||||
NtUserMapWindowPoints( 0, hQueryWnd, &pt, 1 );
|
||||
NtUserMapWindowPoints( 0, hQueryWnd, &pt, 1, 0 /* per-monitor DPI */ );
|
||||
NtUserGetClientRect( hQueryWnd, &tempRect, dpi );
|
||||
|
||||
if (PtInRect( &tempRect, pt))
|
||||
|
@ -1435,7 +1435,7 @@ static HWND find_drop_window( HWND hQueryWnd, LPPOINT lpPt )
|
|||
|
||||
if(!(NtUserGetWindowLongW( hQueryWnd, GWL_EXSTYLE ) & WS_EX_ACCEPTFILES)) return 0;
|
||||
|
||||
NtUserMapWindowPoints( 0, hQueryWnd, lpPt, 1 );
|
||||
NtUserMapWindowPoints( 0, hQueryWnd, lpPt, 1, 0 /* per-monitor DPI */ );
|
||||
|
||||
return hQueryWnd;
|
||||
}
|
||||
|
|
|
@ -519,7 +519,7 @@ static void map_event_coords( HWND hwnd, Window window, Window event_root, int x
|
|||
|
||||
if (NtUserGetWindowLongW( hwnd, GWL_EXSTYLE ) & WS_EX_LAYOUTRTL)
|
||||
pt.x = data->client_rect.right - data->client_rect.left - 1 - pt.x;
|
||||
NtUserMapWindowPoints( hwnd, 0, &pt, 1 );
|
||||
NtUserMapWindowPoints( hwnd, 0, &pt, 1, 0 /* per-monitor DPI */ );
|
||||
}
|
||||
release_win_data( data );
|
||||
}
|
||||
|
|
|
@ -2442,7 +2442,7 @@ void X11DRV_GetDC( HDC hdc, HWND hwnd, HWND top, const RECT *win_rect,
|
|||
if (escape.drawable)
|
||||
{
|
||||
POINT pt = { 0, 0 };
|
||||
NtUserMapWindowPoints( 0, parent, &pt, 1 );
|
||||
NtUserMapWindowPoints( 0, parent, &pt, 1, 0 /* per-monitor DPI */ );
|
||||
escape.dc_rect = *win_rect;
|
||||
OffsetRect( &escape.dc_rect, pt.x, pt.y );
|
||||
if (flags & DCX_CLIPCHILDREN) escape.mode = ClipByChildren;
|
||||
|
|
|
@ -1717,12 +1717,14 @@ NTSTATUS WINAPI wow64_NtUserCallHwndParam( UINT *args )
|
|||
ULONG hwnd_to;
|
||||
ULONG points;
|
||||
UINT count;
|
||||
UINT dpi;
|
||||
} *params32 = UlongToPtr( param );
|
||||
struct map_window_points_params params;
|
||||
|
||||
params.hwnd_to = LongToHandle( params32->hwnd_to );
|
||||
params.points = UlongToPtr( params32->points );
|
||||
params.count = params32->count;
|
||||
params.dpi = params32->dpi;
|
||||
return NtUserCallHwndParam( hwnd, (UINT_PTR)¶ms, code );
|
||||
}
|
||||
|
||||
|
|
|
@ -1414,14 +1414,16 @@ struct map_window_points_params
|
|||
HWND hwnd_to;
|
||||
POINT *points;
|
||||
UINT count;
|
||||
UINT dpi;
|
||||
};
|
||||
|
||||
static inline int NtUserMapWindowPoints( HWND hwnd_from, HWND hwnd_to, POINT *points, UINT count )
|
||||
static inline int NtUserMapWindowPoints( HWND hwnd_from, HWND hwnd_to, POINT *points, UINT count, UINT dpi )
|
||||
{
|
||||
struct map_window_points_params params;
|
||||
params.hwnd_to = hwnd_to;
|
||||
params.points = points;
|
||||
params.count = count;
|
||||
params.dpi = dpi;
|
||||
return NtUserCallHwndParam( hwnd_from, (UINT_PTR)¶ms,
|
||||
NtUserCallHwndParam_MapWindowPoints );
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue