Fixed bug where device orientation changes caused responsively scaled buttons to calculate wrong sizes

This commit is contained in:
2018-09-10 17:07:03 +02:00
parent 28ad5a30f5
commit a3f1070d4b
2 changed files with 15 additions and 8 deletions

View File

@@ -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)

View File

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