55 lines
1.2 KiB
Go
55 lines
1.2 KiB
Go
package widgets
|
|
|
|
import (
|
|
"image"
|
|
|
|
"fyne.io/fyne/v2"
|
|
"fyne.io/fyne/v2/canvas"
|
|
"fyne.io/fyne/v2/widget"
|
|
myTheme "github.com/dweymouth/supersonic/ui/theme"
|
|
)
|
|
|
|
type ImagePopUp struct {
|
|
widget.PopUp
|
|
|
|
img image.Image
|
|
desiredSize fyne.Size
|
|
}
|
|
|
|
func NewImagePopUp(img image.Image, canv fyne.Canvas, size fyne.Size) *ImagePopUp {
|
|
i := &ImagePopUp{
|
|
img: img,
|
|
desiredSize: size,
|
|
PopUp: widget.PopUp{
|
|
Canvas: canv,
|
|
Content: canvas.NewImageFromImage(img),
|
|
},
|
|
}
|
|
i.ExtendBaseWidget(i)
|
|
return i
|
|
}
|
|
|
|
func (i *ImagePopUp) Show() {
|
|
i.Content.(*canvas.Image).FillMode = canvas.ImageFillContain
|
|
i.Content.(*canvas.Image).ScaleMode = canvas.ImageScaleFastest
|
|
canvSize := i.Canvas.Size()
|
|
i.ShowAtPosition(fyne.NewPos(
|
|
canvSize.Width/2,
|
|
canvSize.Height/2,
|
|
))
|
|
anim := fyne.NewAnimation(myTheme.AnimationDurationShort, func(f float32) {
|
|
if f == 1 {
|
|
i.Content.(*canvas.Image).ScaleMode = canvas.ImageScaleSmooth
|
|
}
|
|
size := fyne.NewSize(i.desiredSize.Width*f, i.desiredSize.Height*f)
|
|
i.Content.(*canvas.Image).SetMinSize(size)
|
|
size = i.Content.MinSize()
|
|
i.Resize(size)
|
|
i.Move(fyne.NewPos(
|
|
(canvSize.Width-size.Width)/2,
|
|
(canvSize.Height-size.Height)/2,
|
|
))
|
|
})
|
|
anim.Start()
|
|
}
|