Browse Source

add nullable and null checks on titlebar.

pull/3967/head
Dan Walmsley 6 years ago
parent
commit
d75ca95648
  1. 76
      src/Avalonia.Controls/Chrome/TitleBar.cs

76
src/Avalonia.Controls/Chrome/TitleBar.cs

@ -4,11 +4,13 @@ using Avalonia.Controls.Primitives;
namespace Avalonia.Controls.Chrome namespace Avalonia.Controls.Chrome
{ {
#nullable enable
public class TitleBar : TemplatedControl public class TitleBar : TemplatedControl
{ {
private CompositeDisposable _disposables; private CompositeDisposable? _disposables;
private Window _hostWindow; private Window? _hostWindow;
private CaptionButtons _captionButtons; private CaptionButtons? _captionButtons;
public TitleBar(Window hostWindow) public TitleBar(Window hostWindow)
{ {
@ -28,28 +30,31 @@ namespace Avalonia.Controls.Chrome
layer?.Children.Add(this); layer?.Children.Add(this);
_disposables = new CompositeDisposable if (_hostWindow != null)
{ {
_hostWindow.GetObservable(Window.WindowDecorationMarginsProperty) _disposables = new CompositeDisposable
.Subscribe(x => UpdateSize()), {
_hostWindow.GetObservable(Window.WindowDecorationMarginsProperty)
_hostWindow.GetObservable(Window.ExtendClientAreaTitleBarHeightHintProperty) .Subscribe(x => UpdateSize()),
.Subscribe(x => UpdateSize()),
_hostWindow.GetObservable(Window.ExtendClientAreaTitleBarHeightHintProperty)
_hostWindow.GetObservable(Window.OffScreenMarginProperty) .Subscribe(x => UpdateSize()),
.Subscribe(x => UpdateSize()),
_hostWindow.GetObservable(Window.OffScreenMarginProperty)
_hostWindow.GetObservable(Window.WindowStateProperty) .Subscribe(x => UpdateSize()),
.Subscribe(x =>
{ _hostWindow.GetObservable(Window.WindowStateProperty)
PseudoClasses.Set(":minimized", x == WindowState.Minimized); .Subscribe(x =>
PseudoClasses.Set(":normal", x == WindowState.Normal); {
PseudoClasses.Set(":maximized", x == WindowState.Maximized); PseudoClasses.Set(":minimized", x == WindowState.Minimized);
PseudoClasses.Set(":fullscreen", x == WindowState.FullScreen); PseudoClasses.Set(":normal", x == WindowState.Normal);
}) PseudoClasses.Set(":maximized", x == WindowState.Maximized);
}; PseudoClasses.Set(":fullscreen", x == WindowState.FullScreen);
})
_captionButtons?.Attach(_hostWindow); };
_captionButtons?.Attach(_hostWindow);
}
UpdateSize(); UpdateSize();
} }
@ -57,19 +62,22 @@ namespace Avalonia.Controls.Chrome
void UpdateSize() void UpdateSize()
{ {
Margin = new Thickness( if (_hostWindow != null)
_hostWindow.OffScreenMargin.Left,
_hostWindow.OffScreenMargin.Top,
_hostWindow.OffScreenMargin.Right,
_hostWindow.OffScreenMargin.Bottom);
if (_hostWindow.WindowState != WindowState.FullScreen)
{ {
Height = _hostWindow.WindowDecorationMargins.Top; Margin = new Thickness(
_hostWindow.OffScreenMargin.Left,
_hostWindow.OffScreenMargin.Top,
_hostWindow.OffScreenMargin.Right,
_hostWindow.OffScreenMargin.Bottom);
if (_captionButtons != null) if (_hostWindow.WindowState != WindowState.FullScreen)
{ {
_captionButtons.Height = Height; Height = _hostWindow.WindowDecorationMargins.Top;
if (_captionButtons != null)
{
_captionButtons.Height = Height;
}
} }
} }
} }

Loading…
Cancel
Save