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
002c626a
Commit
002c626a
authored
Nov 15, 2012
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
user32: Use parameter entry objects for the non-client metrics parameters.
parent
bfc8bc4d
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
154 additions
and
360 deletions
+154
-360
sysparams.c
dlls/user32/sysparams.c
+154
-360
No files found.
dlls/user32/sysparams.c
View file @
002c626a
...
@@ -49,7 +49,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(system);
...
@@ -49,7 +49,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(system);
enum
spi_index
enum
spi_index
{
{
SPI_SETWORKAREA_IDX
,
SPI_SETWORKAREA_IDX
,
SPI_NONCLIENTMETRICS_IDX
,
SPI_INDEX_COUNT
SPI_INDEX_COUNT
};
};
...
@@ -226,31 +225,45 @@ static const WCHAR SPI_SETFOCUSBORDERHEIGHT_VALNAME[]= {'F','o','c','u','
...
@@ -226,31 +225,45 @@ static const WCHAR SPI_SETFOCUSBORDERHEIGHT_VALNAME[]= {'F','o','c','u','
#define SPI_SETSCREENSAVERRUNNING_REGKEY DESKTOP_REGKEY
#define SPI_SETSCREENSAVERRUNNING_REGKEY DESKTOP_REGKEY
static
const
WCHAR
SPI_SETSCREENSAVERRUNNING_VALNAME
[]
=
{
'W'
,
'I'
,
'N'
,
'E'
,
'_'
,
'S'
,
'c'
,
'r'
,
'e'
,
'e'
,
'n'
,
'S'
,
'a'
,
'v'
,
'e'
,
'r'
,
'R'
,
'u'
,
'n'
,
'n'
,
'i'
,
'n'
,
'g'
,
0
};
static
const
WCHAR
SPI_SETSCREENSAVERRUNNING_VALNAME
[]
=
{
'W'
,
'I'
,
'N'
,
'E'
,
'_'
,
'S'
,
'c'
,
'r'
,
'e'
,
'e'
,
'n'
,
'S'
,
'a'
,
'v'
,
'e'
,
'r'
,
'R'
,
'u'
,
'n'
,
'n'
,
'i'
,
'n'
,
'g'
,
0
};
static
const
WCHAR
METRICS_SCROLLWIDTH_VALNAME
[]
=
{
'S'
,
'c'
,
'r'
,
'o'
,
'l'
,
'l'
,
'W'
,
'i'
,
'd'
,
't'
,
'h'
,
0
};
#define SPI_SETSCROLLWIDTH_REGKEY METRICS_REGKEY
static
const
WCHAR
METRICS_SCROLLHEIGHT_VALNAME
[]
=
{
'S'
,
'c'
,
'r'
,
'o'
,
'l'
,
'l'
,
'H'
,
'e'
,
'i'
,
'g'
,
'h'
,
't'
,
0
};
static
const
WCHAR
SPI_SETSCROLLWIDTH_VALNAME
[]
=
{
'S'
,
'c'
,
'r'
,
'o'
,
'l'
,
'l'
,
'W'
,
'i'
,
'd'
,
't'
,
'h'
,
0
};
static
const
WCHAR
METRICS_CAPTIONWIDTH_VALNAME
[]
=
{
'C'
,
'a'
,
'p'
,
't'
,
'i'
,
'o'
,
'n'
,
'W'
,
'i'
,
'd'
,
't'
,
'h'
,
0
};
#define SPI_SETSCROLLHEIGHT_REGKEY METRICS_REGKEY
static
const
WCHAR
METRICS_CAPTIONHEIGHT_VALNAME
[]
=
{
'C'
,
'a'
,
'p'
,
't'
,
'i'
,
'o'
,
'n'
,
'H'
,
'e'
,
'i'
,
'g'
,
'h'
,
't'
,
0
};
static
const
WCHAR
SPI_SETSCROLLHEIGHT_VALNAME
[]
=
{
'S'
,
'c'
,
'r'
,
'o'
,
'l'
,
'l'
,
'H'
,
'e'
,
'i'
,
'g'
,
'h'
,
't'
,
0
};
static
const
WCHAR
METRICS_SMCAPTIONWIDTH_VALNAME
[]
=
{
'S'
,
'm'
,
'C'
,
'a'
,
'p'
,
't'
,
'i'
,
'o'
,
'n'
,
'W'
,
'i'
,
'd'
,
't'
,
'h'
,
0
};
#define SPI_SETCAPTIONWIDTH_REGKEY METRICS_REGKEY
static
const
WCHAR
METRICS_SMCAPTIONHEIGHT_VALNAME
[]
=
{
'S'
,
'm'
,
'C'
,
'a'
,
'p'
,
't'
,
'i'
,
'o'
,
'n'
,
'H'
,
'e'
,
'i'
,
'g'
,
'h'
,
't'
,
0
};
static
const
WCHAR
SPI_SETCAPTIONWIDTH_VALNAME
[]
=
{
'C'
,
'a'
,
'p'
,
't'
,
'i'
,
'o'
,
'n'
,
'W'
,
'i'
,
'd'
,
't'
,
'h'
,
0
};
static
const
WCHAR
METRICS_MENUWIDTH_VALNAME
[]
=
{
'M'
,
'e'
,
'n'
,
'u'
,
'W'
,
'i'
,
'd'
,
't'
,
'h'
,
0
};
#define SPI_SETCAPTIONHEIGHT_REGKEY METRICS_REGKEY
static
const
WCHAR
METRICS_MENUHEIGHT_VALNAME
[]
=
{
'M'
,
'e'
,
'n'
,
'u'
,
'H'
,
'e'
,
'i'
,
'g'
,
'h'
,
't'
,
0
};
static
const
WCHAR
SPI_SETCAPTIONHEIGHT_VALNAME
[]
=
{
'C'
,
'a'
,
'p'
,
't'
,
'i'
,
'o'
,
'n'
,
'H'
,
'e'
,
'i'
,
'g'
,
'h'
,
't'
,
0
};
static
const
WCHAR
METRICS_ICONSIZE_VALNAME
[]
=
{
'S'
,
'h'
,
'e'
,
'l'
,
'l'
,
' '
,
'I'
,
'c'
,
'o'
,
'n'
,
' '
,
'S'
,
'i'
,
'z'
,
'e'
,
0
};
#define SPI_SETSMCAPTIONWIDTH_REGKEY METRICS_REGKEY
static
const
WCHAR
METRICS_BORDERWIDTH_VALNAME
[]
=
{
'B'
,
'o'
,
'r'
,
'd'
,
'e'
,
'r'
,
'W'
,
'i'
,
'd'
,
't'
,
'h'
,
0
};
static
const
WCHAR
SPI_SETSMCAPTIONWIDTH_VALNAME
[]
=
{
'S'
,
'm'
,
'C'
,
'a'
,
'p'
,
't'
,
'i'
,
'o'
,
'n'
,
'W'
,
'i'
,
'd'
,
't'
,
'h'
,
0
};
static
const
WCHAR
METRICS_PADDEDBORDERWIDTH_VALNAME
[]
=
{
'P'
,
'a'
,
'd'
,
'd'
,
'e'
,
'd'
,
'B'
,
'o'
,
'r'
,
'd'
,
'e'
,
'r'
,
'W'
,
'i'
,
'd'
,
't'
,
'h'
,
0
};
#define SPI_SETSMCAPTIONHEIGHT_REGKEY METRICS_REGKEY
static
const
WCHAR
METRICS_CAPTIONLOGFONT_VALNAME
[]
=
{
'C'
,
'a'
,
'p'
,
't'
,
'i'
,
'o'
,
'n'
,
'F'
,
'o'
,
'n'
,
't'
,
0
};
static
const
WCHAR
SPI_SETSMCAPTIONHEIGHT_VALNAME
[]
=
{
'S'
,
'm'
,
'C'
,
'a'
,
'p'
,
't'
,
'i'
,
'o'
,
'n'
,
'H'
,
'e'
,
'i'
,
'g'
,
'h'
,
't'
,
0
};
static
const
WCHAR
METRICS_SMCAPTIONLOGFONT_VALNAME
[]
=
{
'S'
,
'm'
,
'C'
,
'a'
,
'p'
,
't'
,
'i'
,
'o'
,
'n'
,
'F'
,
'o'
,
'n'
,
't'
,
0
};
#define SPI_SETMENUWIDTH_REGKEY METRICS_REGKEY
static
const
WCHAR
METRICS_MENULOGFONT_VALNAME
[]
=
{
'M'
,
'e'
,
'n'
,
'u'
,
'F'
,
'o'
,
'n'
,
't'
,
0
};
static
const
WCHAR
SPI_SETMENUWIDTH_VALNAME
[]
=
{
'M'
,
'e'
,
'n'
,
'u'
,
'W'
,
'i'
,
'd'
,
't'
,
'h'
,
0
};
static
const
WCHAR
METRICS_MESSAGELOGFONT_VALNAME
[]
=
{
'M'
,
'e'
,
's'
,
's'
,
'a'
,
'g'
,
'e'
,
'F'
,
'o'
,
'n'
,
't'
,
0
};
#define SPI_SETMENUHEIGHT_REGKEY METRICS_REGKEY
static
const
WCHAR
METRICS_STATUSLOGFONT_VALNAME
[]
=
{
'S'
,
't'
,
'a'
,
't'
,
'u'
,
's'
,
'F'
,
'o'
,
'n'
,
't'
,
0
};
static
const
WCHAR
SPI_SETMENUHEIGHT_VALNAME
[]
=
{
'M'
,
'e'
,
'n'
,
'u'
,
'H'
,
'e'
,
'i'
,
'g'
,
'h'
,
't'
,
0
};
#define SPI_SETICONSIZE_REGKEY METRICS_REGKEY
static
const
WCHAR
SPI_SETICONSIZE_VALNAME
[]
=
{
'S'
,
'h'
,
'e'
,
'l'
,
'l'
,
' '
,
'I'
,
'c'
,
'o'
,
'n'
,
' '
,
'S'
,
'i'
,
'z'
,
'e'
,
0
};
#define SPI_SETPADDEDBORDERWIDTH_REGKEY METRICS_REGKEY
static
const
WCHAR
SPI_SETPADDEDBORDERWIDTH_VALNAME
[]
=
{
'P'
,
'a'
,
'd'
,
'd'
,
'e'
,
'd'
,
'B'
,
'o'
,
'r'
,
'd'
,
'e'
,
'r'
,
'W'
,
'i'
,
'd'
,
't'
,
'h'
,
0
};
#define SPI_SETCAPTIONLOGFONT_REGKEY METRICS_REGKEY
static
const
WCHAR
SPI_SETCAPTIONLOGFONT_VALNAME
[]
=
{
'C'
,
'a'
,
'p'
,
't'
,
'i'
,
'o'
,
'n'
,
'F'
,
'o'
,
'n'
,
't'
,
0
};
#define SPI_SETSMCAPTIONLOGFONT_REGKEY METRICS_REGKEY
static
const
WCHAR
SPI_SETSMCAPTIONLOGFONT_VALNAME
[]
=
{
'S'
,
'm'
,
'C'
,
'a'
,
'p'
,
't'
,
'i'
,
'o'
,
'n'
,
'F'
,
'o'
,
'n'
,
't'
,
0
};
#define SPI_SETMENULOGFONT_REGKEY METRICS_REGKEY
static
const
WCHAR
SPI_SETMENULOGFONT_VALNAME
[]
=
{
'M'
,
'e'
,
'n'
,
'u'
,
'F'
,
'o'
,
'n'
,
't'
,
0
};
#define SPI_SETMESSAGELOGFONT_REGKEY METRICS_REGKEY
static
const
WCHAR
SPI_SETMESSAGELOGFONT_VALNAME
[]
=
{
'M'
,
'e'
,
's'
,
's'
,
'a'
,
'g'
,
'e'
,
'F'
,
'o'
,
'n'
,
't'
,
0
};
#define SPI_SETSTATUSLOGFONT_REGKEY METRICS_REGKEY
static
const
WCHAR
SPI_SETSTATUSLOGFONT_VALNAME
[]
=
{
'S'
,
't'
,
'a'
,
't'
,
'u'
,
's'
,
'F'
,
'o'
,
'n'
,
't'
,
0
};
/* minimized metrics */
/* minimized metrics */
#define SPI_SETM
ETRICS_MINWIDTH_REGKEY
METRICS_REGKEY
#define SPI_SETM
INWIDTH_REGKEY
METRICS_REGKEY
static
const
WCHAR
SPI_SETM
ETRICS_MINWIDTH_VALNAME
[]
=
{
'M'
,
'i'
,
'n'
,
'W'
,
'i'
,
'd'
,
't'
,
'h'
,
0
};
static
const
WCHAR
SPI_SETM
INWIDTH_VALNAME
[]
=
{
'M'
,
'i'
,
'n'
,
'W'
,
'i'
,
'd'
,
't'
,
'h'
,
0
};
#define SPI_SETM
ETRICS_MINHORZGAP_REGKEY
METRICS_REGKEY
#define SPI_SETM
INHORZGAP_REGKEY
METRICS_REGKEY
static
const
WCHAR
SPI_SETM
ETRICS_MINHORZGAP_VALNAME
[]
=
{
'M'
,
'i'
,
'n'
,
'H'
,
'o'
,
'r'
,
'z'
,
'G'
,
'a'
,
'p'
,
0
};
static
const
WCHAR
SPI_SETM
INHORZGAP_VALNAME
[]
=
{
'M'
,
'i'
,
'n'
,
'H'
,
'o'
,
'r'
,
'z'
,
'G'
,
'a'
,
'p'
,
0
};
#define SPI_SETM
ETRICS_MINVERTGAP_REGKEY
METRICS_REGKEY
#define SPI_SETM
INVERTGAP_REGKEY
METRICS_REGKEY
static
const
WCHAR
SPI_SETM
ETRICS_MINVERTGAP_VALNAME
[]
=
{
'M'
,
'i'
,
'n'
,
'V'
,
'e'
,
'r'
,
't'
,
'G'
,
'a'
,
'p'
,
0
};
static
const
WCHAR
SPI_SETM
INVERTGAP_VALNAME
[]
=
{
'M'
,
'i'
,
'n'
,
'V'
,
'e'
,
'r'
,
't'
,
'G'
,
'a'
,
'p'
,
0
};
#define SPI_SETM
ETRICS_MINARRANGE_REGKEY
METRICS_REGKEY
#define SPI_SETM
INARRANGE_REGKEY
METRICS_REGKEY
static
const
WCHAR
SPI_SETM
ETRICS_MINARRANGE_VALNAME
[]
=
{
'M'
,
'i'
,
'n'
,
'A'
,
'r'
,
'r'
,
'a'
,
'n'
,
'g'
,
'e'
,
0
};
static
const
WCHAR
SPI_SETM
INARRANGE_VALNAME
[]
=
{
'M'
,
'i'
,
'n'
,
'A'
,
'r'
,
'r'
,
'a'
,
'n'
,
'g'
,
'e'
,
0
};
static
const
WCHAR
WINE_CURRENT_USER_REGKEY
[]
=
{
'S'
,
'o'
,
'f'
,
't'
,
'w'
,
'a'
,
'r'
,
'e'
,
'\\'
,
static
const
WCHAR
WINE_CURRENT_USER_REGKEY
[]
=
{
'S'
,
'o'
,
'f'
,
't'
,
'w'
,
'a'
,
'r'
,
'e'
,
'\\'
,
'W'
,
'i'
,
'n'
,
'e'
,
0
};
'W'
,
'i'
,
'n'
,
'e'
,
0
};
...
@@ -285,32 +298,6 @@ static BOOL notify_change = TRUE;
...
@@ -285,32 +298,6 @@ static BOOL notify_change = TRUE;
/* System parameters storage */
/* System parameters storage */
static
RECT
work_area
;
static
RECT
work_area
;
static
NONCLIENTMETRICSW
nonclient_metrics
=
{
sizeof
(
NONCLIENTMETRICSW
),
1
,
/* iBorderWidth */
16
,
/* iScrollWidth */
16
,
/* iScrollHeight */
18
,
/* iCaptionWidth */
18
,
/* iCaptionHeight */
{
0
},
/* lfCaptionFont */
13
,
/* iSmCaptionWidth */
15
,
/* iSmCaptionHeight */
{
0
},
/* lfSmCaptionFont */
18
,
/* iMenuWidth */
18
,
/* iMenuHeight */
{
0
},
/* lfMenuFont */
{
0
},
/* lfStatusFont */
{
0
},
/* lfMessageFont */
0
/* iPaddedBorderWidth */
};
/* some additional non client metric info */
static
TEXTMETRICW
tmMenuFont
;
static
UINT
CaptionFontAvCharWidth
;
static
SIZE
icon_size
=
{
32
,
32
};
#define NUM_SYS_COLORS (COLOR_MENUBAR+1)
#define NUM_SYS_COLORS (COLOR_MENUBAR+1)
static
COLORREF
SysColors
[
NUM_SYS_COLORS
];
static
COLORREF
SysColors
[
NUM_SYS_COLORS
];
...
@@ -679,24 +666,6 @@ static BOOL SYSPARAMS_Save( LPCWSTR lpRegKey, LPCWSTR lpValName, LPCWSTR lpValue
...
@@ -679,24 +666,6 @@ static BOOL SYSPARAMS_Save( LPCWSTR lpRegKey, LPCWSTR lpValName, LPCWSTR lpValue
(
strlenW
(
lpValue
)
+
1
)
*
sizeof
(
WCHAR
),
REG_SZ
,
fWinIni
);
(
strlenW
(
lpValue
)
+
1
)
*
sizeof
(
WCHAR
),
REG_SZ
,
fWinIni
);
}
}
/* Convenience function to save logical fonts */
static
BOOL
SYSPARAMS_SaveLogFont
(
LPCWSTR
lpRegKey
,
LPCWSTR
lpValName
,
const
LOGFONTW
*
plf
,
UINT
fWinIni
)
{
LOGFONTW
lf
=
*
plf
;
int
len
;
/* Zero pad the end of lfFaceName so we don't write uninitialised
data to the registry */
lf
.
lfFaceName
[
LF_FACESIZE
-
1
]
=
0
;
len
=
strlenW
(
lf
.
lfFaceName
);
if
(
len
<
LF_FACESIZE
-
1
)
memset
(
lf
.
lfFaceName
+
len
,
0
,
(
LF_FACESIZE
-
1
-
len
)
*
sizeof
(
WCHAR
));
return
SYSPARAMS_SaveRaw
(
lpRegKey
,
lpValName
,
(
const
BYTE
*
)
&
lf
,
sizeof
(
LOGFONTW
),
REG_BINARY
,
fWinIni
);
}
/* load a value to a registry entry */
/* load a value to a registry entry */
static
BOOL
load_entry
(
struct
sysparam_entry
*
entry
,
void
*
data
,
DWORD
size
)
static
BOOL
load_entry
(
struct
sysparam_entry
*
entry
,
void
*
data
,
DWORD
size
)
{
{
...
@@ -739,59 +708,6 @@ static inline int get_display_dpi(void)
...
@@ -739,59 +708,6 @@ static inline int get_display_dpi(void)
return
display_dpi
;
return
display_dpi
;
}
}
/***********************************************************************
* SYSPARAMS_Twips2Pixels
*
* Convert a dimension value that was obtained from the registry. These are
* quoted as being "twips" values if negative and pixels if positive.
* One inch is 1440 twips. So to convert, divide by 1440 to get inches and
* multiply that by the dots-per-inch to get the size in pixels.
* See for example
* MSDN Library - April 2001 -> Resource Kits ->
* Windows 2000 Resource Kit Reference ->
* Technical Reference to the Windows 2000 Registry ->
* HKEY_CURRENT_USER -> Control Panel -> Desktop -> WindowMetrics
*/
static
inline
int
SYSPARAMS_Twips2Pixels
(
int
x
)
{
if
(
x
<
0
)
x
=
(
-
x
*
get_display_dpi
()
+
720
)
/
1440
;
return
x
;
}
/***********************************************************************
* get_reg_metric
*
* Get a registry entry from the already open key. This allows us to open the
* section once and read several values.
*
* Of course this function belongs somewhere more usable but here will do
* for now.
*/
static
int
get_reg_metric
(
HKEY
hkey
,
LPCWSTR
lpValName
,
int
default_value
)
{
int
value
=
default_value
;
if
(
hkey
)
{
WCHAR
buffer
[
128
];
DWORD
type
,
count
=
sizeof
(
buffer
);
if
(
!
RegQueryValueExW
(
hkey
,
lpValName
,
NULL
,
&
type
,
(
LPBYTE
)
buffer
,
&
count
)
)
{
if
(
type
!=
REG_SZ
)
{
/* Are there any utilities for converting registry entries
* between formats?
*/
/* FIXME_(reg)("We need reg format converter\n"); */
}
else
value
=
atoiW
(
buffer
);
}
}
return
SYSPARAMS_Twips2Pixels
(
value
);
}
/*************************************************************************
/*************************************************************************
* SYSPARAMS_SetSysColor
* SYSPARAMS_SetSysColor
*/
*/
...
@@ -816,18 +732,6 @@ static void SYSPARAMS_SetSysColor( int index, COLORREF color )
...
@@ -816,18 +732,6 @@ static void SYSPARAMS_SetSysColor( int index, COLORREF color )
__wine_make_gdi_object_system
(
SysColorPens
[
index
],
TRUE
);
__wine_make_gdi_object_system
(
SysColorPens
[
index
],
TRUE
);
}
}
/* save an int parameter in registry */
static
BOOL
save_int_param
(
LPCWSTR
regkey
,
LPCWSTR
value
,
INT
*
value_ptr
,
INT
new_val
,
UINT
fWinIni
)
{
WCHAR
buf
[
12
];
wsprintfW
(
buf
,
CSd
,
new_val
);
if
(
!
SYSPARAMS_Save
(
regkey
,
value
,
buf
,
fWinIni
))
return
FALSE
;
if
(
value_ptr
)
*
value_ptr
=
new_val
;
return
TRUE
;
}
/***********************************************************************
/***********************************************************************
* SYSPARAMS_Init
* SYSPARAMS_Init
*
*
...
@@ -935,108 +839,15 @@ static void normalize_nonclientmetrics( NONCLIENTMETRICSW *pncm)
...
@@ -935,108 +839,15 @@ static void normalize_nonclientmetrics( NONCLIENTMETRICSW *pncm)
if
(
pncm
->
iScrollWidth
<
8
)
pncm
->
iScrollWidth
=
8
;
if
(
pncm
->
iScrollWidth
<
8
)
pncm
->
iScrollWidth
=
8
;
if
(
pncm
->
iScrollHeight
<
8
)
pncm
->
iScrollHeight
=
8
;
if
(
pncm
->
iScrollHeight
<
8
)
pncm
->
iScrollHeight
=
8
;
/* get some extra metrics */
get_text_metr_size
(
get_display_dc
(),
&
pncm
->
lfMenuFont
,
&
tmMenuFont
,
NULL
);
get_text_metr_size
(
get_display_dc
(),
&
pncm
->
lfCaptionFont
,
NULL
,
&
CaptionFontAvCharWidth
);
/* adjust some heights to the corresponding font */
/* adjust some heights to the corresponding font */
pncm
->
iMenuHeight
=
max
(
pncm
->
iMenuHeight
,
get_text_metr_size
(
get_display_dc
(),
&
pncm
->
lfMenuFont
,
&
tm
,
NULL
);
2
+
tmMenuFont
.
tmHeight
+
tmMenuFont
.
tmExternalLeading
);
pncm
->
iMenuHeight
=
max
(
pncm
->
iMenuHeight
,
2
+
tm
.
tmHeight
+
tm
.
tmExternalLeading
);
get_text_metr_size
(
get_display_dc
(),
&
pncm
->
lfCaptionFont
,
&
tm
,
NULL
);
get_text_metr_size
(
get_display_dc
(),
&
pncm
->
lfCaptionFont
,
&
tm
,
NULL
);
pncm
->
iCaptionHeight
=
max
(
pncm
->
iCaptionHeight
,
2
+
tm
.
tmHeight
);
pncm
->
iCaptionHeight
=
max
(
pncm
->
iCaptionHeight
,
2
+
tm
.
tmHeight
);
get_text_metr_size
(
get_display_dc
(),
&
pncm
->
lfSmCaptionFont
,
&
tm
,
NULL
);
get_text_metr_size
(
get_display_dc
(),
&
pncm
->
lfSmCaptionFont
,
&
tm
,
NULL
);
pncm
->
iSmCaptionHeight
=
max
(
pncm
->
iSmCaptionHeight
,
2
+
tm
.
tmHeight
);
pncm
->
iSmCaptionHeight
=
max
(
pncm
->
iSmCaptionHeight
,
2
+
tm
.
tmHeight
);
}
}
/* load all the non-client metrics */
static
void
load_nonclient_metrics
(
void
)
{
HKEY
hkey
;
NONCLIENTMETRICSW
ncm
;
INT
r
;
ncm
.
cbSize
=
sizeof
(
ncm
);
if
(
RegOpenKeyExW
(
HKEY_CURRENT_USER
,
METRICS_REGKEY
,
0
,
KEY_QUERY_VALUE
,
&
hkey
)
!=
ERROR_SUCCESS
)
hkey
=
0
;
/* initialize geometry entries */
ncm
.
iBorderWidth
=
get_reg_metric
(
hkey
,
METRICS_BORDERWIDTH_VALNAME
,
1
);
ncm
.
iScrollWidth
=
get_reg_metric
(
hkey
,
METRICS_SCROLLWIDTH_VALNAME
,
16
);
ncm
.
iScrollHeight
=
get_reg_metric
(
hkey
,
METRICS_SCROLLHEIGHT_VALNAME
,
16
);
ncm
.
iPaddedBorderWidth
=
get_reg_metric
(
hkey
,
METRICS_PADDEDBORDERWIDTH_VALNAME
,
0
);
/* size of the normal caption buttons */
ncm
.
iCaptionHeight
=
get_reg_metric
(
hkey
,
METRICS_CAPTIONHEIGHT_VALNAME
,
18
);
ncm
.
iCaptionWidth
=
get_reg_metric
(
hkey
,
METRICS_CAPTIONWIDTH_VALNAME
,
ncm
.
iCaptionHeight
);
/* caption font metrics */
if
(
!
reg_get_logfont
(
METRICS_REGKEY
,
METRICS_CAPTIONLOGFONT_VALNAME
,
&
ncm
.
lfCaptionFont
))
{
SystemParametersInfoW
(
SPI_GETICONTITLELOGFONT
,
0
,
&
ncm
.
lfCaptionFont
,
0
);
ncm
.
lfCaptionFont
.
lfWeight
=
FW_BOLD
;
}
/* size of the small caption buttons */
ncm
.
iSmCaptionWidth
=
get_reg_metric
(
hkey
,
METRICS_SMCAPTIONWIDTH_VALNAME
,
13
);
ncm
.
iSmCaptionHeight
=
get_reg_metric
(
hkey
,
METRICS_SMCAPTIONHEIGHT_VALNAME
,
15
);
/* small caption font metrics */
if
(
!
reg_get_logfont
(
METRICS_REGKEY
,
METRICS_SMCAPTIONLOGFONT_VALNAME
,
&
ncm
.
lfSmCaptionFont
))
SystemParametersInfoW
(
SPI_GETICONTITLELOGFONT
,
0
,
&
ncm
.
lfSmCaptionFont
,
0
);
/* menus, FIXME: names of registry entries are bogus */
/* size of the menu (MDI) buttons */
ncm
.
iMenuHeight
=
get_reg_metric
(
hkey
,
METRICS_MENUHEIGHT_VALNAME
,
18
);
ncm
.
iMenuWidth
=
get_reg_metric
(
hkey
,
METRICS_MENUWIDTH_VALNAME
,
ncm
.
iMenuHeight
);
/* menu font metrics */
if
(
!
reg_get_logfont
(
METRICS_REGKEY
,
METRICS_MENULOGFONT_VALNAME
,
&
ncm
.
lfMenuFont
))
{
SystemParametersInfoW
(
SPI_GETICONTITLELOGFONT
,
0
,
&
ncm
.
lfMenuFont
,
0
);
GetProfileStringW
(
Desktop
,
MenuFont
,
ncm
.
lfCaptionFont
.
lfFaceName
,
ncm
.
lfMenuFont
.
lfFaceName
,
LF_FACESIZE
);
r
=
GetProfileIntW
(
Desktop
,
MenuFontSize
,
0
);
if
(
r
)
ncm
.
lfMenuFont
.
lfHeight
=
-
r
;
ncm
.
lfMenuFont
.
lfWeight
=
FW_NORMAL
;
}
/* status bar font metrics */
if
(
!
reg_get_logfont
(
METRICS_REGKEY
,
METRICS_STATUSLOGFONT_VALNAME
,
&
ncm
.
lfStatusFont
))
{
SystemParametersInfoW
(
SPI_GETICONTITLELOGFONT
,
0
,
&
ncm
.
lfStatusFont
,
0
);
GetProfileStringW
(
Desktop
,
StatusFont
,
ncm
.
lfCaptionFont
.
lfFaceName
,
ncm
.
lfStatusFont
.
lfFaceName
,
LF_FACESIZE
);
r
=
GetProfileIntW
(
Desktop
,
StatusFontSize
,
0
);
if
(
r
)
ncm
.
lfStatusFont
.
lfHeight
=
-
r
;
ncm
.
lfStatusFont
.
lfWeight
=
FW_NORMAL
;
}
/* message font metrics */
if
(
!
reg_get_logfont
(
METRICS_REGKEY
,
METRICS_MESSAGELOGFONT_VALNAME
,
&
ncm
.
lfMessageFont
))
{
SystemParametersInfoW
(
SPI_GETICONTITLELOGFONT
,
0
,
&
ncm
.
lfMessageFont
,
0
);
GetProfileStringW
(
Desktop
,
MessageFont
,
ncm
.
lfCaptionFont
.
lfFaceName
,
ncm
.
lfMessageFont
.
lfFaceName
,
LF_FACESIZE
);
r
=
GetProfileIntW
(
Desktop
,
MessageFontSize
,
0
);
if
(
r
)
ncm
.
lfMessageFont
.
lfHeight
=
-
r
;
ncm
.
lfMessageFont
.
lfWeight
=
FW_NORMAL
;
}
/* some extra fields not in the nonclient structure */
icon_size
.
cx
=
icon_size
.
cy
=
get_reg_metric
(
hkey
,
METRICS_ICONSIZE_VALNAME
,
32
);
if
(
hkey
)
RegCloseKey
(
hkey
);
normalize_nonclientmetrics
(
&
ncm
);
nonclient_metrics
=
ncm
;
spi_loaded
[
SPI_NONCLIENTMETRICS_IDX
]
=
TRUE
;
}
static
BOOL
CALLBACK
enum_monitors
(
HMONITOR
monitor
,
HDC
hdc
,
LPRECT
rect
,
LPARAM
lp
)
static
BOOL
CALLBACK
enum_monitors
(
HMONITOR
monitor
,
HDC
hdc
,
LPRECT
rect
,
LPARAM
lp
)
{
{
MONITORINFO
mi
;
MONITORINFO
mi
;
...
@@ -1100,7 +911,17 @@ static BOOL get_twips_entry( union sysparam_all_entry *entry, UINT int_param, vo
...
@@ -1100,7 +911,17 @@ static BOOL get_twips_entry( union sysparam_all_entry *entry, UINT int_param, vo
WCHAR
buf
[
32
];
WCHAR
buf
[
32
];
if
(
load_entry
(
&
entry
->
hdr
,
buf
,
sizeof
(
buf
)
))
if
(
load_entry
(
&
entry
->
hdr
,
buf
,
sizeof
(
buf
)
))
entry
->
uint
.
val
=
SYSPARAMS_Twips2Pixels
(
atoiW
(
buf
)
);
{
int
val
=
atoiW
(
buf
);
/* Dimension are quoted as being "twips" values if negative and pixels if positive.
* One inch is 1440 twips.
* See for example
* Technical Reference to the Windows 2000 Registry ->
* HKEY_CURRENT_USER -> Control Panel -> Desktop -> WindowMetrics
*/
if
(
val
<
0
)
val
=
(
-
val
*
get_display_dpi
()
+
720
)
/
1440
;
entry
->
uint
.
val
=
val
;
}
}
}
*
(
UINT
*
)
ptr_param
=
entry
->
uint
.
val
;
*
(
UINT
*
)
ptr_param
=
entry
->
uint
.
val
;
return
TRUE
;
return
TRUE
;
...
@@ -1326,7 +1147,7 @@ static BOOL set_entry( void *ptr, UINT int_param, void *ptr_param, UINT flags )
...
@@ -1326,7 +1147,7 @@ static BOOL set_entry( void *ptr, UINT int_param, void *ptr_param, UINT flags )
SPI_SET ## name ##_REGKEY, SPI_SET ## name ##_VALNAME }, (val) }
SPI_SET ## name ##_REGKEY, SPI_SET ## name ##_VALNAME }, (val) }
#define TWIPS_ENTRY(name,val) \
#define TWIPS_ENTRY(name,val) \
struct sysparam_uint_entry entry_##name = { { get_twips_entry, set_
u
int_entry, \
struct sysparam_uint_entry entry_##name = { { get_twips_entry, set_int_entry, \
SPI_SET ## name ##_REGKEY, SPI_SET ## name ##_VALNAME }, (val) }
SPI_SET ## name ##_REGKEY, SPI_SET ## name ##_VALNAME }, (val) }
#define DWORD_ENTRY(name,val) \
#define DWORD_ENTRY(name,val) \
...
@@ -1351,13 +1172,14 @@ static UINT_ENTRY( DRAGHEIGHT, 4 );
...
@@ -1351,13 +1172,14 @@ static UINT_ENTRY( DRAGHEIGHT, 4 );
static
UINT_ENTRY
(
DOUBLECLICKTIME
,
500
);
static
UINT_ENTRY
(
DOUBLECLICKTIME
,
500
);
static
UINT_ENTRY
(
FONTSMOOTHING
,
0
);
static
UINT_ENTRY
(
FONTSMOOTHING
,
0
);
static
UINT_ENTRY
(
GRIDGRANULARITY
,
0
);
static
UINT_ENTRY
(
GRIDGRANULARITY
,
0
);
static
UINT_ENTRY
(
ICONSIZE
,
32
);
static
UINT_ENTRY
(
KEYBOARDDELAY
,
1
);
static
UINT_ENTRY
(
KEYBOARDDELAY
,
1
);
static
UINT_ENTRY
(
KEYBOARDSPEED
,
31
);
static
UINT_ENTRY
(
KEYBOARDSPEED
,
31
);
static
UINT_ENTRY
(
MENUSHOWDELAY
,
400
);
static
UINT_ENTRY
(
MENUSHOWDELAY
,
400
);
static
UINT_ENTRY
(
M
ETRICS_M
INARRANGE
,
ARW_HIDE
);
static
UINT_ENTRY
(
MINARRANGE
,
ARW_HIDE
);
static
UINT_ENTRY
(
M
ETRICS_M
INHORZGAP
,
0
);
static
UINT_ENTRY
(
MINHORZGAP
,
0
);
static
UINT_ENTRY
(
M
ETRICS_M
INVERTGAP
,
0
);
static
UINT_ENTRY
(
MINVERTGAP
,
0
);
static
UINT_ENTRY
(
M
ETRICS_M
INWIDTH
,
154
);
static
UINT_ENTRY
(
MINWIDTH
,
154
);
static
UINT_ENTRY
(
MOUSEHOVERHEIGHT
,
4
);
static
UINT_ENTRY
(
MOUSEHOVERHEIGHT
,
4
);
static
UINT_ENTRY
(
MOUSEHOVERTIME
,
400
);
static
UINT_ENTRY
(
MOUSEHOVERTIME
,
400
);
static
UINT_ENTRY
(
MOUSEHOVERWIDTH
,
4
);
static
UINT_ENTRY
(
MOUSEHOVERWIDTH
,
4
);
...
@@ -1389,8 +1211,17 @@ static BOOL_ENTRY_MIRROR( ICONTITLEWRAP, TRUE );
...
@@ -1389,8 +1211,17 @@ static BOOL_ENTRY_MIRROR( ICONTITLEWRAP, TRUE );
static
YESNO_ENTRY
(
BEEP
,
TRUE
);
static
YESNO_ENTRY
(
BEEP
,
TRUE
);
static
TWIPS_ENTRY
(
BORDER
,
1
);
static
TWIPS_ENTRY
(
BORDER
,
1
);
static
TWIPS_ENTRY
(
CAPTIONHEIGHT
,
18
);
static
TWIPS_ENTRY
(
CAPTIONWIDTH
,
18
);
static
TWIPS_ENTRY
(
ICONHORIZONTALSPACING
,
75
);
static
TWIPS_ENTRY
(
ICONHORIZONTALSPACING
,
75
);
static
TWIPS_ENTRY
(
ICONVERTICALSPACING
,
75
);
static
TWIPS_ENTRY
(
ICONVERTICALSPACING
,
75
);
static
TWIPS_ENTRY
(
MENUHEIGHT
,
18
);
static
TWIPS_ENTRY
(
MENUWIDTH
,
18
);
static
TWIPS_ENTRY
(
PADDEDBORDERWIDTH
,
0
);
static
TWIPS_ENTRY
(
SCROLLHEIGHT
,
16
);
static
TWIPS_ENTRY
(
SCROLLWIDTH
,
16
);
static
TWIPS_ENTRY
(
SMCAPTIONHEIGHT
,
15
);
static
TWIPS_ENTRY
(
SMCAPTIONWIDTH
,
13
);
static
DWORD_ENTRY
(
ACTIVEWINDOWTRACKING
,
0
);
static
DWORD_ENTRY
(
ACTIVEWINDOWTRACKING
,
0
);
static
DWORD_ENTRY
(
ACTIVEWNDTRKTIMEOUT
,
0
);
static
DWORD_ENTRY
(
ACTIVEWNDTRKTIMEOUT
,
0
);
...
@@ -1403,10 +1234,15 @@ static DWORD_ENTRY( FOREGROUNDFLASHCOUNT, 3 );
...
@@ -1403,10 +1234,15 @@ static DWORD_ENTRY( FOREGROUNDFLASHCOUNT, 3 );
static
DWORD_ENTRY
(
FOREGROUNDLOCKTIMEOUT
,
0
);
static
DWORD_ENTRY
(
FOREGROUNDLOCKTIMEOUT
,
0
);
static
DWORD_ENTRY
(
MOUSECLICKLOCKTIME
,
1200
);
static
DWORD_ENTRY
(
MOUSECLICKLOCKTIME
,
1200
);
static
BYTE
user_prefs
[
8
]
=
{
0x30
,
0x00
,
0x0
2
,
0x80
,
0x10
,
0x00
,
0x00
,
0x00
};
static
BYTE
user_prefs
[
8
]
=
{
0x30
,
0x00
,
0x0
0
,
0x80
,
0x10
,
0x00
,
0x00
,
0x00
};
static
BINARY_ENTRY
(
USERPREFERENCESMASK
,
user_prefs
);
static
BINARY_ENTRY
(
USERPREFERENCESMASK
,
user_prefs
);
static
FONT_ENTRY
(
CAPTIONLOGFONT
,
FW_BOLD
);
static
FONT_ENTRY
(
ICONTITLELOGFONT
,
FW_NORMAL
);
static
FONT_ENTRY
(
ICONTITLELOGFONT
,
FW_NORMAL
);
static
FONT_ENTRY
(
MENULOGFONT
,
FW_NORMAL
);
static
FONT_ENTRY
(
MESSAGELOGFONT
,
FW_NORMAL
);
static
FONT_ENTRY
(
SMCAPTIONLOGFONT
,
FW_NORMAL
);
static
FONT_ENTRY
(
STATUSLOGFONT
,
FW_NORMAL
);
static
USERPREF_ENTRY
(
MENUANIMATION
,
0
,
0x02
);
static
USERPREF_ENTRY
(
MENUANIMATION
,
0
,
0x02
);
static
USERPREF_ENTRY
(
COMBOBOXANIMATION
,
0
,
0x04
);
static
USERPREF_ENTRY
(
COMBOBOXANIMATION
,
0
,
0x04
);
...
@@ -1502,8 +1338,6 @@ BOOL WINAPI SystemParametersInfoW( UINT uiAction, UINT uiParam,
...
@@ -1502,8 +1338,6 @@ BOOL WINAPI SystemParametersInfoW( UINT uiAction, UINT uiParam,
if
(
*
(
INT
*
)
pvParam
<
1
)
*
(
INT
*
)
pvParam
=
1
;
if
(
*
(
INT
*
)
pvParam
<
1
)
*
(
INT
*
)
pvParam
=
1
;
break
;
break
;
case
SPI_SETBORDER
:
case
SPI_SETBORDER
:
nonclient_metrics
.
iBorderWidth
=
uiParam
>
0
?
uiParam
:
1
;
/* raw value goes to registry */
ret
=
set_entry
(
&
entry_BORDER
,
uiParam
,
pvParam
,
fWinIni
);
ret
=
set_entry
(
&
entry_BORDER
,
uiParam
,
pvParam
,
fWinIni
);
break
;
break
;
case
SPI_GETKEYBOARDSPEED
:
case
SPI_GETKEYBOARDSPEED
:
...
@@ -1633,31 +1467,31 @@ BOOL WINAPI SystemParametersInfoW( UINT uiAction, UINT uiParam,
...
@@ -1633,31 +1467,31 @@ BOOL WINAPI SystemParametersInfoW( UINT uiAction, UINT uiParam,
case
SPI_GETDRAGFULLWINDOWS
:
case
SPI_GETDRAGFULLWINDOWS
:
ret
=
get_entry
(
&
entry_DRAGFULLWINDOWS
,
uiParam
,
pvParam
);
ret
=
get_entry
(
&
entry_DRAGFULLWINDOWS
,
uiParam
,
pvParam
);
break
;
break
;
case
SPI_GETNONCLIENTMETRICS
:
case
SPI_GETNONCLIENTMETRICS
:
{
{
LPNONCLIENTMETRICSW
lpnm
=
pvParam
;
LPNONCLIENTMETRICSW
lpnm
=
pvParam
;
if
(
!
lpnm
)
if
(
!
pvParam
)
return
FALSE
;
{
ret
=
FALSE
;
break
;
}
if
(
!
spi_loaded
[
SPI_NONCLIENTMETRICS_IDX
])
load_nonclient_metrics
();
get_entry
(
&
entry_BORDER
,
0
,
&
lpnm
->
iBorderWidth
);
get_entry
(
&
entry_SCROLLWIDTH
,
0
,
&
lpnm
->
iScrollWidth
);
get_entry
(
&
entry_SCROLLHEIGHT
,
0
,
&
lpnm
->
iScrollHeight
);
get_entry
(
&
entry_CAPTIONWIDTH
,
0
,
&
lpnm
->
iCaptionWidth
);
get_entry
(
&
entry_CAPTIONHEIGHT
,
0
,
&
lpnm
->
iCaptionHeight
);
get_entry
(
&
entry_CAPTIONLOGFONT
,
0
,
&
lpnm
->
lfCaptionFont
);
get_entry
(
&
entry_SMCAPTIONWIDTH
,
0
,
&
lpnm
->
iSmCaptionWidth
);
get_entry
(
&
entry_SMCAPTIONHEIGHT
,
0
,
&
lpnm
->
iSmCaptionHeight
);
get_entry
(
&
entry_SMCAPTIONLOGFONT
,
0
,
&
lpnm
->
lfSmCaptionFont
);
get_entry
(
&
entry_MENUWIDTH
,
0
,
&
lpnm
->
iMenuWidth
);
get_entry
(
&
entry_MENUHEIGHT
,
0
,
&
lpnm
->
iMenuHeight
);
get_entry
(
&
entry_MENULOGFONT
,
0
,
&
lpnm
->
lfMenuFont
);
get_entry
(
&
entry_STATUSLOGFONT
,
0
,
&
lpnm
->
lfStatusFont
);
get_entry
(
&
entry_MESSAGELOGFONT
,
0
,
&
lpnm
->
lfMessageFont
);
if
(
lpnm
->
cbSize
==
sizeof
(
NONCLIENTMETRICSW
))
if
(
lpnm
->
cbSize
==
sizeof
(
NONCLIENTMETRICSW
))
*
lpnm
=
nonclient_metrics
;
get_entry
(
&
entry_PADDEDBORDERWIDTH
,
0
,
&
lpnm
->
iPaddedBorderWidth
);
else
if
(
lpnm
->
cbSize
==
FIELD_OFFSET
(
NONCLIENTMETRICSW
,
iPaddedBorderWidth
))
normalize_nonclientmetrics
(
lpnm
);
{
memcpy
(
lpnm
,
&
nonclient_metrics
,
FIELD_OFFSET
(
NONCLIENTMETRICSW
,
iPaddedBorderWidth
));
lpnm
->
cbSize
=
FIELD_OFFSET
(
NONCLIENTMETRICSW
,
iPaddedBorderWidth
);
}
else
ret
=
FALSE
;
break
;
break
;
}
}
case
SPI_SETNONCLIENTMETRICS
:
case
SPI_SETNONCLIENTMETRICS
:
{
{
LPNONCLIENTMETRICSW
lpnm
=
pvParam
;
LPNONCLIENTMETRICSW
lpnm
=
pvParam
;
...
@@ -1665,68 +1499,34 @@ BOOL WINAPI SystemParametersInfoW( UINT uiAction, UINT uiParam,
...
@@ -1665,68 +1499,34 @@ BOOL WINAPI SystemParametersInfoW( UINT uiAction, UINT uiParam,
if
(
lpnm
&&
(
lpnm
->
cbSize
==
sizeof
(
NONCLIENTMETRICSW
)
||
if
(
lpnm
&&
(
lpnm
->
cbSize
==
sizeof
(
NONCLIENTMETRICSW
)
||
lpnm
->
cbSize
==
FIELD_OFFSET
(
NONCLIENTMETRICSW
,
iPaddedBorderWidth
)))
lpnm
->
cbSize
==
FIELD_OFFSET
(
NONCLIENTMETRICSW
,
iPaddedBorderWidth
)))
{
{
NONCLIENTMETRICSW
ncm
;
ret
=
set_entry
(
&
entry_BORDER
,
lpnm
->
iBorderWidth
,
NULL
,
fWinIni
)
&&
ret
=
set_entry
(
&
entry_BORDER
,
lpnm
->
iBorderWidth
,
NULL
,
fWinIni
);
set_entry
(
&
entry_SCROLLWIDTH
,
lpnm
->
iScrollWidth
,
NULL
,
fWinIni
)
&&
if
(
ret
)
ret
=
save_int_param
(
METRICS_REGKEY
,
set_entry
(
&
entry_SCROLLHEIGHT
,
lpnm
->
iScrollHeight
,
NULL
,
fWinIni
)
&&
METRICS_SCROLLWIDTH_VALNAME
,
NULL
,
set_entry
(
&
entry_CAPTIONWIDTH
,
lpnm
->
iCaptionWidth
,
NULL
,
fWinIni
)
&&
lpnm
->
iScrollWidth
,
fWinIni
);
set_entry
(
&
entry_CAPTIONHEIGHT
,
lpnm
->
iCaptionHeight
,
NULL
,
fWinIni
)
&&
if
(
ret
)
ret
=
save_int_param
(
METRICS_REGKEY
,
set_entry
(
&
entry_SMCAPTIONWIDTH
,
lpnm
->
iSmCaptionWidth
,
NULL
,
fWinIni
)
&&
METRICS_SCROLLHEIGHT_VALNAME
,
NULL
,
set_entry
(
&
entry_SMCAPTIONHEIGHT
,
lpnm
->
iSmCaptionHeight
,
NULL
,
fWinIni
)
&&
lpnm
->
iScrollHeight
,
fWinIni
);
set_entry
(
&
entry_MENUWIDTH
,
lpnm
->
iMenuWidth
,
NULL
,
fWinIni
)
&&
if
(
ret
)
ret
=
save_int_param
(
METRICS_REGKEY
,
set_entry
(
&
entry_MENUHEIGHT
,
lpnm
->
iMenuHeight
,
NULL
,
fWinIni
)
&&
METRICS_CAPTIONWIDTH_VALNAME
,
NULL
,
set_entry
(
&
entry_MENULOGFONT
,
0
,
&
lpnm
->
lfMenuFont
,
fWinIni
)
&&
lpnm
->
iCaptionWidth
,
fWinIni
);
set_entry
(
&
entry_CAPTIONLOGFONT
,
0
,
&
lpnm
->
lfCaptionFont
,
fWinIni
)
&&
if
(
ret
)
ret
=
save_int_param
(
METRICS_REGKEY
,
set_entry
(
&
entry_SMCAPTIONLOGFONT
,
0
,
&
lpnm
->
lfSmCaptionFont
,
fWinIni
)
&&
METRICS_CAPTIONHEIGHT_VALNAME
,
NULL
,
set_entry
(
&
entry_STATUSLOGFONT
,
0
,
&
lpnm
->
lfStatusFont
,
fWinIni
)
&&
lpnm
->
iCaptionHeight
,
fWinIni
);
set_entry
(
&
entry_MESSAGELOGFONT
,
0
,
&
lpnm
->
lfMessageFont
,
fWinIni
);
if
(
ret
)
ret
=
save_int_param
(
METRICS_REGKEY
,
METRICS_SMCAPTIONWIDTH_VALNAME
,
NULL
,
if
(
ret
&&
lpnm
->
cbSize
==
sizeof
(
NONCLIENTMETRICSW
))
lpnm
->
iSmCaptionWidth
,
fWinIni
);
set_entry
(
&
entry_PADDEDBORDERWIDTH
,
lpnm
->
iPaddedBorderWidth
,
NULL
,
fWinIni
);
if
(
ret
)
ret
=
save_int_param
(
METRICS_REGKEY
,
METRICS_SMCAPTIONHEIGHT_VALNAME
,
NULL
,
lpnm
->
iSmCaptionHeight
,
fWinIni
);
if
(
ret
)
ret
=
save_int_param
(
METRICS_REGKEY
,
METRICS_MENUWIDTH_VALNAME
,
NULL
,
lpnm
->
iMenuWidth
,
fWinIni
);
if
(
ret
)
ret
=
save_int_param
(
METRICS_REGKEY
,
METRICS_MENUHEIGHT_VALNAME
,
NULL
,
lpnm
->
iMenuHeight
,
fWinIni
);
if
(
ret
)
ret
=
SYSPARAMS_SaveLogFont
(
METRICS_REGKEY
,
METRICS_MENULOGFONT_VALNAME
,
&
lpnm
->
lfMenuFont
,
fWinIni
);
if
(
ret
)
ret
=
SYSPARAMS_SaveLogFont
(
METRICS_REGKEY
,
METRICS_CAPTIONLOGFONT_VALNAME
,
&
lpnm
->
lfCaptionFont
,
fWinIni
);
if
(
ret
)
ret
=
SYSPARAMS_SaveLogFont
(
METRICS_REGKEY
,
METRICS_SMCAPTIONLOGFONT_VALNAME
,
&
lpnm
->
lfSmCaptionFont
,
fWinIni
);
if
(
ret
)
ret
=
SYSPARAMS_SaveLogFont
(
METRICS_REGKEY
,
METRICS_STATUSLOGFONT_VALNAME
,
&
lpnm
->
lfStatusFont
,
fWinIni
);
if
(
ret
)
ret
=
SYSPARAMS_SaveLogFont
(
METRICS_REGKEY
,
METRICS_MESSAGELOGFONT_VALNAME
,
&
lpnm
->
lfMessageFont
,
fWinIni
);
if
(
ret
)
{
memcpy
(
&
ncm
,
lpnm
,
FIELD_OFFSET
(
NONCLIENTMETRICSW
,
iPaddedBorderWidth
));
ncm
.
cbSize
=
sizeof
(
ncm
);
ncm
.
iPaddedBorderWidth
=
(
lpnm
->
cbSize
==
sizeof
(
NONCLIENTMETRICSW
))
?
lpnm
->
iPaddedBorderWidth
:
0
;
normalize_nonclientmetrics
(
&
ncm
);
nonclient_metrics
=
ncm
;
spi_loaded
[
SPI_NONCLIENTMETRICS_IDX
]
=
TRUE
;
}
}
}
break
;
break
;
}
}
case
SPI_GETMINIMIZEDMETRICS
:
case
SPI_GETMINIMIZEDMETRICS
:
{
{
MINIMIZEDMETRICS
*
lpMm
=
pvParam
;
MINIMIZEDMETRICS
*
lpMm
=
pvParam
;
if
(
lpMm
&&
lpMm
->
cbSize
==
sizeof
(
*
lpMm
))
{
if
(
lpMm
&&
lpMm
->
cbSize
==
sizeof
(
*
lpMm
))
{
get_entry
(
&
entry_M
ETRICS_M
INWIDTH
,
0
,
&
lpMm
->
iWidth
);
get_entry
(
&
entry_MINWIDTH
,
0
,
&
lpMm
->
iWidth
);
get_entry
(
&
entry_M
ETRICS_M
INHORZGAP
,
0
,
&
lpMm
->
iHorzGap
);
get_entry
(
&
entry_MINHORZGAP
,
0
,
&
lpMm
->
iHorzGap
);
get_entry
(
&
entry_M
ETRICS_M
INVERTGAP
,
0
,
&
lpMm
->
iVertGap
);
get_entry
(
&
entry_MINVERTGAP
,
0
,
&
lpMm
->
iVertGap
);
get_entry
(
&
entry_M
ETRICS_M
INARRANGE
,
0
,
&
lpMm
->
iArrange
);
get_entry
(
&
entry_MINARRANGE
,
0
,
&
lpMm
->
iArrange
);
lpMm
->
iWidth
=
max
(
0
,
lpMm
->
iWidth
);
lpMm
->
iWidth
=
max
(
0
,
lpMm
->
iWidth
);
lpMm
->
iHorzGap
=
max
(
0
,
lpMm
->
iHorzGap
);
lpMm
->
iHorzGap
=
max
(
0
,
lpMm
->
iHorzGap
);
lpMm
->
iVertGap
=
max
(
0
,
lpMm
->
iVertGap
);
lpMm
->
iVertGap
=
max
(
0
,
lpMm
->
iVertGap
);
...
@@ -1739,10 +1539,10 @@ BOOL WINAPI SystemParametersInfoW( UINT uiAction, UINT uiParam,
...
@@ -1739,10 +1539,10 @@ BOOL WINAPI SystemParametersInfoW( UINT uiAction, UINT uiParam,
{
{
MINIMIZEDMETRICS
*
lpMm
=
pvParam
;
MINIMIZEDMETRICS
*
lpMm
=
pvParam
;
if
(
lpMm
&&
lpMm
->
cbSize
==
sizeof
(
*
lpMm
))
if
(
lpMm
&&
lpMm
->
cbSize
==
sizeof
(
*
lpMm
))
ret
=
set_entry
(
&
entry_M
ETRICS_M
INWIDTH
,
max
(
0
,
lpMm
->
iWidth
),
NULL
,
fWinIni
)
&&
ret
=
set_entry
(
&
entry_MINWIDTH
,
max
(
0
,
lpMm
->
iWidth
),
NULL
,
fWinIni
)
&&
set_entry
(
&
entry_M
ETRICS_M
INHORZGAP
,
max
(
0
,
lpMm
->
iHorzGap
),
NULL
,
fWinIni
)
&&
set_entry
(
&
entry_MINHORZGAP
,
max
(
0
,
lpMm
->
iHorzGap
),
NULL
,
fWinIni
)
&&
set_entry
(
&
entry_M
ETRICS_M
INVERTGAP
,
max
(
0
,
lpMm
->
iVertGap
),
NULL
,
fWinIni
)
&&
set_entry
(
&
entry_MINVERTGAP
,
max
(
0
,
lpMm
->
iVertGap
),
NULL
,
fWinIni
)
&&
set_entry
(
&
entry_M
ETRICS_M
INARRANGE
,
lpMm
->
iArrange
&
0x0f
,
NULL
,
fWinIni
);
set_entry
(
&
entry_MINARRANGE
,
lpMm
->
iArrange
&
0x0f
,
NULL
,
fWinIni
);
else
else
ret
=
FALSE
;
ret
=
FALSE
;
break
;
break
;
...
@@ -2506,6 +2306,7 @@ BOOL WINAPI SystemParametersInfoA( UINT uiAction, UINT uiParam,
...
@@ -2506,6 +2306,7 @@ BOOL WINAPI SystemParametersInfoA( UINT uiAction, UINT uiParam,
*/
*/
INT
WINAPI
GetSystemMetrics
(
INT
index
)
INT
WINAPI
GetSystemMetrics
(
INT
index
)
{
{
NONCLIENTMETRICSW
ncm
;
UINT
ret
;
UINT
ret
;
/* some metrics are dynamic */
/* some metrics are dynamic */
...
@@ -2516,13 +2317,11 @@ INT WINAPI GetSystemMetrics( INT index )
...
@@ -2516,13 +2317,11 @@ INT WINAPI GetSystemMetrics( INT index )
case
SM_CYSCREEN
:
case
SM_CYSCREEN
:
return
GetDeviceCaps
(
get_display_dc
(),
VERTRES
);
return
GetDeviceCaps
(
get_display_dc
(),
VERTRES
);
case
SM_CXVSCROLL
:
case
SM_CXVSCROLL
:
if
(
!
spi_loaded
[
SPI_NONCLIENTMETRICS_IDX
])
load_nonclient_metrics
();
return
nonclient_metrics
.
iScrollWidth
;
case
SM_CYHSCROLL
:
case
SM_CYHSCROLL
:
return
GetSystemMetrics
(
SM_CXVSCROLL
);
get_entry
(
&
entry_SCROLLWIDTH
,
0
,
&
ret
);
return
max
(
8
,
ret
);
case
SM_CYCAPTION
:
case
SM_CYCAPTION
:
if
(
!
spi_loaded
[
SPI_NONCLIENTMETRICS_IDX
])
load_nonclient_metrics
();
return
GetSystemMetrics
(
SM_CYSIZE
)
+
1
;
return
nonclient_metrics
.
iCaptionHeight
+
1
;
case
SM_CXBORDER
:
case
SM_CXBORDER
:
case
SM_CYBORDER
:
case
SM_CYBORDER
:
/* SM_C{X,Y}BORDER always returns 1 regardless of 'BorderWidth' value in registry */
/* SM_C{X,Y}BORDER always returns 1 regardless of 'BorderWidth' value in registry */
...
@@ -2531,16 +2330,15 @@ INT WINAPI GetSystemMetrics( INT index )
...
@@ -2531,16 +2330,15 @@ INT WINAPI GetSystemMetrics( INT index )
case
SM_CYDLGFRAME
:
case
SM_CYDLGFRAME
:
return
3
;
return
3
;
case
SM_CYVTHUMB
:
case
SM_CYVTHUMB
:
if
(
!
spi_loaded
[
SPI_NONCLIENTMETRICS_IDX
])
load_nonclient_metrics
();
return
nonclient_metrics
.
iScrollHeight
;
case
SM_CXHTHUMB
:
case
SM_CXHTHUMB
:
return
GetSystemMetrics
(
SM_CYVTHUMB
);
case
SM_CYVSCROLL
:
case
SM_CXHSCROLL
:
get_entry
(
&
entry_SCROLLHEIGHT
,
0
,
&
ret
);
return
max
(
8
,
ret
);
case
SM_CXICON
:
case
SM_CXICON
:
if
(
!
spi_loaded
[
SPI_NONCLIENTMETRICS_IDX
])
load_nonclient_metrics
();
return
icon_size
.
cx
;
case
SM_CYICON
:
case
SM_CYICON
:
if
(
!
spi_loaded
[
SPI_NONCLIENTMETRICS_IDX
])
load_nonclient_metrics
(
);
get_entry
(
&
entry_ICONSIZE
,
0
,
&
ret
);
return
icon_size
.
cy
;
return
ret
;
case
SM_CXCURSOR
:
case
SM_CXCURSOR
:
case
SM_CYCURSOR
:
case
SM_CYCURSOR
:
return
32
;
return
32
;
...
@@ -2558,12 +2356,6 @@ INT WINAPI GetSystemMetrics( INT index )
...
@@ -2558,12 +2356,6 @@ INT WINAPI GetSystemMetrics( INT index )
return
0
;
return
0
;
case
SM_MOUSEPRESENT
:
case
SM_MOUSEPRESENT
:
return
1
;
return
1
;
case
SM_CYVSCROLL
:
if
(
!
spi_loaded
[
SPI_NONCLIENTMETRICS_IDX
])
load_nonclient_metrics
();
return
nonclient_metrics
.
iScrollHeight
;
case
SM_CXHSCROLL
:
if
(
!
spi_loaded
[
SPI_NONCLIENTMETRICS_IDX
])
load_nonclient_metrics
();
return
nonclient_metrics
.
iScrollHeight
;
case
SM_DEBUG
:
case
SM_DEBUG
:
return
0
;
return
0
;
case
SM_SWAPBUTTON
:
case
SM_SWAPBUTTON
:
...
@@ -2575,23 +2367,23 @@ INT WINAPI GetSystemMetrics( INT index )
...
@@ -2575,23 +2367,23 @@ INT WINAPI GetSystemMetrics( INT index )
case
SM_RESERVED4
:
case
SM_RESERVED4
:
return
0
;
return
0
;
case
SM_CXMIN
:
case
SM_CXMIN
:
if
(
!
spi_loaded
[
SPI_NONCLIENTMETRICS_IDX
])
load_nonclient_metrics
(
);
SystemParametersInfoW
(
SPI_GETNONCLIENTMETRICS
,
0
,
&
ncm
,
0
);
return
3
*
nonclient_metrics
.
iCaptionWidth
+
GetSystemMetrics
(
SM_CYSIZE
)
+
get_text_metr_size
(
get_display_dc
(),
&
ncm
.
lfCaptionFont
,
NULL
,
&
ret
);
4
*
CaptionFontAvCharWidth
+
2
*
GetSystemMetrics
(
SM_CXFRAME
)
+
4
;
return
3
*
ncm
.
iCaptionWidth
+
ncm
.
iCaptionHeight
+
4
*
ret
+
2
*
GetSystemMetrics
(
SM_CXFRAME
)
+
4
;
case
SM_CYMIN
:
case
SM_CYMIN
:
return
GetSystemMetrics
(
SM_CYCAPTION
)
+
2
*
GetSystemMetrics
(
SM_CYFRAME
);
return
GetSystemMetrics
(
SM_CYCAPTION
)
+
2
*
GetSystemMetrics
(
SM_CYFRAME
);
case
SM_CXSIZE
:
case
SM_CXSIZE
:
if
(
!
spi_loaded
[
SPI_NONCLIENTMETRICS_IDX
])
load_nonclient_metrics
(
);
get_entry
(
&
entry_CAPTIONWIDTH
,
0
,
&
ret
);
return
nonclient_metrics
.
iCaptionWidth
;
return
max
(
8
,
ret
)
;
case
SM_CYSIZE
:
case
SM_CYSIZE
:
if
(
!
spi_loaded
[
SPI_NONCLIENTMETRICS_IDX
])
load_nonclient_metrics
(
);
SystemParametersInfoW
(
SPI_GETNONCLIENTMETRICS
,
0
,
&
ncm
,
0
);
return
n
onclient_metrics
.
iCaptionHeight
;
return
n
cm
.
iCaptionHeight
;
case
SM_CXFRAME
:
case
SM_CXFRAME
:
if
(
!
spi_loaded
[
SPI_NONCLIENTMETRICS_IDX
])
load_nonclient_metrics
(
);
get_entry
(
&
entry_BORDER
,
0
,
&
ret
);
return
GetSystemMetrics
(
SM_CXDLGFRAME
)
+
nonclient_metrics
.
iBorderWidth
;
return
GetSystemMetrics
(
SM_CXDLGFRAME
)
+
max
(
1
,
ret
)
;
case
SM_CYFRAME
:
case
SM_CYFRAME
:
if
(
!
spi_loaded
[
SPI_NONCLIENTMETRICS_IDX
])
load_nonclient_metrics
(
);
get_entry
(
&
entry_BORDER
,
0
,
&
ret
);
return
GetSystemMetrics
(
SM_CYDLGFRAME
)
+
nonclient_metrics
.
iBorderWidth
;
return
GetSystemMetrics
(
SM_CYDLGFRAME
)
+
max
(
1
,
ret
)
;
case
SM_CXMINTRACK
:
case
SM_CXMINTRACK
:
return
GetSystemMetrics
(
SM_CXMIN
);
return
GetSystemMetrics
(
SM_CXMIN
);
case
SM_CYMINTRACK
:
case
SM_CYMINTRACK
:
...
@@ -2628,10 +2420,10 @@ INT WINAPI GetSystemMetrics( INT index )
...
@@ -2628,10 +2420,10 @@ INT WINAPI GetSystemMetrics( INT index )
case
SM_CYEDGE
:
case
SM_CYEDGE
:
return
GetSystemMetrics
(
SM_CYBORDER
)
+
1
;
return
GetSystemMetrics
(
SM_CYBORDER
)
+
1
;
case
SM_CXMINSPACING
:
case
SM_CXMINSPACING
:
get_entry
(
&
entry_M
ETRICS_M
INHORZGAP
,
0
,
&
ret
);
get_entry
(
&
entry_MINHORZGAP
,
0
,
&
ret
);
return
GetSystemMetrics
(
SM_CXMINIMIZED
)
+
max
(
0
,
(
INT
)
ret
);
return
GetSystemMetrics
(
SM_CXMINIMIZED
)
+
max
(
0
,
(
INT
)
ret
);
case
SM_CYMINSPACING
:
case
SM_CYMINSPACING
:
get_entry
(
&
entry_M
ETRICS_M
INVERTGAP
,
0
,
&
ret
);
get_entry
(
&
entry_MINVERTGAP
,
0
,
&
ret
);
return
GetSystemMetrics
(
SM_CYMINIMIZED
)
+
max
(
0
,
(
INT
)
ret
);
return
GetSystemMetrics
(
SM_CYMINIMIZED
)
+
max
(
0
,
(
INT
)
ret
);
case
SM_CXSMICON
:
case
SM_CXSMICON
:
case
SM_CYSMICON
:
case
SM_CYSMICON
:
...
@@ -2639,26 +2431,25 @@ INT WINAPI GetSystemMetrics( INT index )
...
@@ -2639,26 +2431,25 @@ INT WINAPI GetSystemMetrics( INT index )
case
SM_CYSMCAPTION
:
case
SM_CYSMCAPTION
:
return
GetSystemMetrics
(
SM_CYSMSIZE
)
+
1
;
return
GetSystemMetrics
(
SM_CYSMSIZE
)
+
1
;
case
SM_CXSMSIZE
:
case
SM_CXSMSIZE
:
if
(
!
spi_loaded
[
SPI_NONCLIENTMETRICS_IDX
])
load_nonclient_metrics
(
);
get_entry
(
&
entry_SMCAPTIONWIDTH
,
0
,
&
ret
);
return
nonclient_metrics
.
iSmCaptionWidth
;
return
ret
;
case
SM_CYSMSIZE
:
case
SM_CYSMSIZE
:
if
(
!
spi_loaded
[
SPI_NONCLIENTMETRICS_IDX
])
load_nonclient_metrics
(
);
SystemParametersInfoW
(
SPI_GETNONCLIENTMETRICS
,
0
,
&
ncm
,
0
);
return
n
onclient_metrics
.
iSmCaptionHeight
;
return
n
cm
.
iSmCaptionHeight
;
case
SM_CXMENUSIZE
:
case
SM_CXMENUSIZE
:
if
(
!
spi_loaded
[
SPI_NONCLIENTMETRICS_IDX
])
load_nonclient_metrics
(
);
get_entry
(
&
entry_MENUWIDTH
,
0
,
&
ret
);
return
nonclient_metrics
.
iMenuWidth
;
return
ret
;
case
SM_CYMENUSIZE
:
case
SM_CYMENUSIZE
:
if
(
!
spi_loaded
[
SPI_NONCLIENTMETRICS_IDX
])
load_nonclient_metrics
(
);
SystemParametersInfoW
(
SPI_GETNONCLIENTMETRICS
,
0
,
&
ncm
,
0
);
return
n
onclient_metrics
.
iMenuHeight
;
return
n
cm
.
iMenuHeight
;
case
SM_ARRANGE
:
case
SM_ARRANGE
:
get_entry
(
&
entry_M
ETRICS_M
INARRANGE
,
0
,
&
ret
);
get_entry
(
&
entry_MINARRANGE
,
0
,
&
ret
);
return
ret
&
0x0f
;
return
ret
&
0x0f
;
case
SM_CXMINIMIZED
:
case
SM_CXMINIMIZED
:
get_entry
(
&
entry_M
ETRICS_M
INWIDTH
,
0
,
&
ret
);
get_entry
(
&
entry_MINWIDTH
,
0
,
&
ret
);
return
max
(
0
,
(
INT
)
ret
)
+
6
;
return
max
(
0
,
(
INT
)
ret
)
+
6
;
case
SM_CYMINIMIZED
:
case
SM_CYMINIMIZED
:
if
(
!
spi_loaded
[
SPI_NONCLIENTMETRICS_IDX
])
load_nonclient_metrics
();
return
GetSystemMetrics
(
SM_CYSIZE
)
+
6
;
return
nonclient_metrics
.
iCaptionHeight
+
6
;
case
SM_CXMAXTRACK
:
case
SM_CXMAXTRACK
:
return
GetSystemMetrics
(
SM_CXVIRTUALSCREEN
)
+
4
+
2
*
GetSystemMetrics
(
SM_CXFRAME
);
return
GetSystemMetrics
(
SM_CXVIRTUALSCREEN
)
+
4
+
2
*
GetSystemMetrics
(
SM_CXFRAME
);
case
SM_CYMAXTRACK
:
case
SM_CYMAXTRACK
:
...
@@ -2684,9 +2475,12 @@ INT WINAPI GetSystemMetrics( INT index )
...
@@ -2684,9 +2475,12 @@ INT WINAPI GetSystemMetrics( INT index )
return
ret
;
return
ret
;
case
SM_CXMENUCHECK
:
case
SM_CXMENUCHECK
:
case
SM_CYMENUCHECK
:
case
SM_CYMENUCHECK
:
if
(
!
spi_loaded
[
SPI_NONCLIENTMETRICS_IDX
])
load_nonclient_metrics
();
{
return
tmMenuFont
.
tmHeight
<=
0
?
13
:
TEXTMETRICW
tm
;
((
tmMenuFont
.
tmHeight
+
tmMenuFont
.
tmExternalLeading
+
1
)
/
2
)
*
2
-
1
;
SystemParametersInfoW
(
SPI_GETNONCLIENTMETRICS
,
0
,
&
ncm
,
0
);
get_text_metr_size
(
get_display_dc
(),
&
ncm
.
lfMenuFont
,
&
tm
,
NULL
);
return
tm
.
tmHeight
<=
0
?
13
:
((
tm
.
tmHeight
+
tm
.
tmExternalLeading
+
1
)
/
2
)
*
2
-
1
;
}
case
SM_SLOWMACHINE
:
case
SM_SLOWMACHINE
:
return
0
;
/* Never true */
return
0
;
/* Never true */
case
SM_MIDEASTENABLED
:
case
SM_MIDEASTENABLED
:
...
...
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