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); } }
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; } }