Quellcode durchsuchen

Добавление кода отображения курсора

SVI vor 3 Jahren
Ursprung
Commit
27eba87164

+ 3 - 5
libtui/v0/app/app.go

@@ -45,8 +45,8 @@ func (sf *App) Run() error {
 	if err := sf.run_init(); err != nil {
 		return fmt.Errorf("App.Run(): ininit screen, err=\n\t%w", err)
 	}
-	sf.scr.Clear() // Зачистить экран перед началом работы
-	sf.scr.Show()  // Обновить экран
+	sf.screen.Clear()
+	sf.screen.Draw()// sf.scr.Show()  // Обновить экран
 	sf.scr.EnableMouse()
 	for { // Главный цикл работы
 		ev := sf.scr.PollEvent() // Получить событие
@@ -72,9 +72,7 @@ func (sf *App) Run() error {
 			x, y := ev.Position()
 			sf.screen.SetMousePos(alias.PosX(x), alias.PosY(y))
 		}
-		sf.scr.Clear()
-		sf.screen.WinDebug().Draw()
-		sf.scr.Show() // Обновить экран
+		sf.screen.Draw()
 	}
 }
 

+ 34 - 0
libtui/v0/screen/scr_cursor/scr_cursor.go

@@ -0,0 +1,34 @@
+// package scr_cursor -- курсор на экране
+package scr_cursor
+
+import (
+	"fmt"
+
+	"p78git.ddns.net/svi/libtui/alias"
+	"p78git.ddns.net/svi/libtui/cell"
+	"p78git.ddns.net/svi/libtui/types"
+)
+
+// ScrCursor -- курсор на экране
+type ScrCursor struct {
+	*cell.Cell
+	scr types.IScreen
+}
+
+// NewScrCursor -- возвращает новый объект экранного курсора
+func NewScrCursor(scr types.IScreen) (*ScrCursor, error) {
+	if scr == nil {
+		return nil, fmt.Errorf("NewScrCursor(): IScreen==nil")
+	}
+	sf := &ScrCursor{
+		scr:  scr,
+		Cell: cell.NewCell(),
+	}
+	sf.SetLit(alias.Lit([]rune("◤")[0]))
+	return sf, nil
+}
+
+// Draw -- отрисовка курсора на экране
+func (sf *ScrCursor) Draw() {
+	sf.scr.Set(sf)
+}

+ 24 - 8
libtui/v0/screen/screen.go

@@ -6,7 +6,7 @@ import (
 
 	"github.com/gdamore/tcell"
 	"p78git.ddns.net/svi/libtui/alias"
-	"p78git.ddns.net/svi/libtui/pos"
+	"p78git.ddns.net/svi/libtui/screen/scr_cursor"
 	"p78git.ddns.net/svi/libtui/screen/win_debug"
 	"p78git.ddns.net/svi/libtui/size"
 	"p78git.ddns.net/svi/libtui/types"
@@ -18,7 +18,7 @@ type Screen struct {
 	scr      tcell.Screen
 	size     types.ISize     // Размер экрана
 	winDebug types.IWinDebug // Окно отладки
-	mousePos types.IPos      // Позиция мыши на экране
+	cursor   *scr_cursor.ScrCursor
 }
 
 // NewScreen -- возвращаетновый экран
@@ -27,16 +27,19 @@ func NewScreen(app types.IApp) (*Screen, error) {
 		return nil, fmt.Errorf("NewScreen(): IApp==nil")
 	}
 	sf := &Screen{
-		app:      app,
-		scr:      app.Scr(),
-		size:     size.NewSize(),
-		mousePos: pos.NewPos(),
+		app:  app,
+		scr:  app.Scr(),
+		size: size.NewSize(),
 	}
 	var err error
 	sf.winDebug, err = win_debug.NewWinDebug(sf)
 	if err != nil {
 		return nil, fmt.Errorf("NewScreen(): in creatre IWinDebug, err=\n\t%w", err)
 	}
+	sf.cursor, err = scr_cursor.NewScrCursor(sf)
+	if err != nil {
+		return nil, fmt.Errorf("NewScreen(): in create ScrCursor, err=\n\t%w", err)
+	}
 	return sf, nil
 }
 
@@ -57,7 +60,7 @@ func (sf *Screen) Resize(x alias.SizeX, y alias.SizeY) {
 
 // SetMousePos -- устанавливает позицию мыши
 func (sf *Screen) SetMousePos(x alias.PosX, y alias.PosY) {
-	sf.mousePos.Set(x, y)
+	sf.cursor.SetPos(x, y)
 	if sf.winDebug.IsVisible() { // Установить позицию окна отладки, если оно видно
 		sf.winDebug.SetPos(x, y)
 	}
@@ -70,7 +73,7 @@ func (sf *Screen) App() types.IApp {
 
 // MousePos -- возвращает позицию мыши
 func (sf *Screen) MousePos() (alias.PosX, alias.PosY) {
-	return sf.mousePos.X().Get(), sf.mousePos.Y().Get()
+	return sf.cursor.Pos()
 }
 
 // Set -- устанавливает ячейку на экран
@@ -80,3 +83,16 @@ func (sf *Screen) Set(cell types.ICell) {
 	lit := cell.Lit()
 	sf.scr.SetCell(int(x), int(y), tcell.Style(style), rune(lit))
 }
+
+// Draw -- отрисовка экранасебя по требованию
+func (sf *Screen) Draw() {
+	sf.scr.Clear()
+	sf.winDebug.Draw()
+	sf.cursor.Draw()
+	sf.scr.Show() // Обновить экран
+}
+
+// Clear -- очистка экрана
+func (sf *Screen)Clear(){
+	sf.scr.Clear() // Зачистить экран перед началом работы
+}

+ 4 - 0
libtui/v0/types/ilit.go

@@ -0,0 +1,4 @@
+package types
+
+// ILit -- Интерфейс литеры
+type ILit interface{}

+ 4 - 0
libtui/v0/types/iscreen.go

@@ -20,4 +20,8 @@ type IScreen interface {
 	App() IApp
 	// Set -- отрисовывает знакоместо на экране
 	Set(ICell)
+	// Draw -- отрисовывает себя по  требованию
+	Draw()
+	// Clear -- очистка экрана
+	Clear()
 }