initial commit
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
using System;
|
||||
using System.Windows;
|
||||
using System.Windows.Interop;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Media.Animation;
|
||||
using ClashWidget.Helpers;
|
||||
using ClashWidget.Services;
|
||||
using ClashWidget.ViewModels;
|
||||
|
||||
namespace ClashWidget;
|
||||
|
||||
public partial class SettingsWindow : Window
|
||||
{
|
||||
private readonly SettingsViewModel _viewModel;
|
||||
private readonly Window _owner;
|
||||
public bool Saved { get; private set; }
|
||||
|
||||
public SettingsWindow(Window owner)
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
_owner = owner;
|
||||
_viewModel = new SettingsViewModel();
|
||||
DataContext = _viewModel;
|
||||
|
||||
Opacity = 0;
|
||||
Loaded += OnLoaded;
|
||||
}
|
||||
|
||||
private void OnLoaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
var hwnd = new WindowInteropHelper(this).Handle;
|
||||
if (hwnd != IntPtr.Zero)
|
||||
{
|
||||
var source = HwndSource.FromHwnd(hwnd);
|
||||
if (source?.CompositionTarget != null)
|
||||
source.CompositionTarget.BackgroundColor = Colors.Transparent;
|
||||
}
|
||||
NativeMethods.ApplyAcrylic(this);
|
||||
NativeMethods.SetTopmost(this);
|
||||
NativeMethods.HideFromTaskbar(this);
|
||||
}
|
||||
catch { }
|
||||
|
||||
PositionWindow();
|
||||
|
||||
var fadeIn = new DoubleAnimation(0, 1, TimeSpan.FromMilliseconds(200))
|
||||
{
|
||||
EasingFunction = new CubicEase { EasingMode = EasingMode.EaseOut }
|
||||
};
|
||||
BeginAnimation(OpacityProperty, fadeIn);
|
||||
}
|
||||
|
||||
private void PositionWindow()
|
||||
{
|
||||
double left = _owner.Left - Width - 12;
|
||||
if (left < 0) left = _owner.Left + _owner.ActualWidth + 12;
|
||||
|
||||
var workArea = SystemParameters.WorkArea;
|
||||
double top = _owner.Top;
|
||||
if (top < workArea.Top) top = workArea.Top + 10;
|
||||
if (top + Height > workArea.Bottom) top = workArea.Bottom - Height - 10;
|
||||
|
||||
Left = left;
|
||||
Top = top;
|
||||
}
|
||||
|
||||
private void OnMouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
|
||||
{
|
||||
try { DragMove(); } catch { }
|
||||
}
|
||||
|
||||
private void OnCloseClick(object sender, RoutedEventArgs e) => FadeOutAndClose();
|
||||
|
||||
private void OnSaveClick(object sender, RoutedEventArgs e)
|
||||
{
|
||||
ConfigService.Save(_viewModel.GetConfig());
|
||||
Saved = true;
|
||||
FadeOutAndClose();
|
||||
}
|
||||
|
||||
private void FadeOutAndClose()
|
||||
{
|
||||
var fadeOut = new DoubleAnimation(1, 0, TimeSpan.FromMilliseconds(150))
|
||||
{
|
||||
EasingFunction = new CubicEase { EasingMode = EasingMode.EaseIn }
|
||||
};
|
||||
fadeOut.Completed += (_, _) => Close();
|
||||
BeginAnimation(OpacityProperty, fadeOut);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user