cursor.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. // package cursor -- глобальный курсор на экране
  2. package cursor
  3. import (
  4. "fmt"
  5. "p78git.ddns.net/svi/libtui/alias"
  6. "p78git.ddns.net/svi/libtui/lib/line_cell/cell"
  7. "p78git.ddns.net/svi/libtui/types"
  8. )
  9. // Cursor -- курсор на экране
  10. type Cursor struct {
  11. *cell.Cell
  12. app types.IKernel
  13. screen types.IScreen
  14. isVisible alias.IsVisible
  15. }
  16. // NewCursor -- возвращает новый объект экранного курсора
  17. func NewCursor(app types.IKernel) (*Cursor, error) {
  18. if app == nil {
  19. return nil, fmt.Errorf("NewScrCursor(): IScreen==nil")
  20. }
  21. sf := &Cursor{
  22. app: app,
  23. screen: app.Screen(),
  24. Cell: cell.NewCell(),
  25. isVisible: true,
  26. }
  27. sf.SetLit(alias.Lit([]rune("↖")[0]))
  28. return sf, nil
  29. }
  30. // Draw -- отрисовка курсора на экране
  31. func (sf *Cursor) Draw() {
  32. sf.screen.SetCell(sf)
  33. posX, posY := sf.Pos()
  34. strOut := fmt.Sprintf("WinDebug.Draw(): pos=%v:%v", posX, posY)
  35. sf.screen.DrawText(posX, posY, strOut)
  36. }
  37. // SetPos -- устанавливает позицию курсора с подстройкой фона
  38. func (sf *Cursor) SetPos(posX alias.PosX, posY alias.PosY) {
  39. cell := sf.screen.GetCell(posX, posY)
  40. color := cell.BgColor()
  41. sf.BgColorSet(color)
  42. sf.Cell.SetPos(posX, posY)
  43. }
  44. // Hide -- скрывает курсор от отображения
  45. func (sf *Cursor) Hide() {
  46. sf.isVisible = false
  47. }
  48. // Show -- показывает курсор для отображения
  49. func (sf *Cursor) Show() {
  50. sf.isVisible = true
  51. }
  52. // IsVisible -- возвращает признак отображения курсора
  53. func (sf *Cursor) IsVisible() alias.IsVisible {
  54. return sf.isVisible
  55. }