https://git.reactos.org/?p=reactos.git;a=commitdiff;h=bf92fa2386e6e271c6cbcbe07de64007e571e35f
commit bf92fa2386e6e271c6cbcbe07de64007e571e35f Author: Katayama Hirofumi MZ <katayama.hirofumi...@gmail.com> AuthorDate: Sat Jan 6 19:21:37 2024 +0900 Commit: GitHub <nore...@github.com> CommitDate: Sat Jan 6 19:21:37 2024 +0900 [MSCTFIME][MSUTB][SDK] Add cicInitUIFLib and cicDoneUIFLib (#6307) Supporting TIPs... JIRA issue: CORE-19360 - Implement cicInitUIFLib and cicDoneUIFLib functions. - Use them in msctfime and msutb. - Add CUIFSystemInfo class in <cicero/cicuif.h>. --- dll/ime/msctfime/msctfime.cpp | 16 +------ dll/win32/msutb/msutb.cpp | 20 +------- dll/win32/msutb/precomp.h | 2 +- sdk/include/reactos/cicero/cicuif.h | 96 +++++++++++++++++++++++++++++++++++++ 4 files changed, 101 insertions(+), 33 deletions(-) diff --git a/dll/ime/msctfime/msctfime.cpp b/dll/ime/msctfime/msctfime.cpp index 884b01a500b..c1353076be1 100644 --- a/dll/ime/msctfime/msctfime.cpp +++ b/dll/ime/msctfime/msctfime.cpp @@ -3646,18 +3646,6 @@ VOID DetachIME(VOID) UnregisterImeClass(); } -/// @unimplemented -VOID InitUIFLib(VOID) -{ - //FIXME -} - -/// @unimplemented -VOID DoneUIFLib(VOID) -{ - //FIXME -} - /// @implemented BOOL ProcessAttach(HINSTANCE hinstDLL) { @@ -3670,7 +3658,7 @@ BOOL ProcessAttach(HINSTANCE hinstDLL) cicGetOSInfo(&g_uACP, &g_dwOSInfo); - InitUIFLib(); + cicInitUIFLib(); if (!TFInitLib()) return FALSE; @@ -3695,7 +3683,7 @@ VOID ProcessDetach(HINSTANCE hinstDLL) DeleteCriticalSection(&g_csLock); TLS::InternalDestroyTLS(); TLS::Uninitialize(); - DoneUIFLib(); + cicDoneUIFLib(); } /// @implemented diff --git a/dll/win32/msutb/msutb.cpp b/dll/win32/msutb/msutb.cpp index 29ecbe7d330..4ba8f878913 100644 --- a/dll/win32/msutb/msutb.cpp +++ b/dll/win32/msutb/msutb.cpp @@ -121,22 +121,6 @@ STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv) return gModule.DllGetClassObject(rclsid, riid, ppv); } -/** - * @unimplemented - */ -VOID InitUIFLib(VOID) -{ - //FIXME -} - -/** - * @unimplemented - */ -VOID DoneUIFLib(VOID) -{ - //FIXME -} - /** * @implemented */ @@ -167,7 +151,7 @@ BOOL ProcessAttach(HINSTANCE hinstDLL) cicGetOSInfo(&g_uACP, &g_dwOSInfo); TFInitLib(MsUtbCoCreateInstance); - InitUIFLib(); + cicInitUIFLib(); //CTrayIconWnd::RegisterClassW(); //FIXME @@ -184,7 +168,7 @@ BOOL ProcessAttach(HINSTANCE hinstDLL) */ VOID ProcessDetach(HINSTANCE hinstDLL) { - DoneUIFLib(); + cicDoneUIFLib(); TFUninitLib(); ::DeleteCriticalSection(&g_cs); gModule.Term(); diff --git a/dll/win32/msutb/precomp.h b/dll/win32/msutb/precomp.h index 0a77ed7f3ef..d4579a7511b 100644 --- a/dll/win32/msutb/precomp.h +++ b/dll/win32/msutb/precomp.h @@ -24,7 +24,7 @@ #include <atlcom.h> #include <strsafe.h> #undef STATUS_NO_MEMORY -#include <cicero/cicbase.h> +#include <cicero/cicuif.h> #include <wine/debug.h> diff --git a/sdk/include/reactos/cicero/cicuif.h b/sdk/include/reactos/cicero/cicuif.h index 9745484075d..6bc52280640 100644 --- a/sdk/include/reactos/cicero/cicuif.h +++ b/sdk/include/reactos/cicero/cicuif.h @@ -9,6 +9,7 @@ #include "cicarray.h" +class CUIFSystemInfo; struct CUIFTheme; class CUIFObject; class CUIFWindow; @@ -21,6 +22,27 @@ class CUIFScheme; ///////////////////////////////////////////////////////////////////////////// +class CUIFSystemInfo : OSVERSIONINFO +{ +public: + static CUIFSystemInfo *s_pSystemInfo; + DWORD m_cBitsPixels; + BOOL m_bHighContrast1; + BOOL m_bHighContrast2; + + CUIFSystemInfo(); + void GetSystemMetrics(); + void Initialize(); +}; + +DECLSPEC_SELECTANY CUIFSystemInfo *CUIFSystemInfo::s_pSystemInfo = NULL; + +void cicInitUIFSys(void); +void cicDoneUIFSys(void); +void cicUpdateUIFSys(void); + +///////////////////////////////////////////////////////////////////////////// + #include <uxtheme.h> // uxtheme.dll @@ -340,6 +362,80 @@ class CUIFWindow : public CUIFObject ///////////////////////////////////////////////////////////////////////////// +inline void cicInitUIFLib(void) +{ + cicInitUIFSys(); + cicInitUIFScheme(); + cicInitUIFUtil(); +} + +inline void cicDoneUIFLib(void) +{ + cicDoneUIFScheme(); + cicDoneUIFSys(); + cicDoneUIFUtil(); +} + +///////////////////////////////////////////////////////////////////////////// + +inline CUIFSystemInfo::CUIFSystemInfo() +{ + dwMajorVersion = 4; + dwMinorVersion = 0; + dwBuildNumber = 0; + dwPlatformId = VER_PLATFORM_WIN32_WINDOWS; + m_cBitsPixels = 8; + m_bHighContrast1 = m_bHighContrast2 = FALSE; +} + +inline void CUIFSystemInfo::GetSystemMetrics() +{ + HDC hDC = ::GetDC(NULL); + m_cBitsPixels = ::GetDeviceCaps(hDC, BITSPIXEL); + ::ReleaseDC(NULL, hDC); + + HIGHCONTRAST HighContrast = { sizeof(HighContrast) }; + ::SystemParametersInfo(SPI_GETHIGHCONTRAST, sizeof(HighContrast), &HighContrast, 0); + m_bHighContrast1 = !!(HighContrast.dwFlags & HCF_HIGHCONTRASTON); + COLORREF rgbBtnText = ::GetSysColor(COLOR_BTNTEXT); + COLORREF rgbBtnFace = ::GetSysColor(COLOR_BTNFACE); + const COLORREF black = RGB(0, 0, 0), white = RGB(255, 255, 255); + m_bHighContrast2 = (m_bHighContrast1 || + (rgbBtnText == black && rgbBtnFace == white) || + (rgbBtnText == white && rgbBtnFace == black)); +} + +inline void CUIFSystemInfo::Initialize() +{ + dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + ::GetVersionEx(this); + GetSystemMetrics(); +} + +inline void cicInitUIFSys(void) +{ + CUIFSystemInfo::s_pSystemInfo = new(cicNoThrow) CUIFSystemInfo(); + if (CUIFSystemInfo::s_pSystemInfo) + CUIFSystemInfo::s_pSystemInfo->Initialize(); +} + +inline void cicDoneUIFSys(void) +{ + if (CUIFSystemInfo::s_pSystemInfo) + { + delete CUIFSystemInfo::s_pSystemInfo; + CUIFSystemInfo::s_pSystemInfo = NULL; + } +} + +inline void cicUpdateUIFSys(void) +{ + if (CUIFSystemInfo::s_pSystemInfo) + CUIFSystemInfo::s_pSystemInfo->GetSystemMetrics(); +} + +///////////////////////////////////////////////////////////////////////////// + inline HRESULT CUIFTheme::InternalOpenThemeData(HWND hWnd) { if (!hWnd || !m_pszClassList)