theme.go 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. package test
  2. import (
  3. "image/color"
  4. "fyne.io/fyne/v2"
  5. "fyne.io/fyne/v2/theme"
  6. )
  7. var defaultTheme fyne.Theme
  8. var _ fyne.Theme = (*configurableTheme)(nil)
  9. type configurableTheme struct {
  10. colors map[fyne.ThemeColorName]color.Color
  11. fonts map[fyne.TextStyle]fyne.Resource
  12. sizes map[fyne.ThemeSizeName]float32
  13. }
  14. // Theme returns a theme useful for image based tests.
  15. func Theme() fyne.Theme {
  16. if defaultTheme == nil {
  17. defaultTheme = &configurableTheme{
  18. colors: map[fyne.ThemeColorName]color.Color{
  19. theme.ColorNameBackground: color.NRGBA{R: 0x44, G: 0x44, B: 0x44, A: 0xff},
  20. theme.ColorNameButton: color.NRGBA{R: 0x33, G: 0x33, B: 0x33, A: 0xff},
  21. theme.ColorNameDisabled: color.NRGBA{R: 0x88, G: 0x88, B: 0x88, A: 0xff},
  22. theme.ColorNameDisabledButton: color.NRGBA{R: 0x22, G: 0x22, B: 0x22, A: 0xff},
  23. theme.ColorNameError: color.NRGBA{R: 0xf4, G: 0x43, B: 0x36, A: 0xff},
  24. theme.ColorNameFocus: color.NRGBA{R: 0x78, G: 0x3a, B: 0x3a, A: 0xff},
  25. theme.ColorNameForeground: color.NRGBA{R: 0xff, G: 0xff, B: 0xff, A: 0xff},
  26. theme.ColorNameHover: color.NRGBA{R: 0x88, G: 0xff, B: 0xff, A: 0x22},
  27. theme.ColorNameHeaderBackground: color.NRGBA{R: 0x22, G: 0x22, B: 0x22, A: 0xff},
  28. theme.ColorNameHyperlink: color.NRGBA{R: 0xff, G: 0xcc, B: 0x80, A: 0xff},
  29. theme.ColorNameInputBackground: color.NRGBA{R: 0x66, G: 0x66, B: 0x66, A: 0xff},
  30. theme.ColorNameInputBorder: color.NRGBA{R: 0x86, G: 0x86, B: 0x86, A: 0xff},
  31. theme.ColorNameMenuBackground: color.NRGBA{R: 0x56, G: 0x56, B: 0x56, A: 0xff},
  32. theme.ColorNameOverlayBackground: color.NRGBA{R: 0x22, G: 0x22, B: 0x22, A: 0xff},
  33. theme.ColorNamePlaceHolder: color.NRGBA{R: 0xaa, G: 0xaa, B: 0xaa, A: 0xff},
  34. theme.ColorNamePressed: color.NRGBA{A: 0x33},
  35. theme.ColorNamePrimary: color.NRGBA{R: 0xff, G: 0xcc, B: 0x80, A: 0xff},
  36. theme.ColorNameScrollBar: color.NRGBA{R: 0x00, G: 0x00, B: 0x00, A: 0xaa},
  37. theme.ColorNameSeparator: color.NRGBA{R: 0x88, G: 0x88, B: 0x88, A: 0xff},
  38. theme.ColorNameSelection: color.NRGBA{R: 0x78, G: 0x3a, B: 0x3a, A: 0x99},
  39. theme.ColorNameShadow: color.NRGBA{A: 0x88},
  40. },
  41. fonts: map[fyne.TextStyle]fyne.Resource{
  42. {}: theme.DefaultTextFont(),
  43. {Bold: true}: theme.DefaultTextBoldFont(),
  44. {Bold: true, Italic: true}: theme.DefaultTextBoldItalicFont(),
  45. {Italic: true}: theme.DefaultTextItalicFont(),
  46. {Monospace: true}: theme.DefaultTextMonospaceFont(),
  47. },
  48. sizes: map[fyne.ThemeSizeName]float32{
  49. theme.SizeNameInlineIcon: float32(20),
  50. theme.SizeNameInnerPadding: float32(8),
  51. theme.SizeNameLineSpacing: float32(4),
  52. theme.SizeNamePadding: float32(4),
  53. theme.SizeNameScrollBar: float32(16),
  54. theme.SizeNameScrollBarSmall: float32(3),
  55. theme.SizeNameSeparatorThickness: float32(1),
  56. theme.SizeNameText: float32(14),
  57. theme.SizeNameHeadingText: float32(23.8),
  58. theme.SizeNameSubHeadingText: float32(18),
  59. theme.SizeNameCaptionText: float32(11),
  60. theme.SizeNameInputBorder: float32(2),
  61. theme.SizeNameInputRadius: float32(4),
  62. theme.SizeNameSelectionRadius: float32(4),
  63. },
  64. }
  65. }
  66. return defaultTheme
  67. }
  68. func (t *configurableTheme) Color(n fyne.ThemeColorName, _ fyne.ThemeVariant) color.Color {
  69. return t.colors[n]
  70. }
  71. func (t *configurableTheme) Font(style fyne.TextStyle) fyne.Resource {
  72. return t.fonts[style]
  73. }
  74. func (t *configurableTheme) Icon(n fyne.ThemeIconName) fyne.Resource {
  75. return theme.DefaultTheme().Icon(n)
  76. }
  77. func (t *configurableTheme) Size(s fyne.ThemeSizeName) float32 {
  78. return t.sizes[s]
  79. }