| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- using System;
- using System.ComponentModel;
- using UnityEngine.UI;
- namespace SRDebugger.UI.Other
- {
- using Internal;
- using SRF;
- using UnityEngine;
- [RequireComponent(typeof (Canvas))]
- public class ConfigureCanvasFromSettings : SRMonoBehaviour
- {
- private Canvas _canvas;
- private CanvasScaler _canvasScaler;
- private float _originalScale;
- private float _lastSetScale;
- private Settings _settings;
- private void Start()
- {
- _canvas = GetComponent<Canvas>();
- _canvasScaler = GetComponent<CanvasScaler>();
- SRDebuggerUtil.ConfigureCanvas(_canvas);
- _settings = SRDebug.Instance.Settings;
- _originalScale = _canvasScaler.scaleFactor;
- _canvasScaler.scaleFactor = _originalScale * _settings.UIScale;
- // Track the last set scale in case it is modified by the retina scaler.
- _lastSetScale = _canvasScaler.scaleFactor;
- _settings.PropertyChanged += SettingsOnPropertyChanged;
- }
- private void OnDestroy()
- {
- if (_settings != null)
- {
- _settings.PropertyChanged -= SettingsOnPropertyChanged;
- }
- }
- private void SettingsOnPropertyChanged(object sender, PropertyChangedEventArgs propertyChangedEventArgs)
- {
- // If the last set scale does not match the current scale factor, then it is likely the retina scaler has applied a change.
- // Treat the new value as the original scale.
- if (_canvasScaler.scaleFactor != _lastSetScale) _originalScale = _canvasScaler.scaleFactor;
- _canvasScaler.scaleFactor = _originalScale * _settings.UIScale;
- _lastSetScale = _canvasScaler.scaleFactor;
- }
- }
- }
|