// 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, C.WPARAM)
}

func (i *imagelist) apply(hwnd C.HWND, uMsg C.UINT, wParam C.WPARAM) {
	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.applyImageList(hwnd, uMsg, wParam, il)
}