Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
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-cw
Commits
330179f9
Commit
330179f9
authored
Apr 22, 2003
by
Alex Pasadyn
Committed by
Alexandre Julliard
Apr 22, 2003
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Implemented EnumDisplaySettings* and ChangeDisplaySettings*.
parent
2e12d33d
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
225 additions
and
112 deletions
+225
-112
user32.spec
dlls/user/user32.spec
+2
-2
user_main.c
dlls/user/user_main.c
+2
-0
x11drv.spec
dlls/x11drv/x11drv.spec
+2
-0
xvidmode.c
dlls/x11drv/xvidmode.c
+143
-5
user.h
include/user.h
+3
-1
winuser.h
include/winuser.h
+5
-2
user.c
windows/user.c
+68
-102
No files found.
dlls/user/user32.spec
View file @
330179f9
...
...
@@ -596,7 +596,7 @@
#late additions
@ stdcall ChangeDisplaySettingsA(ptr long)
@ st
ub ChangeDisplaySettingsW
@ st
dcall ChangeDisplaySettingsW(ptr long)
@ stdcall EnumDesktopWindows(long ptr ptr)
@ stdcall EnumDisplaySettingsA(str long ptr)
@ stdcall EnumDisplaySettingsW(wstr long ptr )
...
...
@@ -611,7 +611,7 @@
@ stdcall DrawCaptionTempW(long long ptr long long wstr long)
@ stub IsHungAppWindow
@ stdcall ChangeDisplaySettingsExA(str ptr long long ptr)
@ st
ub ChangeDisplaySettingsExW
@ st
dcall ChangeDisplaySettingsExW(wstr ptr long long ptr)
@ stdcall SetWindowText(long str) SetWindowTextA
@ stdcall GetMonitorInfoA(long ptr)
@ stdcall GetMonitorInfoW(long ptr)
...
...
dlls/user/user_main.c
View file @
330179f9
...
...
@@ -97,6 +97,8 @@ static BOOL load_driver(void)
GET_USER_FUNC
(
GetClipboardFormatName
);
GET_USER_FUNC
(
IsSelectionOwner
);
GET_USER_FUNC
(
ResetSelectionOwner
);
GET_USER_FUNC
(
ChangeDisplaySettingsExW
);
GET_USER_FUNC
(
EnumDisplaySettingsExW
);
GET_USER_FUNC
(
CreateWindow
);
GET_USER_FUNC
(
DestroyWindow
);
GET_USER_FUNC
(
GetDC
);
...
...
dlls/x11drv/x11drv.spec
View file @
330179f9
...
...
@@ -72,6 +72,8 @@
@ cdecl SetCursorPos(long long) X11DRV_SetCursorPos
@ cdecl GetScreenSaveActive() X11DRV_GetScreenSaveActive
@ cdecl SetScreenSaveActive(long) X11DRV_SetScreenSaveActive
@ cdecl ChangeDisplaySettingsExW (ptr ptr long long long) X11DRV_ChangeDisplaySettingsExW
@ cdecl EnumDisplaySettingsExW (ptr long ptr long) X11DRV_EnumDisplaySettingsExW
@ cdecl CreateWindow(long ptr long) X11DRV_CreateWindow
@ cdecl DestroyWindow(long) X11DRV_DestroyWindow
@ cdecl GetDC(long long long long) X11DRV_GetDC
...
...
dlls/x11drv/xvidmode.c
View file @
330179f9
...
...
@@ -18,10 +18,9 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/* FIXME: ChangeDisplaySettings ought to be able to use this */
#include "config.h"
#include <string.h>
#include <stdio.h>
#include "ts_xlib.h"
...
...
@@ -53,9 +52,10 @@ static int xf86vm_gammaramp_size;
static
BOOL
xf86vm_use_gammaramp
;
#endif
LPDDHALMODEINFO
xf86vm_modes
;
unsigned
xf86vm_mode_count
;
XF86VidModeModeInfo
**
modes
;
static
LPDDHALMODEINFO
xf86vm_modes
;
static
unsigned
xf86vm_mode_count
;
static
XF86VidModeModeInfo
**
modes
;
static
unsigned
int
xf86vm_initial_mode
;
static
void
convert_modeinfo
(
const
XF86VidModeModeInfo
*
mode
,
LPDDHALMODEINFO
info
)
{
...
...
@@ -151,6 +151,10 @@ void X11DRV_XF86VM_Init(void)
/* convert modes to DDHALMODEINFO format */
for
(
i
=
0
;
i
<
nmodes
;
i
++
)
convert_modeinfo
(
modes
[
i
],
&
xf86vm_modes
[
i
]);
/* store the current mode at the time we started */
xf86vm_initial_mode
=
X11DRV_XF86VM_GetCurrentMode
();
TRACE
(
"Enabling XVidMode
\n
"
);
}
...
...
@@ -411,3 +415,137 @@ BOOL X11DRV_SetDeviceGammaRamp(X11DRV_PDEVICE *physDev, LPVOID ramp)
return
FALSE
;
#endif
}
/***********************************************************************
* EnumDisplaySettingsExW (X11DRV.@)
*/
BOOL
X11DRV_EnumDisplaySettingsExW
(
LPCWSTR
name
,
DWORD
n
,
LPDEVMODEW
devmode
,
DWORD
flags
)
{
DWORD
dwBpp
=
screen_depth
;
if
(
dwBpp
==
24
)
dwBpp
=
32
;
devmode
->
dmDisplayFlags
=
0
;
devmode
->
dmDisplayFrequency
=
85
;
devmode
->
dmSize
=
sizeof
(
DEVMODEW
);
if
(
n
==
0
||
n
==
(
DWORD
)
-
1
||
n
==
(
DWORD
)
-
2
)
{
devmode
->
dmBitsPerPel
=
dwBpp
;
devmode
->
dmPelsHeight
=
GetSystemMetrics
(
SM_CYSCREEN
);
devmode
->
dmPelsWidth
=
GetSystemMetrics
(
SM_CXSCREEN
);
devmode
->
dmFields
=
(
DM_PELSWIDTH
|
DM_PELSHEIGHT
|
DM_BITSPERPEL
);
TRACE
(
"mode %ld -- returning default %ldx%ldx%ldbpp
\n
"
,
n
,
devmode
->
dmPelsWidth
,
devmode
->
dmPelsHeight
,
devmode
->
dmBitsPerPel
);
return
TRUE
;
}
#ifdef HAVE_LIBXXF86VM
if
(
n
<=
xf86vm_mode_count
)
{
XF86VidModeModeInfo
*
mode
;
mode
=
modes
[
n
-
1
];
devmode
->
dmPelsWidth
=
mode
->
hdisplay
;
devmode
->
dmPelsHeight
=
mode
->
vdisplay
;
devmode
->
dmBitsPerPel
=
dwBpp
;
devmode
->
dmDisplayFrequency
=
mode
->
dotclock
*
1000
/
(
mode
->
htotal
*
mode
->
vtotal
);
devmode
->
dmFields
=
(
DM_PELSWIDTH
|
DM_PELSHEIGHT
|
DM_BITSPERPEL
|
DM_DISPLAYFREQUENCY
);
TRACE
(
"mode %ld -- %ldx%ldx%ldbpp
\n
"
,
n
,
devmode
->
dmPelsWidth
,
devmode
->
dmPelsHeight
,
devmode
->
dmBitsPerPel
);
return
TRUE
;
}
#endif
TRACE
(
"mode %ld -- not present
\n
"
,
n
);
return
FALSE
;
}
#define _X_FIELD(prefix, bits) if ((fields) & prefix##_##bits) {p+=sprintf(p, "%s%s", first ? "" : ",", #bits); first=FALSE;}
static
const
char
*
_CDS_flags
(
DWORD
fields
)
{
BOOL
first
=
TRUE
;
char
buf
[
128
];
char
*
p
=
buf
;
_X_FIELD
(
CDS
,
UPDATEREGISTRY
);
_X_FIELD
(
CDS
,
TEST
);
_X_FIELD
(
CDS
,
FULLSCREEN
);
_X_FIELD
(
CDS
,
GLOBAL
);
_X_FIELD
(
CDS
,
SET_PRIMARY
);
_X_FIELD
(
CDS
,
RESET
);
_X_FIELD
(
CDS
,
SETRECT
);
_X_FIELD
(
CDS
,
NORESET
);
return
wine_dbg_sprintf
(
"%s"
,
buf
);
}
static
const
char
*
_DM_fields
(
DWORD
fields
)
{
BOOL
first
=
TRUE
;
char
buf
[
128
];
char
*
p
=
buf
;
_X_FIELD
(
DM
,
BITSPERPEL
);
_X_FIELD
(
DM
,
PELSWIDTH
);
_X_FIELD
(
DM
,
PELSHEIGHT
);
_X_FIELD
(
DM
,
DISPLAYFLAGS
);
_X_FIELD
(
DM
,
DISPLAYFREQUENCY
);
_X_FIELD
(
DM
,
POSITION
);
return
wine_dbg_sprintf
(
"%s"
,
buf
);
}
#undef _X_FIELD
/***********************************************************************
* ChangeDisplaySettingsExW (X11DRV.@)
*/
LONG
X11DRV_ChangeDisplaySettingsExW
(
LPCWSTR
devname
,
LPDEVMODEW
devmode
,
HWND
hwnd
,
DWORD
flags
,
LPVOID
lpvoid
)
{
DWORD
i
;
DWORD
dwBpp
=
screen_depth
;
if
(
dwBpp
==
24
)
dwBpp
=
32
;
TRACE
(
"(%s,%p,%p,0x%08lx,%p
\n
"
,
debugstr_w
(
devname
),
devmode
,
hwnd
,
flags
,
lpvoid
);
TRACE
(
"flags=%s
\n
"
,
_CDS_flags
(
flags
));
if
(
devmode
==
NULL
)
{
TRACE
(
"Return to original display mode
\n
"
);
#ifdef HAVE_LIBXXF86VM
X11DRV_XF86VM_SetCurrentMode
(
xf86vm_initial_mode
);
#endif
return
DISP_CHANGE_SUCCESSFUL
;
}
if
(
TRACE_ON
(
x11drv
))
{
TRACE
(
"DM_fields=%s
\n
"
,
_DM_fields
(
devmode
->
dmFields
));
TRACE
(
"width=%ld height=%ld bpp=%ld freq=%ld
\n
"
,
devmode
->
dmPelsWidth
,
devmode
->
dmPelsHeight
,
devmode
->
dmBitsPerPel
,
devmode
->
dmDisplayFrequency
);
}
if
((
!
(
devmode
->
dmFields
&
DM_BITSPERPEL
)
||
devmode
->
dmBitsPerPel
==
dwBpp
)
&&
(
!
(
devmode
->
dmFields
&
DM_PELSWIDTH
)
||
devmode
->
dmPelsWidth
==
GetSystemMetrics
(
SM_CXSCREEN
))
&&
(
!
(
devmode
->
dmFields
&
DM_PELSHEIGHT
)
||
devmode
->
dmPelsHeight
==
GetSystemMetrics
(
SM_CYSCREEN
)))
{
/* we have a valid mode */
TRACE
(
"Requested mode matches current mode -- no change!
\n
"
);
return
DISP_CHANGE_SUCCESSFUL
;
}
#ifdef HAVE_LIBXXF86VM
for
(
i
=
0
;
i
<
xf86vm_mode_count
;
i
++
)
{
XF86VidModeModeInfo
*
mode
=
modes
[
i
];
if
(
devmode
->
dmFields
&
DM_BITSPERPEL
)
{
if
(
devmode
->
dmBitsPerPel
!=
dwBpp
)
continue
;
}
if
(
devmode
->
dmFields
&
DM_PELSWIDTH
)
{
if
(
devmode
->
dmPelsWidth
!=
mode
->
hdisplay
)
continue
;
}
if
(
devmode
->
dmFields
&
DM_PELSHEIGHT
)
{
if
(
devmode
->
dmPelsHeight
!=
mode
->
vdisplay
)
continue
;
}
/* we have a valid mode */
TRACE
(
"Matches mode %ld
\n
"
,
i
);
X11DRV_XF86VM_SetCurrentMode
(
i
-
1
);
#if 0 /* FIXME */
SYSMETRICS_Set( SM_CXSCREEN, devmode->dmPelsWidth );
SYSMETRICS_Set( SM_CYSCREEN, devmode->dmPelsHeight );
#endif
return
DISP_CHANGE_SUCCESSFUL
;
}
#endif
/* no valid modes found */
ERR
(
"No matching mode found!
\n
"
);
return
DISP_CHANGE_BADMODE
;
}
include/user.h
View file @
330179f9
...
...
@@ -91,7 +91,9 @@ typedef struct tagUSER_DRIVER {
BOOL
(
*
pGetClipboardFormatName
)(
UINT
,
LPSTR
,
UINT
);
/* Get a clipboard format name */
BOOL
(
*
pIsSelectionOwner
)(
void
);
/* Check if we own the selection */
void
(
*
pResetSelectionOwner
)(
HWND
,
BOOL
);
/* display modes */
LONG
(
*
pChangeDisplaySettingsExW
)(
LPCWSTR
,
LPDEVMODEW
,
HWND
,
DWORD
,
LPVOID
);
BOOL
(
*
pEnumDisplaySettingsExW
)(
LPCWSTR
,
DWORD
,
LPDEVMODEW
,
DWORD
);
/* windowing functions */
BOOL
(
*
pCreateWindow
)(
HWND
,
CREATESTRUCTA
*
,
BOOL
);
BOOL
(
*
pDestroyWindow
)(
HWND
);
...
...
include/winuser.h
View file @
330179f9
...
...
@@ -3729,8 +3729,8 @@ typedef struct tagWINDOWINFO {
LONG
WINAPI
ChangeDisplaySettingsA
(
LPDEVMODEA
,
DWORD
);
LONG
WINAPI
ChangeDisplaySettingsW
(
LPDEVMODEW
,
DWORD
);
#define ChangeDisplaySettings WINELIB_NAME_AW(ChangeDisplaySettings)
LONG
WINAPI
ChangeDisplaySettingsExA
(
LPCSTR
,
LPDEVMODEA
,
HWND
,
DWORD
,
LP
ARAM
);
LONG
WINAPI
ChangeDisplaySettingsExW
(
LPCWSTR
,
LPDEVMODEW
,
HWND
,
DWORD
,
LP
ARAM
);
LONG
WINAPI
ChangeDisplaySettingsExA
(
LPCSTR
,
LPDEVMODEA
,
HWND
,
DWORD
,
LP
VOID
);
LONG
WINAPI
ChangeDisplaySettingsExW
(
LPCWSTR
,
LPDEVMODEW
,
HWND
,
DWORD
,
LP
VOID
);
#define ChangeDisplaySettingsEx WINELIB_NAME_AW(ChangeDisplaySettingsEx)
BOOL
WINAPI
EnumDisplayDevicesA
(
LPVOID
,
DWORD
,
LPDISPLAY_DEVICEA
,
DWORD
);
BOOL
WINAPI
EnumDisplayDevicesW
(
LPVOID
,
DWORD
,
LPDISPLAY_DEVICEW
,
DWORD
);
...
...
@@ -3738,6 +3738,9 @@ BOOL WINAPI EnumDisplayDevicesW(LPVOID,DWORD,LPDISPLAY_DEVICEW,DWORD);
BOOL
WINAPI
EnumDisplaySettingsA
(
LPCSTR
,
DWORD
,
LPDEVMODEA
);
BOOL
WINAPI
EnumDisplaySettingsW
(
LPCWSTR
,
DWORD
,
LPDEVMODEW
);
#define EnumDisplaySettings WINELIB_NAME_AW(EnumDisplaySettings)
BOOL
WINAPI
EnumDisplaySettingsExA
(
LPCSTR
,
DWORD
,
LPDEVMODEA
,
DWORD
);
BOOL
WINAPI
EnumDisplaySettingsExW
(
LPCWSTR
,
DWORD
,
LPDEVMODEW
,
DWORD
);
#define EnumDisplaySettingsEx WINELIB_NAME_AW(EnumDisplaySettingsEx)
#endif
/* defined(_WINGDI_) && !defined(NOGDI) */
HKL
WINAPI
ActivateKeyboardLayout
(
HKL
,
UINT
);
...
...
windows/user.c
View file @
330179f9
...
...
@@ -257,39 +257,20 @@ BOOL WINAPI ExitWindowsEx( UINT flags, DWORD reserved )
return
FALSE
;
}
static
void
_dump_CDS_flags
(
DWORD
flags
)
{
#define X(x) if (flags & CDS_##x) MESSAGE(""#x ",");
X
(
UPDATEREGISTRY
);
X
(
TEST
);
X
(
FULLSCREEN
);
X
(
GLOBAL
);
X
(
SET_PRIMARY
);
X
(
RESET
);
X
(
SETRECT
);
X
(
NORESET
);
#undef X
}
/***********************************************************************
* ChangeDisplaySettingsA (USER32.@)
*/
LONG
WINAPI
ChangeDisplaySettingsA
(
LPDEVMODEA
devmode
,
DWORD
flags
)
{
FIXME_
(
system
)(
"(%p,0x%08lx), stub
\n
"
,
devmode
,
flags
);
MESSAGE
(
"
\t
flags="
);
_dump_CDS_flags
(
flags
);
MESSAGE
(
"
\n
"
);
if
(
devmode
==
NULL
)
FIXME_
(
system
)(
" devmode=NULL (return to default mode)
\n
"
);
else
if
(
(
devmode
->
dmBitsPerPel
!=
GetSystemMetrics
(
SM_WINE_BPP
))
||
(
devmode
->
dmPelsHeight
!=
GetSystemMetrics
(
SM_CYSCREEN
))
||
(
devmode
->
dmPelsWidth
!=
GetSystemMetrics
(
SM_CXSCREEN
))
)
{
if
(
devmode
->
dmFields
&
DM_BITSPERPEL
)
FIXME_
(
system
)(
" bpp=%ld
\n
"
,
devmode
->
dmBitsPerPel
);
if
(
devmode
->
dmFields
&
DM_PELSWIDTH
)
FIXME_
(
system
)(
" width=%ld
\n
"
,
devmode
->
dmPelsWidth
);
if
(
devmode
->
dmFields
&
DM_PELSHEIGHT
)
FIXME_
(
system
)(
" height=%ld
\n
"
,
devmode
->
dmPelsHeight
);
FIXME_
(
system
)(
" (Putting X in this mode beforehand might help)
\n
"
);
/* we don't, but the program ... does not need to know */
return
DISP_CHANGE_SUCCESSFUL
;
}
return
DISP_CHANGE_SUCCESSFUL
;
return
ChangeDisplaySettingsExA
(
NULL
,
devmode
,
NULL
,
flags
,
NULL
);
}
/***********************************************************************
* ChangeDisplaySettingsW (USER32.@)
*/
LONG
WINAPI
ChangeDisplaySettingsW
(
LPDEVMODEW
devmode
,
DWORD
flags
)
{
return
ChangeDisplaySettingsExW
(
NULL
,
devmode
,
NULL
,
flags
,
NULL
);
}
/***********************************************************************
...
...
@@ -297,7 +278,6 @@ LONG WINAPI ChangeDisplaySettingsA( LPDEVMODEA devmode, DWORD flags )
*/
LONG
WINAPI
ChangeDisplaySettings16
(
LPDEVMODEA
devmode
,
DWORD
flags
)
{
TRACE_
(
system
)(
"(%p,0x%08lx), stub
\n
"
,
devmode
,
flags
);
return
ChangeDisplaySettingsA
(
devmode
,
flags
);
}
...
...
@@ -306,34 +286,47 @@ LONG WINAPI ChangeDisplaySettings16( LPDEVMODEA devmode, DWORD flags )
*/
LONG
WINAPI
ChangeDisplaySettingsExA
(
LPCSTR
devname
,
LPDEVMODEA
devmode
,
HWND
hwnd
,
DWORD
flags
,
LP
ARAM
lparam
LP
VOID
lparam
)
{
FIXME_
(
system
)(
"(%s,%p,%p,0x%08lx,0x%08lx), stub
\n
"
,
devname
,
devmode
,
hwnd
,
flags
,
lparam
);
MESSAGE
(
"
\t
flags="
);
_dump_CDS_flags
(
flags
);
MESSAGE
(
"
\n
"
);
if
(
devmode
==
NULL
)
FIXME_
(
system
)(
" devmode=NULL (return to default mode)
\n
"
);
else
if
(
(
devmode
->
dmBitsPerPel
!=
GetSystemMetrics
(
SM_WINE_BPP
))
||
(
devmode
->
dmPelsHeight
!=
GetSystemMetrics
(
SM_CYSCREEN
))
||
(
devmode
->
dmPelsWidth
!=
GetSystemMetrics
(
SM_CXSCREEN
))
)
{
if
(
devmode
->
dmFields
&
DM_BITSPERPEL
)
FIXME_
(
system
)(
" bpp=%ld
\n
"
,
devmode
->
dmBitsPerPel
);
if
(
devmode
->
dmFields
&
DM_PELSWIDTH
)
FIXME_
(
system
)(
" width=%ld
\n
"
,
devmode
->
dmPelsWidth
);
if
(
devmode
->
dmFields
&
DM_PELSHEIGHT
)
FIXME_
(
system
)(
" height=%ld
\n
"
,
devmode
->
dmPelsHeight
);
FIXME_
(
system
)(
" (Putting X in this mode beforehand might help)
\n
"
);
/* we don't, but the program ... does not need to know */
return
DISP_CHANGE_SUCCESSFUL
;
}
return
DISP_CHANGE_SUCCESSFUL
;
DEVMODEW
devmodeW
;
LONG
ret
;
UNICODE_STRING
nameW
;
if
(
devname
)
RtlCreateUnicodeStringFromAsciiz
(
&
nameW
,
devname
);
else
nameW
.
Buffer
=
NULL
;
if
(
devmode
)
{
devmodeW
.
dmBitsPerPel
=
devmode
->
dmBitsPerPel
;
devmodeW
.
dmPelsHeight
=
devmode
->
dmPelsHeight
;
devmodeW
.
dmPelsWidth
=
devmode
->
dmPelsWidth
;
devmodeW
.
dmDisplayFlags
=
devmode
->
dmDisplayFlags
;
devmodeW
.
dmDisplayFrequency
=
devmode
->
dmDisplayFrequency
;
devmodeW
.
dmFields
=
devmode
->
dmFields
;
ret
=
ChangeDisplaySettingsExW
(
nameW
.
Buffer
,
&
devmodeW
,
hwnd
,
flags
,
lparam
);
}
else
{
ret
=
ChangeDisplaySettingsExW
(
nameW
.
Buffer
,
NULL
,
hwnd
,
flags
,
lparam
);
}
if
(
devname
)
RtlFreeUnicodeString
(
&
nameW
);
return
ret
;
}
/***********************************************************************
* ChangeDisplaySettingsExW (USER32.@)
*/
LONG
WINAPI
ChangeDisplaySettingsExW
(
LPCWSTR
devname
,
LPDEVMODEW
devmode
,
HWND
hwnd
,
DWORD
flags
,
LPVOID
lparam
)
{
/* Pass the request on to the driver */
if
(
!
USER_Driver
.
pChangeDisplaySettingsExW
)
return
DISP_CHANGE_FAILED
;
return
USER_Driver
.
pChangeDisplaySettingsExW
(
devname
,
devmode
,
hwnd
,
flags
,
lparam
);
}
/***********************************************************************
* EnumDisplaySettingsW (USER32.@)
* FIXME: Currently uses static list of modes.
*
* RETURNS
* TRUE if nth setting exists found (described in the LPDEVMODEW struct)
...
...
@@ -344,29 +337,7 @@ BOOL WINAPI EnumDisplaySettingsW(
DWORD
n
,
/* [in] nth entry in display settings list*/
LPDEVMODEW
devmode
/* [out] devmode for that setting */
)
{
#define NRMODES 5
#define NRDEPTHS 4
struct
{
int
w
,
h
;
}
modes
[
NRMODES
]
=
{{
512
,
384
},{
640
,
400
},{
640
,
480
},{
800
,
600
},{
1024
,
768
}};
int
depths
[
4
]
=
{
8
,
16
,
24
,
32
};
TRACE_
(
system
)(
"(%s,%ld,%p)
\n
"
,
debugstr_w
(
name
),
n
,
devmode
);
devmode
->
dmDisplayFlags
=
0
;
devmode
->
dmDisplayFrequency
=
85
;
if
(
n
==
0
||
n
==
(
DWORD
)
-
1
||
n
==
(
DWORD
)
-
2
)
{
devmode
->
dmBitsPerPel
=
GetSystemMetrics
(
SM_WINE_BPP
);
devmode
->
dmPelsHeight
=
GetSystemMetrics
(
SM_CYSCREEN
);
devmode
->
dmPelsWidth
=
GetSystemMetrics
(
SM_CXSCREEN
);
return
TRUE
;
}
if
((
n
-
1
)
<
NRMODES
*
NRDEPTHS
)
{
devmode
->
dmBitsPerPel
=
depths
[(
n
-
1
)
/
NRMODES
];
devmode
->
dmPelsHeight
=
modes
[(
n
-
1
)
%
NRMODES
].
h
;
devmode
->
dmPelsWidth
=
modes
[(
n
-
1
)
%
NRMODES
].
w
;
return
TRUE
;
}
return
FALSE
;
return
EnumDisplaySettingsExW
(
name
,
n
,
devmode
,
0
);
}
/***********************************************************************
...
...
@@ -374,25 +345,7 @@ BOOL WINAPI EnumDisplaySettingsW(
*/
BOOL
WINAPI
EnumDisplaySettingsA
(
LPCSTR
name
,
DWORD
n
,
LPDEVMODEA
devmode
)
{
DEVMODEW
devmodeW
;
BOOL
ret
;
UNICODE_STRING
nameW
;
if
(
name
)
RtlCreateUnicodeStringFromAsciiz
(
&
nameW
,
name
);
else
nameW
.
Buffer
=
NULL
;
ret
=
EnumDisplaySettingsW
(
nameW
.
Buffer
,
n
,
&
devmodeW
);
if
(
ret
)
{
devmode
->
dmBitsPerPel
=
devmodeW
.
dmBitsPerPel
;
devmode
->
dmPelsHeight
=
devmodeW
.
dmPelsHeight
;
devmode
->
dmPelsWidth
=
devmodeW
.
dmPelsWidth
;
devmode
->
dmDisplayFlags
=
devmodeW
.
dmDisplayFlags
;
devmode
->
dmDisplayFrequency
=
devmodeW
.
dmDisplayFrequency
;
/* FIXME: convert rest too, if they are ever returned */
}
RtlFreeUnicodeString
(
&
nameW
);
return
ret
;
return
EnumDisplaySettingsExA
(
name
,
n
,
devmode
,
0
);
}
/***********************************************************************
...
...
@@ -403,7 +356,6 @@ BOOL16 WINAPI EnumDisplaySettings16(
DWORD
n
,
/* [in] nth entry in display settings list*/
LPDEVMODEA
devmode
/* [out] devmode for that setting */
)
{
TRACE_
(
system
)(
"(%s, %ld, %p)
\n
"
,
name
,
n
,
devmode
);
return
(
BOOL16
)
EnumDisplaySettingsA
(
name
,
n
,
devmode
);
}
...
...
@@ -413,10 +365,25 @@ BOOL16 WINAPI EnumDisplaySettings16(
BOOL
WINAPI
EnumDisplaySettingsExA
(
LPCSTR
lpszDeviceName
,
DWORD
iModeNum
,
LPDEVMODEA
lpDevMode
,
DWORD
dwFlags
)
{
TRACE_
(
system
)(
"(%s,%lu,%p,%08lx): stub
\n
"
,
debugstr_a
(
lpszDeviceName
),
iModeNum
,
lpDevMode
,
dwFlags
);
DEVMODEW
devmodeW
;
BOOL
ret
;
UNICODE_STRING
nameW
;
if
(
lpszDeviceName
)
RtlCreateUnicodeStringFromAsciiz
(
&
nameW
,
lpszDeviceName
);
else
nameW
.
Buffer
=
NULL
;
return
EnumDisplaySettingsA
(
lpszDeviceName
,
iModeNum
,
lpDevMode
);
ret
=
EnumDisplaySettingsExW
(
nameW
.
Buffer
,
iModeNum
,
&
devmodeW
,
dwFlags
);
if
(
ret
)
{
lpDevMode
->
dmBitsPerPel
=
devmodeW
.
dmBitsPerPel
;
lpDevMode
->
dmPelsHeight
=
devmodeW
.
dmPelsHeight
;
lpDevMode
->
dmPelsWidth
=
devmodeW
.
dmPelsWidth
;
lpDevMode
->
dmDisplayFlags
=
devmodeW
.
dmDisplayFlags
;
lpDevMode
->
dmDisplayFrequency
=
devmodeW
.
dmDisplayFrequency
;
lpDevMode
->
dmFields
=
devmodeW
.
dmFields
;
}
if
(
lpszDeviceName
)
RtlFreeUnicodeString
(
&
nameW
);
return
ret
;
}
/***********************************************************************
...
...
@@ -425,10 +392,9 @@ BOOL WINAPI EnumDisplaySettingsExA(LPCSTR lpszDeviceName, DWORD iModeNum,
BOOL
WINAPI
EnumDisplaySettingsExW
(
LPCWSTR
lpszDeviceName
,
DWORD
iModeNum
,
LPDEVMODEW
lpDevMode
,
DWORD
dwFlags
)
{
TRACE_
(
system
)(
"(%s,%lu,%p,%08lx): stub
\n
"
,
debugstr_w
(
lpszDeviceName
),
iModeNum
,
lpDevMode
,
dwFlags
);
return
EnumDisplaySettingsW
(
lpszDeviceName
,
iModeNum
,
lpDevMode
);
/* Pass the request on to the driver */
if
(
!
USER_Driver
.
pEnumDisplaySettingsExW
)
return
FALSE
;
return
USER_Driver
.
pEnumDisplaySettingsExW
(
lpszDeviceName
,
iModeNum
,
lpDevMode
,
dwFlags
);
}
/***********************************************************************
...
...
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