using System; using System.ComponentModel; using System.Linq; using Avalonia; using Avalonia.Controls; using System.Reactive.Linq; using Avalonia.Input; using Avalonia.Interactivity; using Avalonia.Media; using Avalonia.Platform; namespace SimpleNote; public partial class MainWindow : Window { private ViewModel viewModel; private PixelRect? screen; public MainWindow() { if (Screens.Primary == null) { Screen max = Screens.All[0]; for (int i = 0; i < Screens.ScreenCount; i++) { if (Screens.All[i].Bounds.Width > max.Bounds.Width) max = Screens.All[i]; } screen = max.WorkingArea; } else screen = Screens.Primary?.WorkingArea; if (screen == null) { Console.WriteLine("No screen available."); Environment.Exit(1); } this.Position = new PixelPoint(screen.Value.Width / 2 - 25, 10); this.Width = 50; // this.MaxWidth = screen.Value.Width - 100; InitializeComponent(); viewModel = new ViewModel(); DataContext = viewModel; this.GetObservable(Window.WidthProperty) .Subscribe(width => { if (DataContext is ViewModel vm) { vm.WindowWidth = (double)width; } }); } /* public void init_TextField(string text) { var textBlock = new TextBlock { Text = text, FontSize = viewModel.FontSize, FontFamily = new FontFamily(FontFamily.DefaultFontFamilyName) }; textBlock.Measure(Size.Infinity); viewModel.WindowWidth = textBlock.DesiredSize.Width + 50; Note.Text = text; } */ public static double TextWidth(string text) { var textBlock = new TextBlock { Text = text, FontSize = ViewModel._fontSize, FontFamily = new FontFamily(FontFamily.DefaultFontFamilyName) }; textBlock.Measure(Size.Infinity); return textBlock.DesiredSize.Width + 30 < 60 ? 60 : textBlock.DesiredSize.Width + 30; } private void TextBox_OnTextChanged(object? sender, TextChangedEventArgs e) { if (sender == null) return; ((TextBox)sender).Width = TextWidth(((TextBox)sender).Text); double width = 55; foreach (var note in viewModel.Notes) { width += note.Width + 49; } if (width == 55) width -= 5; this.Width = width; if(!System.OperatingSystem.IsLinux()) // Screenpositionhandling on Hyprland/Wayland/X11 is different this.Position = new PixelPoint((int)((screen.Value.Width - width) / 2), 10); } private void InputElement_OnKeyDown(object? sender, KeyEventArgs e) { if (e.Key == Key.Enter) this.Focus(); } }