More work
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
using Microsoft.UI.Xaml;
|
||||
using Windows.Foundation;
|
||||
using Microsoft.UI.Xaml.Media;
|
||||
using Hyperbar.Interop.Windows;
|
||||
using Hyperbar.UI.Windows;
|
||||
|
||||
namespace Hyperbar.Controls.Windows;
|
||||
|
||||
internal class DesktopApplicationBarHost : Window
|
||||
{
|
||||
private readonly DesktopApplicationBarPresenter presenter;
|
||||
private readonly WindowSnapping windowSnapping;
|
||||
private DesktopApplicationBarPlacemenet placement;
|
||||
|
||||
public DesktopApplicationBarHost(DesktopApplicationBarPresenter presenter)
|
||||
{
|
||||
this.SetOpacity(0);
|
||||
this.SetStyle(WindowStyle.SysMenu | WindowStyle.Visible);
|
||||
this.SetStyle(ExtendedWindowStyle.NoActivate);
|
||||
this.MoveAndResize(0, 0, 0, 0);
|
||||
this.SetTopMost(true);
|
||||
this.SetIsAvailableInSwitchers(false);
|
||||
|
||||
SystemBackdrop = new MicaBackdrop();
|
||||
windowSnapping = WindowSnapping.Create(this.GetHandle());
|
||||
|
||||
this.presenter = presenter;
|
||||
presenter.Loaded += OnLoaded;
|
||||
Content = presenter;
|
||||
|
||||
Closed += OnClosed;
|
||||
}
|
||||
|
||||
internal void UpdatePlacement(DesktopApplicationBarPlacemenet placement)
|
||||
{
|
||||
this.placement = placement;
|
||||
UpdatePlacement();
|
||||
}
|
||||
|
||||
internal void UpdatePlacement()
|
||||
{
|
||||
presenter.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
|
||||
double size = Math.Min(presenter.DesiredSize.Height, presenter.DesiredSize.Width);
|
||||
|
||||
switch (placement)
|
||||
{
|
||||
case DesktopApplicationBarPlacemenet.Left:
|
||||
windowSnapping.Snap(WindowSnappingPlacement.Left, (int)size);
|
||||
break;
|
||||
|
||||
case DesktopApplicationBarPlacemenet.Top:
|
||||
windowSnapping.Snap(WindowSnappingPlacement.Top, (int)size);
|
||||
break;
|
||||
|
||||
case DesktopApplicationBarPlacemenet.Right:
|
||||
windowSnapping.Snap(WindowSnappingPlacement.Right, (int)size);
|
||||
break;
|
||||
|
||||
case DesktopApplicationBarPlacemenet.Bottom:
|
||||
windowSnapping.Snap(WindowSnappingPlacement.Bottom, (int)size);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
presenter.UpdatePlacementState(placement);
|
||||
}
|
||||
|
||||
private void OnClosed(object sender, WindowEventArgs args)
|
||||
{
|
||||
windowSnapping.Dispose();
|
||||
}
|
||||
private void OnLoaded(object sender,
|
||||
RoutedEventArgs args)
|
||||
{
|
||||
UpdatePlacement();
|
||||
this.SetOpacity(255);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user