Пример #1
0
        bool ProcessTemplateStyle(Style style, string attrKey, string attrValue)
        {
            switch (attrKey)
            {
            case "direction":
                if (Flex.StringToDirection(attrValue, out Direction direction))
                {
                    style.Direction = direction;
                }
                break;

            case "flex-direction":
                if (Flex.StringToFlexDirection(attrValue, out FlexDirection flexDirection))
                {
                    style.FlexDirection = flexDirection;
                }
                break;

            case "justify-content":
                if (Flex.StringToJustify(attrValue, out Justify justifyContent))
                {
                    style.JustifyContent = justifyContent;
                }
                break;

            case "align-content":
                if (Flex.StringToAlign(attrValue, out Align alignContent))
                {
                    style.AlignContent = alignContent;
                }
                break;

            case "align-items":
                if (Flex.StringToAlign(attrValue, out Align alignItem))
                {
                    style.AlignItems = alignItem;
                }
                break;

            case "align-self":
                if (Flex.StringToAlign(attrValue, out Align alignSelf))
                {
                    style.AlignSelf = alignSelf;
                }
                break;

            case "flex-wrap":
                if (Flex.StringToWrap(attrValue, out Wrap flexWrap))
                {
                    style.FlexWrap = flexWrap;
                }
                break;

            case "overflow":
                if (Flex.StringToOverflow(attrValue, out Overflow overflow))
                {
                    style.Overflow = overflow;
                }
                break;

            case "display":
                if (Flex.StringToDisplay(attrValue, out Display display))
                {
                    style.Display = display;
                }
                break;

            case "flex":
                if (float.TryParse(attrValue, out float flex))
                {
                    style.Flex = flex;
                }
                break;

            case "flex-grow":
                if (float.TryParse(attrValue, out float flexGrow))
                {
                    style.FlexGrow = flexGrow;
                }
                break;

            case "flex-shrink":
                if (float.TryParse(attrValue, out float flexShrink))
                {
                    style.FlexShrink = flexShrink;
                }
                break;

            case "flex-basis":
                style.FlexBasis = ParseValueFromString(attrValue);
                break;

            case "position":
                if (Flex.StringToPositionType(attrValue, out PositionType position))
                {
                    style.PositionType = position;
                }
                break;

            case "width":
                style.Dimensions[(int)Dimension.Width] = ParseValueFromString(attrValue);
                break;

            case "height":
                style.Dimensions[(int)Dimension.Height] = ParseValueFromString(attrValue);
                break;

            case "min-width":
                style.MinDimensions[(int)Dimension.Width] = ParseValueFromString(attrValue);
                break;

            case "min-height":
                style.MinDimensions[(int)Dimension.Height] = ParseValueFromString(attrValue);
                break;

            case "max-width":
                style.MaxDimensions[(int)Dimension.Width] = ParseValueFromString(attrValue);
                break;

            case "max-height":
                style.MaxDimensions[(int)Dimension.Height] = ParseValueFromString(attrValue);
                break;

            default:
                // parse [margin|padding|border|pos]-[Edgexxxx]
                if (ParseBreakWork(attrKey, out string head, out string tail))
                {
                    Value[] valuesToSet = null;
                    switch (head)
                    {
                    case "margin": valuesToSet = style.Margin; break;

                    case "padding": valuesToSet = style.Padding; break;

                    case "border": valuesToSet = style.Border; break;

                    case "pos": valuesToSet = style.Position; break;

                    default: return(false);
                    }
                    if (valuesToSet == null)
                    {
                        break;
                    }

                    if (tail == "")
                    {
                        var valueArray = ParseFourValueFromString(attrValue);
                        if (valueArray != null)
                        {
                            for (int i = 0; i < valueArray.Length; i++)
                            {
                                valuesToSet[i] = valueArray[i];
                            }
                        }
                    }
                    else if (Flex.StringToEdge(tail, out Edge edge))
                    {
                        valuesToSet[(int)edge] = ParseValueFromString(attrValue);
                    }
                }
                else
                {
                    return(false);
                }
                break;
            }
Пример #2
0
        internal void ProcessNodeStyle(Node node, string attrKey, string attrValue)
        {
            switch (attrKey)
            {
            case "position":
                if (Flex.StringToPositionType(attrValue, out PositionType position))
                {
                    node.StyleSetPositionType(position);
                }
                break;

            case "align-content":
                if (Flex.StringToAlign(attrValue, out Align alignContent))
                {
                    node.StyleSetAlignContent(alignContent);
                }
                break;

            case "align-items":
                if (Flex.StringToAlign(attrValue, out Align alignItem))
                {
                    node.StyleSetAlignItems(alignItem);
                }
                break;

            case "align-self":
                if (Flex.StringToAlign(attrValue, out Align alignSelf))
                {
                    node.StyleSetAlignSelf(alignSelf);
                }
                break;

            case "flex-direction":
                if (Flex.StringToFlexDirection(attrValue, out FlexDirection flexDirection))
                {
                    node.StyleSetFlexDirection(flexDirection);
                }
                break;

            case "flex-wrap":
                if (Flex.StringToWrap(attrValue, out Wrap flexWrap))
                {
                    node.StyleSetFlexWrap(flexWrap);
                }
                break;

            case "flex-basis":
                var flexBasisValue = ParseValueFromString(attrValue);
                if (flexBasisValue.unit == Unit.Auto)
                {
                    node.NodeStyleSetFlexBasisAuto();
                }
                else if (flexBasisValue.unit == Unit.Point)
                {
                    node.StyleSetFlexBasis(flexBasisValue.value);
                }
                else if (flexBasisValue.unit == Unit.Percent)
                {
                    node.StyleSetFlexBasisPercent(flexBasisValue.value);
                }
                break;

            case "flex-shrink":
                if (float.TryParse(attrValue, out float flexShrink))
                {
                    node.StyleSetFlexShrink(flexShrink);
                }
                break;

            case "flex-grow":
                if (float.TryParse(attrValue, out float flexGrow))
                {
                    node.StyleSetFlexGrow(flexGrow);
                }
                break;

            case "justify-content":
                if (Flex.StringToJustify(attrValue, out Justify justifyContent))
                {
                    node.StyleSetJustifyContent(justifyContent);
                }
                break;

            case "direction":
                if (Flex.StringToDirection(attrValue, out Direction direction))
                {
                    node.StyleSetDirection(direction);
                }
                break;

            case "width":
                node.Helper_SetDimensions(ParseValueFromString(attrValue), Dimension.Width);
                break;

            case "height":
                node.Helper_SetDimensions(ParseValueFromString(attrValue), Dimension.Height);
                break;

            case "min-width":
                node.Helper_SetMinDimensions(ParseValueFromString(attrValue), Dimension.Width);
                break;

            case "min-height":
                node.Helper_SetMinDimensions(ParseValueFromString(attrValue), Dimension.Height);
                break;

            case "max-width":
                node.Helper_SetMaxDimensions(ParseValueFromString(attrValue), Dimension.Width);
                break;

            case "max-height":
                node.Helper_SetMaxDimensions(ParseValueFromString(attrValue), Dimension.Height);
                break;

            default:
                // parse [margin|padding|border]-[Edgexxxx]
                if (ParseBreakWork(attrKey, out string head, out string tail))
                {
                    if (head == "margin" || head == "padding" || head == "border" || head == "pos")
                    {
                        if (tail == "")
                        {
                            var valueArray = ParseFourValueFromString(attrValue);
                            if (valueArray != null)
                            {
                                for (int i = 0; i < valueArray.Length; i++)
                                {
                                    node.Helper_SetMarginPaddingBorder(head, (Edge)i, valueArray[i]);
                                }
                            }
                        }
                        else if (Flex.StringToEdge(tail, out Edge edge))
                        {
                            node.Helper_SetMarginPaddingBorder(head, edge, ParseValueFromString(attrValue));
                        }
                    }
                }
                break;
            }
        }