46 lines
1005 B
Go
46 lines
1005 B
Go
|
// 16 august 2014
|
||
|
|
||
|
package ui
|
||
|
|
||
|
import (
|
||
|
"image"
|
||
|
"unsafe"
|
||
|
)
|
||
|
|
||
|
// #include "winapi_windows.h"
|
||
|
import "C"
|
||
|
|
||
|
type imagelist struct {
|
||
|
list []C.HBITMAP
|
||
|
width []int
|
||
|
height []int
|
||
|
}
|
||
|
|
||
|
func newImageList() ImageList {
|
||
|
return new(imagelist)
|
||
|
}
|
||
|
|
||
|
func (i *imagelist) Append(img *image.RGBA) {
|
||
|
i.list = append(i.list, C.unscaledBitmap(unsafe.Pointer(img), C.intptr_t(img.Rect.Dx()), C.intptr_t(img.Rect.Dy())))
|
||
|
i.width = append(i.width, img.Rect.Dx())
|
||
|
i.height = append(i.height, img.Rect.Dy())
|
||
|
}
|
||
|
|
||
|
func (i *imagelist) Len() ImageIndex {
|
||
|
return ImageIndex(len(i.list))
|
||
|
}
|
||
|
|
||
|
type imageListApply interface {
|
||
|
apply(C.HWND, C.UINT)
|
||
|
}
|
||
|
|
||
|
func (i *imagelist) apply(hwnd C.HWND, uMsg C.UINT) {
|
||
|
width := C.GetSystemMetrics(C.SM_CXSMICON)
|
||
|
height := C.GetSystemMetrics(C.SM_CYSMICON)
|
||
|
il := C.newImageList(width, height)
|
||
|
for index := range i.list {
|
||
|
C.addImage(il, hwnd, i.list[index], C.int(i.width[index]), C.int(i.height[index]), width, height)
|
||
|
}
|
||
|
C.SendMessageW(hwnd, uMsg, 0, C.LPARAM(uintptr(unsafe.Pointer(il))))
|
||
|
}
|