Exemplo n.º 1
0
        protected ClVariable GetCompositeVariableFromViewAndAttribute(T view, LayoutAttribute attribute)
        {
            if (HasVariableForViewAndAttribute(view, attribute))
            {
                return(GetVariableFromViewAndAttribute(view, attribute));
            }

            switch (attribute)
            {
            case LayoutAttribute.Width:
            {
                var leftVar  = GetVariableFromViewAndAttribute(view, LayoutAttribute.Left);
                var rightVar = GetVariableFromViewAndAttribute(view, LayoutAttribute.Right);

                var widthExpression = Cl.Minus(
                    new ClLinearExpression(rightVar),
                    new ClLinearExpression(leftVar)
                    );

                var widthVariable = new ClVariable(viewEngine.GetViewName(view) + ".Width");

                solver.AddConstraint(new ClLinearEquation(
                                         widthVariable,
                                         widthExpression,
                                         ClStrength.Required
                                         ));

                AddVariableForViewAndAttribute(view, attribute, widthVariable);
                return(widthVariable);
            }

            case LayoutAttribute.Height:
            {
                var topVar    = GetVariableFromViewAndAttribute(view, LayoutAttribute.Top);
                var bottomVar = GetVariableFromViewAndAttribute(view, LayoutAttribute.Bottom);

                var heightExpression = Cl.Minus(
                    new ClLinearExpression(bottomVar),
                    new ClLinearExpression(topVar)
                    );

                var heightVariable = new ClVariable(viewEngine.GetViewName(view) + ".Height");

                solver.AddConstraint(new ClLinearEquation(
                                         heightVariable,
                                         heightExpression,
                                         ClStrength.Required
                                         ));


                solver.AddConstraint(new ClLinearInequality(
                                         heightVariable,
                                         Cl.Operator.GreaterThanOrEqualTo,
                                         new ClLinearExpression(0)
                                         ));


                AddVariableForViewAndAttribute(view, attribute, heightVariable);
                return(heightVariable);
            }

            case LayoutAttribute.CenterX:
            {
                var leftVar  = GetVariableFromViewAndAttribute(view, LayoutAttribute.Left);
                var rightVar = GetVariableFromViewAndAttribute(view, LayoutAttribute.Right);

                var centerXExpression = Cl.Plus(
                    Cl.Divide(new ClLinearExpression(leftVar), new ClLinearExpression(2)),
                    Cl.Divide(new ClLinearExpression(rightVar), new ClLinearExpression(2))
                    );

                var centerXVariable = new ClVariable(viewEngine.GetViewName(view) + ".CenterX");
                solver.AddConstraint(new ClLinearEquation(
                                         centerXVariable,
                                         centerXExpression,
                                         ClStrength.Required
                                         ));

                AddVariableForViewAndAttribute(view, attribute, centerXVariable);
                return(centerXVariable);
            }

            case LayoutAttribute.CenterY:
            {
                var topVar    = GetVariableFromViewAndAttribute(view, LayoutAttribute.Top);
                var bottomVar = GetVariableFromViewAndAttribute(view, LayoutAttribute.Bottom);

                var centerYExpression = Cl.Plus(
                    Cl.Divide(new ClLinearExpression(topVar), new ClLinearExpression(2)),
                    Cl.Divide(new ClLinearExpression(bottomVar), new ClLinearExpression(2))
                    );

                var centerYVariable = new ClVariable(viewEngine.GetViewName(view) + ".CenterY");
                solver.AddConstraint(new ClLinearEquation(
                                         centerYVariable,
                                         centerYExpression,
                                         ClStrength.Required
                                         ));

                AddVariableForViewAndAttribute(view, attribute, centerYVariable);
                return(centerYVariable);
            }
            }

            return(null);
        }
Exemplo n.º 2
0
        protected Variable GetCompositeVariableFromViewAndAttribute(T view, LayoutAttribute attribute, Variable leftVar, Variable rightVar, Variable topVar, Variable bottomVar)
        {
            switch (attribute)
            {
            case LayoutAttribute.Width:
            {
                var widthExpression = kiwi.kiwi.__minus__(
                    rightVar,
                    leftVar
                    );

                var widthVariable = new Variable(viewEngine.GetViewName(view) + ".Width");

                solver.addConstraint(new Constraint(
                                         kiwi.kiwi.__minus__(widthVariable, widthExpression),
                                         RelationalOperator.OP_EQ,
                                         kiwi.kiwi.required));

                AddVariableForViewAndAttribute(view, attribute, widthVariable);
                return(widthVariable);
            }

            case LayoutAttribute.Height:
            {
                var heightExpression = kiwi.kiwi.__minus__(
                    bottomVar,
                    topVar
                    );

                var heightVariable = new Variable(viewEngine.GetViewName(view) + ".Height");

                solver.addConstraint(new Constraint(
                                         kiwi.kiwi.__minus__(heightVariable, heightExpression),
                                         RelationalOperator.OP_EQ,
                                         kiwi.kiwi.required));

                AddVariableForViewAndAttribute(view, attribute, heightVariable);
                return(heightVariable);
            }

            case LayoutAttribute.CenterX:
            {
                var centerXExpression = kiwi.kiwi.__plus__(
                    kiwi.kiwi.__div__(leftVar, 2),
                    kiwi.kiwi.__div__(rightVar, 2)
                    );

                var centerXVariable = new Variable(viewEngine.GetViewName(view) + ".CenterX");
                solver.addConstraint(new Constraint(
                                         kiwi.kiwi.__minus__(centerXVariable, centerXExpression),
                                         RelationalOperator.OP_EQ,
                                         kiwi.kiwi.required
                                         ));

                AddVariableForViewAndAttribute(view, attribute, centerXVariable);
                return(centerXVariable);
            }

            case LayoutAttribute.CenterY:
            {
                var centerYExpression = kiwi.kiwi.__plus__(
                    kiwi.kiwi.__div__(topVar, 2),
                    kiwi.kiwi.__div__(bottomVar, 2)
                    );

                var centerYVariable = new Variable(viewEngine.GetViewName(view) + ".CenterY");
                solver.addConstraint(new Constraint(
                                         kiwi.kiwi.__minus__(centerYVariable, centerYExpression),
                                         RelationalOperator.OP_EQ,
                                         kiwi.kiwi.required
                                         ));

                AddVariableForViewAndAttribute(view, attribute, centerYVariable);
                return(centerYVariable);
            }
            }

            return(null);
        }