Skip to content

Commit 72783fa

Browse files
committed
refactoring
1 parent b5b627c commit 72783fa

File tree

1 file changed

+35
-37
lines changed

1 file changed

+35
-37
lines changed

source/iNKORE.UI.WPF.Modern/Controls/Helpers/FocusVisualHelper.cs

Lines changed: 35 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -511,23 +511,7 @@ private static void OnFocusVisualIsVisibleChanged(object sender, DependencyPrope
511511
{
512512
var focusVisualMargin = GetFocusVisualMargin(focusedElement);
513513

514-
var cornerRadius = focusedElement.GetValue(ControlHelper.CornerRadiusProperty);
515-
if (cornerRadius != DependencyProperty.UnsetValue && cornerRadius is CornerRadius focusedCornerRadius && focusedCornerRadius != default)
516-
{
517-
var focusVisualCornerRadius = new CornerRadius(
518-
GetSumIfSourceIsNonZero(focusedCornerRadius.TopLeft, -(focusVisualMargin.Left + focusVisualMargin.Top) / 2),
519-
GetSumIfSourceIsNonZero(focusedCornerRadius.TopRight, -(focusVisualMargin.Right + focusVisualMargin.Top) / 2),
520-
GetSumIfSourceIsNonZero(focusedCornerRadius.BottomLeft, -(focusVisualMargin.Left + focusVisualMargin.Bottom) / 2),
521-
GetSumIfSourceIsNonZero(focusedCornerRadius.BottomRight, -(focusVisualMargin.Right + focusVisualMargin.Bottom) / 2));
522-
523-
ControlHelper.SetCornerRadius(focusVisual, focusVisualCornerRadius);
524-
var topLeftRadius = GetSumIfSourceIsNonZero(focusVisualCornerRadius.TopLeft, GetFocusVisualSecondaryThickness(focusedElement).Left);
525-
var topRightRadius = GetSumIfSourceIsNonZero(focusVisualCornerRadius.TopRight, GetFocusVisualSecondaryThickness(focusedElement).Right);
526-
var bottomRightRadius = GetSumIfSourceIsNonZero(focusVisualCornerRadius.BottomLeft, GetFocusVisualSecondaryThickness(focusedElement).Left);
527-
var bottomLeftRadius = GetSumIfSourceIsNonZero(focusVisualCornerRadius.BottomRight, GetFocusVisualSecondaryThickness(focusedElement).Right);
528-
529-
SetFocusVisualPrimaryCornerRadius(focusVisual, new CornerRadius(topLeftRadius, topRightRadius, bottomRightRadius, bottomLeftRadius));
530-
}
514+
ApplyCornerRadiusToFocusVisual(focusVisual, focusedElement, focusVisualMargin);
531515

532516
TransferValue(focusedElement, focusVisual, FocusVisualPrimaryBrushProperty);
533517
TransferValue(focusedElement, focusVisual, FocusVisualPrimaryThicknessProperty);
@@ -556,6 +540,39 @@ private static void OnFocusVisualIsVisibleChanged(object sender, DependencyPrope
556540
}
557541
}
558542

543+
private static void ApplyCornerRadiusToFocusVisual(Control focusVisual, FrameworkElement focusedElement, Thickness focusVisualMargin)
544+
{
545+
var cornerRadius = GetCornerRadiusForFocusedElement(focusedElement);
546+
if (cornerRadius is CornerRadius focusedCornerRadius)
547+
{
548+
var focusVisualCornerRadius = new CornerRadius(
549+
GetSumIfSourceIsNonZero(focusedCornerRadius.TopLeft, -(focusVisualMargin.Left + focusVisualMargin.Top) / 2),
550+
GetSumIfSourceIsNonZero(focusedCornerRadius.TopRight, -(focusVisualMargin.Right + focusVisualMargin.Top) / 2),
551+
GetSumIfSourceIsNonZero(focusedCornerRadius.BottomLeft, -(focusVisualMargin.Left + focusVisualMargin.Bottom) / 2),
552+
GetSumIfSourceIsNonZero(focusedCornerRadius.BottomRight, -(focusVisualMargin.Right + focusVisualMargin.Bottom) / 2));
553+
554+
ControlHelper.SetCornerRadius(focusVisual, focusVisualCornerRadius);
555+
var topLeftRadius = GetSumIfSourceIsNonZero(focusVisualCornerRadius.TopLeft, GetFocusVisualSecondaryThickness(focusedElement).Left);
556+
var topRightRadius = GetSumIfSourceIsNonZero(focusVisualCornerRadius.TopRight, GetFocusVisualSecondaryThickness(focusedElement).Right);
557+
var bottomRightRadius = GetSumIfSourceIsNonZero(focusVisualCornerRadius.BottomLeft, GetFocusVisualSecondaryThickness(focusedElement).Left);
558+
var bottomLeftRadius = GetSumIfSourceIsNonZero(focusVisualCornerRadius.BottomRight, GetFocusVisualSecondaryThickness(focusedElement).Right);
559+
560+
SetFocusVisualPrimaryCornerRadius(focusVisual, new CornerRadius(topLeftRadius, topRightRadius, bottomRightRadius, bottomLeftRadius));
561+
}
562+
}
563+
564+
private static CornerRadius? GetCornerRadiusForFocusedElement(FrameworkElement focusedElement)
565+
{
566+
var cornerRadiusTarget = focusedElement.GetValue(TemplateFocusTargetProperty) as FrameworkElement;
567+
cornerRadiusTarget ??= focusedElement;
568+
return cornerRadiusTarget switch
569+
{
570+
var _ when cornerRadiusTarget.GetValue(Border.CornerRadiusProperty) is CornerRadius borderResult => borderResult,
571+
var _ when cornerRadiusTarget.GetValue(ControlHelper.CornerRadiusProperty) is CornerRadius controlResult => controlResult,
572+
_ => null
573+
};
574+
}
575+
559576
private static void TransferValue(DependencyObject source, DependencyObject target, DependencyProperty dp)
560577
{
561578
if (!source.HasDefaultValue(dp))
@@ -587,26 +604,7 @@ public FocusVisualAdorner(Control focusedElement, UIElement adornedElement, Styl
587604
var focusVisualMargin = GetFocusVisualMargin(focusedElement);
588605
control.Margin = focusVisualMargin;
589606

590-
var cornerRadius = focusedElement.GetValue(ControlHelper.CornerRadiusProperty);
591-
if (cornerRadius != DependencyProperty.UnsetValue && cornerRadius is CornerRadius focusedCornerRadius &&
592-
focusedCornerRadius != default)
593-
{
594-
var focusVisualCornerRadius = new CornerRadius(
595-
GetSumIfSourceIsNonZero(focusedCornerRadius.TopLeft, -(focusVisualMargin.Left + focusVisualMargin.Top) / 2),
596-
GetSumIfSourceIsNonZero(focusedCornerRadius.TopRight, -(focusVisualMargin.Right + focusVisualMargin.Top) / 2),
597-
GetSumIfSourceIsNonZero(focusedCornerRadius.BottomLeft, -(focusVisualMargin.Left + focusVisualMargin.Bottom) / 2),
598-
GetSumIfSourceIsNonZero(focusedCornerRadius.BottomRight, -(focusVisualMargin.Right + focusVisualMargin.Bottom) / 2));
599-
600-
ControlHelper.SetCornerRadius(control, focusVisualCornerRadius);
601-
602-
var topLeftRadius = GetSumIfSourceIsNonZero(focusVisualCornerRadius.TopLeft, GetFocusVisualSecondaryThickness(focusedElement).Left);
603-
var topRightRadius = GetSumIfSourceIsNonZero(focusVisualCornerRadius.TopRight, GetFocusVisualSecondaryThickness(focusedElement).Right);
604-
var bottomRightRadius = GetSumIfSourceIsNonZero(focusVisualCornerRadius.BottomLeft, GetFocusVisualSecondaryThickness(focusedElement).Left);
605-
var bottomLeftRadius = GetSumIfSourceIsNonZero(focusVisualCornerRadius.BottomRight, GetFocusVisualSecondaryThickness(focusedElement).Right);
606-
607-
SetFocusVisualPrimaryCornerRadius(control,
608-
new CornerRadius(topLeftRadius, topRightRadius, bottomRightRadius, bottomLeftRadius));
609-
}
607+
ApplyCornerRadiusToFocusVisual(control, focusedElement, focusVisualMargin);
610608

611609
TransferValue(focusedElement, control, FocusVisualPrimaryBrushProperty);
612610
TransferValue(focusedElement, control, FocusVisualPrimaryThicknessProperty);

0 commit comments

Comments
 (0)