diff --git a/Hyperbar.Windows.Controls/DesktopFlyout/DesktopFlyout.cs b/Hyperbar.Windows.Controls/DesktopBar/DesktopBar.cs
similarity index 61%
rename from Hyperbar.Windows.Controls/DesktopFlyout/DesktopFlyout.cs
rename to Hyperbar.Windows.Controls/DesktopBar/DesktopBar.cs
index bf369e3..d18c823 100644
--- a/Hyperbar.Windows.Controls/DesktopFlyout/DesktopFlyout.cs
+++ b/Hyperbar.Windows.Controls/DesktopBar/DesktopBar.cs
@@ -2,30 +2,30 @@
namespace Hyperbar.Windows.Controls;
-public class DesktopFlyout :
+public class DesktopBar :
DependencyObject
{
public static readonly DependencyProperty ContentProperty =
DependencyProperty.Register(nameof(Content),
- typeof(object), typeof(DesktopFlyout),
+ typeof(object), typeof(DesktopBar),
new PropertyMetadata(null));
public static readonly DependencyProperty PlacementProperty =
DependencyProperty.Register(nameof(Placement),
- typeof(DesktopFlyoutPlacement), typeof(DesktopFlyout),
- new PropertyMetadata(DesktopFlyoutPlacement.Left, OnPlacementPropertyChanged));
+ typeof(DesktopBarPlacemenet), typeof(DesktopBar),
+ new PropertyMetadata(DesktopBarPlacemenet.Left, OnPlacementPropertyChanged));
- private readonly DesktopFlyoutHost host;
- private readonly DesktopFlyoutPresenter presenter;
+ private readonly DesktopBarHost host;
+ private readonly DesktopBarPresenter presenter;
- public DesktopFlyout()
+ public DesktopBar()
{
- presenter = new DesktopFlyoutPresenter
+ presenter = new DesktopBarPresenter
{
Parent = this
};
- host = new DesktopFlyoutHost(presenter);
+ host = new DesktopBarHost(presenter);
host.Activate();
}
@@ -35,16 +35,16 @@ public class DesktopFlyout :
set => SetValue(ContentProperty, value);
}
- public DesktopFlyoutPlacement Placement
+ public DesktopBarPlacemenet Placement
{
- get => (DesktopFlyoutPlacement)GetValue(PlacementProperty);
+ get => (DesktopBarPlacemenet)GetValue(PlacementProperty);
set => SetValue(PlacementProperty, value);
}
private static void OnPlacementPropertyChanged(DependencyObject dependencyObject,
DependencyPropertyChangedEventArgs args)
{
- if (dependencyObject is DesktopFlyout sender)
+ if (dependencyObject is DesktopBar sender)
{
sender.OnPlacementPropertyChanged();
}
diff --git a/Hyperbar.Windows.Controls/DesktopBar/DesktopBarHost.cs b/Hyperbar.Windows.Controls/DesktopBar/DesktopBarHost.cs
new file mode 100644
index 0000000..d26c5b0
--- /dev/null
+++ b/Hyperbar.Windows.Controls/DesktopBar/DesktopBarHost.cs
@@ -0,0 +1,76 @@
+using Microsoft.UI.Xaml;
+using Hyperbar.Windows.UI;
+using Windows.Foundation;
+using WindowStyle = Hyperbar.Windows.Interop.WindowStyle;
+using ExtendedWindowStyle = Hyperbar.Windows.Interop.ExtendedWindowStyle;
+using Hyperbar.Windows.Interop;
+using Microsoft.UI.Xaml.Media;
+
+namespace Hyperbar.Windows.Controls;
+
+internal class DesktopBarHost : Window
+{
+ private readonly DesktopBarPresenter presenter;
+ private DesktopBarPlacemenet placement;
+ private readonly WindowSnapping windowSnapping;
+
+ public DesktopBarHost(DesktopBarPresenter 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;
+ }
+
+ internal void UpdatePlacement(DesktopBarPlacemenet 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 DesktopBarPlacemenet.Left:
+ windowSnapping.Snap(AppBarWindowPlacement.Left, (int)size);
+ break;
+
+ case DesktopBarPlacemenet.Top:
+ windowSnapping.Snap(AppBarWindowPlacement.Top, (int)size);
+ break;
+
+ case DesktopBarPlacemenet.Right:
+ windowSnapping.Snap(AppBarWindowPlacement.Right, (int)size);
+ break;
+
+ case DesktopBarPlacemenet.Bottom:
+ windowSnapping.Snap(AppBarWindowPlacement.Bottom, (int)size);
+ break;
+
+ default:
+ break;
+ }
+
+ presenter.UpdatePlacementState(placement);
+ }
+
+ private void OnLoaded(object sender,
+ RoutedEventArgs args)
+ {
+ UpdatePlacement();
+ this.SetOpacity(255);
+ }
+}
\ No newline at end of file
diff --git a/Hyperbar.Windows.Controls/DesktopFlyout/DesktopFlyoutPlacement.cs b/Hyperbar.Windows.Controls/DesktopBar/DesktopBarPlacemenet.cs
similarity index 70%
rename from Hyperbar.Windows.Controls/DesktopFlyout/DesktopFlyoutPlacement.cs
rename to Hyperbar.Windows.Controls/DesktopBar/DesktopBarPlacemenet.cs
index 8095a23..6d7be5f 100644
--- a/Hyperbar.Windows.Controls/DesktopFlyout/DesktopFlyoutPlacement.cs
+++ b/Hyperbar.Windows.Controls/DesktopBar/DesktopBarPlacemenet.cs
@@ -1,6 +1,6 @@
namespace Hyperbar.Windows.Controls;
-public enum DesktopFlyoutPlacement
+public enum DesktopBarPlacemenet
{
Left,
Top,
diff --git a/Hyperbar.Windows.Controls/DesktopFlyout/DesktopFlyoutPresenter.cs b/Hyperbar.Windows.Controls/DesktopBar/DesktopBarPresenter.cs
similarity index 51%
rename from Hyperbar.Windows.Controls/DesktopFlyout/DesktopFlyoutPresenter.cs
rename to Hyperbar.Windows.Controls/DesktopBar/DesktopBarPresenter.cs
index cdfb884..b493eba 100644
--- a/Hyperbar.Windows.Controls/DesktopFlyout/DesktopFlyoutPresenter.cs
+++ b/Hyperbar.Windows.Controls/DesktopBar/DesktopBarPresenter.cs
@@ -4,20 +4,20 @@ using Microsoft.UI.Xaml.Data;
namespace Hyperbar.Windows.Controls;
-public class DesktopFlyoutPresenter :
+public class DesktopBarPresenter :
ContentControl
{
public static readonly DependencyProperty TemplateSettingsProperty =
DependencyProperty.Register(nameof(TemplateSettings),
- typeof(DesktopFlyoutPresenterTemplateSettings), typeof(DesktopFlyoutPresenter),
+ typeof(DesktopBarPresenterTemplateSettings), typeof(DesktopBarPresenter),
new PropertyMetadata(null));
- internal new DesktopFlyout? Parent;
+ internal new DesktopBar? Parent;
- public DesktopFlyoutPresenter()
+ public DesktopBarPresenter()
{
- DefaultStyleKey = typeof(DesktopFlyoutPresenter);
- TemplateSettings = new DesktopFlyoutPresenterTemplateSettings();
+ DefaultStyleKey = typeof(DesktopBarPresenter);
+ TemplateSettings = new DesktopBarPresenterTemplateSettings();
}
protected override void OnApplyTemplate()
@@ -30,11 +30,11 @@ public class DesktopFlyoutPresenter :
});
}
- public DesktopFlyoutPresenterTemplateSettings TemplateSettings
+ public DesktopBarPresenterTemplateSettings TemplateSettings
{
- get => (DesktopFlyoutPresenterTemplateSettings)GetValue(TemplateSettingsProperty);
+ get => (DesktopBarPresenterTemplateSettings)GetValue(TemplateSettingsProperty);
set => SetValue(TemplateSettingsProperty, value);
}
- internal void UpdatePlacementState(DesktopFlyoutPlacement placement) => VisualStateManager.GoToState(this, $"{placement}Placement", true);
+ internal void UpdatePlacementState(DesktopBarPlacemenet placement) => VisualStateManager.GoToState(this, $"{placement}Placement", true);
}
\ No newline at end of file
diff --git a/Hyperbar.Windows.Controls/DesktopFlyout/DesktopFlyoutPresenter.xaml b/Hyperbar.Windows.Controls/DesktopBar/DesktopBarPresenter.xaml
similarity index 62%
rename from Hyperbar.Windows.Controls/DesktopFlyout/DesktopFlyoutPresenter.xaml
rename to Hyperbar.Windows.Controls/DesktopBar/DesktopBarPresenter.xaml
index 97b1ce7..e3b542b 100644
--- a/Hyperbar.Windows.Controls/DesktopFlyout/DesktopFlyoutPresenter.xaml
+++ b/Hyperbar.Windows.Controls/DesktopBar/DesktopBarPresenter.xaml
@@ -5,32 +5,30 @@
xmlns:controls="using:Hyperbar.Windows.Controls">
-
-
-
+
+
+
-
-
-
+
+
+
- 1
-