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); resolution = new Vector2(Screen.width, Screen.height);
OnResolutionChange.Invoke(); 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) public void AddResolutionChangeListener(UnityAction callback)

View File

@@ -14,31 +14,30 @@ namespace RothenburgAR.UI
void Start() void Start()
{ {
DisplayManager.Instance.OnOrientationChange.AddListener(RecalculateTransform); DisplayManager.Instance.OnOrientationChange.AddListener(RecalculateTransform);
DisplayManager.Instance.OnResolutionChange.AddListener(RecalculateTransform);
RecalculateTransform(); RecalculateTransform();
} }
void OnDestroy() void OnDestroy()
{ {
DisplayManager.Instance.OnOrientationChange.RemoveListener(RecalculateTransform); DisplayManager.Instance.OnOrientationChange.RemoveListener(RecalculateTransform);
DisplayManager.Instance.OnResolutionChange.RemoveListener(RecalculateTransform);
} }
public void RecalculateTransform() public void RecalculateTransform()
{ {
var transform = this.GetComponent<RectTransform>(); var transform = this.GetComponent<RectTransform>();
float desiredPadding = Mathf.Max(Screen.height, Screen.width) * Padding; float desiredPadding = Mathf.Max(Screen.height, Screen.width) * Padding;
// make object square
var size = Mathf.Min(transform.rect.width, transform.rect.height); 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 // 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.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.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);
} }
} }
} }