Пример #1
0
        internal CssValue Derive_ComputedValue(ICssProperty Property)
        {/* Docs:  https://www.w3.org/TR/css-cascade-3/#computed  */
            StyleDefinition Def = Property.Definition;

            // Resolve any relative values
            switch (Type)
            {
            case ECssValueTypes.INHERIT:    // Docs:  https://www.w3.org/TR/CSS2/cascade.html#value-def-inherit
            {
                return(Property.Find_Inherited_Value());
            }

            case ECssValueTypes.PERCENT:
            {
                if (Def.Percentage_Resolver != null)
                {
                    return(Def.Percentage_Resolver(Property, (double)value));
                }
            }
            break;

            case ECssValueTypes.DIMENSION:
            {
                double nv = Resolve(Property.Owner.ownerDocument.cssUnitResolver);
                return(CssValue.From(nv));
            }
            }

            // If we havent resolved a value yet that means this was meant to be handled by a custom handler
            var ResolutionDelegate = Def.PropertyStageResolver[(int)EPropertyStage.Computed];

            if (ResolutionDelegate is object)
            {
                return((CssValue)ResolutionDelegate.Invoke(Property));
            }


            return(this);
        }