kubernetes/vendor/github.com/lxn/win/gdiplus.go
David Porter a854ddb358 Implement metrics for Windows Nodes
This implements stats for windows nodes in a new package, winstats.
WinStats exports methods to get cadvisor like datastructures, however
with windows specific metrics. WinStats only gets node level metrics and
information, container stats will go via the CRI. This enables the
use of the summary api to get metrics for windows nodes.
2017-09-14 06:32:51 +00:00

224 lines
5.1 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"
)
type GpStatus int32
const (
Ok GpStatus = 0
GenericError GpStatus = 1
InvalidParameter GpStatus = 2
OutOfMemory GpStatus = 3
ObjectBusy GpStatus = 4
InsufficientBuffer GpStatus = 5
NotImplemented GpStatus = 6
Win32Error GpStatus = 7
WrongState GpStatus = 8
Aborted GpStatus = 9
FileNotFound GpStatus = 10
ValueOverflow GpStatus = 11
AccessDenied GpStatus = 12
UnknownImageFormat GpStatus = 13
FontFamilyNotFound GpStatus = 14
FontStyleNotFound GpStatus = 15
NotTrueTypeFont GpStatus = 16
UnsupportedGdiplusVersion GpStatus = 17
GdiplusNotInitialized GpStatus = 18
PropertyNotFound GpStatus = 19
PropertyNotSupported GpStatus = 20
ProfileNotFound GpStatus = 21
)
func (s GpStatus) String() string {
switch s {
case Ok:
return "Ok"
case GenericError:
return "GenericError"
case InvalidParameter:
return "InvalidParameter"
case OutOfMemory:
return "OutOfMemory"
case ObjectBusy:
return "ObjectBusy"
case InsufficientBuffer:
return "InsufficientBuffer"
case NotImplemented:
return "NotImplemented"
case Win32Error:
return "Win32Error"
case WrongState:
return "WrongState"
case Aborted:
return "Aborted"
case FileNotFound:
return "FileNotFound"
case ValueOverflow:
return "ValueOverflow"
case AccessDenied:
return "AccessDenied"
case UnknownImageFormat:
return "UnknownImageFormat"
case FontFamilyNotFound:
return "FontFamilyNotFound"
case FontStyleNotFound:
return "FontStyleNotFound"
case NotTrueTypeFont:
return "NotTrueTypeFont"
case UnsupportedGdiplusVersion:
return "UnsupportedGdiplusVersion"
case GdiplusNotInitialized:
return "GdiplusNotInitialized"
case PropertyNotFound:
return "PropertyNotFound"
case PropertyNotSupported:
return "PropertyNotSupported"
case ProfileNotFound:
return "ProfileNotFound"
}
return "Unknown Status Value"
}
type GdiplusStartupInput struct {
GdiplusVersion uint32
DebugEventCallback uintptr
SuppressBackgroundThread BOOL
SuppressExternalCodecs BOOL
}
type GdiplusStartupOutput struct {
NotificationHook uintptr
NotificationUnhook uintptr
}
type GpImage struct{}
type GpBitmap GpImage
type ARGB uint32
var (
// Library
libgdiplus uintptr
// Functions
gdipCreateBitmapFromFile uintptr
gdipCreateBitmapFromHBITMAP uintptr
gdipCreateHBITMAPFromBitmap uintptr
gdipDisposeImage uintptr
gdiplusShutdown uintptr
gdiplusStartup uintptr
)
var (
token uintptr
)
func init() {
// Library
libgdiplus = MustLoadLibrary("gdiplus.dll")
// Functions
gdipCreateBitmapFromFile = MustGetProcAddress(libgdiplus, "GdipCreateBitmapFromFile")
gdipCreateBitmapFromHBITMAP = MustGetProcAddress(libgdiplus, "GdipCreateBitmapFromHBITMAP")
gdipCreateHBITMAPFromBitmap = MustGetProcAddress(libgdiplus, "GdipCreateHBITMAPFromBitmap")
gdipDisposeImage = MustGetProcAddress(libgdiplus, "GdipDisposeImage")
gdiplusShutdown = MustGetProcAddress(libgdiplus, "GdiplusShutdown")
gdiplusStartup = MustGetProcAddress(libgdiplus, "GdiplusStartup")
}
func GdipCreateBitmapFromFile(filename *uint16, bitmap **GpBitmap) GpStatus {
ret, _, _ := syscall.Syscall(gdipCreateBitmapFromFile, 2,
uintptr(unsafe.Pointer(filename)),
uintptr(unsafe.Pointer(bitmap)),
0)
return GpStatus(ret)
}
func GdipCreateBitmapFromHBITMAP(hbm HBITMAP, hpal HPALETTE, bitmap **GpBitmap) GpStatus {
ret, _, _ := syscall.Syscall(gdipCreateBitmapFromHBITMAP, 3,
uintptr(hbm),
uintptr(hpal),
uintptr(unsafe.Pointer(bitmap)))
return GpStatus(ret)
}
func GdipCreateHBITMAPFromBitmap(bitmap *GpBitmap, hbmReturn *HBITMAP, background ARGB) GpStatus {
ret, _, _ := syscall.Syscall(gdipCreateHBITMAPFromBitmap, 3,
uintptr(unsafe.Pointer(bitmap)),
uintptr(unsafe.Pointer(hbmReturn)),
uintptr(background))
return GpStatus(ret)
}
func GdipDisposeImage(image *GpImage) GpStatus {
ret, _, _ := syscall.Syscall(gdipDisposeImage, 1,
uintptr(unsafe.Pointer(image)),
0,
0)
return GpStatus(ret)
}
func GdiplusShutdown() {
syscall.Syscall(gdiplusShutdown, 1,
token,
0,
0)
}
func GdiplusStartup(input *GdiplusStartupInput, output *GdiplusStartupOutput) GpStatus {
ret, _, _ := syscall.Syscall(gdiplusStartup, 3,
uintptr(unsafe.Pointer(&token)),
uintptr(unsafe.Pointer(input)),
uintptr(unsafe.Pointer(output)))
return GpStatus(ret)
}
/*GdipSaveImageToFile(image *GpImage, filename *uint16, clsidEncoder *CLSID, encoderParams *EncoderParameters) GpStatus {
ret, _, _ := syscall.Syscall6(gdipSaveImageToFile, 4,
uintptr(unsafe.Pointer(image)),
uintptr(unsafe.Pointer(filename)),
uintptr(unsafe.Pointer(clsidEncoder)),
uintptr(unsafe.Pointer(encoderParams)),
0,
0)
return GpStatus(ret)
}*/