Disablable, because why not?

This commit is contained in:
Martyn 2021-12-25 11:49:34 +00:00
parent 0de42ad991
commit 86afd312d8
2 changed files with 29 additions and 2 deletions

View File

@ -30,6 +30,8 @@ func main() {
} }
b.SetProfileImage(i) b.SetProfileImage(i)
b.OutlineWidth = 5 b.OutlineWidth = 5
b.Disable()
b.OutlineColor = color.RGBA{0x1a, 0x23, 0xce, 0xff}
b2 := profilebtn.NewProfileBtn() b2 := profilebtn.NewProfileBtn()
b2.SetProfileResource(resourceProfilepicdoesnotexistJpg) b2.SetProfileResource(resourceProfilepicdoesnotexistJpg)
b2.OutlineWidth = 3 b2.OutlineWidth = 3

View File

@ -23,6 +23,7 @@ type ProfileBtn struct {
profileImage image.Image profileImage image.Image
minSizeOverridden bool minSizeOverridden bool
minSizeRequested fyne.Size minSizeRequested fyne.Size
disabled bool
OnTapped func() `json:"-"` OnTapped func() `json:"-"`
} }
@ -54,8 +55,16 @@ func (b *ProfileBtn) Resize(s fyne.Size) {
b.BaseWidget.Resize(s) b.BaseWidget.Resize(s)
} }
func (b *ProfileBtn) Disable() {
b.disabled = true
}
func (b *ProfileBtn) Ensable() {
b.disabled = false
}
func (b *ProfileBtn) Disabled() bool { func (b *ProfileBtn) Disabled() bool {
return false return b.disabled
} }
func (b *ProfileBtn) Tapped(*fyne.PointEvent) { func (b *ProfileBtn) Tapped(*fyne.PointEvent) {
@ -91,6 +100,7 @@ func NewProfileBtn() *ProfileBtn {
w.OutlineColor = color.White w.OutlineColor = color.White
w.SetProfileResource(nil) w.SetProfileResource(nil)
w.minSizeOverridden = false w.minSizeOverridden = false
w.disabled = false
return w return w
} }
@ -142,11 +152,26 @@ func (r *profileBtnRenderer) Render(w, h int) image.Image {
i := image.NewRGBA(image.Rect(0, 0, w, h)) i := image.NewRGBA(image.Rect(0, 0, w, h))
if r.w.profileImage != nil { if r.w.profileImage != nil {
src := r.w.profileImage src := r.w.profileImage
// convert src to srcRGBA
srcb := src.Bounds()
srcRGBA := image.NewRGBA(image.Rect(0, 0, srcb.Dx(), srcb.Dy()))
draw.Draw(srcRGBA, srcRGBA.Bounds(), src, srcb.Min, draw.Src)
b := src.Bounds().Size() b := src.Bounds().Size()
wh := image.NewUniform(r.w.OutlineColor) wh := image.NewUniform(r.w.OutlineColor)
dst := image.NewRGBA(image.Rect(0, 0, b.X, b.Y)) dst := image.NewRGBA(image.Rect(0, 0, b.X, b.Y))
draw.DrawMask(dst, dst.Bounds(), wh, image.ZP, &circle{image.Point{b.X / 2, b.Y / 2}, (min(b.Y, b.Y) / 2)}, image.ZP, draw.Over) draw.DrawMask(dst, dst.Bounds(), wh, image.ZP, &circle{image.Point{b.X / 2, b.Y / 2}, (min(b.Y, b.Y) / 2)}, image.ZP, draw.Over)
draw.DrawMask(dst, dst.Bounds(), src, image.ZP, &circle{image.Point{b.X / 2, b.Y / 2}, (min(b.Y, b.Y) / 2) - r.w.OutlineWidth}, image.ZP, draw.Over) if r.w.Disabled() {
for x := 0; x < srcRGBA.Bounds().Dx(); x++ {
for y := 0; y < srcRGBA.Bounds().Dx(); y++ {
c := srcRGBA.RGBA64At(x, y)
avg := (c.R / 3) + (c.G / 3) + (c.B / 3)
c = color.RGBA64{avg, avg, avg, c.A}
srcRGBA.SetRGBA64(x, y, c)
}
}
}
draw.DrawMask(dst, dst.Bounds(), srcRGBA, image.ZP, &circle{image.Point{b.X / 2, b.Y / 2}, (min(b.Y, b.Y) / 2) - r.w.OutlineWidth}, image.ZP, draw.Over)
return dst return dst
} else { } else {
return i return i