예제 #1
0
        public static StackOptions Create(
            bool constrainStart             = true,
            bool constrainSides             = true,
            bool constrainEnd               = true,
            ClStrength strength             = null,
            EdgeInsets?insets               = null,
            bool intrinsicIfNotSet          = false,
            bool alignToCenter              = false,
            double spacing                  = 0,
            EdgeConstraints edgeConstraints = null)
        {
            var options = new StackOptions();

            options.ConstrainStart    = constrainStart;
            options.ConstrainSides    = constrainSides;
            options.ConstrainEnd      = constrainEnd;
            options.Strength          = strength ?? ClStrength.Default;
            options.Insets            = insets.HasValue ? insets.Value : EdgeInsets.Zero;
            options.IntrinsicIfNotSet = intrinsicIfNotSet;
            options.AlignToCenter     = alignToCenter;
            options.Spacing           = spacing;
            options.EdgeConstraints   = edgeConstraints;

            return(options);
        }
예제 #2
0
 public static StackOptions Create(
     bool constrainStart, bool constrainSides, bool constrainEnd,
     ClStrength strength, EdgeInsets?insets, bool intrinsicIfNotSet,
     bool alignToCenter, double spacing)
 {
     return(Create(constrainStart, constrainSides, constrainEnd, strength, insets, intrinsicIfNotSet, alignToCenter, spacing, null));
 }
예제 #3
0
 /// <summary>
 /// Adds multiple constraints.
 /// </summary>
 /// <param name="strength">constraints strengh override. Not changed if null</param>
 /// <param name="constraints">constraints list</param>
 /// <remarks>Every variable of the constraint should belong to current view tree</remarks>
 public CElement AddConstraints(ClStrength strength, IEnumerable <ClConstraint> constraints)
 {
     foreach (var cn in constraints)
     {
         AddConstraint(cn, strength);
     }
     return(this);
 }
 protected ClEditOrStayConstraint(ClVariable var,
                                  ClStrength strength,
                                  double weight = 1.0)
     : base(strength, weight)
 {
     _variable   = var;
     _expression = new ClLinearExpression(_variable, -1.0, _variable.Value);
 }
예제 #5
0
        public static void Center(this CElement parent, CElement child, ClStrength strength = null)
        {
            if (strength == null)
            {
                strength = ClStrength.Default;
            }

            parent.AddConstraint(parent.centerX ^ child.centerX, strength);
            parent.AddConstraint(parent.centerY ^ child.centerY, strength);
        }
예제 #6
0
        public static void MakeSizeIntristic(this CElement element, ClStrength strength = null)
        {
            if (strength == null)
            {
                strength = ClStrength.Default;
            }

            element.AddConstraint(element.width ^ element.intrinsicWidth, strength);
            element.AddConstraint(element.height ^ element.intrinsicHeight, strength);
        }
예제 #7
0
 public static void Embed(this CElement parent, CElement child, ClStrength strength = null)
 {
     if (strength == null)
     {
         strength = ClStrength.Default;
     }
     parent.AddConstraint(new ClLinearConstraint(parent.top, child.top, strength));
     parent.AddConstraint(new ClLinearConstraint(parent.right, child.right, strength));
     parent.AddConstraint(new ClLinearConstraint(parent.bottom, child.bottom, strength));
     parent.AddConstraint(new ClLinearConstraint(parent.left, child.left, strength));
 }
예제 #8
0
        protected void SetValue(ClVariable v, double x, ClStrength s)
        {
            // TODO: Find a better way then manually adding/removing constriants.
            if (VarConstraints.ContainsKey(v.Name))
            {
                ClLinearEquation eq = (ClLinearEquation)VarConstraints[v.Name];
                solver.RemoveConstraint(eq);
                VarConstraints.Remove(v.Name);
            }
            ClLinearEquation eq2 = new ClLinearEquation(v, new ClLinearExpression(x), s);

            solver.AddConstraint(eq2);
            VarConstraints.Add(v.Name, eq2);
        }
예제 #9
0
        /// <summary>
        /// Adds constraint.
        /// </summary>
        /// <param name="constraint">the constraint</param>
        /// <param name="strength">constraints strengh override. Not changed if null</param>
        /// <remarks>Every variable of the constraint should belong to current view tree</remarks>
        public CElement AddConstraint(ClConstraint constraint, ClStrength strength = null)
        {
            ValidateVariables(constraint);

            if (strength != null)
            {
                constraint.SetStrength(strength);
            }

            constraints.Add(constraint);
            Solver.AddConstraint(constraint);

            SetNeedsUpdateLayout();

            return(this);
        }
예제 #10
0
 /// <summary>
 /// Creates constraints to make window resizable
 /// </summary>
 /// <param name="vertical">make vertically resizable</param>
 /// <param name="horizontal">make horizontally resizable</param>
 /// <param name="strength">strength of created constraints</param>
 public virtual void MakeResizable(bool vertical, bool horizontal, ClStrength strength)
 {
     if (strength == null)
     {
         strength = ClStrength.Weak;
     }
     if (horizontal)
     {
         Gui.AddConstraint(Gui.width ^ Gui.WindowSize.width, strength);
     }
     if (vertical)
     {
         Gui.AddConstraint(Gui.height ^ Gui.WindowSize.height, strength);
     }
     resizeable = true;
 }
예제 #11
0
 public ConstraintPrototype(XmlElement node) : base(node)
 {
     Strength   = node.HasAttribute("strength") ? GetStrength(node.GetAttribute("strength")) : ClStrength.Default;
     Constraint = new ConstraintParser().Parse(node.InnerText.Trim(" \n\r\t".ToCharArray()));
 }
예제 #12
0
        public static void Center(this CElement parent, CElement child, EdgeInsets insets, ClStrength strength = null)
        {
            if (strength == null)
            {
                strength = ClStrength.Default;
            }

            parent.AddConstraint(parent.centerX ^ ((insets.Left - insets.Right) / 2) + child.centerX, strength);
            parent.AddConstraint(parent.centerY ^ ((insets.Top - insets.Bottom) / 2) + child.centerY, strength);
        }
예제 #13
0
 /// <summary>
 /// Adds multiple constraints.
 /// </summary>
 /// <param name="strength">constraints strengh override. Not changed if null</param>
 /// <param name="constraints">constraints list</param>
 /// <remarks>Every variable of the constraint should belong to current view tree</remarks>
 public CElement AddConstraints(ClStrength strength, params ClConstraint[] constraints)
 {
     AddConstraints(strength, (IEnumerable <ClConstraint>)constraints);
     return(this);
 }
예제 #14
0
 public ClEditConstraint(ClVariable clv, ClStrength strength, double weight)
     : base(clv, strength, weight)
 {
 }
예제 #15
0
        public static void ConstrainSize(this CElement element, double width, double height, ClStrength strength = null)
        {
            if (strength == null)
            {
                strength = ClStrength.Default;
            }

            element.AddConstraint(new ClLinearConstraint(element.width, toLinearExpression(width), strength));
            element.AddConstraint(new ClLinearConstraint(element.height, toLinearExpression(height), strength));
        }
예제 #16
0
 public ClLinearConstraint(ClLinearExpression cle, ClStrength strength, double weight)
     : base(strength, weight)
 {
     ExpressionField = cle;
 }
예제 #17
0
 public ClLinearEquation(ClLinearExpression cle, ClAbstractVariable clv, ClStrength strength, double weight = 1.0)
     : base(cle.Clone(), strength, weight)
 {
     ExpressionField.AddVariable(clv, -1.0);
 }
예제 #18
0
 public ClLinearEquation(ClLinearExpression cle, ClStrength strength)
     : base(cle, strength)
 {
 }
예제 #19
0
 public ClStayConstraint(ClVariable var, ClStrength strength)
     : base(var, strength, 1.0)
 {
 }
예제 #20
0
 public ClEditConstraint(ClVariable clv, ClStrength strength)
     : base(clv, strength)
 {
 }
예제 #21
0
 public ClStayConstraint(ClVariable var, ClStrength strength, double weight)
     : base(var, strength, weight)
 {
 }
예제 #22
0
 public ClLinearInequality(ClLinearExpression cle, ClStrength strength, double weight)
     : base(cle, strength, weight)
 {
 }
예제 #23
0
 public ClLinearEquation(ClLinearExpression cle, ClStrength strength, double weight)
     : base(cle, strength, weight)
 {
 }
예제 #24
0
 public ClLinearInequality(ClLinearExpression cle, ClStrength strength)
     : base(cle, strength)
 {
 }
예제 #25
0
 public ClLinearEquation(ClAbstractVariable clv, double val, ClStrength strength, double weight = 1.0)
     : base(new ClLinearExpression(val), strength, weight)
 {
     ExpressionField.AddVariable(clv, -1.0);
 }
예제 #26
0
 public ClLinearInequality(ClLinearExpression cle, Cl.Operator op, ClAbstractVariable clv, ClStrength strength, double weight = 1.0)
     : this(cle, op, new ClLinearExpression(clv), strength, weight)
     /* throws ExClInternalError */
 {
 }
예제 #27
0
 public ClLinearEquation(ClLinearExpression cle1, ClLinearExpression cle2, ClStrength strength, double weight = 1.0)
     : base(cle1.Clone(), strength, weight)
 {
     ExpressionField.AddExpression(cle2, -1.0);
 }
예제 #28
0
        public ClLinearInequality(ClLinearExpression cle1, Cl.Operator op, ClLinearExpression cle2, ClStrength strength, double weight = 1.0)
            : base(cle2.Clone(), strength, weight)
            /* throws ExClInternalError */
        {
            const double EPSILON = 1e-8;

            switch (op)
            {
            case Cl.Operator.GreaterThanOrEqualTo:
                SetupGreaterThanOrEqualTo(cle1);
                break;

            case Cl.Operator.GreaterThan:
                SetupGreaterThanOrEqualTo(cle1);
                ExpressionField.IncrementConstant(-EPSILON);
                break;

            case Cl.Operator.LessThanOrEqualTo:
                SetupLessThanOrEqualTo(cle1);
                break;

            case Cl.Operator.LessThan:
                SetupLessThanOrEqualTo(cle1);
                ExpressionField.IncrementConstant(-EPSILON);
                break;

            default:
                // invalid operator
                throw new CassowaryInternalException("Invalid operator in ClLinearInequality constructor");
            }
        }
예제 #29
0
 public ClLinearConstraint(ClLinearExpression cle, ClStrength strength)
     : base(strength, 1.0)
 {
     ExpressionField = cle;
 }
예제 #30
0
 public static StackOptions Create(
     bool constrainStart, bool constrainSides, bool constrainEnd,
     ClStrength strength, EdgeInsets?insets, bool intrinsicIfNotSet)
 {
     return(Create(constrainStart, constrainSides, constrainEnd, strength, insets, intrinsicIfNotSet, false, 0, null));
 }