screen.go 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. // package screen -- объект экрана
  2. package screen
  3. import (
  4. "fmt"
  5. "github.com/gdamore/tcell"
  6. "p78git.ddns.net/svi/libtui/alias"
  7. "p78git.ddns.net/svi/libtui/pos"
  8. "p78git.ddns.net/svi/libtui/screen/win_debug"
  9. "p78git.ddns.net/svi/libtui/size"
  10. "p78git.ddns.net/svi/libtui/types"
  11. )
  12. // Screen -- объект экрана
  13. type Screen struct {
  14. app types.IApp
  15. scr tcell.Screen
  16. size types.ISize // Размер экрана
  17. winDebug types.IWinDebug // Окно отладки
  18. mousePos types.IPos // Позиция мыши на экране
  19. }
  20. // NewScreen -- возвращаетновый экран
  21. func NewScreen(app types.IApp) (*Screen, error) {
  22. if app == nil {
  23. return nil, fmt.Errorf("NewScreen(): IApp==nil")
  24. }
  25. sf := &Screen{
  26. app: app,
  27. scr: app.Scr(),
  28. size: size.NewSize(),
  29. mousePos: pos.NewPos(),
  30. }
  31. var err error
  32. sf.winDebug, err = win_debug.NewWinDebug(sf)
  33. if err != nil {
  34. return nil, fmt.Errorf("NewScreen(): in creatre IWinDebug, err=\n\t%w", err)
  35. }
  36. return sf, nil
  37. }
  38. // Size -- возвращает размер экрана
  39. func (sf *Screen) Size() (alias.SizeX, alias.SizeY) {
  40. return sf.size.Get()
  41. }
  42. // WinDebug -- возвращает объект окна отладки экрана
  43. func (sf *Screen) WinDebug() types.IWinDebug {
  44. return sf.winDebug
  45. }
  46. // Resize -- изменяет размер экрана
  47. func (sf *Screen) Resize(x alias.SizeX, y alias.SizeY) {
  48. sf.size.Set(x, y)
  49. }
  50. // SetMousePos -- устанавливает позицию мыши
  51. func (sf *Screen) SetMousePos(x alias.PosX, y alias.PosY) {
  52. sf.mousePos.Set(x, y)
  53. if sf.winDebug.IsVisible() { // Установить позицию окна отладки, если оно видно
  54. sf.winDebug.SetPos(x, y)
  55. }
  56. }
  57. // App -- возвращает объект приложения
  58. func (sf *Screen) App() types.IApp {
  59. return sf.app
  60. }
  61. // MousePos -- возвращает позицию мыши
  62. func (sf *Screen) MousePos() (alias.PosX, alias.PosY) {
  63. return sf.mousePos.X().Get(), sf.mousePos.Y().Get()
  64. }
  65. // Set -- устанавливает ячейку на экран
  66. func (sf *Screen) Set(cell types.ICell) {
  67. x, y := cell.Pos()
  68. style := cell.Style()
  69. lit := cell.Lit()
  70. sf.scr.SetCell(int(x), int(y), tcell.Style(style), rune(lit))
  71. }