counter_screen.go 3.3 KB

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