107 lines
2.9 KiB
C#
107 lines
2.9 KiB
C#
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();
|
|
}
|
|
}
|