summaryrefslogtreecommitdiff
path: root/imagelist_windows.go
diff options
context:
space:
mode:
Diffstat (limited to 'imagelist_windows.go')
-rw-r--r--imagelist_windows.go45
1 files changed, 45 insertions, 0 deletions
diff --git a/imagelist_windows.go b/imagelist_windows.go
new file mode 100644
index 0000000..7ab014b
--- /dev/null
+++ b/imagelist_windows.go
@@ -0,0 +1,45 @@
+// 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))))
+}