Fixed bug where device orientation changes caused responsively scaled buttons to calculate wrong sizes
This commit is contained in:
@@ -68,6 +68,14 @@ namespace RothenburgAR.UI
|
||||
resolution = new Vector2(Screen.width, Screen.height);
|
||||
OnResolutionChange.Invoke();
|
||||
}
|
||||
|
||||
#if UNITY_EDITOR
|
||||
else
|
||||
{
|
||||
// PC doesn't have device orientation, so do this for testing purposes
|
||||
OnOrientationChange.Invoke();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
public void AddResolutionChangeListener(UnityAction callback)
|
||||
|
||||
@@ -14,31 +14,30 @@ namespace RothenburgAR.UI
|
||||
void Start()
|
||||
{
|
||||
DisplayManager.Instance.OnOrientationChange.AddListener(RecalculateTransform);
|
||||
DisplayManager.Instance.OnResolutionChange.AddListener(RecalculateTransform);
|
||||
RecalculateTransform();
|
||||
}
|
||||
|
||||
void OnDestroy()
|
||||
{
|
||||
DisplayManager.Instance.OnOrientationChange.RemoveListener(RecalculateTransform);
|
||||
DisplayManager.Instance.OnResolutionChange.RemoveListener(RecalculateTransform);
|
||||
}
|
||||
|
||||
public void RecalculateTransform()
|
||||
{
|
||||
var transform = this.GetComponent<RectTransform>();
|
||||
float desiredPadding = Mathf.Max(Screen.height, Screen.width) * Padding;
|
||||
|
||||
// make object square
|
||||
var size = Mathf.Min(transform.rect.width, transform.rect.height);
|
||||
transform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, size);
|
||||
transform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, size);
|
||||
|
||||
// set padding when applicable
|
||||
if (transform.anchorMax.y >= 0.99f) transform.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Top, desiredPadding, size);
|
||||
if (transform.anchorMax.x >= 0.99f) transform.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Right, desiredPadding, size);
|
||||
if (transform.anchorMin.y <= 0.01f) transform.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Bottom, desiredPadding, size);
|
||||
if (transform.anchorMin.x <= 0.01f) transform.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Left, desiredPadding, size);
|
||||
if (transform.anchorMax.y >= 0.99f) transform.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Top, desiredPadding, size);
|
||||
if (transform.anchorMin.y <= 0.01f) transform.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Bottom, desiredPadding, size);
|
||||
|
||||
// make object square when needed (doesn't work as intended)
|
||||
//transform.ForceUpdateRectTransforms();
|
||||
//if (transform.anchorMin.x > 0.01f && transform.anchorMax.x < 0.99f) transform.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Left, transform.rect.xMin, size);
|
||||
//if (transform.anchorMin.y > 0.01f && transform.anchorMax.y < 0.99f) transform.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Top, transform.rect.yMin, size);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user