https://git.reactos.org/?p=reactos.git;a=commitdiff;h=46cf45414cfa4f23828f1b4d1ad60b5545d42207
commit 46cf45414cfa4f23828f1b4d1ad60b5545d42207 Author: Katayama Hirofumi MZ <katayama.hirofumi...@gmail.com> AuthorDate: Sat Jan 6 14:45:23 2024 +0900 Commit: GitHub <nore...@github.com> CommitDate: Sat Jan 6 14:45:23 2024 +0900 [SDK] cicuif.h: Add CUIFColorTable (#6305) Supporting TIPs... JIRA issue: CORE-19360 - Improve cicGetFN function. - Add CUIFColorTable, CUIFColorTableSys, and CUIFColorTableOff10 classes. - Implement cicInitUIFScheme, cicUpdateUIFScheme, and cicDoneUIFScheme functions. --- sdk/include/reactos/cicero/cicbase.h | 28 ++-- sdk/include/reactos/cicero/cicuif.h | 287 ++++++++++++++++++++++++++++------- 2 files changed, 245 insertions(+), 70 deletions(-) diff --git a/sdk/include/reactos/cicero/cicbase.h b/sdk/include/reactos/cicero/cicbase.h index a85be273a99..25c3710ec77 100644 --- a/sdk/include/reactos/cicero/cicbase.h +++ b/sdk/include/reactos/cicero/cicbase.h @@ -62,20 +62,6 @@ inline void operator delete[](void* ptr, size_t size) noexcept cicMemFree(ptr); } -template <typename T_FN> -static inline BOOL -cicGetFN(HINSTANCE& hinstDLL, T_FN& fn, LPCTSTR pszDllName, LPCSTR pszFuncName) -{ - if (fn) - return TRUE; - if (!hinstDLL) - hinstDLL = LoadLibrary(pszDllName); - if (!hinstDLL) - return FALSE; - fn = reinterpret_cast<T_FN>(GetProcAddress(hinstDLL, pszFuncName)); - return !!fn; -} - typedef struct CIC_LIBTHREAD { IUnknown *m_pUnknown1; @@ -176,6 +162,20 @@ cicLoadSystemLibrary( return ::LoadLibrary(ModPath.m_szPath); } +template <typename T_FN> +static inline BOOL +cicGetFN(HINSTANCE& hinstDLL, T_FN& fn, LPCTSTR pszDllName, LPCSTR pszFuncName) +{ + if (fn) + return TRUE; + if (!hinstDLL) + hinstDLL = cicLoadSystemLibrary(pszDllName, FALSE); + if (!hinstDLL) + return FALSE; + fn = reinterpret_cast<T_FN>(GetProcAddress(hinstDLL, pszFuncName)); + return !!fn; +} + #include <ndk/pstypes.h> /* for PROCESSINFOCLASS */ /* ntdll!NtQueryInformationProcess */ diff --git a/sdk/include/reactos/cicero/cicuif.h b/sdk/include/reactos/cicero/cicuif.h index bdbc451ddab..5bbc133f4ef 100644 --- a/sdk/include/reactos/cicero/cicuif.h +++ b/sdk/include/reactos/cicero/cicuif.h @@ -154,16 +154,16 @@ public: STDMETHOD_(void, Initialize)(); STDMETHOD_(void, OnPaint)(HWND hWnd); - STDMETHOD_(void, OnHideToolTip)(); - STDMETHOD_(void, OnLButtonDown)(POINT pt); - STDMETHOD_(void, OnLButtonDblClk)(POINT pt); - STDMETHOD_(void, OnLButtonUp)(POINT pt); - STDMETHOD_(void, OnMButtonDown)(POINT pt); - STDMETHOD_(void, OnMButtonDblClk)(POINT pt); - STDMETHOD_(void, OnMButtonUp)(POINT pt); - STDMETHOD_(void, OnRButtonDown)(POINT pt); - STDMETHOD_(void, OnRButtonDblClk)(POINT pt); - STDMETHOD_(void, OnRButtonUp)(POINT pt); + STDMETHOD_(void, OnHideToolTip)() { } // FIXME: name + STDMETHOD_(void, OnLButtonDown)(POINT pt) { } + STDMETHOD_(void, OnMButtonDown)(POINT pt) { } + STDMETHOD_(void, OnRButtonDown)(POINT pt) { } + STDMETHOD_(void, OnLButtonUp)(POINT pt) { } + STDMETHOD_(void, OnMButtonUp)(POINT pt) { } + STDMETHOD_(void, OnRButtonUp)(POINT pt) { } + STDMETHOD_(void, OnMouseMove)(POINT pt) { } + STDMETHOD_(void, OnRButtonDblClk)(POINT pt) { } //FIXME: name + STDMETHOD_(void, OnRButtonUp2)(POINT pt) { } //FIXME: name STDMETHOD_(void, OnUnknown)(DWORD x1, DWORD x2, DWORD x3); //FIXME: name and type STDMETHOD_(void, GetRect)(LPRECT prc); STDMETHOD_(void, SetRect)(LPCRECT prc); @@ -181,7 +181,7 @@ public: STDMETHOD_(void, SetToolTip)(LPCWSTR pszToolTip); STDMETHOD_(LPCWSTR, GetToolTip)(); STDMETHOD_(LRESULT, OnShowToolTip)(); - STDMETHOD_(void, OnHideToolTip2)(); + STDMETHOD_(void, OnHideToolTip2)() { } // FIXME: name STDMETHOD_(void, DetachWndObj)(); STDMETHOD_(void, ClearWndObj)(); STDMETHOD_(LRESULT, OnPaintTheme)(HWND hWnd); @@ -191,6 +191,76 @@ public: ///////////////////////////////////////////////////////////////////////////// +class CUIFColorTable +{ +public: + CUIFColorTable() { } + virtual ~CUIFColorTable() { } + + STDMETHOD_(void, InitColor)() = 0; + STDMETHOD_(void, DoneColor)() { } + STDMETHOD_(void, InitBrush)() = 0; + STDMETHOD_(void, DoneBrush)() = 0; + + void Update() + { + DoneColor(); + DoneBrush(); + InitColor(); + InitBrush(); + } +}; + +class CUIFColorTableSys : public CUIFColorTable +{ +protected: + COLORREF m_rgbColors[16]; + HBRUSH m_hBrushes[16]; + +public: + CUIFColorTableSys() { } + + HBRUSH GetBrush(INT iColor); + + STDMETHOD_(void, InitColor)() override; + STDMETHOD_(void, InitBrush)() override; + STDMETHOD_(void, DoneBrush)() override; +}; + +class CUIFColorTableOff10 : public CUIFColorTable +{ +protected: + COLORREF m_rgbColors[32]; + HBRUSH m_hBrushes[32]; + +public: + CUIFColorTableOff10() { } + + HBRUSH GetBrush(INT iColor); + + STDMETHOD_(void, InitColor)() override; + STDMETHOD_(void, InitBrush)() override; + STDMETHOD_(void, DoneBrush)() override; +}; + +///////////////////////////////////////////////////////////////////////////// + +class CUIFScheme +{ +public: + static CUIFColorTableSys *s_pColorTableSys; + static CUIFColorTableOff10 *s_pColorTableOff10; +}; + +DECLSPEC_SELECTANY CUIFColorTableSys *CUIFScheme::s_pColorTableSys = NULL; +DECLSPEC_SELECTANY CUIFColorTableOff10 *CUIFScheme::s_pColorTableOff10 = NULL; + +void cicInitUIFScheme(void); +void cicUpdateUIFScheme(void); +void cicDoneUIFScheme(void); + +///////////////////////////////////////////////////////////////////////////// + class CUIFWindow : public CUIFObject { //FIXME @@ -450,46 +520,6 @@ inline STDMETHODIMP_(void) CUIFObject::OnPaint(HWND hWnd) OnSetFocus(hWnd); } -inline STDMETHODIMP_(void) CUIFObject::OnHideToolTip() -{ -} - -inline STDMETHODIMP_(void) CUIFObject::OnLButtonDown(POINT pt) -{ -} - -inline STDMETHODIMP_(void) CUIFObject::OnLButtonDblClk(POINT pt) -{ -} - -inline STDMETHODIMP_(void) CUIFObject::OnLButtonUp(POINT pt) -{ -} - -inline STDMETHODIMP_(void) CUIFObject::OnMButtonDown(POINT pt) -{ -} - -inline STDMETHODIMP_(void) CUIFObject::OnMButtonDblClk(POINT pt) -{ -} - -inline STDMETHODIMP_(void) CUIFObject::OnMButtonUp(POINT pt) -{ -} - -inline STDMETHODIMP_(void) CUIFObject::OnRButtonDown(POINT pt) -{ -} - -inline STDMETHODIMP_(void) CUIFObject::OnRButtonDblClk(POINT pt) -{ -} - -inline STDMETHODIMP_(void) CUIFObject::OnRButtonUp(POINT pt) -{ -} - inline STDMETHODIMP_(void) CUIFObject::OnUnknown(DWORD x1, DWORD x2, DWORD x3) { } @@ -631,11 +661,6 @@ inline STDMETHODIMP_(LRESULT) CUIFObject::OnShowToolTip() return 0; } -// FIXME: name -inline STDMETHODIMP_(void) CUIFObject::OnHideToolTip2() -{ -} - /// @unimplemented inline STDMETHODIMP_(void) CUIFObject::DetachWndObj() { @@ -665,3 +690,153 @@ inline STDMETHODIMP_(void) CUIFObject::ClearTheme() for (size_t iItem = 0; iItem < m_ObjectArray.size(); ++iItem) m_ObjectArray[iItem]->ClearTheme(); } + +///////////////////////////////////////////////////////////////////////////// + +inline STDMETHODIMP_(void) CUIFColorTableSys::InitColor() +{ + m_rgbColors[0] = GetSysColor(COLOR_BTNFACE); + m_rgbColors[1] = GetSysColor(COLOR_BTNSHADOW); + m_rgbColors[2] = GetSysColor(COLOR_ACTIVEBORDER); + m_rgbColors[3] = GetSysColor(COLOR_ACTIVECAPTION); + m_rgbColors[4] = GetSysColor(COLOR_BTNFACE); + m_rgbColors[5] = GetSysColor(COLOR_BTNSHADOW); + m_rgbColors[6] = GetSysColor(COLOR_BTNTEXT); + m_rgbColors[7] = GetSysColor(COLOR_CAPTIONTEXT); + m_rgbColors[8] = GetSysColor(COLOR_GRAYTEXT); + m_rgbColors[9] = GetSysColor(COLOR_HIGHLIGHT); + m_rgbColors[10] = GetSysColor(COLOR_HIGHLIGHTTEXT); + m_rgbColors[11] = GetSysColor(COLOR_INACTIVECAPTION); + m_rgbColors[12] = GetSysColor(COLOR_INACTIVECAPTIONTEXT); + m_rgbColors[13] = GetSysColor(COLOR_MENUTEXT); + m_rgbColors[14] = GetSysColor(COLOR_WINDOW); + m_rgbColors[15] = GetSysColor(COLOR_WINDOWTEXT); +} + +inline STDMETHODIMP_(void) CUIFColorTableSys::InitBrush() +{ + ZeroMemory(m_hBrushes, sizeof(m_hBrushes)); +} + +inline STDMETHODIMP_(void) CUIFColorTableSys::DoneBrush() +{ + for (size_t i = 0; i < _countof(m_hBrushes); ++i) + { + if (m_hBrushes[i]) + { + ::DeleteObject(m_hBrushes[i]); + m_hBrushes[i] = NULL; + } + } +} + +inline HBRUSH CUIFColorTableSys::GetBrush(INT iColor) +{ + if (!m_hBrushes[iColor]) + m_hBrushes[iColor] = ::CreateSolidBrush(m_rgbColors[iColor]); + return m_hBrushes[iColor]; +} + +inline HBRUSH CUIFColorTableOff10::GetBrush(INT iColor) +{ + if (!m_hBrushes[iColor]) + m_hBrushes[iColor] = ::CreateSolidBrush(m_rgbColors[iColor]); + return m_hBrushes[iColor]; +} + +/// @unimplemented +inline STDMETHODIMP_(void) CUIFColorTableOff10::InitColor() +{ + m_rgbColors[0] = GetSysColor(COLOR_BTNFACE); + m_rgbColors[1] = GetSysColor(COLOR_WINDOW); + m_rgbColors[2] = GetSysColor(COLOR_WINDOW); + m_rgbColors[3] = GetSysColor(COLOR_BTNFACE); + m_rgbColors[4] = GetSysColor(COLOR_BTNSHADOW); + m_rgbColors[5] = GetSysColor(COLOR_WINDOW); + m_rgbColors[6] = GetSysColor(COLOR_HIGHLIGHT); + m_rgbColors[7] = GetSysColor(COLOR_WINDOWTEXT); + m_rgbColors[8] = GetSysColor(COLOR_HIGHLIGHT); + m_rgbColors[9] = GetSysColor(COLOR_HIGHLIGHT); + m_rgbColors[10] = GetSysColor(COLOR_HIGHLIGHTTEXT); + m_rgbColors[11] = GetSysColor(COLOR_BTNFACE); + m_rgbColors[12] = GetSysColor(COLOR_BTNTEXT); + m_rgbColors[13] = GetSysColor(COLOR_BTNSHADOW); + m_rgbColors[14] = GetSysColor(COLOR_BTNFACE); + m_rgbColors[15] = GetSysColor(COLOR_WINDOW); + m_rgbColors[16] = GetSysColor(COLOR_HIGHLIGHT); + m_rgbColors[17] = GetSysColor(COLOR_BTNTEXT); + m_rgbColors[18] = GetSysColor(COLOR_WINDOW); + m_rgbColors[19] = GetSysColor(COLOR_BTNSHADOW); + m_rgbColors[20] = GetSysColor(COLOR_BTNFACE); + m_rgbColors[21] = GetSysColor(COLOR_BTNSHADOW); + m_rgbColors[22] = GetSysColor(COLOR_BTNFACE); + m_rgbColors[23] = GetSysColor(COLOR_BTNSHADOW); + m_rgbColors[24] = GetSysColor(COLOR_CAPTIONTEXT); + m_rgbColors[25] = GetSysColor(COLOR_HIGHLIGHT); + m_rgbColors[26] = GetSysColor(COLOR_HIGHLIGHTTEXT); + m_rgbColors[27] = GetSysColor(COLOR_BTNFACE); + m_rgbColors[28] = GetSysColor(COLOR_BTNTEXT); + m_rgbColors[29] = GetSysColor(COLOR_BTNSHADOW); + m_rgbColors[30] = GetSysColor(COLOR_BTNTEXT); + m_rgbColors[31] = GetSysColor(COLOR_WINDOWTEXT); +} + +inline STDMETHODIMP_(void) CUIFColorTableOff10::InitBrush() +{ + ZeroMemory(m_hBrushes, sizeof(m_hBrushes)); +} + +inline STDMETHODIMP_(void) CUIFColorTableOff10::DoneBrush() +{ + for (size_t i = 0; i < _countof(m_hBrushes); ++i) + { + if (m_hBrushes[i]) + { + ::DeleteObject(m_hBrushes[i]); + m_hBrushes[i] = NULL; + } + } +} + +///////////////////////////////////////////////////////////////////////////// + +inline void cicInitUIFScheme(void) +{ + CUIFColorTable *pColorTable; + + pColorTable = CUIFScheme::s_pColorTableSys = new(cicNoThrow) CUIFColorTableSys(); + if (pColorTable) + { + pColorTable->InitColor(); + pColorTable->InitBrush(); + } + + pColorTable = CUIFScheme::s_pColorTableOff10 = new(cicNoThrow) CUIFColorTableOff10(); + if (pColorTable) + { + pColorTable->InitColor(); + pColorTable->InitBrush(); + } +} + +inline void cicUpdateUIFScheme(void) +{ + if (CUIFScheme::s_pColorTableSys) + CUIFScheme::s_pColorTableSys->Update(); + if (CUIFScheme::s_pColorTableOff10) + CUIFScheme::s_pColorTableOff10->Update(); +} + +inline void cicDoneUIFScheme(void) +{ + if (CUIFScheme::s_pColorTableSys) + { + delete CUIFScheme::s_pColorTableSys; + CUIFScheme::s_pColorTableSys = NULL; + } + if (CUIFScheme::s_pColorTableOff10) + { + delete CUIFScheme::s_pColorTableOff10; + CUIFScheme::s_pColorTableOff10 = NULL; + } +}