54 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C#
		
	
	
	
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()
 | 
						|
        {
 | 
						|
            _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;
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |