示例#1
0
 /// <summary>
 /// Clones an already existing <see cref="CssValue"/>
 /// </summary>
 internal CssValue(CssValue sv)
 {
     type  = sv.Type;
     value = sv.value;
     unit  = sv.Unit;
     flags = sv.Flags;
 }
示例#2
0
 public bool Has_Flags(ECssValueFlags Flags) => 0 != (flags & Flags);
示例#3
0
        private static ECssValueFlags Get_Inherent_Value_Type_Flags(ECssValueTypes Type, ECssUnit Unit, object Value)
        {
            ECssValueFlags Flags = ECssValueFlags.None;

            /*if (Value is Array)
             * {
             *  Flags |= ECssValueFlags.Collection;
             * }*/

            switch (Type)
            {
            // NOTE: Auto values get calculated in vastly different ways, sometimes this doesn't even indicate that a value depends on the value of other properties,
            //so it should NOT get the 'Depends' flag
            case ECssValueTypes.INHERIT:    // Inherited values function like redirects which compute to the current value of the matching property for the owning element's parent
            case ECssValueTypes.PERCENT:    // Percentage values represent a percentage of another property's value
            {
                Flags |= ECssValueFlags.Depends;
                break;
            }

            case ECssValueTypes.NULL:
            case ECssValueTypes.NONE:
            case ECssValueTypes.INITIAL:
            case ECssValueTypes.INTEGER:
            case ECssValueTypes.NUMBER:
            case ECssValueTypes.STRING:
            case ECssValueTypes.KEYWORD:
            case ECssValueTypes.COLOR:
            case ECssValueTypes.IMAGE:
            case ECssValueTypes.POSITION:    // The position has already been resolved here.
            case ECssValueTypes.FUNCTION:    // The function args have already been resolved here.
            {
                Flags |= ECssValueFlags.Absolute;
                break;
            }

            case ECssValueTypes.UNSET:
            case ECssValueTypes.AUTO:
            case ECssValueTypes.DIMENSION:
            case ECssValueTypes.RATIO:
            case ECssValueTypes.RESOLUTION:
            {
                /* XXX:
                 * These values when used on properties CAN be dependant but arent always so idk maybe its best to leave them as absolute?
                 * Maybe we can come up with some sort of intermediate state that causes them to resolve their flag to absolute/dependent AFTER they get assigned to a property?
                 */
                Flags |= ECssValueFlags.Absolute;
                break;
            }

            case ECssValueTypes.COLLECTION:    // A collections flags are the combined flags of all it's sub-values
            {
                if (Value is Array array)
                {        // Multi object
                    foreach (object o in array)
                    {
                        if (o is CssValue cssValue)
                        {
                            Flags |= Get_Inherent_Value_Type_Flags(cssValue.Type, cssValue.Unit, cssValue.value);
                        }
                        else
                        {
                            throw new CssException($"All {nameof(CssValue)} collection members must be {nameof(CssValue)}s");
                        }
                    }
                    return(Flags);
                }
                else if (Value is CssValue cssValue)
                {        // Single object
                    Flags |= Get_Inherent_Value_Type_Flags(cssValue.Type, cssValue.Unit, cssValue.value);
                }
                else
                {
                    throw new CssException($"All {nameof(CssValue)} collection members must be {nameof(CssValue)}s");
                }
                break;
            }

            default:
            {
                throw new NotImplementedException($"Flag handling for the '{Enum.GetName(typeof(ECssValueTypes), Type)}' css-value type has not been implemented!");
            }
            }

            return(Flags);
        }
示例#4
0
 internal CssValue(ECssValueTypes type, object value, ECssValueFlags flags) : this(type)
 {
     this.value  = value;
     this.flags |= flags;
     this.value  = value;
 }
示例#5
0
 private CssValue(ECssValueTypes type)
 {
     this.type = type;
     flags    |= Get_Inherent_Value_Type_Flags(type, unit, value);
 }