fckeuspy-go/vendor/fyne.io/fyne/v2/dialog/text.go

51 lines
1.6 KiB
Go

package dialog
import (
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/theme"
"fyne.io/fyne/v2/widget"
)
const (
// absolute max width of text dialogs
// (prevent them from looking unnaturally large on desktop)
maxTextDialogAbsoluteWidth float32 = 600
// max width of text dialogs as a percentage of the current window width
maxTextDialogWinPcntWidth float32 = .9
)
func newTextDialog(title, message string, icon fyne.Resource, parent fyne.Window) *dialog {
d := &dialog{
title: title,
icon: icon,
parent: parent,
content: newCenterWrappedLabel(message),
}
d.beforeShowHook = createBeforeShowHook(d, message)
return d
}
// returns a beforeShowHook that sets the desired width of the dialog to the min of:
// - width needed to show message without wrapping
// - maxTextDialogAbsoluteWidth
// - current window width * maxTextDialogWinPcntWidth
func createBeforeShowHook(d *dialog, message string) func() {
// Until issue #4648 is resolved, we need to create a label here
// rather than just using fyne.MeasureText, because the label's minsize
// also depends on the internal padding that label adds, which is unknown here
noWrapWidth := widget.NewLabel(message).MinSize().Width + padWidth + theme.Padding()*2
return func() {
if d.desiredSize.IsZero() {
maxWinWitth := d.parent.Canvas().Size().Width * maxTextDialogWinPcntWidth
w := fyne.Min(fyne.Min(noWrapWidth, maxTextDialogAbsoluteWidth), maxWinWitth)
d.desiredSize = fyne.NewSize(w, d.MinSize().Height)
}
}
}
func newCenterWrappedLabel(message string) fyne.CanvasObject {
return &widget.Label{Text: message, Alignment: fyne.TextAlignCenter, Wrapping: fyne.TextWrapWord}
}