| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- // package screen -- объект экрана
- package screen
- import (
- "fmt"
- "github.com/gdamore/tcell"
- "p78git.ddns.net/svi/libtui/alias"
- "p78git.ddns.net/svi/libtui/pos"
- "p78git.ddns.net/svi/libtui/screen/win_debug"
- "p78git.ddns.net/svi/libtui/size"
- "p78git.ddns.net/svi/libtui/types"
- )
- // Screen -- объект экрана
- type Screen struct {
- app types.IApp
- scr tcell.Screen
- size types.ISize // Размер экрана
- winDebug types.IWinDebug // Окно отладки
- mousePos types.IPos // Позиция мыши на экране
- }
- // NewScreen -- возвращаетновый экран
- func NewScreen(app types.IApp) (*Screen, error) {
- if app == nil {
- return nil, fmt.Errorf("NewScreen(): IApp==nil")
- }
- sf := &Screen{
- app: app,
- scr: app.Scr(),
- size: size.NewSize(),
- mousePos: pos.NewPos(),
- }
- 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 -- возвращает размер экрана
- func (sf *Screen) Size() (alias.SizeX, alias.SizeY) {
- return sf.size.Get()
- }
- // WinDebug -- возвращает объект окна отладки экрана
- func (sf *Screen) WinDebug() types.IWinDebug {
- return sf.winDebug
- }
- // Resize -- изменяет размер экрана
- func (sf *Screen) Resize(x alias.SizeX, y alias.SizeY) {
- 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))
- }
|