Added GDI+ to the package's Windows version: DLL loaded, initialized, and shut down. It will be used for drawing to Areas because using GDI itself is more complex than it needs to be.
This commit is contained in:
parent
5c8587ab00
commit
cfcac03df7
|
@ -12,6 +12,7 @@ var (
|
|||
kernel32 = syscall.NewLazyDLL("kernel32.dll")
|
||||
gdi32 = syscall.NewLazyDLL("gdi32.dll")
|
||||
comctl32 = syscall.NewLazyDLL("comctl32.dll")
|
||||
gdiplus = syscall.NewLazyDLL("gdiplus.dll")
|
||||
)
|
||||
|
||||
type _HANDLE uintptr
|
||||
|
|
|
@ -11,6 +11,7 @@ import (
|
|||
var (
|
||||
hInstance _HANDLE
|
||||
nCmdShow int
|
||||
gdiplusToken uintptr
|
||||
)
|
||||
|
||||
// TODO is this trick documented in MSDN?
|
||||
|
@ -56,6 +57,26 @@ func getWinMainnCmdShow() {
|
|||
}
|
||||
}
|
||||
|
||||
func initGDIPlus() (err error) {
|
||||
var gdiplusInit struct {
|
||||
GdiplusVersion uint32
|
||||
DebugEventCallback uintptr
|
||||
SuppressBackgroundThread int32 // originally BOOL
|
||||
SuppressExternalCodecs int32 // originally BOOL
|
||||
}
|
||||
|
||||
gdiplusInit.GdiplusVersion = 1 // required
|
||||
// TODO suppress external codecs?
|
||||
r1, _, err := gdiplus.NewProc("GdiplusStartup").Call(
|
||||
uintptr(unsafe.Pointer(&gdiplusToken)),
|
||||
uintptr(unsafe.Pointer(&gdiplusInit)),
|
||||
uintptr(0)) // we use the GDI+ thread so no need for output info
|
||||
if r1 != 0 { // failure
|
||||
return fmt.Errorf("error initializing GDI+ (GDI+ error code %d; windows last error %v)", r1, err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func doWindowsInit() (err error) {
|
||||
err = getWinMainhInstance()
|
||||
if err != nil {
|
||||
|
@ -74,6 +95,14 @@ func doWindowsInit() (err error) {
|
|||
if err != nil {
|
||||
return fmt.Errorf("error initializing Common Controls (comctl32.dll): %v", err)
|
||||
}
|
||||
err = initGDIPlus()
|
||||
if err != nil {
|
||||
return fmt.Errorf("error initializing GDI+ (gdiplus.dll): %v", err)
|
||||
}
|
||||
// TODO others
|
||||
return nil // all ready to go
|
||||
}
|
||||
|
||||
func doWindowsQuitStuff() {
|
||||
gdiplus.NewProc("GdiplusShutdown").Call(gdiplusToken) // returns void according to MSDN
|
||||
}
|
||||
|
|
|
@ -84,6 +84,7 @@ func ui(main func()) error {
|
|||
}
|
||||
}
|
||||
|
||||
doWindowsQuitStuff()
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue