add open animation for pop up images
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
package widgets
|
||||
|
||||
import (
|
||||
"image"
|
||||
|
||||
"fyne.io/fyne/v2"
|
||||
"fyne.io/fyne/v2/canvas"
|
||||
"fyne.io/fyne/v2/widget"
|
||||
)
|
||||
|
||||
const (
|
||||
imagePopUpLowRezDim = 128
|
||||
)
|
||||
|
||||
type ImagePopUp struct {
|
||||
widget.PopUp
|
||||
|
||||
img image.Image
|
||||
desiredSize fyne.Size
|
||||
aspect float64
|
||||
}
|
||||
|
||||
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(canvas.DurationShort, 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()
|
||||
}
|
||||
Reference in New Issue
Block a user