private void MoveSplitter(double offsetX, double offsetY) { double delta = Orientation == Orientation.Vertical ? offsetY : offsetX; double child1Length, child2Length, minDelta, maxDelta; GetChildrenLengthes(out child1Length, out child2Length); GetMinMaxDelta(out minDelta, out maxDelta); delta = Math.Min(Math.Max(delta, minDelta), maxDelta); if (!IsSplitterTopLeft) { delta = -delta; } double newValue; double length1 = IsSplitterTopLeft ? child1Length : child2Length; double length2 = IsSplitterTopLeft ? child2Length : child1Length; if (SplitterDistance.IsStar || SplitterDistance.IsAutoStar) { newValue = (length1 + delta) / (length2 - delta); } else { newValue = length1 + delta; } SplitterUnitType unitType = SplitterDistance.UnitType; MoveSplitter(new SplitterDistance(newValue, unitType)); }
internal static SplitterLength FromString(string s, CultureInfo cultureInfo) { string str = s.Trim(); double num = 1.0; SplitterUnitType unitType = SplitterUnitType.Stretch; //if (str == "*") // unitType = SplitterUnitType.Fill; //else // num = Convert.ToDouble(str, (IFormatProvider)cultureInfo); if (str.Contains("*")) { unitType = SplitterUnitType.Fill; double va = 0; if (double.TryParse(str.Replace("*", ""), out va) && va > 1) { num = va; } } else { num = Convert.ToDouble(str, (IFormatProvider)cultureInfo); } return(new SplitterLength(num, unitType)); }
/// <summary>Initializes a new instance of the <see cref="SplitterDistance"/> class.</summary> /// <param name="value">The initial value of this instance of <see cref="SplitterDistance"/>.</param> /// <param name="unitType">The <see cref="SplitterUnitType"/> held by this instance of <see cref="SplitterDistance"/>.</param> /// <exception cref="ArgumentException"><paramref name="value"/> is negtive, or equal to <see cref="Double.NegativeInfinity"/> or <see cref="Double.PositiveInfinity"/>.</exception> public SplitterDistance(double value, SplitterUnitType unitType) { if (double.IsInfinity(value) || value < 0) { throw new ArgumentException(SR.SplitterDistance_Constructor_InvalidValue, "value"); } if (unitType != SplitterUnitType.Pixel && unitType != SplitterUnitType.Star) { throw new ArgumentException(SR.SplitterDistance_Constructor_InvalidUnitType, "unitType"); } _value = value; _unitType = unitType; }
internal static SplitterLength FromString(string s, CultureInfo cultureInfo) { string str = s.Trim(); double num = 1.0; SplitterUnitType unitType = SplitterUnitType.Stretch; if (str == "*") { unitType = SplitterUnitType.Fill; } else if (str.EndsWith("fixed", StringComparison.OrdinalIgnoreCase)) { unitType = SplitterUnitType.Fixed; num = Convert.ToDouble(str.Substring(0, str.Length - 5), (IFormatProvider)cultureInfo); } else { num = Convert.ToDouble(str, (IFormatProvider)cultureInfo); } return(new SplitterLength(num, unitType)); }
private static void FromString(string s, CultureInfo cultureInfo, out double value, out SplitterUnitType unit) { string str = s.Trim().ToUpperInvariant(); if (str == "AUTO") { value = double.NaN; unit = SplitterUnitType.Pixel; return; } if (str == "AUTO*") { value = double.NaN; unit = SplitterUnitType.Star; return; } value = 0.0; unit = SplitterUnitType.Pixel; int length = str.Length; int suffixLength = 0; double factor = 1.0; for (int i = 0; i < UnitTypeStrings.Length; i++) { if (str.EndsWith(UnitTypeStrings[i], StringComparison.Ordinal)) { suffixLength = UnitTypeStrings[i].Length; unit = UnitTypes[i]; break; } } if (suffixLength == 0) { for (int i = 0; i < PixelUnitStrings.Length; i++) { if (str.EndsWith(PixelUnitStrings[i], StringComparison.Ordinal)) { suffixLength = PixelUnitStrings[i].Length; factor = PixelUnitFactors[i]; break; } } } if (length == suffixLength && unit == SplitterUnitType.Star) { value = 1.0; } else { string str2 = str.Substring(0, length - suffixLength); value = Convert.ToDouble(str2, cultureInfo) * factor; } }
public SplitterLength(double value, SplitterUnitType unitType) { this.unitValue = value; this.unitType = unitType; }
private static void FromString(string s, CultureInfo cultureInfo, out double value, out SplitterUnitType unit) { string str = s.Trim().ToUpperInvariant(); if (str == "AUTO") { value = double.NaN; unit = SplitterUnitType.Pixel; return; } if (str == "AUTO*") { value = double.NaN; unit = SplitterUnitType.Star; return; } value = 0.0; unit = SplitterUnitType.Pixel; int length = str.Length; int suffixLength = 0; double factor = 1.0; for (int i = 0; i < UnitTypeStrings.Length; i ++) { if (str.EndsWith(UnitTypeStrings[i], StringComparison.Ordinal)) { suffixLength = UnitTypeStrings[i].Length; unit = UnitTypes[i]; break; } } if (suffixLength == 0) { for (int i = 0; i < PixelUnitStrings.Length; i++) { if (str.EndsWith(PixelUnitStrings[i], StringComparison.Ordinal)) { suffixLength = PixelUnitStrings[i].Length; factor = PixelUnitFactors[i]; break; } } } if (length == suffixLength && unit == SplitterUnitType.Star) value = 1.0; else { string str2 = str.Substring(0, length - suffixLength); value = Convert.ToDouble(str2, cultureInfo) * factor; } }