[UXTHEME] Implement various Vista+ functions, mostly from WINE

This commit is contained in:
Ethan Rodensky 2024-03-14 14:00:52 -04:00 committed by Justin Miller
parent 01a6c4874a
commit 7ec3a7e98b
6 changed files with 419 additions and 41 deletions

View file

@ -15,8 +15,7 @@ extern "C" {
#define DTBG_COMPUTINGREGION 0x00000010
#define DTBG_MIRRORDC 0x00000020
#define DTT_GRAYED 0x00000001
/* DTTOPTS.dwFlags bits */
// Vista+
#define DTT_TEXTCOLOR 0x00000001
#define DTT_BORDERCOLOR 0x00000002
#define DTT_SHADOWCOLOR 0x00000004
@ -57,6 +56,8 @@ extern "C" {
typedef HANDLE HPAINTBUFFER;
typedef HANDLE HTHEME;
// Vista+
typedef HANDLE HANIMATIONBUFFER;
typedef int (WINAPI *DTT_CALLBACK_PROC)(HDC,LPWSTR,int,RECT*,UINT,LPARAM);
typedef enum _BP_BUFFERFORMAT
@ -67,6 +68,7 @@ typedef enum _BP_BUFFERFORMAT
BPBF_TOPDOWNMONODIB
} BP_BUFFERFORMAT;
typedef struct _BP_PAINTPARAMS
{
DWORD cbSize;
@ -89,6 +91,21 @@ typedef enum THEMESIZE {
TS_DRAW
} THEMESIZE;
// Vista+
typedef enum _BP_ANIMATIONSTYLE
{
BPAS_NONE,
BPAS_LINEAR,
BPAS_CUBIC,
BPAS_SINE
} BP_ANIMATIONSTYLE;
enum WINDOWTHEMEATTRIBUTETYPE
{
WTA_NONCLIENT = 1
};
typedef struct _DTBGOPTS {
DWORD dwSize;
DWORD dwFlags;
@ -109,6 +126,7 @@ typedef struct _MARGINS {
int cyBottomHeight;
} MARGINS, *PMARGINS;
// Vista+
typedef struct _DTTOPTS {
DWORD dwSize;
DWORD dwFlags;
@ -127,6 +145,14 @@ typedef struct _DTTOPTS {
LPARAM lParam;
} DTTOPTS, *PDTTOPTS;
typedef struct _BP_ANIMATIONPARAMS
{
DWORD cbSize;
DWORD dwFlags;
BP_ANIMATIONSTYLE style;
DWORD dwDuration;
} BP_ANIMATIONPARAMS, *PBP_ANIMATIONPARAMS;
HRESULT WINAPI CloseThemeData(HTHEME);
HRESULT WINAPI DrawThemeBackground(HTHEME,HDC,int,int,const RECT*,const RECT*);
HRESULT WINAPI DrawThemeBackgroundEx(HTHEME,HDC,int,int,const RECT*,const DTBGOPTS*);
@ -192,6 +218,25 @@ DrawThemeTextEx(
_Inout_ LPRECT pRect,
_In_ const DTTOPTS *options
);
// Vista+
HRESULT WINAPI BufferedPaintInit(VOID);
HRESULT WINAPI BufferedPaintUnInit(VOID);
HPAINTBUFFER WINAPI BeginBufferedPaint(HDC, const RECT *, BP_BUFFERFORMAT,
BP_PAINTPARAMS *,HDC *);
HRESULT WINAPI EndBufferedPaint(HPAINTBUFFER, BOOL);
HRESULT WINAPI BufferedPaintClear(HPAINTBUFFER, const RECT *);
HRESULT WINAPI BufferedPaintSetAlpha(HPAINTBUFFER, const RECT *, BYTE);
HRESULT WINAPI GetBufferedPaintBits(HPAINTBUFFER, RGBQUAD **, int *);
HDC WINAPI GetBufferedPaintDC(HPAINTBUFFER);
HDC WINAPI GetBufferedPaintTargetDC(HPAINTBUFFER);
HRESULT WINAPI GetBufferedPaintTargetRect(HPAINTBUFFER, RECT *prc);
HANIMATIONBUFFER WINAPI BeginBufferedAnimation(HWND, HDC, const RECT *,
BP_BUFFERFORMAT, BP_PAINTPARAMS *,
BP_ANIMATIONPARAMS *, HDC *, HDC *);
BOOL WINAPI BufferedPaintRenderAnimation(HWND, HDC);
HRESULT WINAPI BufferedPaintStopAllAnimations(HWND);
HRESULT WINAPI EndBufferedAnimation(HANIMATIONBUFFER, BOOL);
#endif
#ifdef __cplusplus