Refactor Popup ShadowLayer resize bug

This commit is contained in:
CHINBOY
2025-06-18 18:41:05 +08:00
parent 535ef12c45
commit c82faefd14
2 changed files with 28 additions and 14 deletions
@@ -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)
{