代码拉取完成,页面将自动刷新
package screenshot
import (
"fmt"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/canvas"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/data/binding"
"fyne.io/fyne/v2/data/validation"
"fyne.io/fyne/v2/dialog"
"fyne.io/fyne/v2/driver/desktop"
"fyne.io/fyne/v2/theme"
"fyne.io/fyne/v2/widget"
"gitee.com/andrewgithub/FireShotGo/firetheme"
"gitee.com/andrewgithub/FireShotGo/resources"
"github.com/golang/glog"
"image/color"
"strconv"
)
func (fs *FireShotGO) BuildEditWindow() {
// 设置主题支持中文
fs.App.Settings().SetTheme(&firetheme.ShanGShouJianSongTheme{RefThemeApp: fs.App, FireFontSizeName: FireShotFontSize})
// 创建主窗口
fs.Win = fs.App.NewWindow(fmt.Sprintf("FireShotGO: screenshot @ %s", fs.ScreenshotTime.Format("2006-01-02 15:04:05")))
// 设置工具图标
fs.Win.SetIcon(resources.GoShotIconPng)
// 创建菜单栏
fs.Win.SetMainMenu(fs.MakeFireShotMenu())
// 截屏图片操作视窗.
fs.viewPort = NewViewPort(fs)
// Side toolbar.
cropTopLeft := widget.NewButtonWithIcon("", resources.CropTopLeft,
func() {
fs.status.SetText("点击左裁剪的上角")
fs.viewPort.SetOp(CropTopLeft)
})
cropBottomRight := widget.NewButtonWithIcon("", resources.CropBottomRight,
func() {
fs.status.SetText("点击裁剪的右下角")
fs.viewPort.SetOp(CropBottomRight)
})
cropReset := widget.NewButtonWithIcon("", resources.Reset, func() {
fs.viewPort.cropReset()
fs.viewPort.SetOp(NoOp)
})
circleButton := widget.NewButton("圆 (alt+c)", func() { fs.viewPort.SetOp(DrawCircle) })
circleButton.SetIcon(resources.DrawCircle)
shieldBlockButton := widget.NewButton("遮挡块 (alt+b)", func() { fs.viewPort.SetOp(DrawShieldBlock) })
shieldBlockButton.SetIcon(resources.DrawShieldBlock)
rectangleButton := widget.NewButton("矩形框 (alt+r)", func() { fs.viewPort.SetOp(DrawRectangle) })
rectangleButton.SetIcon(resources.DrawRectangle)
penButton := widget.NewButton("画笔 (alt+p)", func() { fs.viewPort.SetOp(DrawPen) })
penButton.SetIcon(resources.DrawPen)
fs.thicknessEntry = &widget.Entry{Validator: validation.NewRegexp(`\d`, "Must contain a number")}
fs.thicknessEntry.SetPlaceHolder(fmt.Sprintf("%g", fs.viewPort.Thickness))
fs.thicknessEntry.OnChanged = func(str string) {
glog.V(2).Infof("Thickness changed to %s", str)
val, err := strconv.ParseFloat(str, 64)
if err == nil {
fs.viewPort.Thickness = val
fs.App.Preferences().SetFloat(ThicknessPreference, val)
}
}
fs.colorSample = canvas.NewRectangle(fs.viewPort.DrawingColor)
size1d := theme.IconInlineSize()
size := fyne.NewSize(5*size1d, size1d)
fs.colorSample.SetMinSize(size)
fs.colorSample.Resize(size)
fs.miniMap = NewMiniMap(fs, fs.viewPort)
toolBar := container.NewVBox(
fs.miniMap,
widget.NewButtonWithIcon("箭头 (alt+a)", resources.DrawArrow,
func() { fs.viewPort.SetOp(DrawArrow) }),
// FIXME: 已添加矢量图标 2021-09-30
widget.NewButtonWithIcon("直线 (alt+l)", resources.DrawLine,
func() { fs.viewPort.SetOp(DrawStraightLine) }),
widget.NewSeparator(),
widget.NewButtonWithIcon("虚线 (alt+d)", resources.DrawDottedLine,
func() { fs.viewPort.SetOp(DrawDottedLine) }),
fs.setDottedLineSpacing(),
widget.NewSeparator(),
circleButton,
shieldBlockButton,
rectangleButton,
penButton,
container.NewHBox(
widget.NewLabel("裁剪:"),
cropTopLeft,
cropBottomRight,
cropReset,
),
container.NewHBox(
widget.NewIcon(resources.Thickness), fs.thicknessEntry,
widget.NewButtonWithIcon("", resources.ColorWheel, func() { fs.colorPicker() }),
fs.colorSample,
),
widget.NewButtonWithIcon("文本 (alt+t)", resources.DrawText,
func() { fs.viewPort.SetOp(DrawText) }),
)
// Status bar with zoom control.
fs.zoomEntry = &widget.Entry{Validator: validation.NewRegexp(`\d`, "Must contain a number")}
fs.zoomEntry.SetPlaceHolder("0.0")
fs.zoomEntry.OnChanged = func(str string) {
glog.V(2).Infof("Zoom level changed to %s", str)
val, err := strconv.ParseFloat(str, 64)
if err == nil {
fs.viewPort.Log2Zoom = val
fs.viewPort.updateViewSize()
fs.viewPort.Refresh()
}
}
zoomReset := widget.NewButton("", func() {
fs.zoomEntry.SetText("0")
fs.viewPort.Log2Zoom = 0
fs.viewPort.updateViewSize()
fs.viewPort.Refresh()
})
zoomReset.SetIcon(resources.Reset)
fs.status = widget.NewLabel(fmt.Sprintf("Image size: %s", fs.Screenshot.Bounds()))
statusBar := container.NewBorder(
nil,
nil,
nil,
container.NewHBox(widget.NewLabel("Zoom:"), fs.zoomEntry, zoomReset),
fs.status,
)
// Stitch all together.
split := container.NewHSplit(
toolBar,
fs.viewPort,
)
split.Offset = 0.2
topLevel := container.NewBorder(
nil, statusBar, nil, nil, container.NewMax(split))
fs.Win.SetContent(topLevel)
fs.Win.Resize(fyne.NewSize(1024.0, 768.0))
// Register shortcuts.
fs.Win.Canvas().AddShortcut(&desktop.CustomShortcut{KeyName: fyne.KeyQ, Modifier: desktop.ControlModifier},
func(shortcut fyne.Shortcut) {
glog.Infof("Quit requested by shortcut %s", shortcut.ShortcutName())
fs.App.Quit()
})
fs.RegisterShortcuts()
}
func (fs *FireShotGO) setDottedLineSpacing() *fyne.Container {
data := binding.BindFloat(&fs.viewPort.DottedLineSpacing)
//label := widget.NewLabelWithData(binding.FloatToStringWithFormat(data, "Float value: %2.1f"))
//entry := widget.NewEntryWithData(binding.FloatToStringWithFormat(data, "%2.1f"))
//
//floats := container.NewGridWithColumns(2, label, entry)
slide := widget.NewSliderWithData(0.1, 99.9, data)
slide.Step = 0.1
bar := widget.NewProgressBarWithData(data)
bar.Min = 0.1
bar.Max = 99.9
buttons := container.NewGridWithColumns(4,
widget.NewButton("0", func() {
err := data.Set(0.1)
if err != nil {
return
}
}),
widget.NewButton("30", func() {
err := data.Set(30)
if err != nil {
return
}
}),
widget.NewButton("70", func() {
err := data.Set(70)
if err != nil {
return
}
}),
widget.NewButton("100", func() {
err := data.Set(99.9)
if err != nil {
return
}
}))
return container.NewVBox(slide, bar, buttons)
}
func (fs *FireShotGO) colorPicker() {
glog.V(2).Infof("colorPicker():")
picker := dialog.NewColorPicker(
"Pick a Color", "Select color for edits",
func(c color.Color) {
fs.viewPort.DrawingColor = c
fs.SetColorPreference(DrawingColorPreference, c)
fs.colorSample.FillColor = c
fs.colorSample.Refresh()
},
fs.Win)
picker.Show()
}
// MakeFireShotMenu 创建FireShotGo菜单栏
func (fs *FireShotGO) MakeFireShotMenu() *fyne.MainMenu {
// 构建文件菜单
menuFile := fyne.NewMenu("文件",
fyne.NewMenuItem("保存 (ctrl+s)", func() { fs.SaveImage() }),
fyne.NewMenuItem("截屏", func() { fs.DelayedScreenshotForm() }),
) // Quit is added automatically.
// 构建编辑菜单
menuSet := fyne.NewMenu("编辑",
fyne.NewMenuItem("字体大小",
func() {
fs.fireShotGoFont.FireShotFontEdit(fs)
}),
fyne.NewMenuItem("复制 (ctrl+c)", func() { fs.CopyImageToClipboard() }),
fyne.NewMenuItem("虚线设置", func() {
fs.fireShotGoFont.FireShotFontEdit(fs)
}),
)
// 构建云存储菜单
menuShare := fyne.NewMenu("云存储",
fyne.NewMenuItem("谷歌云 (ctrl+g)", func() { fs.ShareWithGoogleDrive() }),
fyne.NewMenuItem("七牛云 ", func() { fs.ShareWithQiNiuDrive() }),
)
// 构建帮助菜单
menuHelp := fyne.NewMenu("帮助",
fyne.NewMenuItem("快捷方式 (ctrl+?)", func() { fs.ShowShortcutsPage() }),
fyne.NewMenuItem("联系我们 ", func() { fs.ConnectUsPage() }),
)
return fyne.NewMainMenu(menuFile, menuSet, menuShare, menuHelp)
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。