aboutsummaryrefslogtreecommitdiff
path: root/core/sys/windows/ux_theme.odin
blob: e1980024649a3791784b6eabfbdf8aa2ee145921 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#+build windows
package sys_windows

foreign import uxtheme "system:UxTheme.lib"

MARGINS :: struct {
	cxLeftWidth:    c_int,
	cxRightWidth:   c_int,
	cyTopHeight:    c_int,
	cyBottomHeight: c_int,
}
PMARGINS :: ^MARGINS

@(default_calling_convention="system")
foreign uxtheme {
	IsThemeActive  :: proc() -> BOOL ---
	GetWindowTheme :: proc(hwnd: HWND) -> HTHEME ---
	SetWindowTheme :: proc(hWnd: HWND, pszSubAppName, pszSubIdList: LPCWSTR) -> HRESULT ---

	// Buffered painting and buffered animation
	BufferedPaintInit   :: proc() -> HRESULT ---
	BufferedPaintUnInit :: proc() -> HRESULT ---

	BeginBufferedPaint :: proc(hdcTarget: HDC, prcTarget: ^RECT, dwFormat: BP_BUFFERFORMAT, pPaintParams: ^BP_PAINTPARAMS, phdc: ^HDC) -> HPAINTBUFFER ---
	EndBufferedPaint   :: proc(hBufferedPaint: HPAINTBUFFER, fUpdateTarget: BOOL) -> HRESULT ---

	GetBufferedPaintTargetRect :: proc(hBufferedPaint: HPAINTBUFFER, prc: ^RECT) -> HRESULT ---
	GetBufferedPaintTargetDC   :: proc(hBufferedPaint: HPAINTBUFFER) -> HDC ---
	GetBufferedPaintDC         :: proc(hBufferedPaint: HPAINTBUFFER) -> HDC ---
	GetBufferedPaintBits       :: proc(hBufferedPaint, ppbBuffer: ^[^]RGBQUAD, pcxRow: ^c_int) -> HRESULT ---

	BufferedPaintClear    :: proc(hBufferedPaint: HPAINTBUFFER, prc: ^RECT) -> HRESULT ---
	BufferedPaintSetAlpha :: proc(hBufferedPaint: HPAINTBUFFER, prc: ^RECT, alpha: BYTE) -> HRESULT ---

	BufferedPaintStopAllAnimations :: proc(hwnd: HWND) -> HRESULT ---
	BeginBufferedAnimation         :: proc(hwnd: HWND, hdcTarget: HDC, prcTarget: ^RECT, dwFormat: BP_BUFFERFORMAT, pPaintParams: ^BP_PAINTPARAMS, pAnimationParams: ^BP_ANIMATIONPARAMS, phdcFrom: ^HDC, phdcTo: ^HDC) -> HANIMATIONBUFFER ---
	BufferedPaintRenderAnimation   :: proc(hwnd: HWND, hdcTarget: HDC) -> BOOL ---
}

HTHEME           :: distinct HANDLE
HPAINTBUFFER     :: distinct HANDLE
HANIMATIONBUFFER :: distinct HANDLE

BP_BUFFERFORMAT :: enum c_int {
	BPBF_COMPATIBLEBITMAP,
	BPBF_DIB,
	BPBF_TOPDOWNDIB,
	BPBF_TOPDOWNMONODIB,
}

BP_ANIMATIONSTYLE :: enum c_int {
	BPAS_NONE,
	BPAS_LINEAR,
	BPAS_CUBIC,
	BPAS_SINE,
}

// Constants for BP_PAINTPARAMS.dwFlags
BPPF_ERASE              :: 0x0001
BPPF_NOCLIP             :: 0x0002
BPPF_NONCLIENT          :: 0x0004

BP_ANIMATIONPARAMS :: struct {
	cbSize:     DWORD,
	dwFlags:    DWORD,
	style:      BP_ANIMATIONSTYLE,
	dwDuration: DWORD,
}

BP_PAINTPARAMS :: struct {
	cbSize:         DWORD,
	dwFlags:        DWORD,
	prcExclude:     ^RECT,
	pBlendFunction: ^BLENDFUNCTION,
}