Some fixes
This commit is contained in:
+88
-4
@@ -2,9 +2,11 @@ using System.Collections.ObjectModel;
|
||||
using System.Diagnostics;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Interop;
|
||||
using AmigaDB.VideoRenderer.Models;
|
||||
using AmigaDB.VideoRenderer.Services;
|
||||
using Microsoft.Win32;
|
||||
@@ -21,6 +23,8 @@ public partial class MainWindow : Window
|
||||
private CancellationTokenSource? _renderCancellation;
|
||||
private string? _lastRenderedFile;
|
||||
private bool _logFlushScheduled;
|
||||
private bool _titleBarIsLight;
|
||||
private bool _exitConfirmed;
|
||||
|
||||
public MainWindow()
|
||||
{
|
||||
@@ -39,7 +43,47 @@ public partial class MainWindow : Window
|
||||
SelectEncoder(_loadedSettings.Encoder);
|
||||
SelectTheme(_loadedSettings.Theme);
|
||||
ApplyTheme(_loadedSettings.Theme);
|
||||
Closing += (_, _) => SaveSettings();
|
||||
MoveSourcesBox.IsChecked = _loadedSettings.ShouldMoveSourcesToOriginals;
|
||||
Closing += MainWindow_Closing;
|
||||
SourceInitialized += (_, _) => UpdateTitleBarTheme(_titleBarIsLight);
|
||||
StateChanged += (_, _) => MaximizeButton.Content = WindowState == WindowState.Maximized ? "\uE923" : "\uE922";
|
||||
}
|
||||
|
||||
private void Minimize_Click(object sender, RoutedEventArgs e) => WindowState = WindowState.Minimized;
|
||||
|
||||
private void MaximizeRestore_Click(object sender, RoutedEventArgs e)
|
||||
=> WindowState = WindowState == WindowState.Maximized ? WindowState.Normal : WindowState.Maximized;
|
||||
|
||||
private void CloseWindowButton_Click(object sender, RoutedEventArgs e) => Close();
|
||||
|
||||
private void MainWindow_Closing(object? sender, System.ComponentModel.CancelEventArgs e)
|
||||
{
|
||||
if (_exitConfirmed) return;
|
||||
e.Cancel = true;
|
||||
ExitConfirmOverlay.Visibility = Visibility.Visible;
|
||||
}
|
||||
|
||||
private void CancelExit_Click(object sender, RoutedEventArgs e) => ExitConfirmOverlay.Visibility = Visibility.Collapsed;
|
||||
|
||||
private void ConfirmExit_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
_exitConfirmed = true;
|
||||
SaveSettings();
|
||||
Close();
|
||||
}
|
||||
|
||||
private void InputList_DragEnter(object sender, DragEventArgs e)
|
||||
{
|
||||
e.Effects = e.Data.GetDataPresent(DataFormats.FileDrop) ? DragDropEffects.Copy : DragDropEffects.None;
|
||||
e.Handled = true;
|
||||
}
|
||||
|
||||
private void InputList_Drop(object sender, DragEventArgs e)
|
||||
{
|
||||
if (!e.Data.GetDataPresent(DataFormats.FileDrop)) return;
|
||||
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop)!;
|
||||
foreach (string file in files.Where(f => string.Equals(Path.GetExtension(f), ".avi", StringComparison.OrdinalIgnoreCase)).OrderBy(NaturalKey))
|
||||
if (!_inputs.Contains(file, StringComparer.OrdinalIgnoreCase)) _inputs.Add(file);
|
||||
}
|
||||
|
||||
private void AddInputs_Click(object sender, RoutedEventArgs e)
|
||||
@@ -100,7 +144,8 @@ public partial class MainWindow : Window
|
||||
LogBox.Clear();
|
||||
_renderCancellation = new CancellationTokenSource();
|
||||
Progress<RenderProgress> progress = new(UpdateProgress);
|
||||
await new RenderPipeline().RenderAsync(settings, progress, AppendLog, _renderCancellation.Token);
|
||||
IReadOnlyList<string> resolvedInputs = await new RenderPipeline().RenderAsync(settings, progress, AppendLog, _renderCancellation.Token);
|
||||
ReplaceInputs(resolvedInputs);
|
||||
_lastRenderedFile = Path.Combine(settings.OutputDirectory, settings.OutputName + "_final.mp4");
|
||||
OpenOutputButton.IsEnabled = true;
|
||||
PreviewRenderedButton.IsEnabled = File.Exists(_lastRenderedFile);
|
||||
@@ -138,7 +183,15 @@ public partial class MainWindow : Window
|
||||
EncoderMode encoder = Enum.Parse<EncoderMode>(((ComboBoxItem)EncoderBox.SelectedItem).Tag!.ToString()!);
|
||||
return new(_inputs.ToList(), EndCardBox.Text.Trim(), OutputFolderBox.Text.Trim(), OutputNameBox.Text.Trim(),
|
||||
FfmpegPathBox.Text.Trim(), FfprobePathBox.Text.Trim(),
|
||||
encoder, Number(TrimBox.Text, "trim start"), Number(FadeBox.Text, "fade"), Number(HoldBox.Text, "end-card hold"), interval);
|
||||
encoder, Number(TrimBox.Text, "trim start"), Number(FadeBox.Text, "fade"), Number(HoldBox.Text, "end-card hold"), interval,
|
||||
MoveSourcesBox.IsChecked == true);
|
||||
}
|
||||
|
||||
private void ReplaceInputs(IReadOnlyList<string> paths)
|
||||
{
|
||||
_inputs.Clear();
|
||||
foreach (string path in paths)
|
||||
_inputs.Add(path);
|
||||
}
|
||||
|
||||
private void Cancel_Click(object sender, RoutedEventArgs e)
|
||||
@@ -242,7 +295,8 @@ public partial class MainWindow : Window
|
||||
TrimBox.Text.Trim(),
|
||||
FadeBox.Text.Trim(),
|
||||
HoldBox.Text.Trim(),
|
||||
IntervalBox.Text.Trim()));
|
||||
IntervalBox.Text.Trim(),
|
||||
MoveSourcesBox.IsChecked == true));
|
||||
}
|
||||
|
||||
private void OpenPreview(string mediaPath)
|
||||
@@ -332,10 +386,40 @@ public partial class MainWindow : Window
|
||||
SetBrush("PrimaryTextBrush", light ? "#FFFFFF" : "#07111D");
|
||||
SetBrush("SelectionBrush", light ? "#BEE4FF" : "#295C87");
|
||||
SetBrush("SelectionTextBrush", light ? "#122033" : "#FFFFFF");
|
||||
|
||||
_titleBarIsLight = light;
|
||||
UpdateTitleBarTheme(light);
|
||||
}
|
||||
|
||||
private void SetBrush(string key, string color)
|
||||
{
|
||||
Application.Current.Resources[key] = new SolidColorBrush((Color)ColorConverter.ConvertFromString(color));
|
||||
}
|
||||
|
||||
private void UpdateTitleBarTheme(bool light)
|
||||
{
|
||||
IntPtr hwnd = new WindowInteropHelper(this).Handle;
|
||||
if (hwnd == IntPtr.Zero) return;
|
||||
|
||||
int useImmersiveDarkMode = light ? 0 : 1;
|
||||
DwmSetWindowAttribute(hwnd, DWMWA_USE_IMMERSIVE_DARK_MODE, ref useImmersiveDarkMode, sizeof(int));
|
||||
|
||||
int captionColor = ToColorRef(light ? "#F4F7FB" : "#0E1525");
|
||||
int textColor = ToColorRef(light ? "#122033" : "#F5F7FB");
|
||||
DwmSetWindowAttribute(hwnd, DWMWA_CAPTION_COLOR, ref captionColor, sizeof(int));
|
||||
DwmSetWindowAttribute(hwnd, DWMWA_TEXT_COLOR, ref textColor, sizeof(int));
|
||||
}
|
||||
|
||||
private static int ToColorRef(string hexColor)
|
||||
{
|
||||
Color color = (Color)ColorConverter.ConvertFromString(hexColor);
|
||||
return color.R | (color.G << 8) | (color.B << 16);
|
||||
}
|
||||
|
||||
private const int DWMWA_USE_IMMERSIVE_DARK_MODE = 20;
|
||||
private const int DWMWA_CAPTION_COLOR = 35;
|
||||
private const int DWMWA_TEXT_COLOR = 36;
|
||||
|
||||
[DllImport("dwmapi.dll", PreserveSig = true)]
|
||||
private static extern int DwmSetWindowAttribute(IntPtr hwnd, int attribute, ref int value, int size);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user