csharpc-sharpdotnetxamlavaloniauicross-platformcross-platform-xamlavaloniaguimulti-platformuser-interfacedotnetcore
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
2.7 KiB
106 lines
2.7 KiB
//
|
|
// Created by Dan Walmsley on 05/05/2022.
|
|
// Copyright (c) 2022 Avalonia. All rights reserved.
|
|
//
|
|
|
|
#include "AvnView.h"
|
|
#include "AutoFitContentView.h"
|
|
#include "WindowInterfaces.h"
|
|
#include "WindowProtocol.h"
|
|
|
|
@implementation AutoFitContentView
|
|
{
|
|
NSVisualEffectView* _titleBarMaterial;
|
|
NSBox* _titleBarUnderline;
|
|
NSView* _content;
|
|
NSVisualEffectView* _blurBehind;
|
|
double _titleBarHeightHint;
|
|
bool _settingSize;
|
|
}
|
|
|
|
-(AutoFitContentView* _Nonnull) initWithContent:(NSView *)content
|
|
{
|
|
_titleBarHeightHint = -1;
|
|
_content = content;
|
|
_settingSize = false;
|
|
|
|
[self setAutoresizesSubviews:true];
|
|
[self setWantsLayer:true];
|
|
|
|
_titleBarMaterial = [NSVisualEffectView new];
|
|
[_titleBarMaterial setBlendingMode:NSVisualEffectBlendingModeWithinWindow];
|
|
[_titleBarMaterial setMaterial:NSVisualEffectMaterialTitlebar];
|
|
[_titleBarMaterial setWantsLayer:true];
|
|
_titleBarMaterial.hidden = true;
|
|
|
|
_titleBarUnderline = [NSBox new];
|
|
_titleBarUnderline.boxType = NSBoxSeparator;
|
|
_titleBarUnderline.fillColor = [NSColor underPageBackgroundColor];
|
|
_titleBarUnderline.hidden = true;
|
|
|
|
[self addSubview:_titleBarMaterial];
|
|
[self addSubview:_titleBarUnderline];
|
|
|
|
_blurBehind = [NSVisualEffectView new];
|
|
[_blurBehind setBlendingMode:NSVisualEffectBlendingModeBehindWindow];
|
|
[_blurBehind setMaterial:NSVisualEffectMaterialLight];
|
|
[_blurBehind setWantsLayer:true];
|
|
_blurBehind.hidden = true;
|
|
|
|
[_blurBehind setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
|
|
[_content setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
|
|
|
|
[self addSubview:_blurBehind];
|
|
[self addSubview:_content];
|
|
|
|
[self setWantsLayer:true];
|
|
return self;
|
|
}
|
|
|
|
-(void) ShowBlur:(bool)show
|
|
{
|
|
_blurBehind.hidden = !show;
|
|
}
|
|
|
|
-(void) ShowTitleBar: (bool) show
|
|
{
|
|
_titleBarMaterial.hidden = !show;
|
|
_titleBarUnderline.hidden = !show;
|
|
}
|
|
|
|
-(void) SetTitleBarHeightHint: (double) height
|
|
{
|
|
_titleBarHeightHint = height;
|
|
|
|
[self setFrameSize:self.frame.size];
|
|
}
|
|
|
|
-(void)setFrameSize:(NSSize)newSize
|
|
{
|
|
if(_settingSize)
|
|
{
|
|
return;
|
|
}
|
|
|
|
_settingSize = true;
|
|
[super setFrameSize:newSize];
|
|
|
|
auto window = (id <AvnWindowProtocol>) [self window];
|
|
|
|
// TODO get actual titlebar size
|
|
|
|
double height = _titleBarHeightHint == -1 ? [window getExtendedTitleBarHeight] : _titleBarHeightHint;
|
|
|
|
NSRect tbar;
|
|
tbar.origin.x = 0;
|
|
tbar.origin.y = newSize.height - height;
|
|
tbar.size.width = newSize.width;
|
|
tbar.size.height = height;
|
|
|
|
[_titleBarMaterial setFrame:tbar];
|
|
tbar.size.height = height < 1 ? 0 : 1;
|
|
[_titleBarUnderline setFrame:tbar];
|
|
|
|
_settingSize = false;
|
|
}
|
|
@end
|