Example #1
0
 private RectTransform.Edge GetScalingEdge(UiScalingCoordinator coordinator = UiScalingCoordinator.Command)
 {
     if (orientation == UiOrientation.Horizontal)
     {
         return(coordinator == UiScalingCoordinator.LeftMaster ? RectTransform.Edge.Left : RectTransform.Edge.Right);
     }
     else
     {
         return(coordinator == UiScalingCoordinator.LeftMaster ? RectTransform.Edge.Top : RectTransform.Edge.Bottom);
     }
 }
Example #2
0
        public void Resize(float newMasterSize, UiScalingCoordinator scalingCoordinator, float prevMasterSize = 0.0f)
        {
            // Gather some reference values:
            RectTransform rect         = transform as RectTransform;
            float         newScale     = newMasterSize;
            float         previousSize = GetCurrentSize(rect);

            // Determine the pane's new scale based on its role:
            if (scalingRole == UiScalingRole.CenterSlave)
            {
                // Don't allow coordinator to manipulate slave panes directly, they need to go through a master first:
                if (scalingCoordinator == UiScalingCoordinator.Command)
                {
                    return;
                }

                // Adjust slave scale:
                switch (scalingMode)
                {
                case UiScalingMode.AdjustWidth:
                    rect.SetSizeWithCurrentAnchors(GetScalingAxis(), newScale);
                    break;

                case UiScalingMode.AdjustAnchors:
                    SetNewSlaveAnchors(rect, newScale, scalingCoordinator == UiScalingCoordinator.LeftMaster);
                    break;

                case UiScalingMode.AdjustPadding:
                    float newSize = GetCurrentSize(rect) + prevMasterSize - newScale;
                    rect.SetInsetAndSizeFromParentEdge(GetScalingEdge(scalingCoordinator), newScale, newSize);
                    break;

                default:
                    break;
                }
            }
            else
            {
                // Adjust master scale:
                switch (scalingMode)
                {
                case UiScalingMode.AdjustWidth:
                    rect.SetSizeWithCurrentAnchors(GetScalingAxis(), newScale);
                    break;

                case UiScalingMode.AdjustAnchors:
                    //todo
                    break;

                case UiScalingMode.AdjustPadding:
                    rect.SetInsetAndSizeFromParentEdge(GetScalingEdge(), newScale, GetCurrentSize(rect) - newScale);
                    break;

                default:
                    break;
                }

                // Adjust slave neighbors to the master's new size:
                if (neighbors != null)
                {
                    UiScalingCoordinator coordinatorRole = scalingRole == UiScalingRole.LeftMaster ? UiScalingCoordinator.LeftMaster : UiScalingCoordinator.RightMaster;
                    foreach (UiPane neighbor in neighbors)
                    {
                        if (neighbor.scalingRole == UiScalingRole.CenterSlave)
                        {
                            neighbor.Resize(newMasterSize, coordinatorRole, previousSize);
                        }
                    }
                }
            }
            // If requested, adopt the new scale as default for closing/reopening:
            if (retainLastScaleAsDefault && newScale > 0)
            {
                defaultScale = newScale;
            }
        }