66using Avalonia . Layout ;
77using Avalonia . Media ;
88using Avalonia . Platform . Storage ;
9+ using FluentAvalonia . UI . Controls ;
910using MsBox . Avalonia ;
10- using UnityHubNative . Net ;
1111
1212namespace UnityHubNative . Net ;
1313
@@ -30,6 +30,9 @@ class MainWindow : Window
3030 private static MenuItem s_removeFromListMenuItem ;
3131 private static MenuItem s_revealInFileExplorerMenuItem ;
3232 private static MenuItem s_openInDifferentVersionMenuItem ;
33+ private static CheckBox s_transparentCheckbox ;
34+ private static CheckBox s_acrylicCheckbox ;
35+ private static DockPanel s_transparentPanel ;
3336
3437 public MainWindow ( object data )
3538 {
@@ -39,11 +42,9 @@ public MainWindow(object data)
3942 Content = CreateContent ( ) ;
4043 ReloadEverything ( ) ;
4144 SizeToContent = SizeToContent . WidthAndHeight ;
42- TransparencyLevelHint =
43- [
44- WindowTransparencyLevel . Mica ,
45- ] ;
46- Background = Brushes . Transparent ;
45+ SetupBackground ( ) ;
46+ ActualThemeVariantChanged += ( _ , _ ) => SetupBackground ( ) ;
47+
4748#if DEBUG
4849 this . AttachDevTools ( ) ;
4950#endif
@@ -57,8 +58,9 @@ protected override void OnKeyDown(KeyEventArgs e)
5758 {
5859 if ( ! s_projectSearchBoxAutoComplete . IsKeyboardFocusWithin )
5960 {
60- s_projectSearchBoxAutoComplete . Text += e . KeyModifiers == KeyModifiers . Shift ? e . Key . ToString ( ) : e . Key . ToString ( ) . ToLower ( ) ;
6161 s_projectSearchBoxAutoComplete . Focus ( ) ;
62+ s_projectSearchBoxAutoComplete . Text += e . KeyModifiers == KeyModifiers . Shift ? e . Key . ToString ( ) : e . Key . ToString ( ) . ToLower ( ) ;
63+ s_projectSearchBoxAutoComplete . CaretIndex = s_projectSearchBoxAutoComplete . Text . Length ;
6264 e . Handled = true ;
6365 }
6466 return ;
@@ -84,6 +86,22 @@ protected override void OnOpened(EventArgs e)
8486 s_unityProjectsParent . ContainerFromIndex ( 0 ) ! . Focus ( ) ;
8587 }
8688
89+ void SetupBackground ( )
90+ {
91+ if ( UnityHubNativeNetApp . Config . transparent )
92+ {
93+ TransparencyLevelHint =
94+ [
95+ UnityHubNativeNetApp . Config . acrylic ? WindowTransparencyLevel . AcrylicBlur : WindowTransparencyLevel . Mica ,
96+ WindowTransparencyLevel . Blur ,
97+ ] ;
98+ #if Windows
99+
100+ Background = Brushes . Transparent ;
101+ #endif
102+ }
103+ }
104+
87105 private static void ReloadEverything ( )
88106 {
89107 UnityHubUtils . LoadAll ( ) ;
@@ -332,11 +350,72 @@ private static void ReloadEverything()
332350 } ,
333351 ] )
334352 ] )
353+ } ,
354+ new TabItem
355+ {
356+ Header = "Options" ,
357+ Content = new DockPanel
358+ {
359+ LastChildFill = false
360+ } . AddChildren
361+ ( [
362+ new SettingsExpander
363+ {
364+ Header = new DockPanel
365+ {
366+ LastChildFill = false
367+ } . AddChildren
368+ ( [
369+ new TextBlock
370+ {
371+ Text = "Transparent Window" ,
372+ VerticalAlignment = VerticalAlignment . Center ,
373+ } . SetDock ( Dock . Left ) ,
374+ s_transparentCheckbox = new CheckBox
375+ {
376+ IsChecked = UnityHubNativeNetApp . Config . transparent ,
377+ VerticalAlignment = VerticalAlignment . Center ,
378+ } . OnCheckChanged ( OnTransparencyCheckboxChanged ) . SetDock ( Dock . Right ) ,
379+ ] ) . SetTooltip ( "Makes the window transparent. Uses Mica on Windows and the desktop's blur on Linux.\n Needs restart to take effect." ) ,
380+ } . SetDock ( Dock . Top ) . AddItems
381+ ( [
382+ s_transparentPanel = new DockPanel
383+ {
384+ IsEnabled = UnityHubNativeNetApp . Config . transparent ,
385+ LastChildFill = false ,
386+ } . AddChildren
387+ ( [
388+ new TextBlock
389+ {
390+ Text = "Acrilyc" ,
391+ VerticalAlignment = VerticalAlignment . Center ,
392+ } . SetTooltip ( "Use Acrylic blur. Only works on Windows.\n Needs restart to take effect." ) . SetDock ( Dock . Left ) ,
393+ s_acrylicCheckbox = new CheckBox
394+ {
395+ IsChecked = UnityHubNativeNetApp . Config . transparent ,
396+ VerticalAlignment = VerticalAlignment . Center ,
397+ } . OnCheckChanged ( OnAcrylicCheckboxChanged ) . SetDock ( Dock . Right )
398+ ] )
399+ ] )
400+ ] )
335401 }
336402 ] )
337403 ] )
338404 ] ) ;
339405
406+ private static void OnAcrylicCheckboxChanged ( )
407+ {
408+ UnityHubNativeNetApp . Config . acrylic = ! UnityHubNativeNetApp . Config . acrylic ;
409+ UnityHubNativeNetApp . SaveConfig ( UnityHubNativeNetApp . Config ) ;
410+ }
411+
412+ private static void OnTransparencyCheckboxChanged ( )
413+ {
414+ UnityHubNativeNetApp . Config . transparent = ! UnityHubNativeNetApp . Config . transparent ;
415+ UnityHubNativeNetApp . SaveConfig ( UnityHubNativeNetApp . Config ) ;
416+ s_transparentPanel . IsEnabled = UnityHubNativeNetApp . Config . transparent ;
417+ }
418+
340419 private static Task < IEnumerable < object > > PopulateUnityProjectSearchAutoCompletion ( string ? filter , CancellationToken _ )
341420 {
342421 if ( filter == null )
0 commit comments