ConfigureCanvasFromSettings.cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. using System;
  2. using System.ComponentModel;
  3. using UnityEngine.UI;
  4. namespace SRDebugger.UI.Other
  5. {
  6. using Internal;
  7. using SRF;
  8. using UnityEngine;
  9. [RequireComponent(typeof (Canvas))]
  10. public class ConfigureCanvasFromSettings : SRMonoBehaviour
  11. {
  12. private Canvas _canvas;
  13. private CanvasScaler _canvasScaler;
  14. private float _originalScale;
  15. private float _lastSetScale;
  16. private Settings _settings;
  17. private void Start()
  18. {
  19. _canvas = GetComponent<Canvas>();
  20. _canvasScaler = GetComponent<CanvasScaler>();
  21. SRDebuggerUtil.ConfigureCanvas(_canvas);
  22. _settings = SRDebug.Instance.Settings;
  23. _originalScale = _canvasScaler.scaleFactor;
  24. _canvasScaler.scaleFactor = _originalScale * _settings.UIScale;
  25. // Track the last set scale in case it is modified by the retina scaler.
  26. _lastSetScale = _canvasScaler.scaleFactor;
  27. _settings.PropertyChanged += SettingsOnPropertyChanged;
  28. }
  29. private void OnDestroy()
  30. {
  31. if (_settings != null)
  32. {
  33. _settings.PropertyChanged -= SettingsOnPropertyChanged;
  34. }
  35. }
  36. private void SettingsOnPropertyChanged(object sender, PropertyChangedEventArgs propertyChangedEventArgs)
  37. {
  38. // If the last set scale does not match the current scale factor, then it is likely the retina scaler has applied a change.
  39. // Treat the new value as the original scale.
  40. if (_canvasScaler.scaleFactor != _lastSetScale) _originalScale = _canvasScaler.scaleFactor;
  41. _canvasScaler.scaleFactor = _originalScale * _settings.UIScale;
  42. _lastSetScale = _canvasScaler.scaleFactor;
  43. }
  44. }
  45. }