wm/vend/xgbutil/xcursor/xcursor.go

54 lines
1.4 KiB
Go

package xcursor
import (
"github.com/jezek/xgb/xproto"
"github.com/jezek/xgbutil"
)
// CreateCursor sets some default colors for nice and easy cursor creation.
// Just supply a cursor constant from 'xcursor/cursordef.go'.
func CreateCursor(xu *xgbutil.XUtil, cursor uint16) (xproto.Cursor, error) {
return CreateCursorExtra(xu, cursor, 0, 0, 0, 0xffff, 0xffff, 0xffff)
}
// CreateCursorExtra features all available parameters to creating a cursor.
// It will return an error if there is a problem with any of the requests
// made to create the cursor.
// (This implies each request is a checked request. The performance loss is
// probably acceptable since cursors should be created once and reused.)
func CreateCursorExtra(xu *xgbutil.XUtil, cursor, foreRed, foreGreen,
foreBlue, backRed, backGreen, backBlue uint16) (xproto.Cursor, error) {
fontId, err := xproto.NewFontId(xu.Conn())
if err != nil {
return 0, err
}
cursorId, err := xproto.NewCursorId(xu.Conn())
if err != nil {
return 0, err
}
err = xproto.OpenFontChecked(xu.Conn(), fontId,
uint16(len("cursor")), "cursor").Check()
if err != nil {
return 0, err
}
err = xproto.CreateGlyphCursorChecked(xu.Conn(), cursorId, fontId, fontId,
cursor, cursor+1,
foreRed, foreGreen, foreBlue,
backRed, backGreen, backBlue).Check()
if err != nil {
return 0, err
}
err = xproto.CloseFontChecked(xu.Conn(), fontId).Check()
if err != nil {
return 0, err
}
return cursorId, nil
}