package client import ( "image/color" "fyne.io/fyne/v2" "fyne.io/fyne/v2/canvas" "fyne.io/fyne/v2/widget" ) type interactiveRaster struct { widget.BaseWidget edit *editor min fyne.Size raster *canvas.Raster onLayout func(fyne.Size) onDragged func(*fyne.DragEvent) onDragEnd func() } func (r *interactiveRaster) SetMinSize(size fyne.Size) { r.min = size r.Resize(size) } func (r *interactiveRaster) MinSize() fyne.Size { return r.min } func (r *interactiveRaster) CreateRenderer() fyne.WidgetRenderer { return &rasterWidgetRender{ canvas: r, bg: canvas.NewRasterWithPixels(bgPattern), onLayout: r.onLayout, } } // Tapped is a left-click event func (r *interactiveRaster) Tapped(ev *fyne.PointEvent) { x, y := int(ev.Position.X), int(ev.Position.Y) size := r.raster.Size() if x >= int(size.Width) || y >= int(size.Height) { return } } // TappedSecondary is a right-click event func (r *interactiveRaster) TappedSecondary(*fyne.PointEvent) {} func newInteractiveRaster(edit *editor, raster *canvas.Raster, onLayout func(fyne.Size), onDragged func(*fyne.DragEvent), onDragEnd func()) *interactiveRaster { r := &interactiveRaster{ // raster: canvas.NewRaster(edit.draw), raster: raster, edit: edit, onLayout: onLayout, onDragged: onDragged, onDragEnd: onDragEnd, } r.ExtendBaseWidget(r) return r } func bgPattern(x, y, _, _ int) color.Color { const boxSize = 25 if (x/boxSize)%2 == (y/boxSize)%2 { return color.Gray{Y: 58} } return color.Gray{Y: 84} } func (r *interactiveRaster) Dragged(e *fyne.DragEvent) { if r.onDragged == nil { return } r.onDragged(e) } func (r *interactiveRaster) DragEnd() { if r.onDragEnd == nil { return } r.onDragEnd() }