mirror of
https://github.com/reactos/reactos.git
synced 2024-09-27 21:16:34 +00:00
[MSCTFIME][SDK] Add <cicero/cicuif.h> (#6291)
Supporting TIPs... JIRA issue: CORE-19360 - Add cicGetFN helper function in <cicero/cicbase.h>. - Add <cicero/cicuif.h>. - Add CUIFTheme class in <cicero/cicuif.h>.
This commit is contained in:
parent
35f83286c5
commit
77c5aea41f
|
@ -28,6 +28,7 @@
|
|||
#include <cicero/cicimc.h>
|
||||
#include <cicero/cictf.h>
|
||||
#include <cicero/ciccaret.h>
|
||||
#include <cicero/cicuif.h>
|
||||
|
||||
#include <wine/debug.h>
|
||||
|
||||
|
|
|
@ -62,6 +62,20 @@ 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;
|
||||
|
|
214
sdk/include/reactos/cicero/cicuif.h
Normal file
214
sdk/include/reactos/cicero/cicuif.h
Normal file
|
@ -0,0 +1,214 @@
|
|||
/*
|
||||
* PROJECT: ReactOS Cicero
|
||||
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
|
||||
* PURPOSE: Cicero UI interface
|
||||
* COPYRIGHT: Copyright 2023 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "cicbase.h"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <uxtheme.h>
|
||||
|
||||
// uxtheme.dll
|
||||
using FN_DrawThemeBackground = decltype(&DrawThemeBackground);
|
||||
using FN_DrawThemeParentBackground = decltype(&DrawThemeParentBackground);
|
||||
using FN_DrawThemeText = decltype(&DrawThemeText);
|
||||
using FN_DrawThemeIcon = decltype(&DrawThemeIcon);
|
||||
using FN_GetThemeBackgroundExtent = decltype(&GetThemeBackgroundExtent);
|
||||
using FN_GetThemeBackgroundContentRect = decltype(&GetThemeBackgroundContentRect);
|
||||
using FN_GetThemeTextExtent = decltype(&GetThemeTextExtent);
|
||||
using FN_GetThemePartSize = decltype(&GetThemePartSize);
|
||||
using FN_DrawThemeEdge = decltype(&DrawThemeEdge);
|
||||
using FN_GetThemeColor = decltype(&GetThemeColor);
|
||||
using FN_GetThemeMargins = decltype(&GetThemeMargins);
|
||||
using FN_GetThemeFont = decltype(&GetThemeFont);
|
||||
using FN_GetThemeSysColor = decltype(&GetThemeSysColor);
|
||||
using FN_GetThemeSysSize = decltype(&GetThemeSysSize);
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
struct CUIFTheme
|
||||
{
|
||||
protected:
|
||||
LPCWSTR m_pszClassList;
|
||||
INT m_iPartId;
|
||||
DWORD m_dwUnknown2;
|
||||
HTHEME m_hTheme;
|
||||
static HINSTANCE s_hUXTHEME;
|
||||
static FN_DrawThemeBackground s_fnDrawThemeBackground;
|
||||
static FN_DrawThemeParentBackground s_fnDrawThemeParentBackground;
|
||||
static FN_DrawThemeText s_fnDrawThemeText;
|
||||
static FN_DrawThemeIcon s_fnDrawThemeIcon;
|
||||
static FN_GetThemeBackgroundExtent s_fnGetThemeBackgroundExtent;
|
||||
static FN_GetThemeBackgroundContentRect s_fnGetThemeBackgroundContentRect;
|
||||
static FN_GetThemeTextExtent s_fnGetThemeTextExtent;
|
||||
static FN_GetThemePartSize s_fnGetThemePartSize;
|
||||
static FN_DrawThemeEdge s_fnDrawThemeEdge;
|
||||
static FN_GetThemeColor s_fnGetThemeColor;
|
||||
static FN_GetThemeMargins s_fnGetThemeMargins;
|
||||
static FN_GetThemeFont s_fnGetThemeFont;
|
||||
static FN_GetThemeSysColor s_fnGetThemeSysColor;
|
||||
static FN_GetThemeSysSize s_fnGetThemeSysSize;
|
||||
|
||||
public:
|
||||
STDMETHOD(DrawThemeBackground)(HDC hDC, int iStateId, LPCRECT pRect, LPCRECT pClipRect);
|
||||
STDMETHOD(DrawThemeParentBackground)(HWND hwnd, HDC hDC, LPRECT prc);
|
||||
STDMETHOD(DrawThemeText)(HDC hDC, int iStateId, LPCWSTR pszText, int cchText, DWORD dwTextFlags, DWORD dwTextFlags2, LPCRECT pRect);
|
||||
STDMETHOD(DrawThemeIcon)(HDC hDC, int iStateId, LPCRECT pRect, HIMAGELIST himl, int iImageIndex);
|
||||
STDMETHOD(GetThemeBackgroundExtent)(HDC hDC, int iStateId, LPCRECT pContentRect, LPRECT pExtentRect);
|
||||
STDMETHOD(GetThemeBackgroundContentRect)(HDC hDC, int iStateId, LPCRECT pBoundingRect, LPRECT pContentRect);
|
||||
STDMETHOD(GetThemeTextExtent)(HDC hDC, int iStateId, LPCWSTR pszText, int cchCharCount, DWORD dwTextFlags, LPCRECT pBoundingRect, LPRECT pExtentRect);
|
||||
STDMETHOD(GetThemePartSize)(HDC hDC, int iStateId, LPRECT prc, THEMESIZE eSize, SIZE *psz);
|
||||
STDMETHOD(DrawThemeEdge)(HDC hDC, int iStateId, LPCRECT pDestRect, UINT uEdge, UINT uFlags, LPRECT pContentRect);
|
||||
STDMETHOD(GetThemeColor)(int iStateId, int iPropId, COLORREF *pColor);
|
||||
STDMETHOD(GetThemeMargins)(HDC hDC, int iStateId, int iPropId, LPRECT prc, MARGINS *pMargins);
|
||||
STDMETHOD(GetThemeFont)(HDC hDC, int iStateId, int iPropId, LOGFONTW *pFont);
|
||||
STDMETHOD_(COLORREF, GetThemeSysColor)(INT iColorId);
|
||||
STDMETHOD_(int, GetThemeSysSize)(int iSizeId);
|
||||
STDMETHOD_(void, SetActiveTheme)(LPCWSTR pszClassList, INT iPartId, DWORD dwUnknown2);
|
||||
};
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// static members
|
||||
DECLSPEC_SELECTANY HINSTANCE CUIFTheme::s_hUXTHEME = NULL;
|
||||
DECLSPEC_SELECTANY FN_DrawThemeBackground CUIFTheme::s_fnDrawThemeBackground = NULL;
|
||||
DECLSPEC_SELECTANY FN_DrawThemeParentBackground CUIFTheme::s_fnDrawThemeParentBackground = NULL;
|
||||
DECLSPEC_SELECTANY FN_DrawThemeText CUIFTheme::s_fnDrawThemeText = NULL;
|
||||
DECLSPEC_SELECTANY FN_DrawThemeIcon CUIFTheme::s_fnDrawThemeIcon = NULL;
|
||||
DECLSPEC_SELECTANY FN_GetThemeBackgroundExtent CUIFTheme::s_fnGetThemeBackgroundExtent = NULL;
|
||||
DECLSPEC_SELECTANY FN_GetThemeBackgroundContentRect CUIFTheme::s_fnGetThemeBackgroundContentRect = NULL;
|
||||
DECLSPEC_SELECTANY FN_GetThemeTextExtent CUIFTheme::s_fnGetThemeTextExtent = NULL;
|
||||
DECLSPEC_SELECTANY FN_GetThemePartSize CUIFTheme::s_fnGetThemePartSize = NULL;
|
||||
DECLSPEC_SELECTANY FN_DrawThemeEdge CUIFTheme::s_fnDrawThemeEdge = NULL;
|
||||
DECLSPEC_SELECTANY FN_GetThemeColor CUIFTheme::s_fnGetThemeColor = NULL;
|
||||
DECLSPEC_SELECTANY FN_GetThemeMargins CUIFTheme::s_fnGetThemeMargins = NULL;
|
||||
DECLSPEC_SELECTANY FN_GetThemeFont CUIFTheme::s_fnGetThemeFont = NULL;
|
||||
DECLSPEC_SELECTANY FN_GetThemeSysColor CUIFTheme::s_fnGetThemeSysColor = NULL;
|
||||
DECLSPEC_SELECTANY FN_GetThemeSysSize CUIFTheme::s_fnGetThemeSysSize = NULL;
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
inline STDMETHODIMP
|
||||
CUIFTheme::DrawThemeBackground(HDC hDC, int iStateId, LPCRECT pRect, LPCRECT pClipRect)
|
||||
{
|
||||
if (!cicGetFN(s_hUXTHEME, s_fnDrawThemeBackground, TEXT("uxtheme.dll"), "DrawThemeBackground"))
|
||||
return E_FAIL;
|
||||
return s_fnDrawThemeBackground(m_hTheme, hDC, m_iPartId, iStateId, pRect, pClipRect);
|
||||
}
|
||||
|
||||
inline STDMETHODIMP
|
||||
CUIFTheme::DrawThemeParentBackground(HWND hwnd, HDC hDC, LPRECT prc)
|
||||
{
|
||||
if (!cicGetFN(s_hUXTHEME, s_fnDrawThemeParentBackground, TEXT("uxtheme.dll"), "DrawThemeParentBackground"))
|
||||
return E_FAIL;
|
||||
return s_fnDrawThemeParentBackground(hwnd, hDC, prc);
|
||||
}
|
||||
|
||||
inline STDMETHODIMP
|
||||
CUIFTheme::DrawThemeText(HDC hDC, int iStateId, LPCWSTR pszText, int cchText, DWORD dwTextFlags, DWORD dwTextFlags2, LPCRECT pRect)
|
||||
{
|
||||
if (!cicGetFN(s_hUXTHEME, s_fnDrawThemeText, TEXT("uxtheme.dll"), "DrawThemeText"))
|
||||
return E_FAIL;
|
||||
return s_fnDrawThemeText(m_hTheme, hDC, m_iPartId, iStateId, pszText, cchText, dwTextFlags, dwTextFlags2, pRect);
|
||||
}
|
||||
|
||||
inline STDMETHODIMP
|
||||
CUIFTheme::DrawThemeIcon(HDC hDC, int iStateId, LPCRECT pRect, HIMAGELIST himl, int iImageIndex)
|
||||
{
|
||||
if (!cicGetFN(s_hUXTHEME, s_fnDrawThemeIcon, TEXT("uxtheme.dll"), "DrawThemeIcon"))
|
||||
return E_FAIL;
|
||||
return s_fnDrawThemeIcon(m_hTheme, hDC, m_iPartId, iStateId, pRect, himl, iImageIndex);
|
||||
}
|
||||
|
||||
inline STDMETHODIMP
|
||||
CUIFTheme::GetThemeBackgroundExtent(HDC hDC, int iStateId, LPCRECT pContentRect, LPRECT pExtentRect)
|
||||
{
|
||||
if (!cicGetFN(s_hUXTHEME, s_fnGetThemeBackgroundExtent, TEXT("uxtheme.dll"), "GetThemeBackgroundExtent"))
|
||||
return E_FAIL;
|
||||
return s_fnGetThemeBackgroundExtent(m_hTheme, hDC, m_iPartId, iStateId, pContentRect, pExtentRect);
|
||||
}
|
||||
|
||||
inline STDMETHODIMP
|
||||
CUIFTheme::GetThemeBackgroundContentRect(HDC hDC, int iStateId, LPCRECT pBoundingRect, LPRECT pContentRect)
|
||||
{
|
||||
if (!cicGetFN(s_hUXTHEME, s_fnGetThemeBackgroundContentRect, TEXT("uxtheme.dll"), "GetThemeBackgroundContentRect"))
|
||||
return E_FAIL;
|
||||
return s_fnGetThemeBackgroundContentRect(m_hTheme, hDC, m_iPartId, iStateId, pBoundingRect, pContentRect);
|
||||
}
|
||||
|
||||
inline STDMETHODIMP
|
||||
CUIFTheme::GetThemeTextExtent(HDC hDC, int iStateId, LPCWSTR pszText, int cchCharCount, DWORD dwTextFlags, LPCRECT pBoundingRect, LPRECT pExtentRect)
|
||||
{
|
||||
if (!cicGetFN(s_hUXTHEME, s_fnGetThemeTextExtent, TEXT("uxtheme.dll"), "GetThemeTextExtent"))
|
||||
return E_FAIL;
|
||||
return s_fnGetThemeTextExtent(m_hTheme, hDC, m_iPartId, iStateId, pszText, cchCharCount, dwTextFlags, pBoundingRect, pExtentRect);
|
||||
}
|
||||
|
||||
inline STDMETHODIMP
|
||||
CUIFTheme::GetThemePartSize(HDC hDC, int iStateId, LPRECT prc, THEMESIZE eSize, SIZE *psz)
|
||||
{
|
||||
if (!cicGetFN(s_hUXTHEME, s_fnGetThemePartSize, TEXT("uxtheme.dll"), "GetThemePartSize"))
|
||||
return E_FAIL;
|
||||
return s_fnGetThemePartSize(m_hTheme, hDC, m_iPartId, iStateId, prc, eSize, psz);
|
||||
}
|
||||
|
||||
inline STDMETHODIMP
|
||||
CUIFTheme::DrawThemeEdge(HDC hDC, int iStateId, LPCRECT pDestRect, UINT uEdge, UINT uFlags, LPRECT pContentRect)
|
||||
{
|
||||
if (!cicGetFN(s_hUXTHEME, s_fnDrawThemeEdge, TEXT("uxtheme.dll"), "DrawThemeEdge"))
|
||||
return E_FAIL;
|
||||
return s_fnDrawThemeEdge(m_hTheme, hDC, m_iPartId, iStateId, pDestRect, uEdge, uFlags, pContentRect);
|
||||
}
|
||||
|
||||
inline STDMETHODIMP
|
||||
CUIFTheme::GetThemeColor(int iStateId, int iPropId, COLORREF *pColor)
|
||||
{
|
||||
if (!cicGetFN(s_hUXTHEME, s_fnGetThemeColor, TEXT("uxtheme.dll"), "GetThemeColor"))
|
||||
return E_FAIL;
|
||||
return s_fnGetThemeColor(m_hTheme, m_iPartId, iStateId, iPropId, pColor);
|
||||
}
|
||||
|
||||
inline STDMETHODIMP
|
||||
CUIFTheme::GetThemeMargins(HDC hDC, int iStateId, int iPropId, LPRECT prc, MARGINS *pMargins)
|
||||
{
|
||||
if (!cicGetFN(s_hUXTHEME, s_fnGetThemeMargins, TEXT("uxtheme.dll"), "GetThemeMargins"))
|
||||
return E_FAIL;
|
||||
return s_fnGetThemeMargins(m_hTheme, hDC, m_iPartId, iStateId, iPropId, prc, pMargins);
|
||||
}
|
||||
|
||||
inline STDMETHODIMP
|
||||
CUIFTheme::GetThemeFont(HDC hDC, int iStateId, int iPropId, LOGFONTW *pFont)
|
||||
{
|
||||
if (!cicGetFN(s_hUXTHEME, s_fnGetThemeFont, TEXT("uxtheme.dll"), "GetThemeFont"))
|
||||
return E_FAIL;
|
||||
return s_fnGetThemeFont(m_hTheme, hDC, m_iPartId, iStateId, iPropId, pFont);
|
||||
}
|
||||
|
||||
inline STDMETHODIMP_(COLORREF)
|
||||
CUIFTheme::GetThemeSysColor(INT iColorId)
|
||||
{
|
||||
if (!cicGetFN(s_hUXTHEME, s_fnGetThemeSysColor, TEXT("uxtheme.dll"), "GetThemeSysColor"))
|
||||
return RGB(0, 0, 0);
|
||||
return s_fnGetThemeSysColor(m_hTheme, iColorId);
|
||||
}
|
||||
|
||||
inline STDMETHODIMP_(int)
|
||||
CUIFTheme::GetThemeSysSize(int iSizeId)
|
||||
{
|
||||
if (!cicGetFN(s_hUXTHEME, s_fnGetThemeSysSize, TEXT("uxtheme.dll"), "GetThemeSysSize"))
|
||||
return 0;
|
||||
return s_fnGetThemeSysSize(m_hTheme, iSizeId);
|
||||
}
|
||||
|
||||
inline STDMETHODIMP_(void)
|
||||
CUIFTheme::SetActiveTheme(LPCWSTR pszClassList, INT iPartId, DWORD dwUnknown2)
|
||||
{
|
||||
m_iPartId = iPartId;
|
||||
m_dwUnknown2 = dwUnknown2;
|
||||
m_pszClassList = pszClassList;
|
||||
}
|
Loading…
Reference in a new issue