icons.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. package screens
  2. import (
  3. "image/color"
  4. "fyne.io/fyne"
  5. "fyne.io/fyne/canvas"
  6. "fyne.io/fyne/layout"
  7. "fyne.io/fyne/theme"
  8. "fyne.io/fyne/widget"
  9. )
  10. type browser struct {
  11. current int
  12. name *widget.Select
  13. icon *widget.Icon
  14. }
  15. func (b *browser) setIcon(index int) {
  16. if index < 0 || index > len(icons)-1 {
  17. return
  18. }
  19. b.current = index
  20. b.name.SetSelected(icons[index].name)
  21. b.icon.SetResource(icons[index].icon)
  22. }
  23. // IconsPanel loads a panel that shows the various icons available in Fyne
  24. func IconsPanel() fyne.CanvasObject {
  25. b := &browser{}
  26. prev := widget.NewButtonWithIcon("", theme.NavigateBackIcon(), func() {
  27. b.setIcon(b.current - 1)
  28. })
  29. next := widget.NewButtonWithIcon("", theme.NavigateNextIcon(), func() {
  30. b.setIcon(b.current + 1)
  31. })
  32. b.name = widget.NewSelect(iconList(), func(name string) {
  33. for i, icon := range icons {
  34. if icon.name == name {
  35. if b.current != i {
  36. b.setIcon(i)
  37. }
  38. break
  39. }
  40. }
  41. })
  42. b.name.SetSelected(icons[b.current].name)
  43. bar := widget.NewHBox(prev, next, b.name)
  44. background := canvas.NewRasterWithPixels(checkerPattern)
  45. background.SetMinSize(fyne.NewSize(280, 280))
  46. b.icon = widget.NewIcon(icons[b.current].icon)
  47. return fyne.NewContainerWithLayout(layout.NewBorderLayout(
  48. bar, nil, nil, nil), bar, background, b.icon)
  49. }
  50. func checkerPattern(x, y, _, _ int) color.Color {
  51. x /= 20
  52. y /= 20
  53. if x%2 == y%2 {
  54. return theme.BackgroundColor()
  55. }
  56. return theme.ButtonColor()
  57. }
  58. func iconList() []string {
  59. var ret []string
  60. for _, icon := range icons {
  61. ret = append(ret, icon.name)
  62. }
  63. return ret
  64. }
  65. var icons = []struct {
  66. name string
  67. icon fyne.Resource
  68. }{
  69. {"CancelIcon", theme.CancelIcon()},
  70. {"ConfirmIcon", theme.ConfirmIcon()},
  71. {"DeleteIcon", theme.DeleteIcon()},
  72. {"SearchIcon", theme.SearchIcon()},
  73. {"SearchReplaceIcon", theme.SearchReplaceIcon()},
  74. {"CheckButtonIcon", theme.CheckButtonIcon()},
  75. {"CheckButtonCheckedIcon", theme.CheckButtonCheckedIcon()},
  76. {"RadioButtonIcon", theme.RadioButtonIcon()},
  77. {"RadioButtonCheckedIcon", theme.RadioButtonCheckedIcon()},
  78. {"ContentAddIcon", theme.ContentAddIcon()},
  79. {"ContentRemoveIcon", theme.ContentRemoveIcon()},
  80. {"ContentClearIcon", theme.ContentClearIcon()},
  81. {"ContentCutIcon", theme.ContentCutIcon()},
  82. {"ContentCopyIcon", theme.ContentCopyIcon()},
  83. {"ContentPasteIcon", theme.ContentPasteIcon()},
  84. {"ContentRedoIcon", theme.ContentRedoIcon()},
  85. {"ContentUndoIcon", theme.ContentUndoIcon()},
  86. {"InfoIcon", theme.InfoIcon()},
  87. {"QuestionIcon", theme.QuestionIcon()},
  88. {"WarningIcon", theme.WarningIcon()},
  89. {"DocumentCreateIcon", theme.DocumentCreateIcon()},
  90. {"DocumentPrintIcon", theme.DocumentPrintIcon()},
  91. {"DocumentSaveIcon", theme.DocumentSaveIcon()},
  92. {"FolderIcon", theme.FolderIcon()},
  93. {"FolderNewIcon", theme.FolderNewIcon()},
  94. {"FolderOpenIcon", theme.FolderOpenIcon()},
  95. {"HomeIcon", theme.HomeIcon()},
  96. {"HelpIcon", theme.HelpIcon()},
  97. {"SettingsIcon", theme.SettingsIcon()},
  98. {"ViewFullScreenIcon", theme.ViewFullScreenIcon()},
  99. {"ViewRestoreIcon", theme.ViewRestoreIcon()},
  100. {"ViewRefreshIcon", theme.ViewRefreshIcon()},
  101. {"VisibilityIcon", theme.VisibilityIcon()},
  102. {"VisibilityOffIcon", theme.VisibilityOffIcon()},
  103. {"ZoomFitIcon", theme.ZoomFitIcon()},
  104. {"ZoomInIcon", theme.ZoomInIcon()},
  105. {"ZoomOutIcon", theme.ZoomOutIcon()},
  106. {"MoveDownIcon", theme.MoveDownIcon()},
  107. {"MoveUpIcon", theme.MoveUpIcon()},
  108. {"NavigateBackIcon", theme.NavigateBackIcon()},
  109. {"NavigateNextIcon", theme.NavigateNextIcon()},
  110. {"MenuDropDown", theme.MenuDropDownIcon()},
  111. {"MenuDropUp", theme.MenuDropUpIcon()},
  112. {"MailAttachmentIcon", theme.MailAttachmentIcon()},
  113. {"MailComposeIcon", theme.MailComposeIcon()},
  114. {"MailForwardIcon", theme.MailForwardIcon()},
  115. {"MailReplyIcon", theme.MailReplyIcon()},
  116. {"MailReplyAllIcon", theme.MailReplyAllIcon()},
  117. {"MailSendIcon", theme.MailSendIcon()},
  118. }