diff options
| author | Pietro Gagliardi <[email protected]> | 2014-03-24 17:01:33 -0400 |
|---|---|---|
| committer | Pietro Gagliardi <[email protected]> | 2014-03-24 17:01:33 -0400 |
| commit | cfcac03df76e9ccfe81f3b8f70126ddcf2463637 (patch) | |
| tree | 81a50ea487cfdc3c4c2fabf4066027fc62f7bb67 /init_windows.go | |
| parent | 5c8587ab00760a8391ce1df44e8986a11aa818a0 (diff) | |
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.
Diffstat (limited to 'init_windows.go')
| -rw-r--r-- | init_windows.go | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/init_windows.go b/init_windows.go index 9ccd5df..bfc7649 100644 --- a/init_windows.go +++ b/init_windows.go @@ -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 +} |
