78 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			78 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C#
		
	
	
	
|  | namespace SRF.UI | |||
|  | { | |||
|  |     using System; | |||
|  |     using Internal; | |||
|  |     using UnityEngine; | |||
|  |     using UnityEngine.UI; | |||
|  | 
 | |||
|  |     [ExecuteInEditMode] | |||
|  |     [RequireComponent(typeof (RectTransform))] | |||
|  |     [AddComponentMenu(ComponentMenuPaths.ResponsiveEnable)] | |||
|  |     public class ResponsiveResize : ResponsiveBase | |||
|  |     { | |||
|  |         public Element[] Elements = new Element[0]; | |||
|  | 
 | |||
|  |         protected override void Refresh() | |||
|  |         { | |||
|  |             var rect = RectTransform.rect; | |||
|  | 
 | |||
|  |             for (var i = 0; i < Elements.Length; i++) | |||
|  |             { | |||
|  |                 var e = Elements[i]; | |||
|  | 
 | |||
|  |                 if (e.Target == null) | |||
|  |                 { | |||
|  |                     continue; | |||
|  |                 } | |||
|  | 
 | |||
|  |                 var maxWidth = float.MinValue; | |||
|  |                 var selectedWidth = -1f; | |||
|  | 
 | |||
|  |                 for (var j = 0; j < e.SizeDefinitions.Length; j++) | |||
|  |                 { | |||
|  |                     var d = e.SizeDefinitions[j]; | |||
|  | 
 | |||
|  |                     // If the threshold applies | |||
|  |                     if (d.ThresholdWidth <= rect.width) | |||
|  |                     { | |||
|  |                         // And it is the largest width so far | |||
|  |                         if (d.ThresholdWidth > maxWidth) | |||
|  |                         { | |||
|  |                             // Set it as active | |||
|  |                             maxWidth = d.ThresholdWidth; | |||
|  |                             selectedWidth = d.ElementWidth; | |||
|  |                         } | |||
|  |                     } | |||
|  |                 } | |||
|  | 
 | |||
|  |                 if (selectedWidth > 0) | |||
|  |                 { | |||
|  |                     e.Target.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, selectedWidth); | |||
|  | 
 | |||
|  |                     var le = e.Target.GetComponent<LayoutElement>(); | |||
|  | 
 | |||
|  |                     if (le != null) | |||
|  |                     { | |||
|  |                         le.preferredWidth = selectedWidth; | |||
|  |                     } | |||
|  |                 } | |||
|  |             } | |||
|  |         } | |||
|  | 
 | |||
|  |         [Serializable] | |||
|  |         public struct Element | |||
|  |         { | |||
|  |             public SizeDefinition[] SizeDefinitions; | |||
|  |             public RectTransform Target; | |||
|  | 
 | |||
|  |             [Serializable] | |||
|  |             public struct SizeDefinition | |||
|  |             { | |||
|  |                 [Tooltip("Width to apply when over the threshold width")] public float ElementWidth; | |||
|  | 
 | |||
|  |                 [Tooltip("Threshold over which this width will take effect")] public float ThresholdWidth; | |||
|  |             } | |||
|  |         } | |||
|  |     } | |||
|  | } |