Ejemplo n.º 1
0
 public NativeViewWrapper(FrameworkElement nativeElement, GetDesiredSizeDelegate getDesiredSizeDelegate = null, ArrangeOverrideDelegate arrangeOverrideDelegate = null,
                          MeasureOverrideDelegate measureOverrideDelegate = null)
 {
     GetDesiredSizeDelegate  = getDesiredSizeDelegate;
     ArrangeOverrideDelegate = arrangeOverrideDelegate;
     MeasureOverrideDelegate = measureOverrideDelegate;
     NativeElement           = nativeElement;
 }
Ejemplo n.º 2
0
		public NativeViewWrapper(FrameworkElement nativeElement, GetDesiredSizeDelegate getDesiredSizeDelegate = null, ArrangeOverrideDelegate arrangeOverrideDelegate = null,
								 MeasureOverrideDelegate measureOverrideDelegate = null)
		{
			GetDesiredSizeDelegate = getDesiredSizeDelegate;
			ArrangeOverrideDelegate = arrangeOverrideDelegate;
			MeasureOverrideDelegate = measureOverrideDelegate;
			NativeElement = nativeElement;
		}
Ejemplo n.º 3
0
 public NativeViewWrapper(FrameworkElement nativeElement, GetDesiredSizeDelegate getDesiredSizeDelegate = null, ArrangeOverrideDelegate arrangeOverrideDelegate = null,
                          MeasureOverrideDelegate measureOverrideDelegate = null)
 {
     GetDesiredSizeDelegate  = getDesiredSizeDelegate;
     ArrangeOverrideDelegate = arrangeOverrideDelegate;
     MeasureOverrideDelegate = measureOverrideDelegate;
     NativeElement           = nativeElement;
     nativeElement.TransferbindablePropertiesToWrapper(this);
 }
Ejemplo n.º 4
0
 public static View ToView(this FrameworkElement view, GetDesiredSizeDelegate getDesiredSizeDelegate = null, ArrangeOverrideDelegate arrangeOverrideDelegate = null,
                           MeasureOverrideDelegate measureOverrideDelegate = null)
 {
     return(new NativeViewWrapper(view, getDesiredSizeDelegate, arrangeOverrideDelegate, measureOverrideDelegate));
 }
Ejemplo n.º 5
0
 public static void Add(this IList <View> children, FrameworkElement view, GetDesiredSizeDelegate getDesiredSizeDelegate = null, ArrangeOverrideDelegate arrangeOverrideDelegate = null,
                        MeasureOverrideDelegate measureOverrideDelegate = null)
 {
     children.Add(view.ToView(getDesiredSizeDelegate, arrangeOverrideDelegate, measureOverrideDelegate));
 }
Ejemplo n.º 6
0
        private void TestInvalidationSystemCore(bool parentIsCollapsed, ReturnBoolDelegate getArrangeHasBeenCalledVal)
        {
            var worldMatrix = Matrix.Zero;

            ResetElementState();

            onMeasureOverride += SetMeasureOverrideToCalled;
            onArrageOverride += SetArrangeOverrideToCalled;
            onCollapsedOverride += SetCollapseOverrideToCalled;

            Measure(Vector3.Zero);
            Arrange(Vector3.Zero, parentIsCollapsed);
            Assert.IsTrue(IsMeasureValid);
            Assert.IsTrue(IsArrangeValid);

            measureOverrideHasBeenCalled = false;
            arrangeOverrideHasBeenCalled = false;
            collapseOverrideHasBeenCalled = false;

            InvalidateMeasure();
            Assert.IsFalse(IsMeasureValid);
            Assert.IsFalse(IsArrangeValid);
            Measure(Vector3.Zero);
            Assert.IsTrue(IsMeasureValid);
            Assert.IsFalse(IsArrangeValid);
            Assert.IsTrue(measureOverrideHasBeenCalled);
            Arrange(Vector3.Zero, parentIsCollapsed);
            Assert.IsTrue(IsArrangeValid);
            Assert.IsTrue(IsMeasureValid);
            Assert.IsTrue(getArrangeHasBeenCalledVal());
            worldMatrix.M11 = 2;
            UpdateWorldMatrix(ref worldMatrix, false); // check that invalidation of arrange force the update of the world matrix
            Assert.AreEqual(worldMatrix.M11, WorldMatrix.M11);

            measureOverrideHasBeenCalled = false;
            arrangeOverrideHasBeenCalled = false;
            collapseOverrideHasBeenCalled = false;

            InvalidateArrange();
            Assert.IsTrue(IsMeasureValid);
            Assert.IsFalse(IsArrangeValid);
            Measure(Vector3.Zero);
            Assert.IsTrue(IsMeasureValid);
            Assert.IsFalse(IsArrangeValid);
            Assert.IsFalse(measureOverrideHasBeenCalled);
            Arrange(Vector3.Zero, parentIsCollapsed);
            Assert.IsTrue(IsMeasureValid);
            Assert.IsTrue(IsArrangeValid);
            Assert.IsTrue(getArrangeHasBeenCalledVal());
            worldMatrix.M11 = 3;
            UpdateWorldMatrix(ref worldMatrix, false); // check that invalidation of arrange force the update of the world matrix
            Assert.AreEqual(worldMatrix.M11, WorldMatrix.M11);

            measureOverrideHasBeenCalled = false;
            arrangeOverrideHasBeenCalled = false;
            collapseOverrideHasBeenCalled = false;

            Measure(Vector3.Zero);
            Assert.IsTrue(IsMeasureValid);
            Assert.IsTrue(IsArrangeValid);
            Assert.IsFalse(measureOverrideHasBeenCalled);
            Arrange(Vector3.Zero, parentIsCollapsed);
            Assert.IsTrue(IsMeasureValid);
            Assert.IsTrue(IsArrangeValid);
            Assert.IsFalse(getArrangeHasBeenCalledVal());
            worldMatrix.M11 = 4;
            UpdateWorldMatrix(ref worldMatrix, false); // check that the world matrix is not re-calculated if the arrangement is not invalidated
            Assert.AreEqual(3, WorldMatrix.M11);
            
            measureOverrideHasBeenCalled = false;
            arrangeOverrideHasBeenCalled = false;
            collapseOverrideHasBeenCalled = false;

            Measure(Vector3.One); // check that measuring with a new value force the re-measurement but not re-arrangement
            Assert.IsTrue(IsMeasureValid);
            Assert.IsFalse(IsArrangeValid);
            Assert.IsTrue(measureOverrideHasBeenCalled);
            Arrange(Vector3.Zero, parentIsCollapsed);
            Assert.IsTrue(IsMeasureValid);
            Assert.IsTrue(IsArrangeValid);
            Assert.IsFalse(getArrangeHasBeenCalledVal());

            measureOverrideHasBeenCalled = false;
            arrangeOverrideHasBeenCalled = false;
            collapseOverrideHasBeenCalled = false;

            Measure(Vector3.One);
            Assert.IsTrue(IsMeasureValid);
            Assert.IsTrue(IsArrangeValid);
            Assert.IsFalse(measureOverrideHasBeenCalled);
            Arrange(Vector3.One, parentIsCollapsed); // check that arranging with a new value force the re-arrangement
            Assert.IsTrue(IsMeasureValid);
            Assert.IsTrue(IsArrangeValid);
            Assert.IsTrue(getArrangeHasBeenCalledVal());

            Measure(Vector3.One);
            Assert.IsTrue(IsMeasureValid);
            Assert.IsTrue(IsArrangeValid);
            Assert.IsFalse(measureOverrideHasBeenCalled);
            Arrange(Vector3.One, !parentIsCollapsed); // check that arranging with a new value of the parent collapse state force the re-arrangement
            Assert.IsTrue(IsMeasureValid);
            Assert.IsTrue(IsArrangeValid);
            Assert.IsTrue(getArrangeHasBeenCalledVal());
        }
Ejemplo n.º 7
0
        private void TestArrangeNotCollapsedCore(HorizontalAlignment alignX)
        {
            // reset state 
            ResetElementState();

            // set the alignments
            HorizontalAlignment = alignX;
            switch (alignX)
            {
                case HorizontalAlignment.Left:
                    VerticalAlignment = VerticalAlignment.Top;
                    DepthAlignment = DepthAlignment.Back;
                    break;
                case HorizontalAlignment.Center:
                    VerticalAlignment = VerticalAlignment.Center;
                    DepthAlignment = DepthAlignment.Center;
                    break;
                case HorizontalAlignment.Right:
                    VerticalAlignment = VerticalAlignment.Bottom;
                    DepthAlignment = DepthAlignment.Front;
                    break;
                case HorizontalAlignment.Stretch:
                    VerticalAlignment = VerticalAlignment.Stretch;
                    DepthAlignment = DepthAlignment.Stretch;
                    break;
                default:
                    throw new ArgumentOutOfRangeException("alignX");
            }

            // check that the element is measured if necessary
            InvalidateMeasure();
            Measure(Vector3.Zero);
            Arrange(Vector3.Zero, false);
            Assert.AreEqual(true, IsMeasureValid);

            // set the default callbacks
            var desiredSize = 1000 * rand.NextVector3();
            onMeasureOverride = _ => desiredSize;
            onCollapsedOverride = () => collaspedHasBeenCalled = true;
            onArrageOverride = delegate(Vector3 size)
                {
                    Assert.AreEqual(expectedProvidedSizeInMeasureOverride, size);
                    arrangeOverridedHasBeenCalled = true; 

                    return base.ArrangeOverride(size);
                };

            // check size and offset when size is fixed
            Width = 100 * rand.NextFloat();
            Height = 100 * rand.NextFloat();
            Depth = 100 * rand.NextFloat();
            PertubArrangeResultValues();
            expectedProvidedSizeInMeasureOverride = new Vector3(Width, Height, Depth);
            ArrangeAndPerformsNotCollapsedStateTests(1000 * rand.NextVector3(), expectedProvidedSizeInMeasureOverride);

            // revert fixed size
            Width = float.NaN;
            Height = float.NaN;
            Depth = float.NaN;

            // check size and offset when size is not fixed
            PertubArrangeResultValues();
            var providedSpace = 1000 * rand.NextVector3();
            var providedWithoutMargins = CalculateSizeWithoutThickness(ref providedSpace, ref MarginInternal);
            if (HorizontalAlignment == HorizontalAlignment.Stretch && VerticalAlignment == VerticalAlignment.Stretch && DepthAlignment == DepthAlignment.Stretch)
            {
                expectedProvidedSizeInMeasureOverride = providedWithoutMargins;
                ArrangeAndPerformsNotCollapsedStateTests(providedSpace, providedWithoutMargins);
            }
            else
            {
                Measure(providedSpace);
                expectedProvidedSizeInMeasureOverride = new Vector3(
                    Math.Min(DesiredSize.X, providedWithoutMargins.X),
                    Math.Min(DesiredSize.Y, providedWithoutMargins.Y),
                    Math.Min(DesiredSize.Z, providedWithoutMargins.Z));
                ArrangeAndPerformsNotCollapsedStateTests(providedSpace, expectedProvidedSizeInMeasureOverride);
            }

            // check the size if extrema values are set
            PertubArrangeResultValues();
            var extremum = new Vector3(21, 22, 23);
            MinimumWidth = extremum.X;
            MinimumHeight = extremum.Y;
            MinimumDepth = extremum.Z;
            MaximumWidth = extremum.X;
            MaximumHeight = extremum.Y;
            MaximumDepth = extremum.Z;
            expectedProvidedSizeInMeasureOverride = extremum;
            ArrangeAndPerformsNotCollapsedStateTests(providedSpace, extremum);

            // revert extrema values
            MinimumWidth = 0;
            MinimumHeight = 0;
            MinimumDepth = 0;
            MaximumWidth = float.PositiveInfinity;
            MaximumHeight =float.PositiveInfinity;
            MaximumDepth = float.PositiveInfinity;

            // check blend of above cases
            PertubArrangeResultValues();
            MinimumWidth = extremum.X;
            MaximumWidth = extremum.X;
            Height = 100 * rand.NextFloat();
            providedWithoutMargins = CalculateSizeWithoutThickness(ref providedSpace, ref MarginInternal);
            if (HorizontalAlignment == HorizontalAlignment.Stretch && VerticalAlignment == VerticalAlignment.Stretch && DepthAlignment == DepthAlignment.Stretch)
            {
                expectedProvidedSizeInMeasureOverride = new Vector3(extremum.X, Height, providedWithoutMargins.Z);
                ArrangeAndPerformsNotCollapsedStateTests(providedSpace, expectedProvidedSizeInMeasureOverride);
            }
            else
            {
                expectedProvidedSizeInMeasureOverride = new Vector3(extremum.X, Height, Math.Min(desiredSize.Z, providedWithoutMargins.Z));
                ArrangeAndPerformsNotCollapsedStateTests(providedSpace, expectedProvidedSizeInMeasureOverride);
            }

            // check that the size returned by ArrangeOverride override the previous calculated size for RenderSize
            PertubArrangeResultValues();
            var onArrangeOverrideSize = new Vector3(10000, 20000, 30000);
            onArrageOverride = delegate { arrangeOverridedHasBeenCalled = true; return onArrangeOverrideSize; };
            ArrangeAndPerformsNotCollapsedStateTests(providedSpace, onArrangeOverrideSize);
        }
Ejemplo n.º 8
0
        public void TestArrangeCollapsed()
        {
            // reset state 
            ResetElementState();

            // set margins
            Margin = new Thickness(11,12,13,14,15,16);

            // set the callbacks
            onCollapsedOverride = () => collaspedHasBeenCalled = true;
            onArrageOverride = size => { arrangeOverridedHasBeenCalled = true; return base.ArrangeOverride(size); };

            // check with the parent
            PertubArrangeResultValues();
            ArrangeAndPerformsCollapsedStateTests(true);

            // check with current element collapsed
            Visibility = Visibility.Collapsed;
            PertubArrangeResultValues();
            ArrangeAndPerformsCollapsedStateTests(false);
        }
Ejemplo n.º 9
0
		public static View ToView(this FrameworkElement view, GetDesiredSizeDelegate getDesiredSizeDelegate = null, ArrangeOverrideDelegate arrangeOverrideDelegate = null,
								  MeasureOverrideDelegate measureOverrideDelegate = null)
		{
			return new NativeViewWrapper(view, getDesiredSizeDelegate, arrangeOverrideDelegate, measureOverrideDelegate);
		}
Ejemplo n.º 10
0
		public static void Add(this IList<View> children, FrameworkElement view, GetDesiredSizeDelegate getDesiredSizeDelegate = null, ArrangeOverrideDelegate arrangeOverrideDelegate = null,
							   MeasureOverrideDelegate measureOverrideDelegate = null)
		{
			children.Add(view.ToView(getDesiredSizeDelegate, arrangeOverrideDelegate, measureOverrideDelegate));
		}