123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- // UnityEngine.UI was moved to a package in 2019.2.0
- // Unfortunately no way to test for this across all Unity versions yet
- // You can set up the asmdef to reference the new package, but the package doesn't
- // existing in Unity 2017 etc, and it throws an error due to missing reference
- #define AVPRO_PACKAGE_UNITYUI
- #if (UNITY_2019_2_OR_NEWER && AVPRO_PACKAGE_UNITYUI) || (!UNITY_2019_2_OR_NEWER)
- using UnityEngine;
- using UnityEditor;
- using UnityEditor.UI;
- //-----------------------------------------------------------------------------
- // Copyright 2015-2021 RenderHeads Ltd. All rights reserved.
- //-----------------------------------------------------------------------------
- namespace RenderHeads.Media.AVProVideo.Editor
- {
- /// <summary>
- /// Editor for the DisplayUGUI component
- /// </summary>
- [CustomEditor(typeof(DisplayUGUI), true)]
- [CanEditMultipleObjects]
- public class DisplayUGUIEditor : GraphicEditor
- {
- // Note we have precedence for calling rectangle for just rect, even in the Inspector.
- // For example in the Camera component's Viewport Rect.
- // Hence sticking with Rect here to be consistent with corresponding property in the API.
- private static readonly GUIContent m_guiTextUVRectContent = new GUIContent("UV Rect");
- private SerializedProperty _propMediaPlayer;
- private SerializedProperty _propUVRect;
- private SerializedProperty _propDefaultTexture;
- private SerializedProperty _propNoDefaultDisplay;
- private SerializedProperty _propDisplayInEditor;
- private SerializedProperty _propSetNativeSize;
- private SerializedProperty _propScaleMode;
- [MenuItem("GameObject/UI/AVPro Video uGUI", false, 0)]
- public static void CreateGameObject()
- {
- GameObject parent = Selection.activeGameObject;
- RectTransform parentCanvasRenderer = ( parent != null ) ? parent.GetComponent<RectTransform>() : null;
- if( parentCanvasRenderer )
- {
- GameObject go = new GameObject("AVPro Video");
- go.transform.SetParent(parent.transform, false);
- go.AddComponent<RectTransform>();
- go.AddComponent<CanvasRenderer>();
- go.AddComponent<DisplayUGUI>();
- Selection.activeGameObject = go;
- }
- else
- {
- EditorUtility.DisplayDialog("AVPro Video", "You must make the AVPro Video uGUI object as a child of a Canvas.", "Ok");
- }
- }
- public override bool RequiresConstantRepaint()
- {
- DisplayUGUI displayComponent = target as DisplayUGUI;
- return (displayComponent != null && displayComponent.HasValidTexture());
- }
- protected override void OnEnable()
- {
- base.OnEnable();
- _propMediaPlayer = this.CheckFindProperty("_mediaPlayer");
- _propUVRect = this.CheckFindProperty("_uvRect");
- _propSetNativeSize = this.CheckFindProperty("_setNativeSize");
- _propScaleMode = this.CheckFindProperty("_scaleMode");
- _propNoDefaultDisplay = this.CheckFindProperty("_noDefaultDisplay");
- _propDisplayInEditor = this.CheckFindProperty("_displayInEditor");
- _propDefaultTexture = this.CheckFindProperty("_defaultTexture");
- SetShowNativeSize(true);
- }
- public override void OnInspectorGUI()
- {
- serializedObject.Update();
- EditorGUILayout.PropertyField(_propMediaPlayer);
- EditorGUILayout.PropertyField(_propDisplayInEditor);
- EditorGUILayout.PropertyField(_propNoDefaultDisplay);
- if (!_propNoDefaultDisplay.boolValue)
- {
- EditorGUILayout.PropertyField(_propDefaultTexture);
- }
- AppearanceControlsGUI();
- RaycastControlsGUI();
- EditorGUILayout.PropertyField(_propUVRect, m_guiTextUVRectContent);
- EditorGUILayout.PropertyField(_propSetNativeSize);
- EditorGUILayout.PropertyField(_propScaleMode);
- SetShowNativeSize(false);
- NativeSizeButtonGUI();
- serializedObject.ApplyModifiedProperties();
- }
- private void SetShowNativeSize(bool instant)
- {
- base.SetShowNativeSize(_propMediaPlayer.objectReferenceValue != null, instant);
- }
- /// <summary>
- /// Allow the texture to be previewed.
- /// </summary>
- public override bool HasPreviewGUI()
- {
- DisplayUGUI rawImage = target as DisplayUGUI;
- return rawImage != null;
- }
- /// <summary>
- /// Draw the Image preview.
- /// </summary>
- public override void OnPreviewGUI(Rect drawArea, GUIStyle background)
- {
- DisplayUGUI rawImage = target as DisplayUGUI;
- Texture tex = rawImage.mainTexture;
- if (tex == null)
- return;
- // Create the texture rectangle that is centered inside rect.
- Rect outerRect = drawArea;
- Matrix4x4 m = GUI.matrix;
- // Flip the image vertically
- if (rawImage.HasValidTexture())
- {
- if (rawImage.Player.TextureProducer.RequiresVerticalFlip())
- {
- GUIUtility.ScaleAroundPivot(new Vector2(1f, -1f), new Vector2(0f, outerRect.y + (outerRect.height / 2f)));
- }
- }
- EditorGUI.DrawTextureTransparent(outerRect, tex, ScaleMode.ScaleToFit);//, outer.width / outer.height);
- //SpriteDrawUtility.DrawSprite(tex, rect, outer, rawImage.uvRect, rawImage.canvasRenderer.GetColor());
- GUI.matrix = m;
- }
- /// <summary>
- /// Info String drawn at the bottom of the Preview
- /// </summary>
- public override string GetInfoString()
- {
- DisplayUGUI rawImage = target as DisplayUGUI;
- string text = string.Empty;
- if (rawImage.HasValidTexture())
- {
- text += string.Format("Video Size: {0}x{1}\n",
- Mathf.RoundToInt(Mathf.Abs(rawImage.mainTexture.width)),
- Mathf.RoundToInt(Mathf.Abs(rawImage.mainTexture.height)));
- }
- // Image size Text
- text += string.Format("Display Size: {0}x{1}",
- Mathf.RoundToInt(Mathf.Abs(rawImage.rectTransform.rect.width)),
- Mathf.RoundToInt(Mathf.Abs(rawImage.rectTransform.rect.height)));
- return text;
- }
- }
- }
- #endif
|