ui: basic map scroller
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
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()
|
||||
}
|
||||
Reference in New Issue
Block a user