summaryrefslogtreecommitdiff
path: root/vendor/winapi/src/um/uxtheme.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/winapi/src/um/uxtheme.rs')
-rw-r--r--vendor/winapi/src/um/uxtheme.rs772
1 files changed, 772 insertions, 0 deletions
diff --git a/vendor/winapi/src/um/uxtheme.rs b/vendor/winapi/src/um/uxtheme.rs
new file mode 100644
index 0000000..0e046a3
--- /dev/null
+++ b/vendor/winapi/src/um/uxtheme.rs
@@ -0,0 +1,772 @@
+// Licensed under the Apache License, Version 2.0
+// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
+// All files in the project carrying such notice may not be copied, modified, or distributed
+// except according to those terms.
+//! theming API
+use ctypes::{c_float, c_int, c_void};
+use shared::minwindef::{BOOL, BYTE, DWORD, HINSTANCE, HRGN, LPARAM, UINT, ULONG, WORD};
+use shared::windef::{COLORREF, HBITMAP, HBRUSH, HDC, HWND, LPCRECT, LPRECT, POINT, RECT, SIZE};
+use um::commctrl::HIMAGELIST;
+use um::wingdi::{BLENDFUNCTION, LOGFONTW, RGBQUAD, TEXTMETRICW};
+use um::winnt::{HANDLE, HRESULT, LONG, LPCWSTR, LPWSTR, PVOID, VOID};
+pub type HTHEME = HANDLE;
+//pub const MAX_THEMECOLOR: u32 = 64;
+//pub const MAX_THEMESIZE: u32 = 64;
+extern "system" {
+ pub fn BeginPanningFeedback(
+ hwnd: HWND,
+ ) -> BOOL;
+ pub fn UpdatePanningFeedback(
+ hwnd: HWND,
+ lTotalOverpanOffsetX: LONG,
+ lTotalOverpanOffsetY: LONG,
+ fInInertia: BOOL,
+ ) -> BOOL;
+ pub fn EndPanningFeedback(
+ hwnd: HWND,
+ fAnimateBack: BOOL,
+ ) -> BOOL;
+}
+ENUM!{enum TA_PROPERTY {
+ TAP_FLAGS = 0,
+ TAP_TRANSFORMCOUNT = 1,
+ TAP_STAGGERDELAY = 2,
+ TAP_STAGGERDELAYCAP = 3,
+ TAP_STAGGERDELAYFACTOR = 4,
+ TAP_ZORDER = 5,
+}}
+ENUM!{enum TA_PROPERTY_FLAG {
+ TAPF_NONE = 0x0,
+ TAPF_HASSTAGGER = 0x1,
+ TAPF_ISRTLAWARE = 0x2,
+ TAPF_ALLOWCOLLECTION = 0x4,
+ TAPF_HASBACKGROUND = 0x8,
+ TAPF_HASPERSPECTIVE = 0x10,
+}}
+extern "system" {
+ pub fn GetThemeAnimationProperty(
+ hTheme: HTHEME,
+ iStoryboardId: c_int,
+ iTargetId: c_int,
+ eProperty: TA_PROPERTY,
+ pvProperty: *mut VOID,
+ cbSize: DWORD,
+ pcbSizeOut: *mut DWORD,
+ ) -> HRESULT;
+}
+ENUM!{enum TA_TRANSFORM_TYPE {
+ TATT_TRANSLATE_2D = 0,
+ TATT_SCALE_2D = 1,
+ TATT_OPACITY = 2,
+ TATT_CLIP = 3,
+}}
+ENUM!{enum TA_TRANSFORM_FLAG {
+ TATF_NONE = 0x0,
+ TATF_TARGETVALUES_USER = 0x1,
+ TATF_HASINITIALVALUES = 0x2,
+ TATF_HASORIGINVALUES = 0x4,
+}}
+STRUCT!{struct TA_TRANSFORM {
+ eTransformType: TA_TRANSFORM_TYPE,
+ dwTimingFunctionId: DWORD,
+ dwStartTime: DWORD,
+ dwDurationTime: DWORD,
+ eFlags: TA_TRANSFORM_FLAG,
+}}
+pub type PTA_TRANSFORM = *mut TA_TRANSFORM;
+STRUCT!{struct TA_TRANSFORM_2D {
+ header: TA_TRANSFORM,
+ rX: c_float,
+ rY: c_float,
+ rInitialX: c_float,
+ rInitialY: c_float,
+ rOriginX: c_float,
+ rOriginY: c_float,
+}}
+pub type PTA_TRANSFORM_2D = *mut TA_TRANSFORM_2D;
+STRUCT!{struct TA_TRANSFORM_OPACITY {
+ header: TA_TRANSFORM,
+ rOpacity: c_float,
+ rInitialOpacity: c_float,
+}}
+pub type PTA_TRANSFORM_OPACITY = *mut TA_TRANSFORM_OPACITY;
+STRUCT!{struct TA_TRANSFORM_CLIP {
+ header: TA_TRANSFORM,
+ rLeft: c_float,
+ rTop: c_float,
+ rRight: c_float,
+ rBottom: c_float,
+ rInitialLeft: c_float,
+ rInitialTop: c_float,
+ rInitialRight: c_float,
+ rInitialBottom: c_float,
+}}
+pub type PTA_TRANSFORM_CLIP = *mut TA_TRANSFORM_CLIP;
+extern "system" {
+ pub fn GetThemeAnimationTransform(
+ hTheme: HTHEME,
+ iStoryboardId: c_int,
+ iTargetId: c_int,
+ dwTransformIndex: DWORD,
+ pTransform: *mut TA_TRANSFORM,
+ cbSize: DWORD,
+ pcbSizeOut: *mut DWORD,
+ ) -> HRESULT;
+}
+ENUM!{enum TA_TIMINGFUNCTION_TYPE {
+ TTFT_UNDEFINED = 0,
+ TTFT_CUBIC_BEZIER = 1,
+}}
+STRUCT!{struct TA_TIMINGFUNCTION {
+ eTimingFunctionType: TA_TIMINGFUNCTION_TYPE,
+}}
+pub type PTA_TIMINGFUNCTION = *mut TA_TIMINGFUNCTION;
+STRUCT!{struct TA_CUBIC_BEZIER {
+ header: TA_TIMINGFUNCTION,
+ rX0: c_float,
+ rY0: c_float,
+ rX1: c_float,
+ rY1: c_float,
+}}
+pub type PTA_CUBIC_BEZIER = *mut TA_CUBIC_BEZIER;
+extern "system" {
+ pub fn GetThemeTimingFunction(
+ hTheme: HTHEME,
+ iTimingFunctionId: c_int,
+ pTimingFunction: *mut TA_TIMINGFUNCTION,
+ cbSize: DWORD,
+ pcbSizeOut: *mut DWORD,
+ ) -> HRESULT;
+ pub fn OpenThemeData(
+ hwnd: HWND,
+ pszClassList: LPCWSTR,
+ ) -> HTHEME;
+}
+pub const OTD_FORCE_RECT_SIZING: DWORD = 0x00000001;
+pub const OTD_NONCLIENT: DWORD = 0x00000002;
+pub const OTD_VALIDBITS: DWORD = OTD_FORCE_RECT_SIZING | OTD_NONCLIENT;
+extern "system" {
+ pub fn OpenThemeDataForDpi(
+ hwnd: HWND,
+ pszClassList: LPCWSTR,
+ dpi: UINT,
+ ) -> HTHEME;
+ pub fn OpenThemeDataEx(
+ hwnd: HWND,
+ pszClassList: LPCWSTR,
+ dwFlags: DWORD,
+ ) -> HTHEME;
+ pub fn CloseThemeData(
+ hTheme: HTHEME,
+ ) -> HRESULT;
+ pub fn DrawThemeBackground(
+ hTheme: HTHEME,
+ hdc: HDC,
+ iPartId: c_int,
+ iStateId: c_int,
+ pRect: LPCRECT,
+ pClipRect: LPCRECT,
+ ) -> HRESULT;
+}
+pub const DTBG_CLIPRECT: DWORD = 0x00000001;
+pub const DTBG_DRAWSOLID: DWORD = 0x00000002;
+pub const DTBG_OMITBORDER: DWORD = 0x00000004;
+pub const DTBG_OMITCONTENT: DWORD = 0x00000008;
+pub const DTBG_COMPUTINGREGION: DWORD = 0x00000010;
+pub const DTBG_MIRRORDC: DWORD = 0x00000020;
+pub const DTBG_NOMIRROR: DWORD = 0x00000040;
+pub const DTBG_VALIDBITS: DWORD = DTBG_CLIPRECT | DTBG_DRAWSOLID | DTBG_OMITBORDER
+ | DTBG_OMITCONTENT | DTBG_COMPUTINGREGION | DTBG_MIRRORDC | DTBG_NOMIRROR;
+STRUCT!{struct DTBGOPTS {
+ dwSize: DWORD,
+ dwFlags: DWORD,
+ rcClip: RECT,
+}}
+pub type PDTBGOPTS = *mut DTBGOPTS;
+extern "system" {
+ pub fn DrawThemeBackgroundEx(
+ hTheme: HTHEME,
+ hdc: HDC,
+ iPartId: c_int,
+ iStateId: c_int,
+ pRect: LPCRECT,
+ pOptions: *const DTBGOPTS,
+ ) -> HRESULT;
+}
+//pub const DTT_GRAYED: u32 = 0x00000001;
+//pub const DTT_FLAGS2VALIDBITS: u32 = DTT_GRAYED;
+extern "system" {
+ pub fn DrawThemeText(
+ hTheme: HTHEME,
+ hdc: HDC,
+ iPartId: c_int,
+ iStateId: c_int,
+ pszText: LPCWSTR,
+ cchText: c_int,
+ dwTextFlags: DWORD,
+ dwTextFlags2: DWORD,
+ pRect: LPCRECT,
+ ) -> HRESULT;
+ pub fn GetThemeBackgroundContentRect(
+ hTheme: HTHEME,
+ hdc: HDC,
+ iPartId: c_int,
+ iStateId: c_int,
+ pBoundingRect: LPCRECT,
+ pContentRect: LPRECT,
+ ) -> HRESULT;
+ pub fn GetThemeBackgroundExtent(
+ hTheme: HTHEME,
+ hdc: HDC,
+ iPartId: c_int,
+ iStateId: c_int,
+ pContentRect: LPCRECT,
+ pExtentRect: LPRECT,
+ ) -> HRESULT;
+ pub fn GetThemeBackgroundRegion(
+ hTheme: HTHEME,
+ hdc: HDC,
+ iPartId: c_int,
+ iStateId: c_int,
+ pRect: LPCRECT,
+ pRegion: *mut HRGN,
+ ) -> HRESULT;
+}
+ENUM!{enum THEMESIZE {
+ TS_MIN = 0,
+ TS_TRUE = 1,
+ TS_DRAW = 2,
+}}
+extern "system" {
+ pub fn GetThemePartSize(
+ hTheme: HTHEME,
+ hdc: HDC,
+ iPartId: c_int,
+ iStateId: c_int,
+ prc: LPCRECT,
+ eSize: THEMESIZE,
+ psz: *mut SIZE,
+ ) -> HRESULT;
+ pub fn GetThemeTextExtent(
+ hTheme: HTHEME,
+ hdc: HDC,
+ iPartId: c_int,
+ iStateId: c_int,
+ pszText: LPCWSTR,
+ cchCharCount: c_int,
+ dwTextFlags: DWORD,
+ pBoundingRect: LPCRECT,
+ pExtentRect: LPRECT,
+ ) -> HRESULT;
+ pub fn GetThemeTextMetrics(
+ hTheme: HTHEME,
+ hdc: HDC,
+ iPartId: c_int,
+ iStateId: c_int,
+ ptm: *mut TEXTMETRICW,
+ ) -> HRESULT;
+}
+pub const HTTB_BACKGROUNDSEG: DWORD = 0x00000000;
+pub const HTTB_FIXEDBORDER: DWORD = 0x00000002;
+pub const HTTB_CAPTION: DWORD = 0x00000004;
+pub const HTTB_RESIZINGBORDER_LEFT: DWORD = 0x00000010;
+pub const HTTB_RESIZINGBORDER_TOP: DWORD = 0x00000020;
+pub const HTTB_RESIZINGBORDER_RIGHT: DWORD = 0x00000040;
+pub const HTTB_RESIZINGBORDER_BOTTOM: DWORD = 0x00000080;
+pub const HTTB_RESIZINGBORDER: DWORD = HTTB_RESIZINGBORDER_LEFT | HTTB_RESIZINGBORDER_TOP
+ | HTTB_RESIZINGBORDER_RIGHT | HTTB_RESIZINGBORDER_BOTTOM;
+pub const HTTB_SIZINGTEMPLATE: DWORD = 0x00000100;
+pub const HTTB_SYSTEMSIZINGMARGINS: DWORD = 0x00000200;
+extern "system" {
+ pub fn HitTestThemeBackground(
+ hTheme: HTHEME,
+ hdc: HDC,
+ iPartId: c_int,
+ iStateId: c_int,
+ dwOptions: DWORD,
+ pRect: LPCRECT,
+ hrgn: HRGN,
+ ptTest: POINT,
+ pwHitTestCode: *mut WORD,
+ ) -> HRESULT;
+ pub fn DrawThemeEdge(
+ hTheme: HTHEME,
+ hdc: HDC,
+ iPartId: c_int,
+ iStateId: c_int,
+ pDestRect: LPCRECT,
+ uEdge: UINT,
+ uFlags: UINT,
+ pContentRect: LPRECT,
+ ) -> HRESULT;
+ pub fn DrawThemeIcon(
+ hTheme: HTHEME,
+ hdc: HDC,
+ iPartId: c_int,
+ iStateId: c_int,
+ pRect: LPCRECT,
+ himl: HIMAGELIST,
+ iImageIndex: c_int,
+ ) -> HRESULT;
+ pub fn IsThemePartDefined(
+ hTheme: HTHEME,
+ iPartId: c_int,
+ iStateId: c_int,
+ ) -> BOOL;
+ pub fn IsThemeBackgroundPartiallyTransparent(
+ hTheme: HTHEME,
+ iPartId: c_int,
+ iStateId: c_int,
+ ) -> BOOL;
+ pub fn GetThemeColor(
+ hTheme: HTHEME,
+ iPartId: c_int,
+ iStateId: c_int,
+ iPropId: c_int,
+ pColor: *mut COLORREF,
+ ) -> HRESULT;
+ pub fn GetThemeMetric(
+ hTheme: HTHEME,
+ hdc: HDC,
+ iPartId: c_int,
+ iStateId: c_int,
+ iPropId: c_int,
+ piVal: *mut c_int,
+ ) -> HRESULT;
+ pub fn GetThemeString(
+ hTheme: HTHEME,
+ iPartId: c_int,
+ iStateId: c_int,
+ iPropId: c_int,
+ pszBuff: LPWSTR,
+ cchMaxBuffChars: c_int,
+ ) -> HRESULT;
+ pub fn GetThemeBool(
+ hTheme: HTHEME,
+ iPartId: c_int,
+ iStateId: c_int,
+ iPropId: c_int,
+ pfVal: *mut BOOL,
+ ) -> HRESULT;
+ pub fn GetThemeInt(
+ hTheme: HTHEME,
+ iPartId: c_int,
+ iStateId: c_int,
+ iPropId: c_int,
+ piVal: *mut c_int,
+ ) -> HRESULT;
+ pub fn GetThemeEnumValue(
+ hTheme: HTHEME,
+ iPartId: c_int,
+ iStateId: c_int,
+ iPropId: c_int,
+ piVal: *mut c_int,
+ ) -> HRESULT;
+ pub fn GetThemePosition(
+ hTheme: HTHEME,
+ iPartId: c_int,
+ iStateId: c_int,
+ iPropId: c_int,
+ pPoint: *mut POINT,
+ ) -> HRESULT;
+ pub fn GetThemeFont(
+ hTheme: HTHEME,
+ hdc: HDC,
+ iPartId: c_int,
+ iStateId: c_int,
+ iPropId: c_int,
+ pFont: *mut LOGFONTW,
+ ) -> HRESULT;
+ pub fn GetThemeRect(
+ hTheme: HTHEME,
+ iPartId: c_int,
+ iStateId: c_int,
+ iPropId: c_int,
+ pRect: LPRECT,
+ ) -> HRESULT;
+}
+STRUCT!{struct MARGINS {
+ cxLeftWidth: c_int,
+ cxRightWidth: c_int,
+ cyTopHeight: c_int,
+ cyBottomHeight: c_int,
+}}
+pub type PMARGINS = *mut MARGINS;
+extern "system" {
+ pub fn GetThemeMargins(
+ hTheme: HTHEME,
+ hdc: HDC,
+ iPartId: c_int,
+ iStateId: c_int,
+ iPropId: c_int,
+ prc: LPCRECT,
+ pMargins: *mut MARGINS,
+ ) -> HRESULT;
+}
+pub const MAX_INTLIST_COUNT: usize = 402;
+STRUCT!{struct INTLIST {
+ iValueCount: c_int,
+ iValues: [c_int; MAX_INTLIST_COUNT],
+}}
+pub type PINTLIST = *mut INTLIST;
+extern "system" {
+ pub fn GetThemeIntList(
+ hTheme: HTHEME,
+ iPartId: c_int,
+ iStateId: c_int,
+ iPropId: c_int,
+ pIntList: *mut INTLIST,
+ ) -> HRESULT;
+}
+ENUM!{enum PROPERTYORIGIN {
+ PO_STATE = 0,
+ PO_PART = 1,
+ PO_CLASS = 2,
+ PO_GLOBAL = 3,
+ PO_NOTFOUND = 4,
+}}
+extern "system" {
+ pub fn GetThemePropertyOrigin(
+ hTheme: HTHEME,
+ iPartId: c_int,
+ iStateId: c_int,
+ iPropId: c_int,
+ pOrigin: *mut PROPERTYORIGIN,
+ ) -> HRESULT;
+ pub fn SetWindowTheme(
+ hwnd: HWND,
+ pszSubAppName: LPCWSTR,
+ pszSubIdList: LPCWSTR,
+ ) -> HRESULT;
+ pub fn GetThemeFilename(
+ hTheme: HTHEME,
+ iPartId: c_int,
+ iStateId: c_int,
+ iPropId: c_int,
+ pszThemeFileName: LPWSTR,
+ cchMaxBuffChars: c_int,
+ ) -> HRESULT;
+ pub fn GetThemeSysColor(
+ hTheme: HTHEME,
+ iColorId: c_int,
+ ) -> COLORREF;
+ pub fn GetThemeSysColorBrush(
+ hTheme: HTHEME,
+ iColorId: c_int,
+ ) -> HBRUSH;
+ pub fn GetThemeSysBool(
+ hTheme: HTHEME,
+ iBoolId: c_int,
+ ) -> BOOL;
+ pub fn GetThemeSysSize(
+ hTheme: HTHEME,
+ iSizeId: c_int,
+ ) -> c_int;
+ pub fn GetThemeSysFont(
+ hTheme: HTHEME,
+ iFontId: c_int,
+ plf: *mut LOGFONTW,
+ ) -> HRESULT;
+ pub fn GetThemeSysString(
+ hTheme: HTHEME,
+ iStringId: c_int,
+ pszStringBuff: LPWSTR,
+ cchMaxStringChars: c_int,
+ ) -> HRESULT;
+ pub fn GetThemeSysInt(
+ hTheme: HTHEME,
+ iIntId: c_int,
+ piValue: *mut c_int,
+ ) -> HRESULT;
+ pub fn IsThemeActive() -> BOOL;
+ pub fn IsAppThemed() -> BOOL;
+ pub fn GetWindowTheme(
+ hwnd: HWND,
+ ) -> HTHEME;
+}
+pub const ETDT_DISABLE: DWORD = 0x00000001;
+pub const ETDT_ENABLE: DWORD = 0x00000002;
+pub const ETDT_USETABTEXTURE: DWORD = 0x00000004;
+pub const ETDT_ENABLETAB: DWORD = ETDT_ENABLE | ETDT_USETABTEXTURE;
+pub const ETDT_USEAEROWIZARDTABTEXTURE: DWORD = 0x00000008;
+pub const ETDT_ENABLEAEROWIZARDTAB: DWORD = ETDT_ENABLE | ETDT_USEAEROWIZARDTABTEXTURE;
+pub const ETDT_VALIDBITS: DWORD = ETDT_DISABLE | ETDT_ENABLE | ETDT_USETABTEXTURE
+ | ETDT_USEAEROWIZARDTABTEXTURE;
+extern "system" {
+ pub fn EnableThemeDialogTexture(
+ hwnd: HWND,
+ dwFlags: DWORD,
+ ) -> HRESULT;
+ pub fn IsThemeDialogTextureEnabled(
+ hwnd: HWND,
+ ) -> BOOL;
+}
+pub const STAP_ALLOW_NONCLIENT: DWORD = 1 << 0;
+pub const STAP_ALLOW_CONTROLS: DWORD = 1 << 1;
+pub const STAP_ALLOW_WEBCONTENT: DWORD = 1 << 2;
+pub const STAP_VALIDBITS: DWORD = STAP_ALLOW_NONCLIENT | STAP_ALLOW_CONTROLS
+ | STAP_ALLOW_WEBCONTENT;
+extern "system" {
+ pub fn GetThemeAppProperties() -> DWORD;
+ pub fn SetThemeAppProperties(
+ dwFlags: DWORD,
+ );
+ pub fn GetCurrentThemeName(
+ pszThemeFileName: LPWSTR,
+ cchMaxNameChars: c_int,
+ pszColorBuff: LPWSTR,
+ cchMaxColorChars: c_int,
+ pszSizeBuff: LPWSTR,
+ cchMaxSizeChars: c_int,
+ ) -> HRESULT;
+}
+pub const SZ_THDOCPROP_DISPLAYNAME: &'static str = "DisplayName";
+pub const SZ_THDOCPROP_CANONICALNAME: &'static str = "ThemeName";
+pub const SZ_THDOCPROP_TOOLTIP: &'static str = "ToolTip";
+pub const SZ_THDOCPROP_AUTHOR: &'static str = "author";
+extern "system" {
+ pub fn GetThemeDocumentationProperty(
+ pszThemeName: LPCWSTR,
+ pszPropertyName: LPCWSTR,
+ pszValueBuff: LPWSTR,
+ cchMaxValChars: c_int,
+ ) -> HRESULT;
+ pub fn DrawThemeParentBackground(
+ hwnd: HWND,
+ hdc: HDC,
+ prc: *const RECT,
+ ) -> HRESULT;
+ pub fn EnableTheming(
+ fEnable: BOOL,
+ ) -> HRESULT;
+}
+pub const GBF_DIRECT: ULONG = 0x00000001;
+pub const GBF_COPY: ULONG = 0x00000002;
+pub const GBF_VALIDBITS: ULONG = GBF_DIRECT | GBF_COPY;
+pub const DTPB_WINDOWDC: DWORD = 0x00000001;
+pub const DTPB_USECTLCOLORSTATIC: DWORD = 0x00000002;
+pub const DTPB_USEERASEBKGND: DWORD = 0x00000004;
+extern "system" {
+ pub fn DrawThemeParentBackgroundEx(
+ hwnd: HWND,
+ hdc: HDC,
+ dwFlags: DWORD,
+ prc: *const RECT,
+ ) -> HRESULT;
+}
+ENUM!{enum WINDOWTHEMEATTRIBUTETYPE {
+ WTA_NONCLIENT = 1,
+}}
+STRUCT!{struct WTA_OPTIONS {
+ dwFlags: DWORD,
+ dwMask: DWORD,
+}}
+pub type PWTA_OPTIONS = *mut WTA_OPTIONS;
+pub const WTNCA_NODRAWCAPTION: DWORD = 0x00000001;
+pub const WTNCA_NODRAWICON: DWORD = 0x00000002;
+pub const WTNCA_NOSYSMENU: DWORD = 0x00000004;
+pub const WTNCA_NOMIRRORHELP: DWORD = 0x00000008;
+pub const WTNCA_VALIDBITS: DWORD = WTNCA_NODRAWCAPTION | WTNCA_NODRAWICON | WTNCA_NOSYSMENU
+ | WTNCA_NOMIRRORHELP;
+extern "system" {
+ pub fn SetWindowThemeAttribute(
+ hwnd: HWND,
+ eAttribute: WINDOWTHEMEATTRIBUTETYPE,
+ pvAttribute: PVOID,
+ cbAttribute: DWORD,
+ ) -> HRESULT;
+}
+#[inline]
+pub unsafe fn SetWindowThemeNonClientAttributes(
+ hwnd: HWND,
+ dwMask: DWORD,
+ dwAttributes: DWORD,
+) -> HRESULT {
+ use core::mem::{size_of, zeroed};
+ let mut wta: WTA_OPTIONS = zeroed();
+ wta.dwFlags = dwAttributes;
+ wta.dwMask = dwMask;
+ SetWindowThemeAttribute(
+ hwnd,
+ WTA_NONCLIENT,
+ &mut wta as *mut WTA_OPTIONS as *mut c_void,
+ size_of::<WTA_OPTIONS>() as u32,
+ )
+}
+FN!{stdcall DTT_CALLBACK_PROC(
+ hdc: HDC,
+ pszText: LPWSTR,
+ cchText: c_int,
+ prc: LPRECT,
+ dwFlags: UINT,
+ lParam: LPARAM,
+) -> c_int}
+pub const DTT_TEXTCOLOR: DWORD = 1 << 0;
+pub const DTT_BORDERCOLOR: DWORD = 1 << 1;
+pub const DTT_SHADOWCOLOR: DWORD = 1 << 2;
+pub const DTT_SHADOWTYPE: DWORD = 1 << 3;
+pub const DTT_SHADOWOFFSET: DWORD = 1 << 4;
+pub const DTT_BORDERSIZE: DWORD = 1 << 5;
+pub const DTT_FONTPROP: DWORD = 1 << 6;
+pub const DTT_COLORPROP: DWORD = 1 << 7;
+pub const DTT_STATEID: DWORD = 1 << 8;
+pub const DTT_CALCRECT: DWORD = 1 << 9;
+pub const DTT_APPLYOVERLAY: DWORD = 1 << 10;
+pub const DTT_GLOWSIZE: DWORD = 1 << 11;
+pub const DTT_CALLBACK: DWORD = 1 << 12;
+pub const DTT_COMPOSITED: DWORD = 1 << 13;
+pub const DTT_VALIDBITS: DWORD = DTT_TEXTCOLOR | DTT_BORDERCOLOR | DTT_SHADOWCOLOR
+ | DTT_SHADOWTYPE | DTT_SHADOWOFFSET | DTT_BORDERSIZE | DTT_FONTPROP | DTT_COLORPROP
+ | DTT_STATEID | DTT_CALCRECT | DTT_APPLYOVERLAY | DTT_GLOWSIZE | DTT_COMPOSITED;
+STRUCT!{struct DTTOPTS {
+ dwSize: DWORD,
+ dwFlags: DWORD,
+ crText: COLORREF,
+ crBorder: COLORREF,
+ crShadow: COLORREF,
+ iTextShadowType: c_int,
+ ptShadowOffset: POINT,
+ iBorderSize: c_int,
+ iFontPropId: c_int,
+ iColorPropId: c_int,
+ iStateId: c_int,
+ fApplyOverlay: BOOL,
+ iGlowSize: c_int,
+ pfnDrawTextCallback: DTT_CALLBACK_PROC,
+ lParam: LPARAM,
+}}
+pub type PDTTOPTS = *mut DTTOPTS;
+extern "system" {
+ pub fn DrawThemeTextEx(
+ hTheme: HTHEME,
+ hdc: HDC,
+ iPartId: c_int,
+ iStateId: c_int,
+ pszText: LPCWSTR,
+ cchText: c_int,
+ dwTextFlags: DWORD,
+ pRect: LPRECT,
+ pOptions: *const DTTOPTS,
+ ) -> HRESULT;
+ pub fn GetThemeBitmap(
+ hTheme: HTHEME,
+ iPartId: c_int,
+ iStateId: c_int,
+ iPropId: c_int,
+ dwFlags: ULONG,
+ phBitmap: *mut HBITMAP,
+ ) -> HRESULT;
+ pub fn GetThemeStream(
+ hTheme: HTHEME,
+ iPartId: c_int,
+ iStateId: c_int,
+ iPropId: c_int,
+ ppvStream: *mut *mut VOID,
+ pcbStream: *mut DWORD,
+ hInst: HINSTANCE,
+ ) -> HRESULT;
+ pub fn BufferedPaintInit() -> HRESULT;
+ pub fn BufferedPaintUnInit() -> HRESULT;
+}
+pub type HPAINTBUFFER = HANDLE;
+ENUM!{enum BP_BUFFERFORMAT {
+ BPBF_COMPATIBLEBITMAP = 0,
+ BPBF_DIB = 1,
+ BPBF_TOPDOWNDIB = 2,
+ BPBF_TOPDOWNMONODIB = 3,
+}}
+pub const BPBF_COMPOSITED: BP_BUFFERFORMAT = BPBF_TOPDOWNDIB;
+ENUM!{enum BP_ANIMATIONSTYLE {
+ BPAS_NONE = 0,
+ BPAS_LINEAR = 1,
+ BPAS_CUBIC = 2,
+ BPAS_SINE = 3,
+}}
+STRUCT!{struct BP_ANIMATIONPARAMS {
+ cbSize: DWORD,
+ dwFlags: DWORD,
+ style: BP_ANIMATIONSTYLE,
+ dwDuration: DWORD,
+}}
+pub type PBP_ANIMATIONPARAMS = *mut BP_ANIMATIONPARAMS;
+pub const BPPF_ERASE: DWORD = 0x0001;
+pub const BPPF_NOCLIP: DWORD = 0x0002;
+pub const BPPF_NONCLIENT: DWORD = 0x0004;
+STRUCT!{struct BP_PAINTPARAMS {
+ cbSize: DWORD,
+ dwFlags: DWORD,
+ prcExclude: *const RECT,
+ pBlendFunction: *const BLENDFUNCTION,
+}}
+pub type PBP_PAINTPARAMS = *mut BP_PAINTPARAMS;
+extern "system" {
+ pub fn BeginBufferedPaint(
+ hdcTarget: HDC,
+ prcTarget: *const RECT,
+ dwFormat: BP_BUFFERFORMAT,
+ pPaintParams: *mut BP_PAINTPARAMS,
+ phdc: *mut HDC,
+ ) -> HPAINTBUFFER;
+ pub fn EndBufferedPaint(
+ hBufferedPaint: HPAINTBUFFER,
+ fUpdateTarget: BOOL,
+ ) -> HRESULT;
+ pub fn GetBufferedPaintTargetRect(
+ hBufferedPaint: HPAINTBUFFER,
+ prc: *mut RECT,
+ ) -> HRESULT;
+ pub fn GetBufferedPaintTargetDC(
+ hBufferedPaint: HPAINTBUFFER,
+ ) -> HDC;
+ pub fn GetBufferedPaintDC(
+ hBufferedPaint: HPAINTBUFFER,
+ ) -> HDC;
+ pub fn GetBufferedPaintBits(
+ hBufferedPaint: HPAINTBUFFER,
+ ppbBuffer: *mut *mut RGBQUAD,
+ pcxRow: *mut c_int,
+ ) -> HRESULT;
+ pub fn BufferedPaintClear(
+ hBufferedPaint: HPAINTBUFFER,
+ prc: *const RECT,
+ ) -> HRESULT;
+ pub fn BufferedPaintSetAlpha(
+ hBufferedPaint: HPAINTBUFFER,
+ prc: *const RECT,
+ alpha: BYTE,
+ ) -> HRESULT;
+ pub fn BufferedPaintStopAllAnimations(
+ hwnd: HWND,
+ ) -> HRESULT;
+}
+pub type HANIMATIONBUFFER = HANDLE;
+extern "system" {
+ pub fn BeginBufferedAnimation(
+ hwnd: HWND,
+ hdcTarget: HDC,
+ prcTarget: *const RECT,
+ dwFormat: BP_BUFFERFORMAT,
+ pPaintParams: *mut BP_PAINTPARAMS,
+ pAnimationParams: *mut BP_ANIMATIONPARAMS,
+ phdcFrom: *mut HDC,
+ phdcTo: *mut HDC,
+ ) -> HANIMATIONBUFFER;
+ pub fn EndBufferedAnimation(
+ hbpAnimation: HANIMATIONBUFFER,
+ fUpdateTarget: BOOL,
+ ) -> HRESULT;
+ pub fn BufferedPaintRenderAnimation(
+ hwnd: HWND,
+ hdcTarget: HDC,
+ ) -> BOOL;
+ pub fn IsCompositionActive() -> BOOL;
+ pub fn GetThemeTransitionDuration(
+ hTheme: HTHEME,
+ iPartId: c_int,
+ iStateIdFrom: c_int,
+ iStateIdTo: c_int,
+ iPropId: c_int,
+ pdwDuration: *mut DWORD,
+ ) -> HRESULT;
+}