summaryrefslogtreecommitdiff
path: root/Assets/uGUI-2017.1/Editor/UI/CanvasScalerEditor.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/uGUI-2017.1/Editor/UI/CanvasScalerEditor.cs')
-rw-r--r--Assets/uGUI-2017.1/Editor/UI/CanvasScalerEditor.cs160
1 files changed, 160 insertions, 0 deletions
diff --git a/Assets/uGUI-2017.1/Editor/UI/CanvasScalerEditor.cs b/Assets/uGUI-2017.1/Editor/UI/CanvasScalerEditor.cs
new file mode 100644
index 0000000..883d300
--- /dev/null
+++ b/Assets/uGUI-2017.1/Editor/UI/CanvasScalerEditor.cs
@@ -0,0 +1,160 @@
+using UnityEngine;
+using UnityEngine.UI;
+
+namespace UnityEditor.UI
+{
+ [CustomEditor(typeof(CanvasScaler), true)]
+ [CanEditMultipleObjects]
+ public class CanvasScalerEditor : Editor
+ {
+ SerializedProperty m_UiScaleMode;
+ SerializedProperty m_ScaleFactor;
+ SerializedProperty m_ReferenceResolution;
+ SerializedProperty m_ScreenMatchMode;
+ SerializedProperty m_MatchWidthOrHeight;
+ SerializedProperty m_PhysicalUnit;
+ SerializedProperty m_FallbackScreenDPI;
+ SerializedProperty m_DefaultSpriteDPI;
+ SerializedProperty m_DynamicPixelsPerUnit;
+ SerializedProperty m_ReferencePixelsPerUnit;
+
+ const int kSliderEndpointLabelsHeight = 12;
+
+ private class Styles
+ {
+ public GUIContent matchContent;
+ public GUIContent widthContent;
+ public GUIContent heightContent;
+ public GUIContent uiScaleModeContent;
+ public GUIStyle leftAlignedLabel;
+ public GUIStyle rightAlignedLabel;
+
+ public Styles()
+ {
+ matchContent = new GUIContent("Match");
+ widthContent = new GUIContent("Width");
+ heightContent = new GUIContent("Height");
+ uiScaleModeContent = new GUIContent("UI Scale Mode");
+
+ leftAlignedLabel = new GUIStyle(EditorStyles.label);
+ rightAlignedLabel = new GUIStyle(EditorStyles.label);
+ rightAlignedLabel.alignment = TextAnchor.MiddleRight;
+ }
+ }
+ private static Styles s_Styles;
+
+ protected virtual void OnEnable()
+ {
+ m_UiScaleMode = serializedObject.FindProperty("m_UiScaleMode");
+ m_ScaleFactor = serializedObject.FindProperty("m_ScaleFactor");
+ m_ReferenceResolution = serializedObject.FindProperty("m_ReferenceResolution");
+ m_ScreenMatchMode = serializedObject.FindProperty("m_ScreenMatchMode");
+ m_MatchWidthOrHeight = serializedObject.FindProperty("m_MatchWidthOrHeight");
+ m_PhysicalUnit = serializedObject.FindProperty("m_PhysicalUnit");
+ m_FallbackScreenDPI = serializedObject.FindProperty("m_FallbackScreenDPI");
+ m_DefaultSpriteDPI = serializedObject.FindProperty("m_DefaultSpriteDPI");
+ m_DynamicPixelsPerUnit = serializedObject.FindProperty("m_DynamicPixelsPerUnit");
+ m_ReferencePixelsPerUnit = serializedObject.FindProperty("m_ReferencePixelsPerUnit");
+ }
+
+ public override void OnInspectorGUI()
+ {
+ if (s_Styles == null)
+ s_Styles = new Styles();
+
+ bool allAreRoot = true;
+ bool showWorldDiffers = false;
+ bool showWorld = ((target as CanvasScaler).GetComponent<Canvas>().renderMode == RenderMode.WorldSpace);
+ for (int i = 0; i < targets.Length; i++)
+ {
+ CanvasScaler scaler = targets[i] as CanvasScaler;
+ Canvas canvas = scaler.GetComponent<Canvas>();
+ if (!canvas.isRootCanvas)
+ {
+ allAreRoot = false;
+ break;
+ }
+ if (showWorld && canvas.renderMode != RenderMode.WorldSpace || !showWorld && canvas.renderMode == RenderMode.WorldSpace)
+ {
+ showWorldDiffers = true;
+ break;
+ }
+ }
+
+ if (!allAreRoot)
+ {
+ EditorGUILayout.HelpBox("Non-root Canvases will not be scaled.", MessageType.Warning);
+ return;
+ }
+
+ serializedObject.Update();
+
+ EditorGUI.showMixedValue = showWorldDiffers;
+ using (new EditorGUI.DisabledScope(showWorld || showWorldDiffers))
+ {
+ if (showWorld || showWorldDiffers)
+ {
+ EditorGUILayout.Popup(s_Styles.uiScaleModeContent.text, 0, new[] { "World" });
+ }
+ else
+ {
+ EditorGUILayout.PropertyField(m_UiScaleMode, s_Styles.uiScaleModeContent);
+ }
+ }
+ EditorGUI.showMixedValue = false;
+
+ if (!showWorldDiffers && !(!showWorld && m_UiScaleMode.hasMultipleDifferentValues))
+ {
+ EditorGUILayout.Space();
+
+ // World Canvas
+ if (showWorld)
+ {
+ EditorGUILayout.PropertyField(m_DynamicPixelsPerUnit);
+ }
+ // Constant pixel size
+ else if (m_UiScaleMode.enumValueIndex == (int)CanvasScaler.ScaleMode.ConstantPixelSize)
+ {
+ EditorGUILayout.PropertyField(m_ScaleFactor);
+ }
+ // Scale with screen size
+ else if (m_UiScaleMode.enumValueIndex == (int)CanvasScaler.ScaleMode.ScaleWithScreenSize)
+ {
+ EditorGUILayout.PropertyField(m_ReferenceResolution);
+ EditorGUILayout.PropertyField(m_ScreenMatchMode);
+ if (m_ScreenMatchMode.enumValueIndex == (int)CanvasScaler.ScreenMatchMode.MatchWidthOrHeight && !m_ScreenMatchMode.hasMultipleDifferentValues)
+ {
+ Rect r = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight + kSliderEndpointLabelsHeight);
+ DualLabeledSlider(r, m_MatchWidthOrHeight, s_Styles.matchContent, s_Styles.widthContent, s_Styles.heightContent);
+ }
+ }
+ // Constant physical size
+ else if (m_UiScaleMode.enumValueIndex == (int)CanvasScaler.ScaleMode.ConstantPhysicalSize)
+ {
+ EditorGUILayout.PropertyField(m_PhysicalUnit);
+ EditorGUILayout.PropertyField(m_FallbackScreenDPI);
+ EditorGUILayout.PropertyField(m_DefaultSpriteDPI);
+ }
+
+ EditorGUILayout.PropertyField(m_ReferencePixelsPerUnit);
+ }
+
+ serializedObject.ApplyModifiedProperties();
+ }
+
+ private static void DualLabeledSlider(Rect position, SerializedProperty property, GUIContent mainLabel, GUIContent labelLeft, GUIContent labelRight)
+ {
+ position.height = EditorGUIUtility.singleLineHeight;
+ Rect pos = position;
+
+ position.y += 12;
+ position.xMin += EditorGUIUtility.labelWidth;
+ position.xMax -= EditorGUIUtility.fieldWidth;
+
+ GUI.Label(position, labelLeft, s_Styles.leftAlignedLabel);
+ GUI.Label(position, labelRight, s_Styles.rightAlignedLabel);
+
+ EditorGUI.PropertyField(pos, property, mainLabel);
+ }
+ }
+}