erm/vendor/github.com/lxn/win/uxtheme.go
2021-07-30 23:29:20 +01:00

622 lines
17 KiB
Go

// Copyright 2010 The win Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// +build windows
package win
import (
"syscall"
"unsafe"
"golang.org/x/sys/windows"
)
// TMT property ids
const (
TMT_RESERVEDLOW = 0
TMT_RESERVEDHIGH = 7999
TMT_DIBDATA = 2
TMT_GLYPHDIBDATA = 8
TMT_ENUM = 200
TMT_STRING = 201
TMT_INT = 202
TMT_BOOL = 203
TMT_COLOR = 204
TMT_MARGINS = 205
TMT_FILENAME = 206
TMT_SIZE = 207
TMT_POSITION = 208
TMT_RECT = 209
TMT_FONT = 210
TMT_INTLIST = 211
TMT_HBITMAP = 212
TMT_DISKSTREAM = 213
TMT_STREAM = 214
TMT_BITMAPREF = 215
TMT_FLOAT = 216
TMT_FLOATLIST = 217
TMT_COLORSCHEMES = 401
TMT_SIZES = 402
TMT_CHARSET = 403
TMT_NAME = 600
TMT_DISPLAYNAME = 601
TMT_TOOLTIP = 602
TMT_COMPANY = 603
TMT_AUTHOR = 604
TMT_COPYRIGHT = 605
TMT_URL = 606
TMT_VERSION = 607
TMT_DESCRIPTION = 608
TMT_FIRST_RCSTRING_NAME = TMT_DISPLAYNAME
TMT_LAST_RCSTRING_NAME = TMT_DESCRIPTION
TMT_CAPTIONFONT = 801
TMT_SMALLCAPTIONFONT = 802
TMT_MENUFONT = 803
TMT_STATUSFONT = 804
TMT_MSGBOXFONT = 805
TMT_ICONTITLEFONT = 806
TMT_HEADING1FONT = 807
TMT_HEADING2FONT = 808
TMT_BODYFONT = 809
TMT_FIRSTFONT = TMT_CAPTIONFONT
TMT_LASTFONT = TMT_BODYFONT
TMT_FLATMENUS = 1001
TMT_FIRSTBOOL = TMT_FLATMENUS
TMT_LASTBOOL = TMT_FLATMENUS
TMT_SIZINGBORDERWIDTH = 1201
TMT_SCROLLBARWIDTH = 1202
TMT_SCROLLBARHEIGHT = 1203
TMT_CAPTIONBARWIDTH = 1204
TMT_CAPTIONBARHEIGHT = 1205
TMT_SMCAPTIONBARWIDTH = 1206
TMT_SMCAPTIONBARHEIGHT = 1207
TMT_MENUBARWIDTH = 1208
TMT_MENUBARHEIGHT = 1209
TMT_PADDEDBORDERWIDTH = 1210
TMT_FIRSTSIZE = TMT_SIZINGBORDERWIDTH
TMT_LASTSIZE = TMT_PADDEDBORDERWIDTH
TMT_MINCOLORDEPTH = 1301
TMT_FIRSTINT = TMT_MINCOLORDEPTH
TMT_LASTINT = TMT_MINCOLORDEPTH
TMT_CSSNAME = 1401
TMT_XMLNAME = 1402
TMT_LASTUPDATED = 1403
TMT_ALIAS = 1404
TMT_FIRSTSTRING = TMT_CSSNAME
TMT_LASTSTRING = TMT_ALIAS
TMT_SCROLLBAR = 1601
TMT_BACKGROUND = 1602
TMT_ACTIVECAPTION = 1603
TMT_INACTIVECAPTION = 1604
TMT_MENU = 1605
TMT_WINDOW = 1606
TMT_WINDOWFRAME = 1607
TMT_MENUTEXT = 1608
TMT_WINDOWTEXT = 1609
TMT_CAPTIONTEXT = 1610
TMT_ACTIVEBORDER = 1611
TMT_INACTIVEBORDER = 1612
TMT_APPWORKSPACE = 1613
TMT_HIGHLIGHT = 1614
TMT_HIGHLIGHTTEXT = 1615
TMT_BTNFACE = 1616
TMT_BTNSHADOW = 1617
TMT_GRAYTEXT = 1618
TMT_BTNTEXT = 1619
TMT_INACTIVECAPTIONTEXT = 1620
TMT_BTNHIGHLIGHT = 1621
TMT_DKSHADOW3D = 1622
TMT_LIGHT3D = 1623
TMT_INFOTEXT = 1624
TMT_INFOBK = 1625
TMT_BUTTONALTERNATEFACE = 1626
TMT_HOTTRACKING = 1627
TMT_GRADIENTACTIVECAPTION = 1628
TMT_GRADIENTINACTIVECAPTION = 1629
TMT_MENUHILIGHT = 1630
TMT_MENUBAR = 1631
TMT_FIRSTCOLOR = TMT_SCROLLBAR
TMT_LASTCOLOR = TMT_MENUBAR
TMT_FROMHUE1 = 1801
TMT_FROMHUE2 = 1802
TMT_FROMHUE3 = 1803
TMT_FROMHUE4 = 1804
TMT_FROMHUE5 = 1805
TMT_TOHUE1 = 1806
TMT_TOHUE2 = 1807
TMT_TOHUE3 = 1808
TMT_TOHUE4 = 1809
TMT_TOHUE5 = 1810
TMT_FROMCOLOR1 = 2001
TMT_FROMCOLOR2 = 2002
TMT_FROMCOLOR3 = 2003
TMT_FROMCOLOR4 = 2004
TMT_FROMCOLOR5 = 2005
TMT_TOCOLOR1 = 2006
TMT_TOCOLOR2 = 2007
TMT_TOCOLOR3 = 2008
TMT_TOCOLOR4 = 2009
TMT_TOCOLOR5 = 2010
TMT_TRANSPARENT = 2201
TMT_AUTOSIZE = 2202
TMT_BORDERONLY = 2203
TMT_COMPOSITED = 2204
TMT_BGFILL = 2205
TMT_GLYPHTRANSPARENT = 2206
TMT_GLYPHONLY = 2207
TMT_ALWAYSSHOWSIZINGBAR = 2208
TMT_MIRRORIMAGE = 2209
TMT_UNIFORMSIZING = 2210
TMT_INTEGRALSIZING = 2211
TMT_SOURCEGROW = 2212
TMT_SOURCESHRINK = 2213
TMT_DRAWBORDERS = 2214
TMT_NOETCHEDEFFECT = 2215
TMT_TEXTAPPLYOVERLAY = 2216
TMT_TEXTGLOW = 2217
TMT_TEXTITALIC = 2218
TMT_COMPOSITEDOPAQUE = 2219
TMT_LOCALIZEDMIRRORIMAGE = 2220
TMT_IMAGECOUNT = 2401
TMT_ALPHALEVEL = 2402
TMT_BORDERSIZE = 2403
TMT_ROUNDCORNERWIDTH = 2404
TMT_ROUNDCORNERHEIGHT = 2405
TMT_GRADIENTRATIO1 = 2406
TMT_GRADIENTRATIO2 = 2407
TMT_GRADIENTRATIO3 = 2408
TMT_GRADIENTRATIO4 = 2409
TMT_GRADIENTRATIO5 = 2410
TMT_PROGRESSCHUNKSIZE = 2411
TMT_PROGRESSSPACESIZE = 2412
TMT_SATURATION = 2413
TMT_TEXTBORDERSIZE = 2414
TMT_ALPHATHRESHOLD = 2415
TMT_WIDTH = 2416
TMT_HEIGHT = 2417
TMT_GLYPHINDEX = 2418
TMT_TRUESIZESTRETCHMARK = 2419
TMT_MINDPI1 = 2420
TMT_MINDPI2 = 2421
TMT_MINDPI3 = 2422
TMT_MINDPI4 = 2423
TMT_MINDPI5 = 2424
TMT_TEXTGLOWSIZE = 2425
TMT_FRAMESPERSECOND = 2426
TMT_PIXELSPERFRAME = 2427
TMT_ANIMATIONDELAY = 2428
TMT_GLOWINTENSITY = 2429
TMT_OPACITY = 2430
TMT_COLORIZATIONCOLOR = 2431
TMT_COLORIZATIONOPACITY = 2432
TMT_MINDPI6 = 2433
TMT_MINDPI7 = 2434
TMT_GLYPHFONT = 2601
TMT_IMAGEFILE = 3001
TMT_IMAGEFILE1 = 3002
TMT_IMAGEFILE2 = 3003
TMT_IMAGEFILE3 = 3004
TMT_IMAGEFILE4 = 3005
TMT_IMAGEFILE5 = 3006
TMT_GLYPHIMAGEFILE = 3008
TMT_IMAGEFILE6 = 3009
TMT_IMAGEFILE7 = 3010
TMT_TEXT = 3201
TMT_CLASSICVALUE = 3202
TMT_OFFSET = 3401
TMT_TEXTSHADOWOFFSET = 3402
TMT_MINSIZE = 3403
TMT_MINSIZE1 = 3404
TMT_MINSIZE2 = 3405
TMT_MINSIZE3 = 3406
TMT_MINSIZE4 = 3407
TMT_MINSIZE5 = 3408
TMT_NORMALSIZE = 3409
TMT_MINSIZE6 = 3410
TMT_MINSIZE7 = 3411
TMT_SIZINGMARGINS = 3601
TMT_CONTENTMARGINS = 3602
TMT_CAPTIONMARGINS = 3603
TMT_BORDERCOLOR = 3801
TMT_FILLCOLOR = 3802
TMT_TEXTCOLOR = 3803
TMT_EDGELIGHTCOLOR = 3804
TMT_EDGEHIGHLIGHTCOLOR = 3805
TMT_EDGESHADOWCOLOR = 3806
TMT_EDGEDKSHADOWCOLOR = 3807
TMT_EDGEFILLCOLOR = 3808
TMT_TRANSPARENTCOLOR = 3809
TMT_GRADIENTCOLOR1 = 3810
TMT_GRADIENTCOLOR2 = 3811
TMT_GRADIENTCOLOR3 = 3812
TMT_GRADIENTCOLOR4 = 3813
TMT_GRADIENTCOLOR5 = 3814
TMT_SHADOWCOLOR = 3815
TMT_GLOWCOLOR = 3816
TMT_TEXTBORDERCOLOR = 3817
TMT_TEXTSHADOWCOLOR = 3818
TMT_GLYPHTEXTCOLOR = 3819
TMT_GLYPHTRANSPARENTCOLOR = 3820
TMT_FILLCOLORHINT = 3821
TMT_BORDERCOLORHINT = 3822
TMT_ACCENTCOLORHINT = 3823
TMT_TEXTCOLORHINT = 3824
TMT_HEADING1TEXTCOLOR = 3825
TMT_HEADING2TEXTCOLOR = 3826
TMT_BODYTEXTCOLOR = 3827
TMT_BGTYPE = 4001
TMT_BORDERTYPE = 4002
TMT_FILLTYPE = 4003
TMT_SIZINGTYPE = 4004
TMT_HALIGN = 4005
TMT_CONTENTALIGNMENT = 4006
TMT_VALIGN = 4007
TMT_OFFSETTYPE = 4008
TMT_ICONEFFECT = 4009
TMT_TEXTSHADOWTYPE = 4010
TMT_IMAGELAYOUT = 4011
TMT_GLYPHTYPE = 4012
TMT_IMAGESELECTTYPE = 4013
TMT_GLYPHFONTSIZINGTYPE = 4014
TMT_TRUESIZESCALINGTYPE = 4015
TMT_USERPICTURE = 5001
TMT_DEFAULTPANESIZE = 5002
TMT_BLENDCOLOR = 5003
TMT_CUSTOMSPLITRECT = 5004
TMT_ANIMATIONBUTTONRECT = 5005
TMT_ANIMATIONDURATION = 5006
TMT_TRANSITIONDURATIONS = 6000
TMT_SCALEDBACKGROUND = 7001
TMT_ATLASIMAGE = 8000
TMT_ATLASINPUTIMAGE = 8001
TMT_ATLASRECT = 8002
)
// Button parts
const (
BP_PUSHBUTTON = 1
BP_RADIOBUTTON = 2
BP_CHECKBOX = 3
BP_GROUPBOX = 4
BP_USERBUTTON = 5
BP_COMMANDLINK = 6
BP_COMMANDLINKGLYPH = 7
)
// Push-button states
const (
PBS_NORMAL = 1
PBS_HOT = 2
PBS_PRESSED = 3
PBS_DISABLED = 4
PBS_DEFAULTED = 5
PBS_DEFAULTED_ANIMATING = 6
)
// CheckBox states
const (
CBS_UNCHECKEDNORMAL = 1
CBS_UNCHECKEDHOT = 2
CBS_UNCHECKEDPRESSED = 3
CBS_UNCHECKEDDISABLED = 4
CBS_CHECKEDNORMAL = 5
CBS_CHECKEDHOT = 6
CBS_CHECKEDPRESSED = 7
CBS_CHECKEDDISABLED = 8
CBS_MIXEDNORMAL = 9
CBS_MIXEDHOT = 10
CBS_MIXEDPRESSED = 11
CBS_MIXEDDISABLED = 12
CBS_IMPLICITNORMAL = 13
CBS_IMPLICITHOT = 14
CBS_IMPLICITPRESSED = 15
CBS_IMPLICITDISABLED = 16
CBS_EXCLUDEDNORMAL = 17
CBS_EXCLUDEDHOT = 18
CBS_EXCLUDEDPRESSED = 19
CBS_EXCLUDEDDISABLED = 20
)
// ListBox parts
const (
LBCP_ITEM = 5
)
// LBCP_ITEM states
const (
LBPSI_HOT = 1
LBPSI_HOTSELECTED = 2
LBPSI_SELECTED = 3
LBPSI_SELECTEDNOTFOCUS = 4
)
// LISTVIEW parts
const (
LVP_LISTITEM = 1
LVP_LISTGROUP = 2
LVP_LISTDETAIL = 3
LVP_LISTSORTEDDETAIL = 4
LVP_EMPTYTEXT = 5
LVP_GROUPHEADER = 6
LVP_GROUPHEADERLINE = 7
LVP_EXPANDBUTTON = 8
LVP_COLLAPSEBUTTON = 9
LVP_COLUMNDETAIL = 10
)
// LVP_LISTITEM states
const (
LISS_NORMAL = 1
LISS_HOT = 2
LISS_SELECTED = 3
LISS_DISABLED = 4
LISS_SELECTEDNOTFOCUS = 5
LISS_HOTSELECTED = 6
)
// PROGRESS parts
const (
PP_BAR = 1
PP_BARVERT = 2
PP_CHUNK = 3
PP_CHUNKVERT = 4
PP_FILL = 5
PP_FILLVERT = 6
PP_PULSEOVERLAY = 7
PP_MOVEOVERLAY = 8
PP_PULSEOVERLAYVERT = 9
PP_MOVEOVERLAYVERT = 10
PP_TRANSPARENTBAR = 11
PP_TRANSPARENTBARVERT = 12
)
// PP_FILL states
const (
PBFS_NORMAL = 1
PBFS_ERROR = 2
PBFS_PAUSED = 3
PBFS_PARTIAL = 4
)
// PP_FILLVERT states
const (
PBFVS_NORMAL = 1
PBFVS_ERROR = 2
PBFVS_PAUSED = 3
PBFVS_PARTIAL = 4
)
// TAB parts
const (
TABP_TABITEM = 1
)
// TABP_TABITEM states
const (
TIS_NORMAL = 1
TIS_HOT = 2
TIS_SELECTED = 3
TIS_DISABLED = 4
TIS_FOCUSED = 5
)
// TREEVIEW parts
const (
TVP_TREEITEM = 1
TVP_GLYPH = 2
TVP_BRANCH = 3
TVP_HOTGLYPH = 4
)
// TVP_TREEITEM states
const (
TREIS_NORMAL = 1
TREIS_HOT = 2
TREIS_SELECTED = 3
TREIS_DISABLED = 4
TREIS_SELECTEDNOTFOCUS = 5
TREIS_HOTSELECTED = 6
)
// DTTOPTS flags
const (
DTT_TEXTCOLOR = 1 << 0
DTT_BORDERCOLOR = 1 << 1
DTT_SHADOWCOLOR = 1 << 2
DTT_SHADOWTYPE = 1 << 3
DTT_SHADOWOFFSET = 1 << 4
DTT_BORDERSIZE = 1 << 5
DTT_FONTPROP = 1 << 6
DTT_COLORPROP = 1 << 7
DTT_STATEID = 1 << 8
DTT_CALCRECT = 1 << 9
DTT_APPLYOVERLAY = 1 << 10
DTT_GLOWSIZE = 1 << 11
DTT_CALLBACK = 1 << 12
DTT_COMPOSITED = 1 << 13
DTT_VALIDBITS = 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
)
type HTHEME HANDLE
type THEMESIZE int
const (
TS_MIN THEMESIZE = iota
TS_TRUE
TS_DRAW
)
type DTTOPTS struct {
DwSize uint32
DwFlags uint32
CrText COLORREF
CrBorder COLORREF
CrShadow COLORREF
ITextShadowType int32
PtShadowOffset POINT
IBorderSize int32
IFontPropId int32
IColorPropId int32
IStateId int32
FApplyOverlay BOOL
IGlowSize int32
PfnDrawTextCallback uintptr
LParam uintptr
}
var (
// Library
libuxtheme *windows.LazyDLL
// Functions
closeThemeData *windows.LazyProc
drawThemeBackground *windows.LazyProc
drawThemeTextEx *windows.LazyProc
getThemeColor *windows.LazyProc
getThemePartSize *windows.LazyProc
getThemeTextExtent *windows.LazyProc
isAppThemed *windows.LazyProc
openThemeData *windows.LazyProc
setWindowTheme *windows.LazyProc
)
func init() {
// Library
libuxtheme = windows.NewLazySystemDLL("uxtheme.dll")
// Functions
closeThemeData = libuxtheme.NewProc("CloseThemeData")
drawThemeBackground = libuxtheme.NewProc("DrawThemeBackground")
drawThemeTextEx = libuxtheme.NewProc("DrawThemeTextEx")
getThemeColor = libuxtheme.NewProc("GetThemeColor")
getThemePartSize = libuxtheme.NewProc("GetThemePartSize")
getThemeTextExtent = libuxtheme.NewProc("GetThemeTextExtent")
isAppThemed = libuxtheme.NewProc("IsAppThemed")
openThemeData = libuxtheme.NewProc("OpenThemeData")
setWindowTheme = libuxtheme.NewProc("SetWindowTheme")
}
func CloseThemeData(hTheme HTHEME) HRESULT {
ret, _, _ := syscall.Syscall(closeThemeData.Addr(), 1,
uintptr(hTheme),
0,
0)
return HRESULT(ret)
}
func DrawThemeBackground(hTheme HTHEME, hdc HDC, iPartId, iStateId int32, pRect, pClipRect *RECT) HRESULT {
ret, _, _ := syscall.Syscall6(drawThemeBackground.Addr(), 6,
uintptr(hTheme),
uintptr(hdc),
uintptr(iPartId),
uintptr(iStateId),
uintptr(unsafe.Pointer(pRect)),
uintptr(unsafe.Pointer(pClipRect)))
return HRESULT(ret)
}
func DrawThemeTextEx(hTheme HTHEME, hdc HDC, iPartId, iStateId int32, pszText *uint16, iCharCount int32, dwFlags uint32, pRect *RECT, pOptions *DTTOPTS) HRESULT {
if drawThemeTextEx.Find() != nil {
return HRESULT(0)
}
ret, _, _ := syscall.Syscall9(drawThemeTextEx.Addr(), 9,
uintptr(hTheme),
uintptr(hdc),
uintptr(iPartId),
uintptr(iStateId),
uintptr(unsafe.Pointer(pszText)),
uintptr(iCharCount),
uintptr(dwFlags),
uintptr(unsafe.Pointer(pRect)),
uintptr(unsafe.Pointer(pOptions)))
return HRESULT(ret)
}
func GetThemeColor(hTheme HTHEME, iPartId, iStateId, iPropId int32, pColor *COLORREF) HRESULT {
ret, _, _ := syscall.Syscall6(getThemeColor.Addr(), 5,
uintptr(hTheme),
uintptr(iPartId),
uintptr(iStateId),
uintptr(iPropId),
uintptr(unsafe.Pointer(pColor)),
0)
return HRESULT(ret)
}
func GetThemePartSize(hTheme HTHEME, hdc HDC, iPartId, iStateId int32, prc *RECT, eSize THEMESIZE, psz *SIZE) HRESULT {
ret, _, _ := syscall.Syscall9(getThemePartSize.Addr(), 7,
uintptr(hTheme),
uintptr(hdc),
uintptr(iPartId),
uintptr(iStateId),
uintptr(unsafe.Pointer(prc)),
uintptr(eSize),
uintptr(unsafe.Pointer(psz)),
0,
0)
return HRESULT(ret)
}
func GetThemeTextExtent(hTheme HTHEME, hdc HDC, iPartId, iStateId int32, pszText *uint16, iCharCount int32, dwTextFlags uint32, pBoundingRect, pExtentRect *RECT) HRESULT {
ret, _, _ := syscall.Syscall9(getThemeTextExtent.Addr(), 9,
uintptr(hTheme),
uintptr(hdc),
uintptr(iPartId),
uintptr(iStateId),
uintptr(unsafe.Pointer(pszText)),
uintptr(iCharCount),
uintptr(dwTextFlags),
uintptr(unsafe.Pointer(pBoundingRect)),
uintptr(unsafe.Pointer(pExtentRect)))
return HRESULT(ret)
}
func IsAppThemed() bool {
ret, _, _ := syscall.Syscall(isAppThemed.Addr(), 0,
0,
0,
0)
return ret != 0
}
func OpenThemeData(hwnd HWND, pszClassList *uint16) HTHEME {
ret, _, _ := syscall.Syscall(openThemeData.Addr(), 2,
uintptr(hwnd),
uintptr(unsafe.Pointer(pszClassList)),
0)
return HTHEME(ret)
}
func SetWindowTheme(hwnd HWND, pszSubAppName, pszSubIdList *uint16) HRESULT {
ret, _, _ := syscall.Syscall(setWindowTheme.Addr(), 3,
uintptr(hwnd),
uintptr(unsafe.Pointer(pszSubAppName)),
uintptr(unsafe.Pointer(pszSubIdList)))
return HRESULT(ret)
}