예제 #1
0
파일: PopupLength.cs 프로젝트: Egaros/lib
 public PopupLength(double unitValue, PopupLengthUnitType unitType)
 {
     _unitValue      = unitValue;
     UnitType        = unitType;
     RelativeElement = null;
 }
예제 #2
0
파일: PopupLength.cs 프로젝트: Egaros/lib
 public PopupLength(double unitValue, PopupLengthUnitType unitType, string relativeElement)
 {
     _unitValue      = unitValue;
     UnitType        = unitType;
     RelativeElement = relativeElement;
 }
예제 #3
0
        private static void FromString(string stringValue, CultureInfo cultureInfo, out double value, out PopupLengthUnitType unit, out string relativeElement)
        {
            var normalized = stringValue.Trim().ToLowerInvariant();

            // Auto
            if (string.Equals(normalized, "Auto", StringComparison.OrdinalIgnoreCase))
            {
                value           = 0.0;
                unit            = PopupLengthUnitType.Auto;
                relativeElement = null;

                return;
            }

            var starPosition = normalized.IndexOf("*", StringComparison.OrdinalIgnoreCase);

            // Absolute
            if (starPosition == -1)
            {
                relativeElement = null;
                unit            = PopupLengthUnitType.Absolute;

                for (var i = 0; i < PixelUnitStrings.Length; i++)
                {
                    var pixelUnitString = PixelUnitStrings[i];

                    if (normalized.EndsWith(pixelUnitString, StringComparison.Ordinal) == false)
                    {
                        continue;
                    }

                    var valueString = normalized.Substring(0, normalized.Length - pixelUnitString.Length);

                    value = Convert.ToDouble(valueString, cultureInfo) * PixelUnitFactors[i];

                    return;
                }

                {
                    var valueString = normalized.Substring(0, normalized.Length);

                    value = Convert.ToDouble(valueString, cultureInfo);

                    return;
                }
            }

            // Relative
            {
                unit = PopupLengthUnitType.Relative;

                if (starPosition > 0)
                {
                    var valueString = normalized.Substring(0, starPosition);

                    value = Convert.ToDouble(valueString, cultureInfo);
                }
                else
                {
                    value = 1.0;
                }

                relativeElement = starPosition + 1 < normalized.Length ? normalized.Substring(starPosition + 1, normalized.Length - starPosition - 1) : null;
            }
        }