117 lines
2.5 KiB
Go
117 lines
2.5 KiB
Go
|
// Copyright 2011 The Walk Authors. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style
|
||
|
// license that can be found in the LICENSE file.
|
||
|
|
||
|
// +build windows
|
||
|
|
||
|
package walk
|
||
|
|
||
|
import (
|
||
|
"image"
|
||
|
)
|
||
|
|
||
|
import (
|
||
|
"github.com/lxn/win"
|
||
|
)
|
||
|
|
||
|
type Cursor interface {
|
||
|
Dispose()
|
||
|
handle() win.HCURSOR
|
||
|
}
|
||
|
|
||
|
type stockCursor struct {
|
||
|
hCursor win.HCURSOR
|
||
|
}
|
||
|
|
||
|
func (sc stockCursor) Dispose() {
|
||
|
// nop
|
||
|
}
|
||
|
|
||
|
func (sc stockCursor) handle() win.HCURSOR {
|
||
|
return sc.hCursor
|
||
|
}
|
||
|
|
||
|
func CursorArrow() Cursor {
|
||
|
return stockCursor{win.LoadCursor(0, win.MAKEINTRESOURCE(win.IDC_ARROW))}
|
||
|
}
|
||
|
|
||
|
func CursorIBeam() Cursor {
|
||
|
return stockCursor{win.LoadCursor(0, win.MAKEINTRESOURCE(win.IDC_IBEAM))}
|
||
|
}
|
||
|
|
||
|
func CursorWait() Cursor {
|
||
|
return stockCursor{win.LoadCursor(0, win.MAKEINTRESOURCE(win.IDC_WAIT))}
|
||
|
}
|
||
|
|
||
|
func CursorCross() Cursor {
|
||
|
return stockCursor{win.LoadCursor(0, win.MAKEINTRESOURCE(win.IDC_CROSS))}
|
||
|
}
|
||
|
|
||
|
func CursorUpArrow() Cursor {
|
||
|
return stockCursor{win.LoadCursor(0, win.MAKEINTRESOURCE(win.IDC_UPARROW))}
|
||
|
}
|
||
|
|
||
|
func CursorSizeNWSE() Cursor {
|
||
|
return stockCursor{win.LoadCursor(0, win.MAKEINTRESOURCE(win.IDC_SIZENWSE))}
|
||
|
}
|
||
|
|
||
|
func CursorSizeNESW() Cursor {
|
||
|
return stockCursor{win.LoadCursor(0, win.MAKEINTRESOURCE(win.IDC_SIZENESW))}
|
||
|
}
|
||
|
|
||
|
func CursorSizeWE() Cursor {
|
||
|
return stockCursor{win.LoadCursor(0, win.MAKEINTRESOURCE(win.IDC_SIZEWE))}
|
||
|
}
|
||
|
|
||
|
func CursorSizeNS() Cursor {
|
||
|
return stockCursor{win.LoadCursor(0, win.MAKEINTRESOURCE(win.IDC_SIZENS))}
|
||
|
}
|
||
|
|
||
|
func CursorSizeAll() Cursor {
|
||
|
return stockCursor{win.LoadCursor(0, win.MAKEINTRESOURCE(win.IDC_SIZEALL))}
|
||
|
}
|
||
|
|
||
|
func CursorNo() Cursor {
|
||
|
return stockCursor{win.LoadCursor(0, win.MAKEINTRESOURCE(win.IDC_NO))}
|
||
|
}
|
||
|
|
||
|
func CursorHand() Cursor {
|
||
|
return stockCursor{win.LoadCursor(0, win.MAKEINTRESOURCE(win.IDC_HAND))}
|
||
|
}
|
||
|
|
||
|
func CursorAppStarting() Cursor {
|
||
|
return stockCursor{win.LoadCursor(0, win.MAKEINTRESOURCE(win.IDC_APPSTARTING))}
|
||
|
}
|
||
|
|
||
|
func CursorHelp() Cursor {
|
||
|
return stockCursor{win.LoadCursor(0, win.MAKEINTRESOURCE(win.IDC_HELP))}
|
||
|
}
|
||
|
|
||
|
func CursorIcon() Cursor {
|
||
|
return stockCursor{win.LoadCursor(0, win.MAKEINTRESOURCE(win.IDC_ICON))}
|
||
|
}
|
||
|
|
||
|
func CursorSize() Cursor {
|
||
|
return stockCursor{win.LoadCursor(0, win.MAKEINTRESOURCE(win.IDC_SIZE))}
|
||
|
}
|
||
|
|
||
|
type customCursor struct {
|
||
|
hCursor win.HCURSOR
|
||
|
}
|
||
|
|
||
|
func NewCursorFromImage(im image.Image, hotspot image.Point) (Cursor, error) {
|
||
|
i, err := createAlphaCursorOrIconFromImage(im, hotspot, false)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
return customCursor{win.HCURSOR(i)}, nil
|
||
|
}
|
||
|
|
||
|
func (cc customCursor) Dispose() {
|
||
|
win.DestroyIcon(win.HICON(cc.hCursor))
|
||
|
}
|
||
|
|
||
|
func (cc customCursor) handle() win.HCURSOR {
|
||
|
return cc.hCursor
|
||
|
}
|