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; | |||
|  |         } | |||
|  |     } | |||
|  | } |