using Microsoft.Extensions.Logging; namespace Terminal.Gui; internal class WindowSizeMonitor : IWindowSizeMonitor { private readonly IConsoleOutput _consoleOut; private readonly IOutputBuffer _outputBuffer; private Size _lastSize = new (0, 0); /// Invoked when the terminal's size changed. The new size of the terminal is provided. public event EventHandler SizeChanging; public WindowSizeMonitor (IConsoleOutput consoleOut, IOutputBuffer outputBuffer) { _consoleOut = consoleOut; _outputBuffer = outputBuffer; } /// public bool Poll () { Size size = _consoleOut.GetWindowSize (); if (size != _lastSize) { Logging.Logger.LogInformation ($"Console size changes from '{_lastSize}' to {size}"); _outputBuffer.SetWindowSize (size.Width, size.Height); _lastSize = size; SizeChanging?.Invoke (this, new (size)); return true; } return false; } }