Dreamine.UI.Wpf 1.0.1
Dreamine.UI.Wpf 사용자 인터페이스 기능과 구성 요소를 제공합니다.
로딩중...
검색중...
일치하는것 없음
LedPositionConverter.cs
이 파일의 문서화 페이지로 가기
1using System;
2using System.Globalization;
3using System.Windows.Data;
5
7{
24 public sealed class LedPositionConverter : IMultiValueConverter
25 {
74 public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
75 {
76 string mode = (parameter as string) ?? "OuterLeft";
77 if (values == null || values.Length < 4) return 0.0;
78
79 var corner = values[0] is LedCorner c ? c : LedCorner.TopRight;
80 double extent = ToDouble(values[1]); // width or height
81 double diameter = ToDouble(values[2]);
82 double edgeOffset = ToDouble(values[3]);
83 double innerScale = (values.Length > 4) ? ToDouble(values[4]) : 0.45;
84
85 double outerLeft = (corner == LedCorner.TopRight || corner == LedCorner.BottomRight)
86 ? extent - diameter - edgeOffset
87 : edgeOffset;
88
89 double outerTop = (corner == LedCorner.BottomLeft || corner == LedCorner.BottomRight)
90 ? extent - diameter - edgeOffset
91 : edgeOffset;
92
93 if (mode.Equals("OuterLeft", StringComparison.OrdinalIgnoreCase)) return outerLeft;
94 if (mode.Equals("OuterTop", StringComparison.OrdinalIgnoreCase)) return outerTop;
95
96 double innerDiameter = diameter * Clamp01(innerScale);
97 double offset = (diameter - innerDiameter) / 2.0;
98
99 if (mode.Equals("InnerLeft", StringComparison.OrdinalIgnoreCase)) return outerLeft + offset;
100 if (mode.Equals("InnerTop", StringComparison.OrdinalIgnoreCase)) return outerTop + offset;
101
102 return 0.0;
103 }
104
161 public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) =>
162 throw new NotSupportedException();
163
188 private static double ToDouble(object v)
189 {
190 if (v is double d) return d;
191 if (v is float f) return f;
192 if (v is int i) return i;
193 if (v is string s && double.TryParse(s, out var r)) return r;
194 return 0.0;
195 }
196
221 private static double Clamp01(double v) => (v < 0) ? 0 : (v > 1 ? 1 : v);
222 }
223}
object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)