ReactOS  0.4.15-dev-4934-gfd1e799
metric.c File Reference
#include <win32k.h>
Include dependency graph for metric.c:

Go to the source code of this file.

Functions

 DBG_DEFAULT_CHANNEL (UserSysparams)
 
BOOL APIENTRY UserIsDBCSEnabled (VOID)
 
BOOL NTAPI InitMetrics (VOID)
 
LONG NTAPI UserGetSystemMetrics (ULONG Index)
 

Variables

static BOOL Setup = FALSE
 

Function Documentation

◆ DBG_DEFAULT_CHANNEL()

DBG_DEFAULT_CHANNEL ( UserSysparams  )

◆ InitMetrics()

BOOL NTAPI InitMetrics ( VOID  )

Definition at line 33 of file metric.c.

34 {
35  INT *piSysMet = gpsi->aiSysMet;
37 
38  /* Note: used for the SM_CLEANBOOT metric */
39  DWORD dwValue = 0;
40  HKEY hKey = 0;
41 
42  /* Clean boot */
43  piSysMet[SM_CLEANBOOT] = 0; // Fallback value of 0 (normal mode)
44  if(NT_SUCCESS(RegOpenKey(L"\\REGISTRY\\MACHINE\\SYSTEM\\CurrentControlSet\\Control\\SafeBoot\\Option", &hKey)))
45  {
46  if(RegReadDWORD(hKey, L"OptionValue", &dwValue)) piSysMet[SM_CLEANBOOT] = (INT)dwValue;
47  ZwClose(hKey);
48  }
49 
50  /* FIXME: HACK, due to missing MDEV on first init */
51  if (!gpmdev)
52  {
53  Width = 640;
54  Height = 480;
55  }
56  else
57  {
60  }
61 
62  /* Screen sizes */
63  piSysMet[SM_CXSCREEN] = Width;
64  piSysMet[SM_CYSCREEN] = Height;
65  piSysMet[SM_XVIRTUALSCREEN] = 0;
66  piSysMet[SM_YVIRTUALSCREEN] = 0;
67  piSysMet[SM_CXVIRTUALSCREEN] = Width;
68  piSysMet[SM_CYVIRTUALSCREEN] = Height;
69 
70  /* NC area sizes */
71  piSysMet[SM_CYCAPTION] = gspv.ncm.iCaptionHeight + 1; // 19
72  piSysMet[SM_CYSMCAPTION] = gspv.ncm.iSmCaptionHeight + 1; // 15;
73  piSysMet[SM_CXSIZE] = gspv.ncm.iCaptionHeight; // 18;
74  piSysMet[SM_CYSIZE] = gspv.ncm.iCaptionHeight; // 18;
75  piSysMet[SM_CXSMSIZE] = gspv.ncm.iSmCaptionWidth; // 12; XP: piSysMet(SM_CYSMCAPTION) - 1
76  piSysMet[SM_CYSMSIZE] = gspv.ncm.iSmCaptionHeight; // 14;
77  piSysMet[SM_CXBORDER] = 1; // Seems to be hardcoded
78  piSysMet[SM_CYBORDER] = 1; // Seems to be hardcoded
79  piSysMet[SM_CXFOCUSBORDER] = 1;
80  piSysMet[SM_CYFOCUSBORDER] = 1;
81  piSysMet[SM_CXDLGFRAME] = 3;
82  piSysMet[SM_CYDLGFRAME] = 3;
83  piSysMet[SM_CXEDGE] = 2;
84  piSysMet[SM_CYEDGE] = 2;
85  piSysMet[SM_CXFRAME] = piSysMet[SM_CXDLGFRAME] + gspv.ncm.iBorderWidth; // 4
86  piSysMet[SM_CYFRAME] = piSysMet[SM_CYDLGFRAME] + gspv.ncm.iBorderWidth; // 4
87 #if (_WIN32_WINNT >= 0x0600)
88  piSysMet[SM_CXPADDEDBORDER] = 0;
89 #endif
90 
91  /* Window sizes */
92  TRACE("ncm.iCaptionWidth=%d,GetSystemMetrics(SM_CYSIZE)=%d,GetSystemMetrics(SM_CXFRAME)=%d,avcwCaption=%d \n",
93  gspv.ncm.iCaptionWidth, piSysMet[SM_CYSIZE],piSysMet[SM_CXFRAME], gspv.tmCaptionFont.tmAveCharWidth);
94 
95  piSysMet[SM_CXMIN] = 3 * max(gspv.ncm.iCaptionWidth, 8) // 112
96  + piSysMet[SM_CYSIZE] + 4
98  + 2 * piSysMet[SM_CXFRAME];
99  piSysMet[SM_CYMIN] = piSysMet[SM_CYCAPTION] + 2 * piSysMet[SM_CYFRAME]; // 27
100  piSysMet[SM_CXMAXIMIZED] = piSysMet[SM_CXSCREEN] + 2 * piSysMet[SM_CXFRAME];
101  piSysMet[SM_CYMAXIMIZED] = piSysMet[SM_CYSCREEN] - 20;
102  piSysMet[SM_CXFULLSCREEN] = piSysMet[SM_CXSCREEN];
103  piSysMet[SM_CYFULLSCREEN] = piSysMet[SM_CYMAXIMIZED] - piSysMet[SM_CYMIN];
104  piSysMet[SM_CYKANJIWINDOW] = 0;
105  piSysMet[SM_CXMINIMIZED] = gspv.mm.iWidth + 6;
106  piSysMet[SM_CYMINIMIZED] = piSysMet[SM_CYCAPTION] + 5;
107  piSysMet[SM_CXMINSPACING] = piSysMet[SM_CXMINIMIZED] + gspv.mm.iHorzGap;
108  piSysMet[SM_CYMINSPACING] = piSysMet[SM_CYMINIMIZED] + gspv.mm.iVertGap;
109  piSysMet[SM_CXMAXTRACK] = piSysMet[SM_CXVIRTUALSCREEN] + 4
110  + 2 * piSysMet[SM_CXFRAME];
111  piSysMet[SM_CYMAXTRACK] = piSysMet[SM_CYVIRTUALSCREEN] + 4
112  + 2 * piSysMet[SM_CYFRAME];
113 
114  /* Icon */
115  piSysMet[SM_CXVSCROLL] = gspv.ncm.iScrollWidth; // 16;
116  piSysMet[SM_CYVTHUMB] = gspv.ncm.iScrollHeight; // 16;
117  piSysMet[SM_CYHSCROLL] = gspv.ncm.iScrollWidth; // 16;
118  piSysMet[SM_CXHTHUMB] = gspv.ncm.iScrollHeight; // 16;
119  piSysMet[SM_CYVSCROLL] = gspv.ncm.iScrollHeight; // 16
120  piSysMet[SM_CXHSCROLL] = gspv.ncm.iScrollHeight; // 16;
121  piSysMet[SM_CXICON] = 32;
122  piSysMet[SM_CYICON] = 32;
123  piSysMet[SM_CXSMICON] = 16;
124  piSysMet[SM_CYSMICON] = 16;
125  piSysMet[SM_CXICONSPACING] = gspv.im.iHorzSpacing; // 64;
126  piSysMet[SM_CYICONSPACING] = gspv.im.iVertSpacing; // 64;
127  piSysMet[SM_CXCURSOR] = 32;
128  piSysMet[SM_CYCURSOR] = 32;
129  piSysMet[SM_CXMINTRACK] = piSysMet[SM_CXMIN]; // 117
130  piSysMet[SM_CYMINTRACK] = piSysMet[SM_CYMIN]; // 27
131  piSysMet[SM_CXDRAG] = 4;
132  piSysMet[SM_CYDRAG] = 4;
133  piSysMet[SM_ARRANGE] = gspv.mm.iArrange; // 8;
134 
135  /* Menu */
136  piSysMet[SM_CYMENU] = gspv.ncm.iMenuHeight + 1; // 19;
138  piSysMet[SM_CXMENUCHECK] = ((1 + gspv.tmMenuFont.tmHeight +
139  gspv.tmMenuFont.tmExternalLeading) & ~1) - 1; // 13;
140  piSysMet[SM_CYMENUCHECK] = piSysMet[SM_CXMENUCHECK];
141  piSysMet[SM_CXMENUSIZE] = gspv.ncm.iMenuWidth; // 18;
142  piSysMet[SM_CYMENUSIZE] = gspv.ncm.iMenuHeight; // 18;
143 
144  /* Mouse */
145  piSysMet[SM_MOUSEPRESENT] = 1;
146  piSysMet[SM_MOUSEWHEELPRESENT] = 1;
147  piSysMet[SM_CMOUSEBUTTONS] = 2;
148  piSysMet[SM_SWAPBUTTON] = gspv.bMouseBtnSwap ? 1 : 0;
149  piSysMet[SM_CXDOUBLECLK] = gspv.iDblClickWidth;
150  piSysMet[SM_CYDOUBLECLK] = gspv.iDblClickHeight;
151 #if (_WIN32_WINNT >= 0x0600)
152  piSysMet[SM_MOUSEHORIZONTALWHEELPRESENT] = 0;
153 #endif
154 
155  /* Version info */
156  piSysMet[SM_TABLETPC] = 0;
157  piSysMet[SM_MEDIACENTER] = 0;
158  piSysMet[SM_STARTER] = 0;
159  piSysMet[SM_SERVERR2] = 0;
160  piSysMet[SM_PENWINDOWS] = 0;
161 
162  /* Other */
163  piSysMet[SM_DEBUG] = 0;
164  piSysMet[SM_NETWORK] = 3;
165  piSysMet[SM_SLOWMACHINE] = 0;
166  piSysMet[SM_SECURE] = 0;
167  piSysMet[SM_DBCSENABLED] = UserIsDBCSEnabled();
168  piSysMet[SM_SHOWSOUNDS] = gspv.bShowSounds;
169  piSysMet[SM_MIDEASTENABLED] = 0;
170  piSysMet[SM_CMONITORS] = 1;
171  piSysMet[SM_SAMEDISPLAYFORMAT] = 1;
172  piSysMet[SM_IMMENABLED] = 0;
173 
174  /* Reserved */
175  piSysMet[SM_RESERVED1] = 0;
176  piSysMet[SM_RESERVED2] = 0;
177  piSysMet[SM_RESERVED3] = 0;
178  piSysMet[SM_RESERVED4] = 0;
179  piSysMet[64] = 0;
180  piSysMet[65] = 0;
181  piSysMet[66] = 0;
182 #if (_WIN32_WINNT >= 0x0600)
183  piSysMet[90] = 0;
184 #endif
185 
187  Setup = TRUE;
188 
189  return TRUE;
190 }
#define SM_CXICONSPACING
Definition: winuser.h:995
#define max(a, b)
Definition: svc.c:63
#define SM_CYDOUBLECLK
Definition: winuser.h:994
#define SM_CYHSCROLL
Definition: winuser.h:956
#define SM_SHOWSOUNDS
Definition: winuser.h:1024
#define SM_CYSIZE
Definition: winuser.h:986
#define SM_XVIRTUALSCREEN
Definition: winuser.h:1030
#define SM_CYMENUSIZE
Definition: winuser.h:1012
LONG tmExternalLeading
Definition: wingdi.h:2387
#define SM_CMONITORS
Definition: winuser.h:1034
#define SM_CYMINTRACK
Definition: winuser.h:992
#define SM_MOUSEPRESENT
Definition: winuser.h:974
#define SM_CXVIRTUALSCREEN
Definition: winuser.h:1032
#define TRUE
Definition: types.h:120
#define SM_CXMINIMIZED
Definition: winuser.h:1014
BOOL bMouseBtnSwap
Definition: sysparams.h:82
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
_In_ HFONT _Out_ PUINT _Out_ PUINT Width
Definition: font.h:124
GDIINFO gdiinfo
Definition: pdevobj.h:123
#define SM_MIDEASTENABLED
Definition: winuser.h:1028
LONG tmAveCharWidth
Definition: wingdi.h:2388
#define SM_SLOWMACHINE
Definition: winuser.h:1027
#define INT
Definition: polytest.cpp:20
#define SM_CYVSCROLL
Definition: winuser.h:975
PSERVERINFO gpsi
Definition: imm.c:17
NONCLIENTMETRICSW ncm
Definition: sysparams.h:51
#define SM_CXMENUCHECK
Definition: winuser.h:1025
#define SM_CYCURSOR
Definition: winuser.h:969
#define SM_CMOUSEBUTTONS
Definition: winuser.h:1000
#define SM_CXEDGE
Definition: winuser.h:1002
#define SM_CYSMICON
Definition: winuser.h:1007
BOOL APIENTRY UserIsDBCSEnabled(VOID)
Definition: metric.c:17
#define SM_NETWORK
Definition: winuser.h:1020
_In_ HFONT _Out_ PUINT Height
Definition: font.h:124
#define SM_CYMAXTRACK
Definition: winuser.h:1017
#define SM_CYFRAME
Definition: winuser.h:990
#define SM_CXFRAME
Definition: winuser.h:988
int32_t INT
Definition: typedefs.h:58
#define SM_CXMINSPACING
Definition: winuser.h:1004
#define SM_CXSCREEN
Definition: winuser.h:953
#define L(x)
Definition: ntvdm.h:50
#define SM_CYMENUCHECK
Definition: winuser.h:1026
DWORD dwSRVIFlags
Definition: ntuser.h:1022
#define SM_CYMAXIMIZED
Definition: winuser.h:1019
#define SM_CYDLGFRAME
Definition: winuser.h:962
#define SM_CXICON
Definition: winuser.h:966
#define SM_RESERVED2
Definition: winuser.h:980
ULONG ulHorzRes
Definition: winddi.h:882
#define SM_CXHTHUMB
Definition: winuser.h:965
#define SM_CYEDGE
Definition: winuser.h:1003
#define SM_CXDRAG
Definition: winuser.h:1022
#define SM_SECURE
Definition: winuser.h:1001
#define SM_CYVTHUMB
Definition: winuser.h:964
#define SM_PENWINDOWS
Definition: winuser.h:998
#define SM_CYMIN
Definition: winuser.h:984
TEXTMETRICW tmCaptionFont
Definition: sysparams.h:139
#define SM_CYVIRTUALSCREEN
Definition: winuser.h:1033
#define SM_RESERVED4
Definition: winuser.h:982
#define SM_CLEANBOOT
Definition: winuser.h:1021
#define SM_CYSMSIZE
Definition: winuser.h:1010
#define SM_CYSCREEN
Definition: winuser.h:954
#define TRACE(s)
Definition: solgame.cpp:4
#define SM_CYCAPTION
Definition: winuser.h:957
#define SM_CXHSCROLL
Definition: winuser.h:976
#define SM_CXCURSOR
Definition: winuser.h:968
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
#define SM_CXMAXIMIZED
Definition: winuser.h:1018
#define SM_CXDLGFRAME
Definition: winuser.h:960
#define SM_CXMINTRACK
Definition: winuser.h:991
BOOL NTAPI RegReadDWORD(HKEY hkey, PWSTR pwszValue, PDWORD pdwData)
Definition: registry.c:150
#define SM_CXSMSIZE
Definition: winuser.h:1009
SPIVALUES gspv
Definition: sysparams.c:17
BOOL bShowSounds
Definition: sysparams.h:71
unsigned long DWORD
Definition: ntddk_ex.h:95
#define SM_CXSMICON
Definition: winuser.h:1006
#define SM_CYBORDER
Definition: winuser.h:959
#define SM_CYICON
Definition: winuser.h:967
#define SM_CYMINIMIZED
Definition: winuser.h:1015
#define SM_CYICONSPACING
Definition: winuser.h:996
BOOL bMenuDropAlign
Definition: sysparams.h:130
#define SM_CXBORDER
Definition: winuser.h:958
#define SM_MENUDROPALIGNMENT
Definition: winuser.h:997
#define SM_YVIRTUALSCREEN
Definition: winuser.h:1031
#define SM_CYMINSPACING
Definition: winuser.h:1005
#define SM_RESERVED3
Definition: winuser.h:981
#define SM_ARRANGE
Definition: winuser.h:1013
#define SM_DEBUG
Definition: winuser.h:977
INT iDblClickHeight
Definition: sysparams.h:89
ICONMETRICSW im
Definition: sysparams.h:53
FxAutoRegKey hKey
PPDEVOBJ ppdevGlobal
Definition: mdevobj.h:16
#define SM_SAMEDISPLAYFORMAT
Definition: winuser.h:1035
PMDEVOBJ gpmdev
Definition: mdevobj.c:14
#define SM_CXVSCROLL
Definition: winuser.h:955
TEXTMETRICW tmMenuFont
Definition: sysparams.h:138
#define SM_SWAPBUTTON
Definition: winuser.h:978
#define SM_CXMAXTRACK
Definition: winuser.h:1016
#define SM_CYFULLSCREEN
Definition: winuser.h:972
#define SM_CXSIZE
Definition: winuser.h:985
unsigned int ULONG
Definition: retypes.h:1
INT iDblClickWidth
Definition: sysparams.h:88
#define SM_CYKANJIWINDOW
Definition: winuser.h:973
#define SM_CXFULLSCREEN
Definition: winuser.h:971
#define SM_CYMENU
Definition: winuser.h:970
#define SM_CYDRAG
Definition: winuser.h:1023
static BOOL Setup
Definition: metric.c:13
LONG tmHeight
Definition: wingdi.h:2383
ULONG ulVertRes
Definition: winddi.h:883
#define SM_DBCSENABLED
Definition: winuser.h:999
#define RegOpenKey
Definition: winreg.h:519
#define SM_MOUSEWHEELPRESENT
Definition: winuser.h:1029
#define SM_RESERVED1
Definition: winuser.h:979
#define SM_CYSMCAPTION
Definition: winuser.h:1008
#define SM_CXDOUBLECLK
Definition: winuser.h:993
#define SRVINFO_CICERO_ENABLED
Definition: ntuser.h:930
MINIMIZEDMETRICS mm
Definition: sysparams.h:52
#define SM_CXMIN
Definition: winuser.h:983
#define SM_CXMENUSIZE
Definition: winuser.h:1011

Referenced by co_IntInitializeDesktopGraphics(), SpiUpdatePerUserSystemParameters(), UserChangeDisplaySettings(), UserRefreshDisplay(), and UserSystemParametersInfo().

◆ UserGetSystemMetrics()

LONG NTAPI UserGetSystemMetrics ( ULONG  Index)

Definition at line 194 of file metric.c.

195 {
196  ASSERT(gpsi);
197  ASSERT(Setup);
198  TRACE("UserGetSystemMetrics(%lu)\n", Index);
199 
200  if (Index == SM_DBCSENABLED)
201  return UserIsDBCSEnabled();
202 
203  /* Get metrics from array */
204  if (Index < SM_CMETRICS)
205  {
206  return gpsi->aiSysMet[Index];
207  }
208 
209  /* Handle special values */
210  switch (Index)
211  {
212  case SM_REMOTESESSION:
213  return 0; // FIXME
214 
215  case SM_SHUTTINGDOWN:
216  return 0; // FIXME
217 
218  case SM_REMOTECONTROL:
219  return 0; // FIXME
220  }
221 
222  ERR("UserGetSystemMetrics() called with invalid index %lu\n", Index);
223  return 0;
224 }
PSERVERINFO gpsi
Definition: imm.c:17
BOOL APIENTRY UserIsDBCSEnabled(VOID)
Definition: metric.c:17
#define SM_CMETRICS
Definition: winuser.h:1059
#define TRACE(s)
Definition: solgame.cpp:4
#define ASSERT(a)
Definition: mode.c:44
_In_ WDFCOLLECTION _In_ ULONG Index
#define ERR(fmt,...)
Definition: debug.h:110
static BOOL Setup
Definition: metric.c:13
#define SM_REMOTESESSION
Definition: winuser.h:1052
#define SM_DBCSENABLED
Definition: winuser.h:999

Referenced by co_IntProcessMouseMessage(), co_WinPosArrangeIconicWindows(), co_WinPosDoWinPosChanging(), co_WinPosGetMinMaxInfo(), co_WinPosMinMaximize(), DefWndDoSizeMove(), DefWndStartSizeMove(), GetNCHitEx(), IntCalculateThumb(), IntCreateDesktop(), IntCreateWindow(), IntDefWindowProc(), IntDrawMenuBarTemp(), IntFixWindowCoordinates(), IntGetClientRect(), IntGetScrollBarRect(), intGetTitleBarInfo(), IntGetWindowBorderMeasures(), IntIsWindowFullscreen(), IntPaintDesktop(), MENU_CalcItemSize(), MENU_DrawBitmapItem(), MENU_DrawMenuBar(), MENU_DrawMenuItem(), MENU_EnsureMenuItemVisible(), MENU_FindItemByCoords(), MENU_FindItemByKey(), MENU_GetBitmapItemSize(), MENU_GetMaxPopupHeight(), MENU_ShowPopup(), MENU_ShowSubPopup(), NC_DoNCPaint(), NC_DrawFrame(), NC_GetInsideRect(), NC_GetSysPopupPos(), NC_HandleNCCalcSize(), NtUserCreateCaret(), NtUserDragDetect(), NtUserGetClipCursor(), NtUserSwitchDesktop(), UserDrawCaption(), UserDrawCaptionBar(), UserDrawCaptionButton(), UserDrawCaptionText(), UserDrawIconEx(), UserDrawMovingFrame(), UserDrawSysMenuButton(), UserGetWindowBorders(), UserSendMouseInput(), UserSetClassLongPtr(), and WinPosFindIconPos().

◆ UserIsDBCSEnabled()

BOOL APIENTRY UserIsDBCSEnabled ( VOID  )

Definition at line 17 of file metric.c.

18 {
20  {
21  case LANG_CHINESE:
22  case LANG_JAPANESE:
23  case LANG_KOREAN:
24  return TRUE;
25 
26  default:
27  return FALSE;
28  }
29 }
#define TRUE
Definition: types.h:120
#define LANG_JAPANESE
Definition: nls.h:76
#define FALSE
Definition: types.h:117
USHORT gusLanguageID
Definition: main.c:29
#define LANG_CHINESE
Definition: nls.h:42
#define LANG_KOREAN
Definition: nls.h:84
#define PRIMARYLANGID(l)
Definition: nls.h:16

Referenced by InitMetrics(), and UserGetSystemMetrics().

Variable Documentation

◆ Setup

BOOL Setup = FALSE
static

Definition at line 13 of file metric.c.

Referenced by InitMetrics(), and UserGetSystemMetrics().