counter_screen.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. package UI
  2. import (
  3. "fmt"
  4. "github.com/veandco/go-sdl2/ttf"
  5. gotime "time"
  6. "github.com/cuu/gogame/color"
  7. "github.com/cuu/gogame/event"
  8. "github.com/cuu/gogame/surface"
  9. "github.com/clockworkpi/LauncherGoDev/sysgo"
  10. )
  11. type CounterScreen struct {
  12. FullScreen
  13. CounterFont *ttf.Font
  14. TextFont1 *ttf.Font
  15. TextFont2 *ttf.Font
  16. TopLabel LabelInterface
  17. BottomLabel LabelInterface
  18. NumberLabel LabelInterface
  19. BGColor *color.Color
  20. FGColor *color.Color
  21. Counting bool
  22. Number int // 10
  23. inter_counter int //
  24. TickerStoped chan bool
  25. }
  26. func NewCounterScreen() *CounterScreen {
  27. p := &CounterScreen{}
  28. p.Width = Width
  29. p.Height = Height
  30. p.Number = 10
  31. p.CounterFont = Fonts["varela120"]
  32. p.TextFont1 = Fonts["varela15"]
  33. p.TextFont2 = Fonts["varela12"]
  34. p.BGColor = &color.Color{0, 0, 0, 255}
  35. p.FGColor = &color.Color{255, 255, 255, 255}
  36. return p
  37. }
  38. func (self *CounterScreen) Interval() {
  39. TheTicker := gotime.NewTicker(500 * gotime.Millisecond)
  40. defer TheTicker.Stop()
  41. L:
  42. for {
  43. select {
  44. case <-TheTicker.C:
  45. self.inter_counter += 1
  46. if self.Number == 0 {
  47. self.Counting = false
  48. fmt.Println("do the real shutdown")
  49. if sysgo.CurKeySet != "PC" {
  50. cmdpath := "feh --bg-center sysgo/gameshell/wallpaper/seeyou.png;"
  51. cmdpath = cmdpath + "sleep 3;"
  52. cmdpath = cmdpath + "sudo halt -p"
  53. event.Post(RUNEVT, cmdpath)
  54. }
  55. break L
  56. }
  57. if self.inter_counter >= 2 {
  58. self.Number -= 1
  59. if self.Number < 0 {
  60. self.Number = 0
  61. }
  62. fmt.Println("sub Number ", self.Number)
  63. self.inter_counter = 0
  64. self.Draw()
  65. self.SwapAndShow()
  66. }
  67. case <-self.TickerStoped:
  68. break L
  69. }
  70. }
  71. }
  72. func (self *CounterScreen) StartCounter() {
  73. if self.Counting == true {
  74. return
  75. }
  76. self.Number = 10
  77. self.inter_counter = 0
  78. self.Counting = true
  79. go self.Interval()
  80. }
  81. func (self *CounterScreen) StopCounter() {
  82. if self.Counting == false {
  83. return
  84. }
  85. self.Counting = false
  86. self.Number = 0
  87. self.inter_counter = 0
  88. self.TickerStoped <- true
  89. }
  90. func (self *CounterScreen) Init() {
  91. self.CanvasHWND = surface.Surface(self.Width, self.Height)
  92. self.TopLabel = NewLabel()
  93. self.TopLabel.SetCanvasHWND(self.CanvasHWND)
  94. self.TopLabel.Init("System shutdown in", self.TextFont1, self.FGColor)
  95. self.BottomLabel = NewLabel()
  96. self.BottomLabel.SetCanvasHWND(self.CanvasHWND)
  97. self.BottomLabel.Init("Press any key to stop countdown", self.TextFont2, self.FGColor)
  98. self.NumberLabel = NewLabel()
  99. self.NumberLabel.SetCanvasHWND(self.CanvasHWND)
  100. number_str := fmt.Sprintf("%d", self.Number)
  101. self.NumberLabel.Init(number_str, self.CounterFont, self.FGColor)
  102. self.TickerStoped = make(chan bool, 1)
  103. }
  104. func (self *CounterScreen) Draw() {
  105. surface.Fill(self.CanvasHWND, self.BGColor)
  106. self.TopLabel.NewCoord(Width/2, 15)
  107. self.TopLabel.DrawCenter(false)
  108. self.BottomLabel.NewCoord(Width/2, Height-15)
  109. self.BottomLabel.DrawCenter(false)
  110. self.NumberLabel.NewCoord(Width/2, Height/2)
  111. number_str := fmt.Sprintf("%d", self.Number)
  112. self.NumberLabel.SetText(number_str)
  113. self.NumberLabel.DrawCenter(false)
  114. }