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