public State(WindowLayoutRoot root)
                {
                    this.alpha = root.alpha;

                    this.anchorMin        = root.rectTransform.anchorMin;
                    this.anchorMax        = root.rectTransform.anchorMax;
                    this.anchoredPosition = root.rectTransform.anchoredPosition;
                    this.sizeDelta        = root.rectTransform.sizeDelta;
                    this.pivot            = root.rectTransform.pivot;

                    this.localRotation = root.rectTransform.localRotation;
                    this.localScale    = root.rectTransform.localScale;

                    this.materialStrength = 0f;
                }
				public State(WindowLayoutRoot root) {

					this.alpha = root.alpha;

					this.anchorMin = root.rectTransform.anchorMin;
					this.anchorMax = root.rectTransform.anchorMax;
					this.anchoredPosition = root.rectTransform.anchoredPosition;
					this.sizeDelta = root.rectTransform.sizeDelta;
					this.pivot = root.rectTransform.pivot;

					this.localRotation = root.rectTransform.localRotation;
					this.localScale = root.rectTransform.localScale;

					this.materialStrength = 0f;

				}
            public void Apply(Material material, WindowLayoutRoot root, State startState, State resultState, float value)
            {
                root.alpha = Mathf.Lerp(startState.alpha, resultState.alpha, value);

                root.rectTransform.anchorMin        = Vector2.Lerp(startState.anchorMin, resultState.anchorMin, value);
                root.rectTransform.anchorMax        = Vector2.Lerp(startState.anchorMax, resultState.anchorMax, value);
                root.rectTransform.anchoredPosition = Vector2.Lerp(startState.anchoredPosition, resultState.anchoredPosition, value);
                root.rectTransform.sizeDelta        = Vector2.Lerp(startState.sizeDelta, resultState.sizeDelta, value);
                root.rectTransform.pivot            = Vector2.Lerp(startState.pivot, resultState.pivot, value);

                root.rectTransform.localRotation = Quaternion.Slerp(startState.localRotation, resultState.localRotation, value);
                root.rectTransform.localScale    = Vector3.Lerp(startState.localScale, resultState.localScale, value);

                if (material != null)
                {
                    material.SetFloat(this.GetMaterialStrengthName(), Mathf.Lerp(startState.materialStrength, resultState.materialStrength, value));
                }
            }
            public void Apply(Material material, WindowLayoutRoot root, State state)
            {
                root.alpha = state.alpha;

                root.rectTransform.anchorMin        = state.anchorMin;
                root.rectTransform.anchorMax        = state.anchorMax;
                root.rectTransform.anchoredPosition = state.anchoredPosition;
                root.rectTransform.sizeDelta        = state.sizeDelta;
                root.rectTransform.pivot            = state.pivot;

                root.rectTransform.localRotation = state.localRotation;
                root.rectTransform.localScale    = state.localScale;

                if (material != null)
                {
                    material.SetFloat(this.GetMaterialStrengthName(), state.materialStrength);
                }
            }
			public void Apply(Material material, WindowLayoutRoot root, State startState, State resultState, float value) {
				
				//CanvasUpdater.ForceUpdate();
				
				root.alpha = Mathf.Lerp(startState.alpha, resultState.alpha, value);

				root.rectTransform.anchorMin = Vector2.Lerp(startState.anchorMin, resultState.anchorMin, value);
				root.rectTransform.anchorMax = Vector2.Lerp(startState.anchorMax, resultState.anchorMax, value);
				root.rectTransform.anchoredPosition = Vector2.Lerp(startState.anchoredPosition, resultState.anchoredPosition, value);
				root.rectTransform.sizeDelta = Vector2.Lerp(startState.sizeDelta, resultState.sizeDelta, value);
				root.rectTransform.pivot = Vector2.Lerp(startState.pivot, resultState.pivot, value);
				
				root.rectTransform.localRotation = Quaternion.Slerp(startState.localRotation, resultState.localRotation, value);
				root.rectTransform.localScale = Vector3.Lerp(startState.localScale, resultState.localScale, value);

				if (material != null) {

					material.SetFloat(this.GetMaterialStrengthName(), Mathf.Lerp(startState.materialStrength, resultState.materialStrength, value));

				}

				//CanvasUpdater.ForceUpdate();

			}
			public void Apply(Material material, WindowLayoutRoot root, State state) {
				
				CanvasUpdater.ForceUpdate();
				
				root.alpha = state.alpha;

				root.rectTransform.anchorMin = state.anchorMin;
				root.rectTransform.anchorMax = state.anchorMax;
				root.rectTransform.anchoredPosition = state.anchoredPosition;
				root.rectTransform.sizeDelta = state.sizeDelta;
				root.rectTransform.pivot = state.pivot;
				
				root.rectTransform.localRotation = state.localRotation;
				root.rectTransform.localScale = state.localScale;

				if (material != null) {
					
					material.SetFloat(this.GetMaterialStrengthName(), state.materialStrength);
					
				}

				CanvasUpdater.ForceUpdate();

			}