Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
92f5c6e4
Commit
92f5c6e4
authored
Aug 23, 2018
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
user32: Scale monitor rectangles based on DPI awareness.
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
7068a856
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
26 additions
and
1 deletion
+26
-1
sysparams.c
dlls/user32/sysparams.c
+25
-1
win.h
dlls/user32/win.h
+1
-0
No files found.
dlls/user32/sysparams.c
View file @
92f5c6e4
...
...
@@ -3222,6 +3222,21 @@ UINT get_thread_dpi(void)
}
/**********************************************************************
* map_dpi_rect
*/
RECT
map_dpi_rect
(
RECT
rect
,
UINT
dpi_from
,
UINT
dpi_to
)
{
if
(
dpi_from
&&
dpi_to
&&
dpi_from
!=
dpi_to
)
{
rect
.
left
=
MulDiv
(
rect
.
left
,
dpi_to
,
dpi_from
);
rect
.
top
=
MulDiv
(
rect
.
top
,
dpi_to
,
dpi_from
);
rect
.
right
=
MulDiv
(
rect
.
right
,
dpi_to
,
dpi_from
);
rect
.
bottom
=
MulDiv
(
rect
.
bottom
,
dpi_to
,
dpi_from
);
}
return
rect
;
}
/**********************************************************************
* SetProcessDpiAwarenessContext (USER32.@)
*/
BOOL
WINAPI
SetProcessDpiAwarenessContext
(
DPI_AWARENESS_CONTEXT
context
)
...
...
@@ -3586,13 +3601,22 @@ BOOL WINAPI GetMonitorInfoA( HMONITOR monitor, LPMONITORINFO info )
BOOL
WINAPI
GetMonitorInfoW
(
HMONITOR
monitor
,
LPMONITORINFO
info
)
{
BOOL
ret
;
UINT
dpi_from
,
dpi_to
;
if
(
info
->
cbSize
!=
sizeof
(
MONITORINFOEXW
)
&&
info
->
cbSize
!=
sizeof
(
MONITORINFO
))
return
FALSE
;
ret
=
USER_Driver
->
pGetMonitorInfo
(
monitor
,
info
);
if
(
ret
)
{
if
((
dpi_to
=
get_thread_dpi
()))
{
dpi_from
=
get_monitor_dpi
(
monitor
);
info
->
rcMonitor
=
map_dpi_rect
(
info
->
rcMonitor
,
dpi_from
,
dpi_to
);
info
->
rcWork
=
map_dpi_rect
(
info
->
rcWork
,
dpi_from
,
dpi_to
);
}
TRACE
(
"flags %04x, monitor %s, work %s
\n
"
,
info
->
dwFlags
,
wine_dbgstr_rect
(
&
info
->
rcMonitor
),
wine_dbgstr_rect
(
&
info
->
rcWork
));
}
return
ret
;
}
...
...
@@ -3634,7 +3658,7 @@ __ASM_GLOBAL_FUNC( enum_mon_callback_wrapper,
static
BOOL
CALLBACK
enum_mon_callback
(
HMONITOR
monitor
,
HDC
hdc
,
LPRECT
rect
,
LPARAM
lp
)
{
struct
enum_mon_data
*
data
=
(
struct
enum_mon_data
*
)
lp
;
RECT
monrect
=
*
rect
;
RECT
monrect
=
map_dpi_rect
(
*
rect
,
get_monitor_dpi
(
monitor
),
get_thread_dpi
()
)
;
OffsetRect
(
&
monrect
,
-
data
->
origin
.
x
,
-
data
->
origin
.
y
);
if
(
!
IntersectRect
(
&
monrect
,
&
monrect
,
&
data
->
limit
))
return
TRUE
;
...
...
dlls/user32/win.h
View file @
92f5c6e4
...
...
@@ -131,6 +131,7 @@ extern void WINPOS_SysCommandSizeMove( HWND hwnd, WPARAM wParam ) DECLSPEC_HIDDE
extern
UINT
get_monitor_dpi
(
HMONITOR
monitor
)
DECLSPEC_HIDDEN
;
extern
UINT
get_win_monitor_dpi
(
HWND
hwnd
)
DECLSPEC_HIDDEN
;
extern
UINT
get_thread_dpi
(
void
)
DECLSPEC_HIDDEN
;
extern
RECT
map_dpi_rect
(
RECT
rect
,
UINT
dpi_from
,
UINT
dpi_to
)
DECLSPEC_HIDDEN
;
extern
BOOL
set_window_pos
(
HWND
hwnd
,
HWND
insert_after
,
UINT
swp_flags
,
const
RECT
*
window_rect
,
const
RECT
*
client_rect
,
const
RECT
*
valid_rects
)
DECLSPEC_HIDDEN
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment