|
@@ -2,8 +2,11 @@
|
|
|
package screen
|
|
package screen
|
|
|
|
|
|
|
|
import (
|
|
import (
|
|
|
|
|
+ "fmt"
|
|
|
|
|
+
|
|
|
|
|
+ "github.com/gdamore/tcell"
|
|
|
"p78git.ddns.net/svi/libtui/alias"
|
|
"p78git.ddns.net/svi/libtui/alias"
|
|
|
- "p78git.ddns.net/svi/libtui/safe_bool"
|
|
|
|
|
|
|
+ "p78git.ddns.net/svi/libtui/pos"
|
|
|
"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"
|
|
@@ -11,19 +14,30 @@ import (
|
|
|
|
|
|
|
|
// Screen -- объект экрана
|
|
// Screen -- объект экрана
|
|
|
type Screen struct {
|
|
type Screen struct {
|
|
|
|
|
+ app types.IApp
|
|
|
|
|
+ scr tcell.Screen
|
|
|
size types.ISize // Размер экрана
|
|
size types.ISize // Размер экрана
|
|
|
- isDebug types.ISafeBool // Признак показа отладки
|
|
|
|
|
- winDebug types.IWinDebug // Окно отладк
|
|
|
|
|
|
|
+ winDebug types.IWinDebug // Окно отладки
|
|
|
|
|
+ mousePos types.IPos // Позиция мыши на экране
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// NewScreen -- возвращаетновый экран
|
|
// NewScreen -- возвращаетновый экран
|
|
|
-func NewScreen() *Screen {
|
|
|
|
|
|
|
+func NewScreen(app types.IApp) (*Screen, error) {
|
|
|
|
|
+ if app == nil {
|
|
|
|
|
+ return nil, fmt.Errorf("NewScreen(): IApp==nil")
|
|
|
|
|
+ }
|
|
|
sf := &Screen{
|
|
sf := &Screen{
|
|
|
|
|
+ app: app,
|
|
|
|
|
+ scr: app.Scr(),
|
|
|
size: size.NewSize(),
|
|
size: size.NewSize(),
|
|
|
- isDebug: safe_bool.NewSafeBool(),
|
|
|
|
|
- winDebug: win_debug.NewWinDebug(),
|
|
|
|
|
|
|
+ mousePos: pos.NewPos(),
|
|
|
}
|
|
}
|
|
|
- return sf
|
|
|
|
|
|
|
+ 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)
|
|
|
|
|
+ }
|
|
|
|
|
+ return sf, nil
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Size -- возвращает размер экрана
|
|
// Size -- возвращает размер экрана
|
|
@@ -31,11 +45,6 @@ func (sf *Screen) Size() (alias.SizeX, alias.SizeY) {
|
|
|
return sf.size.Get()
|
|
return sf.size.Get()
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// IsDebug -- возвращает признак показа отладки
|
|
|
|
|
-func (sf *Screen) IsDebug() types.ISafeBool {
|
|
|
|
|
- return sf.isDebug
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
// WinDebug -- возвращает объект окна отладки экрана
|
|
// WinDebug -- возвращает объект окна отладки экрана
|
|
|
func (sf *Screen) WinDebug() types.IWinDebug {
|
|
func (sf *Screen) WinDebug() types.IWinDebug {
|
|
|
return sf.winDebug
|
|
return sf.winDebug
|
|
@@ -45,3 +54,29 @@ func (sf *Screen) WinDebug() types.IWinDebug {
|
|
|
func (sf *Screen) Resize(x alias.SizeX, y alias.SizeY) {
|
|
func (sf *Screen) Resize(x alias.SizeX, y alias.SizeY) {
|
|
|
sf.size.Set(x, y)
|
|
sf.size.Set(x, y)
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+// SetMousePos -- устанавливает позицию мыши
|
|
|
|
|
+func (sf *Screen) SetMousePos(x alias.PosX, y alias.PosY) {
|
|
|
|
|
+ sf.mousePos.Set(x, y)
|
|
|
|
|
+ if sf.winDebug.IsVisible() { // Установить позицию окна отладки, если оно видно
|
|
|
|
|
+ sf.winDebug.SetPos(x, y)
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+// App -- возвращает объект приложения
|
|
|
|
|
+func (sf *Screen) App() types.IApp {
|
|
|
|
|
+ return sf.app
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+// MousePos -- возвращает позицию мыши
|
|
|
|
|
+func (sf *Screen) MousePos() (alias.PosX, alias.PosY) {
|
|
|
|
|
+ return sf.mousePos.X().Get(), sf.mousePos.Y().Get()
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+// Set -- устанавливает ячейку на экран
|
|
|
|
|
+func (sf *Screen) Set(cell types.ICell) {
|
|
|
|
|
+ x, y := cell.Pos()
|
|
|
|
|
+ style := cell.Style()
|
|
|
|
|
+ lit := cell.Lit()
|
|
|
|
|
+ sf.scr.SetCell(int(x), int(y), tcell.Style(style), rune(lit))
|
|
|
|
|
+}
|