namespace SRF.UI
{
    using Internal;
    using UnityEngine;
    using UnityEngine.UI;
    /// 
    /// Detects when a screen dpi exceeds what the developer considers
    /// a "retina" level display, and scales the canvas accordingly.
    /// 
    [RequireComponent(typeof (CanvasScaler))]
    [AddComponentMenu(ComponentMenuPaths.RetinaScaler)]
    public class SRRetinaScaler : SRMonoBehaviour
    {
        [SerializeField] private float _retinaScale = 2f;
        [SerializeField] private int _thresholdDpi = 250;
        [SerializeField] private bool _disablePixelPerfect = false;
        /// 
        /// Dpi over which to apply scaling
        /// 
        public int ThresholdDpi
        {
            get { return _thresholdDpi; }
        }
        public float RetinaScale
        {
            get { return _retinaScale; }
        }
        private void Start()
        {
            var dpi = Screen.dpi;
            if (dpi <= 0)
            {
                return;
            }
            if (dpi > ThresholdDpi)
            {
                var scaler = GetComponent();
                scaler.uiScaleMode = CanvasScaler.ScaleMode.ConstantPixelSize;
                scaler.scaleFactor = scaler.scaleFactor * RetinaScale;
                if (_disablePixelPerfect)
                {
                    GetComponent