Browse Source

big update, add goroutine sdl render
replace a lot of self.Screen.Draw() to self.Screen.Refresh()

cuu 1 year ago
parent
commit
7814f9ca6f
40 changed files with 358 additions and 403 deletions
  1. 4 8
      Menu/GameShell/10_Settings/About/about.go
  2. 4 8
      Menu/GameShell/10_Settings/Airplane/airplane_page.go
  3. 10 25
      Menu/GameShell/10_Settings/Bluetooth/ble_agent_pair_page.go
  4. 16 32
      Menu/GameShell/10_Settings/Bluetooth/bluetooth_page.go
  5. 3 6
      Menu/GameShell/10_Settings/Brightness/brightness_page.go
  6. 7 14
      Menu/GameShell/10_Settings/ButtonsLayout/buttons_layout_page.go
  7. 9 21
      Menu/GameShell/10_Settings/GateWay/gateway_page.go
  8. 4 8
      Menu/GameShell/10_Settings/Languages/languages_page.go
  9. 1 2
      Menu/GameShell/10_Settings/PowerOFF/poweroff_confirm_page.go
  10. 8 16
      Menu/GameShell/10_Settings/PowerOptions/power_options_page.go
  11. 3 6
      Menu/GameShell/10_Settings/Settings.go
  12. 3 6
      Menu/GameShell/10_Settings/Sound/sound_page.go
  13. 6 12
      Menu/GameShell/10_Settings/TimeZone/time_zone_page.go
  14. 8 22
      Menu/GameShell/10_Settings/Update/update_page.go
  15. 15 30
      Menu/GameShell/10_Settings/Wifi/wifi.go
  16. 4 8
      Menu/GameShell/21_Warehouse/image_download_process_page.go
  17. 4 9
      Menu/GameShell/21_Warehouse/load_house_page.go
  18. 14 28
      Menu/GameShell/21_Warehouse/ware_house_page.go
  19. 1 2
      Menu/GameShell/97_MusicPlayer/list_page_selector.go
  20. 4 8
      Menu/GameShell/97_MusicPlayer/music_lib_list_page.go
  21. 8 0
      Menu/GameShell/97_MusicPlayer/music_lib_list_page_list_item.go
  22. 112 25
      Menu/GameShell/97_MusicPlayer/music_player_page.go
  23. 9 1
      Menu/GameShell/97_MusicPlayer/music_player_page_list_item.go
  24. 1 2
      Menu/GameShell/98_TinyCloud/tiny_cloud_page.go
  25. 1 2
      Menu/GameShell/99_PowerOFF/poweroff_confirm_page.go
  26. 2 2
      go.mod
  27. 8 0
      go.sum
  28. 4 3
      main.go
  29. 11 23
      sysgo/UI/Emulator/fav_list_page.go
  30. 12 26
      sysgo/UI/Emulator/rom_list_page.go
  31. 4 8
      sysgo/UI/Emulator/rom_so_confirm_page.go
  32. 1 2
      sysgo/UI/confirm_page.go
  33. 5 10
      sysgo/UI/delete_confirm_page.go
  34. 3 6
      sysgo/UI/download_process_page.go
  35. 2 3
      sysgo/UI/keyboard.go
  36. 8 4
      sysgo/UI/label.go
  37. 32 2
      sysgo/UI/main_screen.go
  38. 5 10
      sysgo/UI/page.go
  39. 1 1
      sysgo/UI/title_bar.go
  40. 1 2
      sysgo/UI/yes_cancel_confirm_page.go

+ 4 - 8
Menu/GameShell/10_Settings/About/about.go

@@ -350,27 +350,23 @@ func (self *AboutPage) OnLoadCb() {
 
 func (self *AboutPage) OnReturnBackCb() {
 	self.ReturnToUpLevelPage()
-	self.Screen.Draw()
-	self.Screen.SwapAndShow()
+	self.Screen.Refresh()
 }
 
 func (self *AboutPage) KeyDown(ev *event.Event) {
 	if ev.Data["Key"] == UI.CurKeys["A"] || ev.Data["Key"] == UI.CurKeys["Menu"] {
 		self.ReturnToUpLevelPage()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["Up"] {
 		self.ScrollUp()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["Down"] {
 		self.ScrollDown()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 }

+ 4 - 8
Menu/GameShell/10_Settings/Airplane/airplane_page.go

@@ -137,8 +137,7 @@ func (self *AirplanePage) ToggleModeAni() {
 			self.airwire_y -= v
 			self.dialog_index = 2
 			time.BlockDelay(40)
-			self.Screen.Draw()
-			self.Screen.SwapAndShow()
+			self.Screen.Refresh()
 		}
 
 		UI.System("sudo rfkill unblock all")
@@ -153,8 +152,7 @@ func (self *AirplanePage) ToggleModeAni() {
 			self.airwire_y += v
 			self.dialog_index = 3
 			time.BlockDelay(40)
-			self.Screen.Draw()
-			self.Screen.SwapAndShow()
+			self.Screen.Refresh()
 		}
 		UI.System("sudo rfkill block all")
 		self.Screen.TitleBar.InAirPlaneMode = true
@@ -195,8 +193,7 @@ func (self *AirplanePage) KeyDown(ev *event.Event) {
 
 	if ev.Data["Key"] == UI.CurKeys["A"] || ev.Data["Key"] == UI.CurKeys["Menu"] {
 		self.ReturnToUpLevelPage()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["B"] {
@@ -207,8 +204,7 @@ func (self *AirplanePage) KeyDown(ev *event.Event) {
 		self.UnBlockAll()
 		self.Screen.SwapAndShow()
 		time.BlockDelay(1000)
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 }
 

+ 10 - 25
Menu/GameShell/10_Settings/Bluetooth/ble_agent_pair_page.go

@@ -17,7 +17,7 @@ import (
 	  "github.com/cuu/gogame/font"
 	*/
 	"github.com/cuu/gogame/event"
-	"github.com/cuu/gogame/time"
+	//"github.com/cuu/gogame/time"
 	//"github.com/godbus/dbus"
 	//"github.com/muka/go-bluetooth/api"
 	//"github.com/muka/go-bluetooth/bluez"
@@ -62,8 +62,7 @@ func (self *BleAgentPairPage) ShowPinCode(device string, pincode string) {
 	if self.Screen.CurPage() != self {
 		self.Screen.PushPage(self)
 		self.ClearCanvas()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	self.Pin = pincode
@@ -82,8 +81,7 @@ func (self *BleAgentPairPage) ShowPassKey(device string, passkey uint32, entered
 	if self.Screen.CurPage() != self {
 		self.Screen.PushPage(self)
 		self.ClearCanvas()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	self.Pass = fmt.Sprintf("%06d", passkey)
@@ -100,36 +98,24 @@ func (self *BleAgentPairPage) ShowPassKey(device string, passkey uint32, entered
 
 func (self *BleAgentPairPage) PairOKCb() {
 	self.ClearCanvas()
-	self.Screen.Draw()
-	self.Screen.SwapAndShow()
+	self.Screen.Refresh()
 
-	self.Screen.MsgBox.SetText("Device paired")
-	self.Screen.MsgBox.Draw()
-	self.Screen.SwapAndShow()
-
-	time.BlockDelay(1500)
+	self.Screen.ShowMsg("Device paired",1500)
 
 	self.ReturnToUpLevelPage()
-	self.Screen.Draw()
-	self.Screen.SwapAndShow()
+	self.Screen.Refresh()
 	self.Screen.FootBar.ResetNavText()
 
 }
 
 func (self *BleAgentPairPage) PairErrorCb(err_msg string) {
 	self.ClearCanvas()
-	self.Screen.Draw()
-	self.Screen.SwapAndShow()
+	self.Screen.Refresh()
 
-	self.Screen.MsgBox.SetText(err_msg)
-	self.Screen.MsgBox.Draw()
-	self.Screen.SwapAndShow()
-
-	time.BlockDelay(1500)
+	self.Screen.ShowMsg(err_msg,1500)
 
 	self.ReturnToUpLevelPage()
-	self.Screen.Draw()
-	self.Screen.SwapAndShow()
+	self.Screen.Refresh()
 	self.Screen.FootBar.ResetNavText()
 
 }
@@ -145,8 +131,7 @@ func (self *BleAgentPairPage) KeyDown(ev *event.Event) {
 			}
 		}
 		self.ReturnToUpLevelPage()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 }
 

+ 16 - 32
Menu/GameShell/10_Settings/Bluetooth/bluetooth_page.go

@@ -62,19 +62,16 @@ func (self *BleForgetConfirmPage) KeyDown(ev *event.Event) {
 
 	if ev.Data["Key"] == UI.CurKeys["A"] || ev.Data["Key"] == UI.CurKeys["Menu"] {
 		self.ReturnToUpLevelPage()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["B"] {
 		self.SnapMsg("Deleting")
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 
 		time.BlockDelay(400)
 		self.ReturnToUpLevelPage()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 
 	}
 }
@@ -310,8 +307,7 @@ func (self *BleInfoPage) TryToForget() {
 		time.BlockDelay(400)
 
 		self.ReturnToUpLevelPage()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 
 	} else {
 
@@ -327,17 +323,14 @@ func (self *BleInfoPage) TryToDisconnect() {
 	if is_connected {
 
 		self.Screen.FootBar.UpdateNavText("Disconnecting")
-		self.Screen.MsgBox.SetText("Disconnecting")
-		self.Screen.MsgBox.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.ShowMsg("Disconnecting",0)
 
 		self.MyDevice.Disconnect()
 
 		time.BlockDelay(350)
 
 		self.ReturnToUpLevelPage()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 
 		self.Screen.FootBar.ResetNavText()
 	}
@@ -369,22 +362,19 @@ func (self *BleInfoPage) KeyDown(ev *event.Event) {
 
 	if ev.Data["Key"] == UI.CurKeys["A"] || ev.Data["Key"] == UI.CurKeys["Menu"] {
 		self.ReturnToUpLevelPage()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["Up"] {
 
 		self.ScrollUp()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["Down"] {
 
 		self.ScrollDown()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 	if ev.Data["Key"] == UI.CurKeys["Enter"] {
 		self.Click()
@@ -512,9 +502,8 @@ func NewBluetoothPage() *BluetoothPage {
 func (self *BluetoothPage) ShowBox(msg string) {
 	self.MsgBox.Text = msg
 	self.ShowingMessageBox = true
-	self.Screen.Draw()
-	self.MsgBox.Draw()
-	self.Screen.SwapAndShow()
+
+	self.Screen.ShowMsg(msg,0)
 }
 
 func (self *BluetoothPage) HideBox() {
@@ -562,8 +551,7 @@ func (self *BluetoothPage) AbortedAndReturnToUpLevel() {
 	self.HideBox()
 	self.Screen.FootBar.ResetNavText()
 	self.ReturnToUpLevelPage()
-	self.Screen.Draw()
-	self.Screen.SwapAndShow()
+	self.Screen.Refresh()
 
 }
 
@@ -816,8 +804,7 @@ func (self *BluetoothPage) KeyDown(ev *event.Event) {
 
 		self.HideBox()
 		self.ReturnToUpLevelPage()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 
 		self.Screen.FootBar.ResetNavText()
 	}
@@ -825,15 +812,13 @@ func (self *BluetoothPage) KeyDown(ev *event.Event) {
 	if ev.Data["Key"] == UI.CurKeys["Up"] {
 
 		self.ScrollUp()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["Down"] {
 
 		self.ScrollDown()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["X"] {
@@ -854,8 +839,7 @@ func (self *BluetoothPage) KeyDown(ev *event.Event) {
 		self.InfoPage.MyDevice = self.MyList[self.PsIndex].(*NetItem).Device
 
 		self.Screen.PushPage(self.InfoPage)
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["B"] {

+ 3 - 6
Menu/GameShell/10_Settings/Brightness/brightness_page.go

@@ -294,20 +294,17 @@ func (self *BrightnessPage) WhenSliderDrag(val int) {
 func (self *BrightnessPage) KeyDown(ev *event.Event) {
 	if ev.Data["Key"] == UI.CurKeys["A"] || ev.Data["Key"] == UI.CurKeys["Menu"] {
 		self.ReturnToUpLevelPage()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["Right"] {
 		self.MySlider.Further()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["Left"] {
 		self.MySlider.StepBack()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 }
 

+ 7 - 14
Menu/GameShell/10_Settings/ButtonsLayout/buttons_layout_page.go

@@ -110,8 +110,7 @@ func (self *UpdateConfirmPage) KeyDown(ev *event.Event) {
 
 	if ev.Data["Key"] == UI.CurKeys["A"] || ev.Data["Key"] == UI.CurKeys["Menu"] {
 		self.ReturnToUpLevelPage()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["B"] {
@@ -153,8 +152,7 @@ func (self *UpdateConfirmPage) KeyDown(ev *event.Event) {
 
 func (self *UpdateConfirmPage) OnReturnBackCb() {
 	self.ReturnToUpLevelPage()
-	self.Screen.Draw()
-	self.Screen.SwapAndShow()
+	self.Screen.Refresh()
 }
 
 func (self *UpdateConfirmPage) Draw() {
@@ -287,8 +285,7 @@ func (self *ButtonsLayoutPage) ToggleMode() {
 		}
 
 		self.dialog_index = 1
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 
 	} else {
 		d := []byte("xbox")
@@ -298,8 +295,7 @@ func (self *ButtonsLayoutPage) ToggleMode() {
 		}
 
 		self.dialog_index = 0
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 
 	}
 }
@@ -320,8 +316,7 @@ func (self *ButtonsLayoutPage) OnLoadCb() {
 func (self *ButtonsLayoutPage) OnReturnBackCb() {
 
 	self.ReturnToUpLevelPage()
-	self.Screen.Draw()
-	self.Screen.SwapAndShow()
+	self.Screen.Refresh()
 
 }
 
@@ -329,8 +324,7 @@ func (self *ButtonsLayoutPage) KeyDown(ev *event.Event) {
 
 	if ev.Data["Key"] == UI.CurKeys["A"] || ev.Data["Key"] == UI.CurKeys["Menu"] {
 		self.ReturnToUpLevelPage()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["B"] {
@@ -340,8 +334,7 @@ func (self *ButtonsLayoutPage) KeyDown(ev *event.Event) {
 	if ev.Data["Key"] == UI.CurKeys["X"] {
 		self.ConfirmPage.LayoutMode = self.GetButtonsLayoutMode()
 		self.Screen.PushPage(self.ConfirmPage)
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 }

+ 9 - 21
Menu/GameShell/10_Settings/GateWay/gateway_page.go

@@ -224,25 +224,17 @@ func (self *GateWayPage) Click() {
 			self.MyList[i].(*PageListItem).Active = false
 		}
 		cur_li.Active = self.ApplyGateWay(cur_li.Value)
-		self.Screen.MsgBox.SetText("Applying")
-		self.Screen.MsgBox.Draw()
-		self.Screen.SwapAndShow()
-
-		time.BlockDelay(1000)
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.ShowMsg("Applying",1000)
+		self.Screen.Refresh()
 	} else {
-		self.Screen.MsgBox.SetText("Do it in GameShell")
-		self.Screen.MsgBox.Draw()
-		self.Screen.SwapAndShow()
+		
+		self.Screen.ShowMsg("Do it in GameShell",0)
 	}
 
 }
 
 func (self *GateWayPage) ClearAllGateways() {
-	self.Screen.MsgBox.SetText("Cleaning up")
-	self.Screen.MsgBox.Draw()
-	self.Screen.SwapAndShow()
+	self.Screen.ShowMsg("Cleaning up",0)
 
 	UI.System("sudo ip route del 0/0")
 	time.BlockDelay(800)
@@ -251,8 +243,7 @@ func (self *GateWayPage) ClearAllGateways() {
 		self.MyList[i].(*PageListItem).Active = false
 	}
 
-	self.Screen.Draw()
-	self.Screen.SwapAndShow()
+	self.Screen.Refresh()
 
 }
 
@@ -332,8 +323,7 @@ func (self *GateWayPage) KeyDown(ev *event.Event) {
 
 	if ev.Data["Key"] == UI.CurKeys["A"] || ev.Data["Key"] == UI.CurKeys["Menu"] {
 		self.ReturnToUpLevelPage()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["B"] {
@@ -347,15 +337,13 @@ func (self *GateWayPage) KeyDown(ev *event.Event) {
 	if ev.Data["Key"] == UI.CurKeys["Up"] {
 
 		self.ScrollUp()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["Down"] {
 
 		self.ScrollDown()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 }

+ 4 - 8
Menu/GameShell/10_Settings/Languages/languages_page.go

@@ -244,8 +244,7 @@ func (self *LanguagesPage) Click() {
 
 	time.BlockDelay(1000)
 
-	self.Screen.Draw()
-	self.Screen.SwapAndShow()
+	self.Screen.Refresh()
 
 }
 
@@ -279,8 +278,7 @@ func (self *LanguagesPage) KeyDown(ev *event.Event) {
 
 	if ev.Data["Key"] == UI.CurKeys["A"] || ev.Data["Key"] == UI.CurKeys["Menu"] {
 		self.ReturnToUpLevelPage()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["B"] {
@@ -290,15 +288,13 @@ func (self *LanguagesPage) KeyDown(ev *event.Event) {
 	if ev.Data["Key"] == UI.CurKeys["Up"] {
 
 		self.ScrollUp()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["Down"] {
 
 		self.ScrollDown()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 }

+ 1 - 2
Menu/GameShell/10_Settings/PowerOFF/poweroff_confirm_page.go

@@ -28,8 +28,7 @@ func (self *PowerOFFConfirmPage) KeyDown(ev *event.Event) {
 
 	if ev.Data["Key"] == UI.CurKeys["Menu"] || ev.Data["Key"] == UI.CurKeys["A"] {
 		self.ReturnToUpLevelPage()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 
 	}
 

+ 8 - 16
Menu/GameShell/10_Settings/PowerOptions/power_options_page.go

@@ -293,22 +293,19 @@ func (self *InfoPage) KeyDown(ev *event.Event) {
 
 	if ev.Data["Key"] == UI.CurKeys["A"] || ev.Data["Key"] == UI.CurKeys["Menu"] {
 		self.ReturnToUpLevelPage()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["Up"] {
 
 		self.ScrollUp()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["Down"] {
 
 		self.ScrollDown()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 }
 
@@ -494,8 +491,7 @@ func (self *PowerOptionsPage) Click() {
 
 	time.BlockDelay(1000)
 
-	self.Screen.Draw()
-	self.Screen.SwapAndShow()
+	self.Screen.Refresh()
 }
 
 func (self *PowerOptionsPage) OnLoadCb() {
@@ -513,8 +509,7 @@ func (self *PowerOptionsPage) OnLoadCb() {
 func (self *PowerOptionsPage) KeyDown(ev *event.Event) {
 	if ev.Data["Key"] == UI.CurKeys["A"] || ev.Data["Key"] == UI.CurKeys["Menu"] {
 		self.ReturnToUpLevelPage()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["B"] {
@@ -524,15 +519,13 @@ func (self *PowerOptionsPage) KeyDown(ev *event.Event) {
 	if ev.Data["Key"] == UI.CurKeys["Up"] {
 
 		self.ScrollUp()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["Down"] {
 
 		self.ScrollDown()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["Y"] {
@@ -547,8 +540,7 @@ func (self *PowerOptionsPage) KeyDown(ev *event.Event) {
 		self.InfoPage.Time3 = time3
 
 		self.Screen.PushPage(self.InfoPage)
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 }
 

+ 3 - 6
Menu/GameShell/10_Settings/Settings.go

@@ -241,20 +241,17 @@ func (self *SettingsPage) KeyDown(ev *event.Event) {
 
 	if ev.Data["Key"] == UI.CurKeys["A"] || ev.Data["Key"] == UI.CurKeys["Menu"] {
 		self.ReturnToUpLevelPage()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["Up"] {
 		self.ScrollUp()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["Down"] {
 		self.ScrollDown()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["Enter"] {

+ 3 - 6
Menu/GameShell/10_Settings/Sound/sound_page.go

@@ -269,20 +269,17 @@ func (self *SoundPage) KeyDown(ev *event.Event) {
 
 	if ev.Data["Key"] == UI.CurKeys["A"] || ev.Data["Key"] == UI.CurKeys["Menu"] {
 		self.ReturnToUpLevelPage()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["Right"] {
 		self.MySlider.Further()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["Left"] {
 		self.MySlider.StepBack()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 }

+ 6 - 12
Menu/GameShell/10_Settings/TimeZone/time_zone_page.go

@@ -257,8 +257,7 @@ func (self *TimeZoneListPage) Click() {
 		fmt.Println("add ", cur_li.Path)
 	}
 
-	self.Screen.Draw()
-	self.Screen.SwapAndShow()
+	self.Screen.Refresh()
 }
 
 func (self *TimeZoneListPage) Rescan() {
@@ -270,32 +269,27 @@ func (self *TimeZoneListPage) KeyDown(ev *event.Event) {
 
 	if ev.Data["Key"] == UI.CurKeys["Menu"] || ev.Data["Key"] == UI.CurKeys["A"] {
 		self.ReturnToUpLevelPage()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["Up"] {
 		self.ScrollUp()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["Down"] {
 		self.ScrollDown()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["Right"] {
 		self.FastScrollDown(5)
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["Left"] {
 		self.FastScrollUp(5)
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["Enter"] {

+ 8 - 22
Menu/GameShell/10_Settings/Update/update_page.go

@@ -4,7 +4,7 @@ import (
 	"bytes"
 	"encoding/json"
 	"fmt"
-	"github.com/cuu/gogame/time"
+	//"github.com/cuu/gogame/time"
 	"github.com/veandco/go-sdl2/ttf"
 	"net/http"
 	"os/exec"
@@ -47,8 +47,7 @@ func (self *UpdateConfirmPage) KeyDown(ev *event.Event) {
 
 	if ev.Data["Key"] == UI.CurKeys["A"] || ev.Data["Key"] == UI.CurKeys["Menu"] {
 		self.ReturnToUpLevelPage()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["B"] {
@@ -64,8 +63,7 @@ func (self *UpdateConfirmPage) KeyDown(ev *event.Event) {
 
 func (self *UpdateConfirmPage) OnReturnBackCb() {
 	self.ReturnToUpLevelPage()
-	self.Screen.Draw()
-	self.Screen.SwapAndShow()
+	self.Screen.Refresh()
 }
 
 func (self *UpdateConfirmPage) Draw() {
@@ -208,11 +206,7 @@ func (self *UpdatePage) CheckUpdate() bool {
 		self.Screen.SwapAndShow()
 
 	} else {
-		self.Screen.Draw()
-		self.Screen.MsgBox.SetText("Launchergo is up to date")
-		self.Screen.MsgBox.Draw()
-		self.Screen.SwapAndShow()
-		time.BlockDelay(765)
+		self.Screen.ShowMsg("Launchergo is up to date",765)
 	}
 
 	defer resp.Body.Close()
@@ -224,26 +218,18 @@ func (self *UpdatePage) CheckUpdate() bool {
 func (self *UpdatePage) KeyDown(ev *event.Event) {
 	if ev.Data["Key"] == UI.CurKeys["A"] || ev.Data["Key"] == UI.CurKeys["Menu"] {
 		self.ReturnToUpLevelPage()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["X"] {
 		if self.Screen.IsWifiConnectedNow() == true {
 			if self.CheckUpdate() == true {
-				self.Screen.Draw()
-				self.Screen.SwapAndShow()
+				self.Screen.Refresh()
 			} else {
-				self.Screen.Draw()
-				self.Screen.MsgBox.SetText("Check Update Failed")
-				self.Screen.MsgBox.Draw()
-				self.Screen.SwapAndShow()
+				self.Screen.ShowMsg("Check Update Failed",0)
 			}
 		} else {
-			self.Screen.Draw()
-			self.Screen.MsgBox.SetText("Please Check your Wi-Fi connection")
-			self.Screen.MsgBox.Draw()
-			self.Screen.SwapAndShow()
+			self.Screen.ShowMsg("Please Check your Wi-Fi connection",0)
 		}
 	}
 }

+ 15 - 30
Menu/GameShell/10_Settings/Wifi/wifi.go

@@ -50,23 +50,20 @@ func (self *WifiDisconnectConfirmPage) KeyDown(ev *event.Event) {
 
 	if ev.Data["Key"] == UI.CurKeys["A"] || ev.Data["Key"] == UI.CurKeys["Menu"] {
 		self.ReturnToUpLevelPage()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["B"] {
 		fmt.Println("Disconnecting..")
 		self.SnapMsg("Disconnecting...")
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 
 		self.Parent.Parent.Disconnect()
 
 		time.BlockDelay(400)
 
 		self.ReturnToUpLevelPage()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 		self.Parent.Parent.Rescan(false)
 	}
 }
@@ -242,8 +239,7 @@ func (self *WifiInfoPage) TryDisconnect() {
 
 	if len(ip) > 6 {
 		self.Screen.PushPage(self.DisconnectConfirmPage)
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	} else {
 		fmt.Println("WifiInfoPage TryDisconnect can not get IP,maybe you are offline")
 		return
@@ -263,8 +259,7 @@ func (self *WifiInfoPage) OnLoadCb() {
 func (self *WifiInfoPage) OnReturnBackCb() {
 
 	self.ReturnToUpLevelPage()
-	self.Screen.Draw()
-	self.Screen.SwapAndShow()
+	self.Screen.Refresh()
 
 }
 
@@ -272,20 +267,17 @@ func (self *WifiInfoPage) KeyDown(ev *event.Event) {
 
 	if ev.Data["Key"] == UI.CurKeys["A"] || ev.Data["Key"] == UI.CurKeys["Menu"] {
 		self.ReturnToUpLevelPage()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["Up"] {
 		self.ScrollUp()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["Down"] {
 		self.ScrollDown()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["Enter"] {
@@ -411,10 +403,7 @@ func NewWifiList() *WifiList {
 func (self *WifiList) ShowBox(msg string) {
 	self.MsgBox.Text = msg
 	self.ShowingMessageBox = true
-	self.Screen.Draw()
-	self.MsgBox.Draw()
-	self.Screen.SwapAndShow()
-
+	self.Screen.ShowMsg(msg,0)
 }
 
 func (self *WifiList) HideBox() {
@@ -688,8 +677,8 @@ func (self *WifiList) AbortedAndReturnToUpLevel() {
 	self.HideBox()
 	self.Screen.FootBar.ResetNavText()
 	self.ReturnToUpLevelPage()
-	self.Screen.Draw()
-	self.Screen.SwapAndShow()
+
+	self.Screen.Refresh()
 }
 
 func (self *WifiList) OnKbdReturnBackCb() {
@@ -718,14 +707,12 @@ func (self *WifiList) KeyDown(ev *event.Event) {
 
 	if ev.Data["Key"] == UI.CurKeys["Up"] {
 		self.ScrollUp()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["Down"] {
 		self.ScrollDown()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["Enter"] { // enter to set password,enter is B on GM
@@ -745,8 +732,7 @@ func (self *WifiList) KeyDown(ev *event.Event) {
 			fmt.Println("APIOBJ.PasswordPage.SetPassword ", thepass, len(thepass))
 			APIOBJ.PasswordPage.SetPassword(thepass)
 
-			self.Screen.Draw()
-			self.Screen.SwapAndShow()
+			self.Screen.Refresh()
 
 		}
 	}
@@ -762,8 +748,7 @@ func (self *WifiList) KeyDown(ev *event.Event) {
 		self.InfoPage.BSSID = self.MyList[self.PsIndex].Bssid
 		self.InfoPage.ESSID = self.MyList[self.PsIndex].Essid
 		self.Screen.PushPage(self.InfoPage)
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 }

+ 4 - 8
Menu/GameShell/21_Warehouse/image_download_process_page.go

@@ -85,8 +85,7 @@ func (self *ImageDownloadProcessPage) OnLoadCb() {
 	}
 
 	self.ClearCanvas()
-	self.Screen.Draw()
-	self.Screen.SwapAndShow()
+	self.Screen.Refresh()
 
 	//parts := strings.Split(self.URL,"/")
 	//filename := strings.TrimSpace(parts[len(parts)-1])
@@ -100,8 +99,7 @@ func (self *ImageDownloadProcessPage) OnLoadCb() {
 
 		if UI.FileExists(local_menu_file) {
 			self.Img = image.Load(local_menu_file)
-			self.Screen.Draw()
-			self.Screen.SwapAndShow()
+			self.Screen.Refresh()
 		}else {
 			
 			self.req,_ = grab.NewRequest("/tmp",self.URL)
@@ -174,8 +172,7 @@ L:
 	if UI.FileExists(dst_filename) {
 		if self.Screen.CurPage() == self {
 			self.Img = image.Load(dst_filename)
-			self.Screen.Draw()
-			self.Screen.SwapAndShow()
+			self.Screen.Refresh()
 		}
 	}
 	
@@ -190,8 +187,7 @@ func (self *ImageDownloadProcessPage) KeyDown(ev  *event.Event) {
 		self.SetDownloading(false)
 
 		self.ReturnToUpLevelPage()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 		self.URL = ""
 	}
 }

+ 4 - 9
Menu/GameShell/21_Warehouse/load_house_page.go

@@ -16,7 +16,7 @@ import (
 	//"github.com/cuu/gogame/draw"
 	"github.com/cuu/gogame/color"
 	"github.com/cuu/gogame/event"
-	"github.com/cuu/gogame/time"
+	//"github.com/cuu/gogame/time"
 	"github.com/clockworkpi/LauncherGoDev/sysgo/UI"
 	"github.com/cuu/grab"
 )
@@ -84,8 +84,7 @@ func (self *LoadHousePage) OnLoadCb() {
 		return
 	}
 	self.ClearCanvas()
-	self.Screen.Draw()
-	self.Screen.SwapAndShow()
+	self.Screen.Refresh()
 
 	//parts := strings.Split(self.URL,"/")
 	//filename := strings.TrimSpace(parts[len(parts)-1])
@@ -198,10 +197,7 @@ L:
 		
 	} else {
 		fmt.Println(err)
-		self.Screen.MsgBox.SetText("Fetch house failed")
-		self.Screen.MsgBox.Draw()
-		self.Screen.SwapAndShow()
-		time.BlockDelay(500)
+		self.Screen.ShowMsg("Fetch house failed",500)
 	}
 	
 }
@@ -211,8 +207,7 @@ func (self *LoadHousePage) Leave() {
 	self.SetDownloading(false)
 	
 	self.ReturnToUpLevelPage()
-	self.Screen.Draw()
-	self.Screen.SwapAndShow()
+	self.Screen.Refresh()
 	self.URL = ""
 	
 }

+ 14 - 28
Menu/GameShell/21_Warehouse/ware_house_page.go

@@ -134,8 +134,7 @@ L:
 			}
 
 			if self.Screen.CurPage() == self && dirty == true {
-				self.Screen.Draw()
-				self.Screen.SwapAndShow()
+				self.Screen.Refresh()
 			}
 			dirty = false
 		case v:= <- self.Downloading:
@@ -467,8 +466,7 @@ func (self *WareHouse) LoadHouse() {
 	if cur_li.Value["type"] == "source" || cur_li.Value["type"] == "dir" {
 		self.LoadHousePage.URL = cur_li.Value["file"]
 		self.Screen.PushPage(self.LoadHousePage)
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 	
 }
@@ -488,8 +486,7 @@ func (self *WareHouse) PreviewGame() {
 			fmt.Println(cur_li.Value["shots"])
 			self.PreviewPage.URL = cur_li.Value["shots"]
 			self.Screen.PushPage(self.PreviewPage)
-			self.Screen.Draw()
-			self.Screen.SwapAndShow()
+			self.Screen.Refresh()
 		}
 	}
 }
@@ -599,8 +596,7 @@ func (self *WareHouse) Click() {
 				self.MyStack.Push(result.List)
 				
 				self.SyncList()
-				self.Screen.Draw()
-				self.Screen.SwapAndShow()
+				self.Screen.Refresh()
 			}
 
 			
@@ -672,8 +668,7 @@ func (self *WareHouse) Click() {
 func (self *WareHouse) OnAria2CompleteCb(gid string) {
 	fmt.Println("OnAria2CompleteCb", gid)
 	self.SyncList()
-	self.Screen.Draw()
-	self.Screen.SwapAndShow()
+	self.Screen.Refresh()
 	
 	if gid == self.Aria2DownloadingGid {
 		self.Aria2DownloadingGid = ""
@@ -763,8 +758,7 @@ func (self *WareHouse)  OnKbdReturnBackCb() {
 				}
 
 				self.SyncList()
-				self.Screen.Draw()
-				self.Screen.SwapAndShow()
+				self.Screen.Refresh()
 			}
 		}
 	}	
@@ -805,8 +799,7 @@ func (self *WareHouse)  OnReturnBackCb() {
 	self.SyncList()
 	self.RestoreScrolled()
 	
-	self.Screen.Draw()
-	self.Screen.SwapAndShow()
+	self.Screen.Refresh()
 	
 }
 
@@ -886,12 +879,10 @@ func (self *WareHouse) KeyDown(ev *event.Event) {
 			}
 
 			self.SyncList()
-			self.Screen.Draw()
-			self.Screen.SwapAndShow()
+			self.Screen.Refresh()
 		}else if self.MyStack.Length() == 1 {
 			self.ReturnToUpLevelPage()
-			self.Screen.Draw()
-			self.Screen.SwapAndShow()
+			self.Screen.Refresh()
 			self.SetDownloading(false)//shutdown UpdateProcessInterval
 		}
 	}
@@ -910,8 +901,7 @@ func (self *WareHouse) KeyDown(ev *event.Event) {
 			}
 		}
 
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["X"] {
@@ -923,15 +913,13 @@ func (self *WareHouse) KeyDown(ev *event.Event) {
 				}else {
 					self.Screen.PushPage(self.RemovePage)
 					self.RemovePage.StartOrAEvent = self.RemoveGame
-					self.Screen.Draw()
-					self.Screen.SwapAndShow()
+					self.Screen.Refresh()
 				}
 			}
 			return
 		}
 		self.SyncList()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["Y"] {
@@ -944,14 +932,12 @@ func (self *WareHouse) KeyDown(ev *event.Event) {
 
 	if ev.Data["Key"] == UI.CurKeys["Up"] {
 		self.ScrollUp()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["Down"] {
 		self.ScrollDown()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}	
 	
 }

+ 1 - 2
Menu/GameShell/97_MusicPlayer/list_page_selector.go

@@ -1,7 +1,7 @@
 package MusicPlayer
 
 import (
-        "fmt"
+        //"fmt"
 //        "path/filepath"
 
 //        "github.com/cuu/gogame/event"
@@ -37,7 +37,6 @@ func (self *ListPageSelector) Draw() {
 
         idx := self.Parent.GetPsIndex()
         mylist := self.Parent.GetMyList()
-	fmt.Println(idx)
         if idx < len(mylist) {
                 x, y := mylist[idx].Coord()
                 _, h := mylist[idx].Size()

+ 4 - 8
Menu/GameShell/97_MusicPlayer/music_lib_list_page.go

@@ -234,8 +234,7 @@ func (self *MusicLibListPage) Click() {
 
 	}
 
-        self.Screen.Draw()
-        self.Screen.SwapAndShow()	
+        self.Screen.Refresh()
 
 }
 
@@ -243,22 +242,19 @@ func (self *MusicLibListPage) KeyDown(ev *event.Event) {
 	
         if UI.IsKeyMenuOrA(ev.Data["Key"]) || ev.Data["Key"] == UI.CurKeys["Left"] {
                 self.ReturnToUpLevelPage()
-                self.Screen.Draw()
-                self.Screen.SwapAndShow()
+                self.Screen.Refresh()
         }
 
         if ev.Data["Key"] == UI.CurKeys["Up"] {
 
                 self.ScrollUp()
-                self.Screen.Draw()
-                self.Screen.SwapAndShow()
+                self.Screen.Refresh()
         }
 
         if ev.Data["Key"] == UI.CurKeys["Down"] {
 
                 self.ScrollDown()
-                self.Screen.Draw()
-                self.Screen.SwapAndShow()
+                self.Screen.Refresh()
         }
 
 	if ev.Data["Key"] == UI.CurKeys["B"] {

+ 8 - 0
Menu/GameShell/97_MusicPlayer/music_lib_list_page_list_item.go

@@ -41,6 +41,14 @@ func NewMusicLibListPageListItem() *MusicLibListPageListItem {
         return p
 }
 
+func (self *MusicLibListPageListItem) Init(text string) {
+        l := UI.NewLabel()
+        l.PosX = 10
+        l.SetCanvasHWND(self.Parent.GetCanvasHWND())
+        l.Init(text, self.Fonts["normal"], nil)
+        self.Labels["Text"] = l	
+}
+
 func (self *MusicLibListPageListItem) Draw() {
 
         x, _ := self.Labels["Text"].Coord()

+ 112 - 25
Menu/GameShell/97_MusicPlayer/music_player_page.go

@@ -9,8 +9,11 @@ import (
 	"github.com/cuu/gogame/event"
 	"github.com/cuu/gogame/rect"
 	"github.com/cuu/gogame/surface"
+//	"github.com/cuu/gogame/time"
+	gotime "time"
+	//"github.com/veandco/go-sdl2/sdl"
 	"github.com/veandco/go-sdl2/ttf"
-
+	
 	"github.com/cuu/gogame/color"
 	"github.com/clockworkpi/LauncherGoDev/sysgo"
 	"github.com/clockworkpi/LauncherGoDev/sysgo/UI"
@@ -41,6 +44,10 @@ type MusicPlayerPage struct {
 
 	CurSongTime string
 	CurSongName string
+	
+	playing_ch chan bool
+
+	PlayerOn bool
 }
 
 func NewMusicPlayerPage() *MusicPlayerPage {
@@ -56,7 +63,7 @@ func NewMusicPlayerPage() *MusicPlayerPage {
 
 	p.URLColor = UI.MySkinManager.GiveColor("URL")
 	p.TextColor = UI.MySkinManager.GiveColor("Text")
-	p.ListFontObj = UI.MyLangManager.TrFont("notosanscjk15")
+	p.ListFontObj = UI.MyLangManager.TrFont("notosanscjk14")
 
 	p.Labels = make(map[string]UI.LabelInterface)
 
@@ -67,12 +74,16 @@ func NewMusicPlayerPage() *MusicPlayerPage {
 	
 	p.CurSongTime = "0:0"
 
+	p.playing_ch = make(chan bool,1)
 	
+	p.PlayerOn = false
+
 	return p
 }
 
 func (self *MusicPlayerPage) OnLoadCb() {
 	self.PosY = 0
+	self.PlayerOn = true
 
 	if self.MpdClient == nil {
 	        conn, err := mpd.Dial("unix", sysgo.MPD_socket)
@@ -83,8 +94,11 @@ func (self *MusicPlayerPage) OnLoadCb() {
 
 		fmt.Println("Start mpd client")
 	}
+	
 
 	self.SyncList()
+	self.SetPlaying(true)
+	go self.UpdatePlayingStatus(250)
 }
 
 func (self *MusicPlayerPage) OnPopUpCb() {
@@ -99,14 +113,6 @@ func (self *MusicPlayerPage) OnReturnBackCb() {
 	self.SyncList()
 }
 
-func (self *MusicPlayerPage) SetCoords() {
-
-}
-
-func (self *MusicPlayerPage) SetLabels() {
-
-}
-
 func (self *MusicPlayerPage) SyncList() {
 	conn := self.MpdClient
 	start_x := 0
@@ -150,24 +156,55 @@ func (self *MusicPlayerPage) SyncList() {
 	self.SyncPlaying()
 }
 
-func (self *MusicPlayerPage) SyncPlaying() {
+func (self *MusicPlayerPage) UpdatePlayingStatus(ms int) { 	
+        RefreshTicker := gotime.NewTicker(gotime.Duration(ms)*gotime.Millisecond)
+        defer RefreshTicker.Stop()
+L:
+        for {
+                select {
+                case <- RefreshTicker.C:
+			cur_pos_id := self.SyncPlaying()
+			if self.Screen.CurPage() == self && cur_pos_id >= 0  {
+                                self.Screen.Refresh()
+                        }
+                case v:= <- self.playing_ch:
+                        if v== false {
+                                break L
+                        }
+                }
+        }
+
+    fmt.Println("Quiting UpdatePlayingStatus")
+}
+
+func (self *MusicPlayerPage) SyncPlaying() int {
 	conn := self.MpdClient
+	cur_pos_id := -1
+	
+	if self.PlayerOn == false {
+		return cur_pos_id
+	}
 
 	for i,_ := range self.MyList {
 		self.MyList[i].(*MusicPlayPageListItem).Active = false
 		self.MyList[i].(*MusicPlayPageListItem).PlayingProcess = 0
+		self.MyList[i].(*MusicPlayPageListItem).State = ""
 	}
-	current_song,_ := conn.CurrentSong()
+	
+	current_song,_ := conn.Status()
 	if len(current_song) > 0 {
 		if val,ok := current_song["song"]; ok{
 			posid, _ := strconv.Atoi(val)
 			if posid < len(self.MyList) {
+				cur_pos_id = posid
 				if state,ok2 := current_song["state"]; ok2 {
-					if state == "stop" {
-						self.MyList[posid].(*MusicPlayPageListItem).Active = false
-					}else{
+					if state == "play" {
 						self.MyList[posid].(*MusicPlayPageListItem).Active = true
+					}else{
+						self.MyList[posid].(*MusicPlayPageListItem).Active = false
 					}
+
+					self.MyList[posid].(*MusicPlayPageListItem).State = state
 				}
 
 				if song_time,ok3 := current_song["time"]; ok3 {
@@ -183,6 +220,8 @@ func (self *MusicPlayerPage) SyncPlaying() {
 			}
 		}
 	}
+
+	return cur_pos_id
 }
 
 func (self *MusicPlayerPage) InPlayList(path string) bool {
@@ -201,6 +240,52 @@ func (self *MusicPlayerPage) InPlayList(path string) bool {
 	return false
 }
 
+func (self *MusicPlayerPage) SetPlaying( v bool) {
+        for len(self.playing_ch) > 0 {
+                <- self.playing_ch
+        }
+
+        self.playing_ch <- v
+}
+func (self *MusicPlayerPage) StopPlayer() {
+	self.SetPlaying(false)
+
+	conn := self.MpdClient
+	conn.Stop()
+	self.CurSongName = ""
+	self.CurSongTime = "0:0"
+
+}
+
+func (self *MusicPlayerPage) PlayOrPause() {
+	self.RefreshPsIndex()
+	if self.MyList == nil || len(self.MyList) == 0 {
+		return
+	}
+
+	conn := self.MpdClient
+	cur_song_posid := self.SyncPlaying()
+
+	if cur_song_posid == self.PsIndex {
+		cur_li := self.MyList[self.PsIndex].(*MusicPlayPageListItem)
+		//fmt.Println(cur_li.State)
+		if cur_li.State == "pause" {
+			conn.Pause(false)
+		}else if cur_li.State == "play" {
+			conn.Pause(true)
+		}else {
+			conn.Play(self.PsIndex)
+		}
+	}else{
+		conn.Play(self.PsIndex)
+	}
+	
+	self.SyncPlaying()
+	
+	self.Screen.Refresh()
+
+}
+
 func (self *MusicPlayerPage) Init() {
 	if self.Screen == nil {
 		panic("No Screen")
@@ -261,34 +346,36 @@ func (self *MusicPlayerPage) Init() {
 func (self *MusicPlayerPage) KeyDown(ev *event.Event) {
         if ev.Data["Key"] == UI.CurKeys["Right"] {
                	self.Screen.PushPage(self.MyMusicLibListPage) 
-                self.Screen.Draw()
-                self.Screen.SwapAndShow()
+                self.Screen.Refresh()
         }	
 	if ev.Data["Key"] == UI.CurKeys["A"] || ev.Data["Key"] == UI.CurKeys["Menu"] {
+		self.PlayerOn = false
+		self.StopPlayer()
 		self.ReturnToUpLevelPage()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
         if ev.Data["Key"] == UI.CurKeys["Up"] {
 
                 self.ScrollUp()
-                self.Screen.Draw()
-                self.Screen.SwapAndShow()
+                self.Screen.Refresh()
         }
 
         if ev.Data["Key"] == UI.CurKeys["Down"] {
 
                 self.ScrollDown()
-                self.Screen.Draw()
-                self.Screen.SwapAndShow()
+                self.Screen.Refresh()
         }
 	if ev.Data["Key"] == UI.CurKeys["X"] {
 		self.MpdClient.Delete(self.PsIndex,-1)
 		self.SyncList()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
+
+	if ev.Data["Key"] == UI.CurKeys["B"] {
+		self.PlayOrPause()	
+	}
+
 	return
 }
 

+ 9 - 1
Menu/GameShell/97_MusicPlayer/music_player_page_list_item.go

@@ -27,7 +27,7 @@ type MusicPlayPageListItem struct {
 	Value  string
 	MyType int
 	Path  string
-
+	State string
 	PlayingProcess int
 }
 
@@ -43,6 +43,14 @@ func NewMusicPlayPageListItem() *MusicPlayPageListItem {
         return p
 }
 
+func (self *MusicPlayPageListItem) Init(text string) {
+        l := UI.NewLabel()
+        l.PosX = 10
+        l.SetCanvasHWND(self.Parent.GetCanvasHWND())
+        l.Init(text, self.Fonts["normal"], nil)
+        self.Labels["Text"] = l
+}
+
 func (self *MusicPlayPageListItem) Draw() {
 
         x, _ := self.Labels["Text"].Coord()

+ 1 - 2
Menu/GameShell/98_TinyCloud/tiny_cloud_page.go

@@ -168,8 +168,7 @@ func (self *TinyCloudPage) Init() {
 func (self *TinyCloudPage) KeyDown(ev *event.Event) {
 	if ev.Data["Key"] == UI.CurKeys["A"] || ev.Data["Key"] == UI.CurKeys["Menu"] {
 		self.ReturnToUpLevelPage()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 	return
 }

+ 1 - 2
Menu/GameShell/99_PowerOFF/poweroff_confirm_page.go

@@ -28,8 +28,7 @@ func (self *PowerOFFConfirmPage) KeyDown(ev *event.Event) {
 
 	if ev.Data["Key"] == UI.CurKeys["Menu"] || ev.Data["Key"] == UI.CurKeys["A"] {
 		self.ReturnToUpLevelPage()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 
 	}
 

+ 2 - 2
go.mod

@@ -3,7 +3,6 @@ module github.com/clockworkpi/LauncherGoDev
 go 1.17
 
 require (
-	github.com/cuu/gogame v0.0.0-20211011085728-70b3e040be73
 	github.com/cuu/grab v2.0.0+incompatible
 	github.com/cuu/wpa-connect v1.5.5
 	github.com/fatih/structs v1.1.0
@@ -15,13 +14,14 @@ require (
 	github.com/mitchellh/go-homedir v1.1.0
 	github.com/muka/go-bluetooth v0.0.0-20221213043340-85dc80edc4e1
 	github.com/sirupsen/logrus v1.9.0
-	github.com/veandco/go-sdl2 v0.4.28
+	github.com/veandco/go-sdl2 v0.4.30
 	github.com/vjeantet/jodaTime v1.0.0
 	github.com/yookoala/realpath v1.0.0
 	github.com/zyxar/argo v0.0.0-20210923033329-21abde88a063
 )
 
 require (
+	github.com/cuu/gogame v0.0.0-20230123135735-e5581171f193 // indirect
 	github.com/fhs/gompd/v2 v2.3.0 // indirect
 	github.com/go-ole/go-ole v1.2.6 // indirect
 	github.com/gorilla/websocket v1.5.0 // indirect

+ 8 - 0
go.sum

@@ -1,5 +1,11 @@
 github.com/cuu/gogame v0.0.0-20211011085728-70b3e040be73 h1:fmTvicP5+vCLftniyG8yjf9TKMesgq1phni5My+4YVo=
 github.com/cuu/gogame v0.0.0-20211011085728-70b3e040be73/go.mod h1:1ZGiLH+shrG0St33RrS7HWw8aTUezakhQcM/uzvjUiA=
+github.com/cuu/gogame v0.0.0-20230123095320-c80490dde012 h1:JM3b7ukEBEJVSExaLgmbZLTP6DJA8JInkOwZKxRydQY=
+github.com/cuu/gogame v0.0.0-20230123095320-c80490dde012/go.mod h1:1ZGiLH+shrG0St33RrS7HWw8aTUezakhQcM/uzvjUiA=
+github.com/cuu/gogame v0.0.0-20230123135016-435fff5f39a9 h1:DfHSAlgeKqyxhmJdXegkfjOobh7VEH7GSZfAIbbOJYA=
+github.com/cuu/gogame v0.0.0-20230123135016-435fff5f39a9/go.mod h1:1ZGiLH+shrG0St33RrS7HWw8aTUezakhQcM/uzvjUiA=
+github.com/cuu/gogame v0.0.0-20230123135735-e5581171f193 h1:S7c9jkrxHHF+0XeeWY9PcbMjO2jL7t5cp1Lsl0ba4gs=
+github.com/cuu/gogame v0.0.0-20230123135735-e5581171f193/go.mod h1:1ZGiLH+shrG0St33RrS7HWw8aTUezakhQcM/uzvjUiA=
 github.com/cuu/grab v2.0.0+incompatible h1:iXzIujTt9fYkjw63Tlxyxw1ohvabE59jWgkzI4LUY6E=
 github.com/cuu/grab v2.0.0+incompatible/go.mod h1:FQIc8xU5/Uw5lfVeVv4hrrclKgc+6c0ALOYVaTS+R20=
 github.com/cuu/wpa-connect v1.5.5 h1:Y6iBOIzFTBkn386uUCiBA80NIGJboAJ8Ee0AFfIbGRc=
@@ -66,6 +72,8 @@ github.com/suapapa/go_eddystone v1.3.1/go.mod h1:bXC11TfJOS+3g3q/Uzd7FKd5g62STQE
 github.com/veandco/go-sdl2 v0.4.10/go.mod h1:OROqMhHD43nT4/i9crJukyVecjPNYYuCofep6SNiAjY=
 github.com/veandco/go-sdl2 v0.4.28 h1:kLXyC0MNbQp6aQcow27Nozaos6XT9j1db7hMm2PPPas=
 github.com/veandco/go-sdl2 v0.4.28/go.mod h1:OROqMhHD43nT4/i9crJukyVecjPNYYuCofep6SNiAjY=
+github.com/veandco/go-sdl2 v0.4.30 h1:ZES8cWfk512B1OETAfw8BFbV5k6K4XE6rUlzfgj3KZA=
+github.com/veandco/go-sdl2 v0.4.30/go.mod h1:OROqMhHD43nT4/i9crJukyVecjPNYYuCofep6SNiAjY=
 github.com/vjeantet/jodaTime v1.0.0 h1:Fq2K9UCsbTFtKbHpe/L7C57XnSgbZ5z+gyGpn7cTE3s=
 github.com/vjeantet/jodaTime v1.0.0/go.mod h1:gA+i8InPfZxL1ToHaDpzi6QT/npjl3uPlcV4cxDNerI=
 github.com/yookoala/realpath v1.0.0 h1:7OA9pj4FZd+oZDsyvXWQvjn5oBdcHRTV44PpdMSuImQ=

+ 4 - 3
main.go

@@ -497,13 +497,14 @@ func run() int {
 func main() {
 
 	var exitcode int
-	defer sdl.Quit()
+	defer gogame.Quit()
 
 	//runtime.GOMAXPROCS(1)
 
 	os.Setenv("SDL_VIDEO_CENTERED", "1")
-
-	exitcode = run()
+	gogame.AsyncStart(func() {
+		exitcode = run()
+	})
 
 	os.Exit(exitcode)
 }

+ 11 - 23
sysgo/UI/Emulator/fav_list_page.go

@@ -13,7 +13,7 @@ import (
 
 	"github.com/clockworkpi/LauncherGoDev/sysgo/UI"
 	"github.com/cuu/gogame/color"
-	"github.com/cuu/gogame/time"
+	//"github.com/cuu/gogame/time"
 )
 
 type FavListPage struct {
@@ -378,8 +378,7 @@ func (self *FavListPage) Click() {
 			} else {
 				self.Screen.PushCurPage()
 				self.Screen.SetCurPage(self.RomSoConfirmDownloadPage)
-				self.Screen.Draw()
-				self.Screen.SwapAndShow()
+				self.Screen.Refresh()
 			}
 		}
 
@@ -387,8 +386,7 @@ func (self *FavListPage) Click() {
 
 	}
 
-	self.Screen.Draw()
-	self.Screen.SwapAndShow()
+	self.Screen.Refresh()
 }
 
 func (self *FavListPage) ReScan() {
@@ -417,14 +415,12 @@ func (self *FavListPage) ReScan() {
 
 func (self *FavListPage) OnReturnBackCb() {
 	self.ReScan()
-	self.Screen.Draw()
-	self.Screen.SwapAndShow()
+	self.Screen.Refresh()
 }
 
 func (self *FavListPage) OnLoadCb() {
 	self.ReScan()
-	self.Screen.Draw()
-	self.Screen.SwapAndShow()
+	self.Screen.Refresh()
 }
 
 func (self *FavListPage) SpeedScroll(thekey string) {
@@ -447,22 +443,19 @@ func (self *FavListPage) KeyDown(ev *event.Event) {
 
 	if ev.Data["Key"] == UI.CurKeys["Menu"] || ev.Data["Key"] == UI.CurKeys["Left"] {
 		self.ReturnToUpLevelPage()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["Up"] {
 		self.SpeedScroll(ev.Data["Key"])
 		self.ScrollUp()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["Down"] {
 		self.SpeedScroll(ev.Data["Key"])
 		self.ScrollDown()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["Enter"] {
@@ -471,8 +464,7 @@ func (self *FavListPage) KeyDown(ev *event.Event) {
 
 	if ev.Data["Key"] == UI.CurKeys["X"] { //Scan current
 		self.ReScan()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["Y"] { // del
@@ -484,13 +476,9 @@ func (self *FavListPage) KeyDown(ev *event.Event) {
 		if cur_li.(*EmulatorListItem).IsFile() {
 			uid := UI.GetUid(cur_li.(*EmulatorListItem).Path)
 			os.Chown(cur_li.(*EmulatorListItem).Path, uid, uid)
-			self.Screen.MsgBox.SetText("Deleting")
-			self.Screen.MsgBox.Draw()
-			self.Screen.SwapAndShow()
-			time.BlockDelay(600)
+			self.Screen.ShowMsg("Deleting",600)
 			self.ReScan()
-			self.Screen.Draw()
-			self.Screen.SwapAndShow()
+			self.Screen.Refresh()
 		}
 	}
 }

+ 12 - 26
sysgo/UI/Emulator/rom_list_page.go

@@ -9,7 +9,7 @@ import (
 	"github.com/clockworkpi/LauncherGoDev/sysgo/UI"
 	"github.com/cuu/gogame/color"
 	"github.com/cuu/gogame/event"
-	"github.com/cuu/gogame/time"
+	//"github.com/cuu/gogame/time"
 	"github.com/veandco/go-sdl2/ttf"
 	"os/exec"
 	"path/filepath"
@@ -406,8 +406,7 @@ func (self *RomListPage) Click() {
 			} else {
 				self.Screen.PushCurPage()
 				self.Screen.SetCurPage(self.RomSoConfirmDownloadPage)
-				self.Screen.Draw()
-				self.Screen.SwapAndShow()
+				self.Screen.Refresh()
 			}
 		}
 
@@ -415,8 +414,7 @@ func (self *RomListPage) Click() {
 
 	}
 
-	self.Screen.Draw()
-	self.Screen.SwapAndShow()
+	self.Screen.Refresh()
 }
 
 func (self *RomListPage) ReScan() {
@@ -435,8 +433,7 @@ func (self *RomListPage) ReScan() {
 
 func (self *RomListPage) OnReturnBackCb() {
 	self.ReScan()
-	self.Screen.Draw()
-	self.Screen.SwapAndShow()
+	self.Screen.Refresh()
 }
 
 func (self *RomListPage) SpeedScroll(thekey string) {
@@ -459,29 +456,25 @@ func (self *RomListPage) KeyDown(ev *event.Event) {
 
 	if ev.Data["Key"] == UI.CurKeys["Menu"] {
 		self.ReturnToUpLevelPage()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["Right"] {
 		self.Screen.PushCurPage()
 		self.Screen.SetCurPage(self.Leader.FavPage)
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["Up"] {
 		self.SpeedScroll(ev.Data["Key"])
 		self.ScrollUp()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["Down"] {
 		self.SpeedScroll(ev.Data["Key"])
 		self.ScrollDown()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["Enter"] {
@@ -502,21 +495,15 @@ func (self *RomListPage) KeyDown(ev *event.Event) {
 				fmt.Println(err)
 			}
 
-			self.Screen.MsgBox.SetText("Add to favourite list")
-			self.Screen.MsgBox.Draw()
-			self.Screen.SwapAndShow()
-			time.BlockDelay(600)
+			self.Screen.ShowMsg("Add to favourite list",600)
 			self.ReScan()
-			self.Screen.Draw()
-			self.Screen.SwapAndShow()
-
+			self.Screen.Refresh()
 		}
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["X"] { //Scan current
 		self.ReScan()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["Y"] { // del
@@ -531,9 +518,8 @@ func (self *RomListPage) KeyDown(ev *event.Event) {
 
 			self.Screen.PushCurPage()
 			self.Screen.SetCurPage(self.Leader.DeleteConfirmPage)
-			self.Screen.Draw()
-			self.Screen.SwapAndShow()
 
+			self.Screen.Refresh()
 		}
 	}
 }

+ 4 - 8
sysgo/UI/Emulator/rom_so_confirm_page.go

@@ -59,23 +59,20 @@ func (self *RomSoConfirmPage) Init() {
 
 func (self *RomSoConfirmPage) SnapMsg(msg string) {
 	self.MyList[0].SetText(msg)
-	self.Screen.Draw()
-	self.Screen.SwapAndShow()
+	self.Screen.Refresh()
 	self.MyList[0].SetText(self.ConfirmText)
 }
 
 func (self *RomSoConfirmPage) OnReturnBackCb() {
 	self.ReturnToUpLevelPage()
-	self.Screen.Draw()
-	self.Screen.SwapAndShow()
+	self.Screen.Refresh()
 }
 
 func (self *RomSoConfirmPage) KeyDown(ev *event.Event) {
 
 	if ev.Data["Key"] == UI.CurKeys["Menu"] || ev.Data["Key"] == UI.CurKeys["A"] {
 		self.ReturnToUpLevelPage()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == UI.CurKeys["B"] {
@@ -91,8 +88,7 @@ func (self *RomSoConfirmPage) KeyDown(ev *event.Event) {
 			}
 
 			self.Screen.PushPage(self.DownloadPage)
-			self.Screen.Draw()
-			self.Screen.SwapAndShow()
+			self.Screen.Refresh()
 			ec := self.Parent.GetEmulatorConfig()
 			if sysgo.CurKeySet == "PC" {
 

+ 1 - 2
sysgo/UI/confirm_page.go

@@ -141,8 +141,7 @@ func (self *ConfirmPage) KeyDown(ev *event.Event) {
 
 	if ev.Data["Key"] == CurKeys["A"] || ev.Data["Key"] == CurKeys["Menu"] {
 		self.ReturnToUpLevelPage()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 }
 

+ 5 - 10
sysgo/UI/delete_confirm_page.go

@@ -38,8 +38,7 @@ func (self *DeleteConfirmPage) KeyDown(ev *event.Event) {
 
 	if ev.Data["Key"] == CurKeys["A"] || ev.Data["Key"] == CurKeys["Menu"] {
 		self.ReturnToUpLevelPage()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == CurKeys["B"] {
@@ -51,21 +50,17 @@ func (self *DeleteConfirmPage) KeyDown(ev *event.Event) {
 		err = os.Rename(filepath.Base(self.FileName), filepath.Join(self.TrashDir, filepath.Base(self.FileName)))
 		if err != nil {
 			if strings.Contains(err.Error(), "exists") {
-				self.Screen.MsgBox.SetText("Already Existed")
+				self.Screen.ShowMsg("Already Existed",0)
 			} else {
-				self.Screen.MsgBox.SetText("Error")
+				self.Screen.ShowMsg("Error",0)
 			}
-			self.Screen.MsgBox.Draw()
-			self.Screen.SwapAndShow()
 		} else {
 			self.SnapMsg("Deleting")
-			self.Screen.Draw()
-			self.Screen.SwapAndShow()
+			self.Screen.Refresh()
 			self.Reset()
 			time.BlockDelay(300)
 			self.ReturnToUpLevelPage()
-			self.Screen.Draw()
-			self.Screen.SwapAndShow()
+			self.Screen.Refresh()
 		}
 
 		fmt.Println(self.FileName)

+ 3 - 6
sysgo/UI/download_process_page.go

@@ -126,8 +126,7 @@ func (self *DownloadProcessPage) UpdateProcessInterval() {
 
 		self.FileNameLabel.SetText(filepath.Base(self.resp.Filename))
 
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 
 		if self.resp.Progress() >= 1.0 {
 			// download is complete
@@ -187,8 +186,7 @@ func (self *DownloadProcessPage) DownloadErr() {
 
 func (self *DownloadProcessPage) DoneAndReturnUpLevel() {
 	self.ReturnToUpLevelPage()
-	self.Screen.Draw()
-	self.Screen.SwapAndShow()
+	self.Screen.Refresh()
 }
 
 func (self *DownloadProcessPage) StartDownload(_url, dst_dir string) {
@@ -229,8 +227,7 @@ func (self *DownloadProcessPage) KeyDown(ev *event.Event) {
 		self.StopDownload()
 
 		self.ReturnToUpLevelPage()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 }

+ 2 - 3
sysgo/UI/keyboard.go

@@ -449,15 +449,14 @@ func (self *Keyboard) KeyDown(ev *event.Event) {
 
 	if ev.Data["Key"] == CurKeys["Menu"] {
 		self.ReturnToUpLevelPage()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 
 	}
 
 	if ev.Data["Key"] == CurKeys["Y"] { // done
 		fmt.Println(strings.Join(self.Textarea.MyWords, ""))
 		self.ReturnToUpLevelPage()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 		if self.Caller != nil {
 			self.Caller.OnKbdReturnBackCb()
 		}

+ 8 - 4
sysgo/UI/label.go

@@ -1,7 +1,7 @@
 package UI
 
 import (
-	//"fmt"
+	"fmt"
 	"github.com/veandco/go-sdl2/sdl"
 	"github.com/veandco/go-sdl2/ttf"
 
@@ -112,7 +112,11 @@ func (self *Label) Draw() {
 	my_text := font.Render(self.FontObj, self.Text, true, self.Color, nil)
 
 	rect_ := rect.Rect(self.PosX, self.PosY, self.Width, self.Height)
-
-	surface.Blit(self.CanvasHWND, my_text, &rect_, nil)
-	my_text.Free()
+	
+	if my_text == nil || my_text.W <= 0 {
+		fmt.Println("%#v",my_text,self.FontObj)
+	}else{
+		surface.Blit(self.CanvasHWND, my_text, &rect_, nil)
+		my_text.Free()
+	}
 }

+ 32 - 2
sysgo/UI/main_screen.go

@@ -45,6 +45,7 @@ type ScreenInterface interface {
 	SetCurPage(pg PageInterface)
 	SwapAndShow()
 	IsWifiConnectedNow()
+	Refresh()
 }
 
 type PluginConfig struct {
@@ -185,7 +186,8 @@ type MainScreen struct {
 
 	LastKey     string
 	LastKeyDown gotime.Time
-
+	
+	updateScreen chan bool
 }
 
 func NewMainScreen() *MainScreen {
@@ -199,6 +201,9 @@ func NewMainScreen() *MainScreen {
 	m.MsgBoxFont = Fonts["veramono20"]
 	m.IconFont = Fonts["varela15"]
 	m.Closed = false
+	
+	m.updateScreen = make(chan bool,1)
+
 	return m
 }
 
@@ -217,7 +222,11 @@ func (self *MainScreen) Init() {
 	self.CounterScreen.Init()
 
 	//self.GenList() // load predefined plugin list,ready to be injected ,or ,as a .so for dynamic loading
-
+	go func() {
+		sdl.Do(func() {
+			self.RefreshLoop()
+		}) 
+	}()
 }
 
 func (self *MainScreen) FartherPages() { // right after ReadTheDirIntoPages
@@ -272,6 +281,7 @@ func (self *MainScreen) SwapAndShow() {
 		surface.Blit(self.HWND, self.CanvasHWND, &rect_, nil)
 	}
 
+
 	display.Flip()
 }
 
@@ -443,3 +453,23 @@ func (self *MainScreen) Draw() {
 		self.FootBar.Draw()
 	}
 }
+
+func (self *MainScreen) Refresh() {
+	self.updateScreen <- true	
+}
+
+func (self *MainScreen) RefreshLoop() {
+L:
+	for {
+		select {
+	                case v:= <- self.updateScreen:
+			if v == true {
+				self.Draw()
+				self.SwapAndShow()
+			}
+                        if v== false {
+                                break L
+                        }
+		}
+	}
+}

+ 5 - 10
sysgo/UI/page.go

@@ -815,16 +815,14 @@ func (self *Page) KeyDown(ev *event.Event) {
 
 		if self.FootMsg[3] == "Back" {
 			self.ReturnToUpLevelPage()
-			self.Screen.Draw()
-			self.Screen.SwapAndShow()
+			self.Screen.Refresh()
 			return
 		}
 	}
 
 	if ev.Data["Key"] == CurKeys["Menu"] {
 		self.ReturnToUpLevelPage()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if ev.Data["Key"] == CurKeys["Right"] {
@@ -836,8 +834,7 @@ func (self *Page) KeyDown(ev *event.Event) {
 			}
 
 			self.PsIndex = self.IconIndex
-			self.Screen.Draw()
-			self.Screen.SwapAndShow()
+			self.Screen.Refresh()
 		}
 	}
 
@@ -849,15 +846,13 @@ func (self *Page) KeyDown(ev *event.Event) {
 				self.IconsEasingRight(IconWidth + self.PageIconMargin)
 			}
 			self.PsIndex = self.IconIndex
-			self.Screen.Draw()
-			self.Screen.SwapAndShow()
+			self.Screen.Refresh()
 		}
 	}
 
 	if ev.Data["Key"] == CurKeys["Enter"] {
 		self.IconClick()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 }

+ 1 - 1
sysgo/UI/title_bar.go

@@ -132,7 +132,7 @@ func NewTitleBar() *TitleBar {
 
 	t.icon_base_path = SkinMap("sysgo/gameshell/titlebar_icons/")
 
-	t.TitleFont = Fonts["notosanscjk15"]
+	t.TitleFont = Fonts["varela16"]
 	t.TimeFont = Fonts["varela12"]
 
 	t.InLowBackLight = -1

+ 1 - 2
sysgo/UI/yes_cancel_confirm_page.go

@@ -37,8 +37,7 @@ func (self *YesCancelConfirmPage) KeyDown(ev *event.Event) {
 
 	if IsKeyMenuOrB(ev.Data["Key"]) {
 		self.ReturnToUpLevelPage()
-		self.Screen.Draw()
-		self.Screen.SwapAndShow()
+		self.Screen.Refresh()
 	}
 
 	if IsKeyStartOrA(ev.Data["Key"]) {