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);
|
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)
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user