func (w *windowImpl) SendFirst(event interface{}) {
}
SendFirst adds an event to the start of the deque. They are returned by
NextEvent in LIFO order, and have priority over events sent via Send.
package shiny
import (
	"image"
	"image/color"
	"image/draw"
	"image/png"
	"github.com/icexin/eggos/assets"
	imouse "github.com/icexin/eggos/drivers/ps2/mouse"
	"github.com/icexin/eggos/drivers/uart"
	"github.com/icexin/eggos/drivers/vbe"
	"golang.org/x/exp/shiny/screen"
	"golang.org/x/image/math/f64"
)
type windowImpl struct {
	view *vbe.View
	cursorImg  image.Image
	lastCursor imouse.Packet
	cursor     imouse.Packet
	updateRect image.Rectangle
	lastPaint *image.RGBA
	eventch chan interface{}
}
func newWindow() *windowImpl {
	w := &windowImpl{
		view:      vbe.DefaultView,
		lastPaint: image.NewRGBA(vbe.DefaultView.Canvas().Bounds()),
		eventch:   make(chan interface{}, 10),
	}
	w.loadMouseCursor()
	go w.listenKeyboardEvent()
	go w.listenMouseEvent()
	return w
}
func (w *windowImpl) loadMouseCursor() {
	f, err := assets.Open("/cursor.png")
	if err != nil {
		panic(err)
	}
	img, err := png.Decode(f)
	if err != nil {
		panic(err)
	}
	f.Close()
	w.cursorImg = img
}
func (w *windowImpl) Release() {
	panic("not implemented")  
}
func (w *windowImpl) Send(event interface{}) {
}