Browse Source

[OSX] cache IsClientAreaExtendedToDecorations, and apply it when NSPanel / NSWindow is created and Shown.

pull/8112/head
Dan Walmsley 4 years ago
parent
commit
08487446d9
  1. 56
      native/Avalonia.Native/src/OSX/WindowImpl.mm
  2. 2
      samples/ControlCatalog/ViewModels/MainWindowViewModel.cs
  3. 7
      src/Avalonia.Native/WindowImpl.cs

56
native/Avalonia.Native/src/OSX/WindowImpl.mm

@ -55,8 +55,20 @@ HRESULT WindowImpl::Show(bool activate, bool isDialog) {
@autoreleasepool { @autoreleasepool {
_isDialog = isDialog; _isDialog = isDialog;
bool created = Window == nullptr;
WindowBaseImpl::Show(activate, isDialog); WindowBaseImpl::Show(activate, isDialog);
if(created)
{
if(_isClientAreaExtended)
{
[GetWindowProtocol() setIsExtended:true];
SetExtendClientArea(true);
}
}
HideOrShowTrafficLights(); HideOrShowTrafficLights();
return SetWindowState(_lastWindowState); return SetWindowState(_lastWindowState);
@ -327,37 +339,39 @@ HRESULT WindowImpl::SetExtendClientArea(bool enable) {
@autoreleasepool { @autoreleasepool {
_isClientAreaExtended = enable; _isClientAreaExtended = enable;
if (enable) { if(Window != nullptr) {
Window.titleVisibility = NSWindowTitleHidden; if (enable) {
Window.titleVisibility = NSWindowTitleHidden;
[Window setTitlebarAppearsTransparent:true]; [Window setTitlebarAppearsTransparent:true];
auto wantsTitleBar = (_extendClientHints & AvnSystemChrome) || (_extendClientHints & AvnPreferSystemChrome); auto wantsTitleBar = (_extendClientHints & AvnSystemChrome) || (_extendClientHints & AvnPreferSystemChrome);
if (wantsTitleBar) { if (wantsTitleBar) {
[StandardContainer ShowTitleBar:true]; [StandardContainer ShowTitleBar:true];
} else { } else {
[StandardContainer ShowTitleBar:false]; [StandardContainer ShowTitleBar:false];
} }
if (_extendClientHints & AvnOSXThickTitleBar) { if (_extendClientHints & AvnOSXThickTitleBar) {
Window.toolbar = [NSToolbar new]; Window.toolbar = [NSToolbar new];
Window.toolbar.showsBaselineSeparator = false; Window.toolbar.showsBaselineSeparator = false;
} else {
Window.toolbar = nullptr;
}
} else { } else {
Window.titleVisibility = NSWindowTitleVisible;
Window.toolbar = nullptr; Window.toolbar = nullptr;
[Window setTitlebarAppearsTransparent:false];
View.layer.zPosition = 0;
} }
} else {
Window.titleVisibility = NSWindowTitleVisible;
Window.toolbar = nullptr;
[Window setTitlebarAppearsTransparent:false];
View.layer.zPosition = 0;
}
[GetWindowProtocol() setIsExtended:enable]; [GetWindowProtocol() setIsExtended:enable];
HideOrShowTrafficLights(); HideOrShowTrafficLights();
UpdateStyle(); UpdateStyle();
}
return S_OK; return S_OK;
} }

2
samples/ControlCatalog/ViewModels/MainWindowViewModel.cs

@ -18,7 +18,7 @@ namespace ControlCatalog.ViewModels
private WindowState _windowState; private WindowState _windowState;
private WindowState[] _windowStates; private WindowState[] _windowStates;
private int _transparencyLevel; private int _transparencyLevel;
private ExtendClientAreaChromeHints _chromeHints; private ExtendClientAreaChromeHints _chromeHints = ExtendClientAreaChromeHints.PreferSystemChrome;
private bool _extendClientAreaEnabled; private bool _extendClientAreaEnabled;
private bool _systemTitleBarEnabled; private bool _systemTitleBarEnabled;
private bool _preferSystemChromeEnabled; private bool _preferSystemChromeEnabled;

7
src/Avalonia.Native/WindowImpl.cs

@ -107,6 +107,13 @@ namespace Avalonia.Native
private bool _isExtended; private bool _isExtended;
public bool IsClientAreaExtendedToDecorations => _isExtended; public bool IsClientAreaExtendedToDecorations => _isExtended;
public override void Show(bool activate, bool isDialog)
{
base.Show(activate, isDialog);
InvalidateExtendedMargins();
}
protected override bool ChromeHitTest (RawPointerEventArgs e) protected override bool ChromeHitTest (RawPointerEventArgs e)
{ {
if(_isExtended) if(_isExtended)

Loading…
Cancel
Save