mirror of
https://github.com/AtomUI/AtomUI.git
synced 2026-10-22 00:46:48 +08:00
Refactor Popup ShadowLayer resize bug
This commit is contained in:
@@ -35,31 +35,38 @@ internal class PopupBuddyDecorator : SceneMotionActorControl
|
||||
_popup = popup;
|
||||
_decoratorControl = new MotionGhostControl();
|
||||
BindUtils.RelayBind(this, MaskShadowsProperty, _decoratorControl, MotionGhostControl.MaskShadowsProperty);
|
||||
|
||||
if (_popup is IPopupHostProvider popupHostProvider)
|
||||
{
|
||||
if (popupHostProvider.PopupHost == null)
|
||||
if (popupHostProvider.PopupHost != null)
|
||||
{
|
||||
popupHostProvider.PopupHostChanged += host =>
|
||||
{
|
||||
_popupHost = host;
|
||||
if (_popupHost != null)
|
||||
{
|
||||
ConfigureDecorator(_popupHost);
|
||||
}
|
||||
};
|
||||
SetupPopupHost(popupHostProvider.PopupHost);
|
||||
}
|
||||
else
|
||||
{
|
||||
_popupHost = popupHostProvider.PopupHost;
|
||||
if (_popupHost != null)
|
||||
popupHostProvider.PopupHostChanged += host =>
|
||||
{
|
||||
ConfigureDecorator(_popupHost);
|
||||
}
|
||||
SetupPopupHost(host);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
Child = _decoratorControl;
|
||||
}
|
||||
|
||||
private void SetupPopupHost(IPopupHost? popupHost)
|
||||
{
|
||||
if (popupHost is PopupRoot popupRoot)
|
||||
{
|
||||
if (_popupHost is PopupRoot oldPopupRoot)
|
||||
{
|
||||
oldPopupRoot.SizeChanged -= HandleBuddyPopupRootSizeChanged;
|
||||
}
|
||||
popupRoot.SizeChanged += HandleBuddyPopupRootSizeChanged;
|
||||
ConfigureDecorator(popupRoot);
|
||||
}
|
||||
_popupHost = popupHost;
|
||||
}
|
||||
|
||||
private void ConfigureDecorator(IPopupHost popupHost)
|
||||
{
|
||||
@@ -91,6 +98,14 @@ internal class PopupBuddyDecorator : SceneMotionActorControl
|
||||
}
|
||||
}
|
||||
|
||||
private void HandleBuddyPopupRootSizeChanged(object? sender, SizeChangedEventArgs e)
|
||||
{
|
||||
if (sender is PopupRoot popupRoot)
|
||||
{
|
||||
ConfigureDecorator(popupRoot);
|
||||
}
|
||||
}
|
||||
|
||||
protected override Point CalculateTopLevelGhostPosition()
|
||||
{
|
||||
var thickness = MaskShadows.Thickness();
|
||||
|
||||
@@ -66,7 +66,6 @@ internal class PopupBuddyLayer : SceneLayer, IPopupBuddyLayer, IShadowAwareLayer
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void SetupPopupHost(IPopupHost? popupHost)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user