using System; using UnityEditor.UIElements; using UnityEngine; using UnityEngine.Rendering; using UnityEngine.Rendering.HighDefinition; using UnityEngine.UIElements; namespace UnityEditor.Rendering.HighDefinition { [CustomPropertyDrawer(typeof(LookDevVolumeProfileSettings))] [SupportedOnRenderPipeline(typeof(HDRenderPipelineAsset))] class LookDevVolumeProfileSettingsPropertyDrawer : PropertyDrawer { VisualElement m_Root; Editor m_LookDevVolumeProfileEditor; SerializedObject m_SettingsSerializedObject; SerializedProperty m_VolumeProfileSerializedProperty; EditorPrefBool m_DefaultVolumeProfileFoldoutExpanded; VisualElement m_EditorContainer; const int k_DefaultVolumeLabelWidth = 260; static readonly GUIContent k_LookDevVolumeProfileAssetLabel = EditorGUIUtility.TrTextContent("LookDev Profile"); const int k_ImguiContainerLeftMargin = 32; const int k_AssetFieldBottomMargin = 6; public override VisualElement CreatePropertyGUI(SerializedProperty property) { m_Root = new VisualElement(); var label = new Label("LookDev"); label.style.unityFontStyleAndWeight = FontStyle.Bold; label.style.paddingTop = 6; m_Root.Add(label); m_SettingsSerializedObject = property.serializedObject; m_VolumeProfileSerializedProperty = property.FindPropertyRelative("m_VolumeProfile"); m_DefaultVolumeProfileFoldoutExpanded = new EditorPrefBool($"{GetType()}.LookDevVolumeProfileFoldoutExpanded", false); m_EditorContainer = new VisualElement(); var assetFieldUI = CreateAssetFieldUI(); assetFieldUI.style.marginBottom = k_AssetFieldBottomMargin; m_Root.Add(assetFieldUI); m_EditorContainer.Add(CreateVolumeProfileEditorUI()); m_EditorContainer.style.marginLeft = -k_ImguiContainerLeftMargin; m_Root.Add(m_EditorContainer); return m_Root; } Editor GetLookDevDefaultVolumeProfileEditor(VolumeProfile lookDevAsset) { Editor.CreateCachedEditor(lookDevAsset, typeof(VolumeProfileEditor), ref m_LookDevVolumeProfileEditor); return m_LookDevVolumeProfileEditor; } VisualElement CreateAssetFieldUI() { var lookDevVolumeProfileSettings = GraphicsSettings.GetRenderPipelineSettings(); VisualElement profileLine = new(); var toggle = new Toggle(); toggle.AddToClassList(Foldout.toggleUssClassName); var checkmark = toggle.Q(className: Toggle.checkmarkUssClassName); checkmark.AddToClassList(Foldout.checkmarkUssClassName); var field = new ObjectField(k_LookDevVolumeProfileAssetLabel.text) { tooltip = k_LookDevVolumeProfileAssetLabel.tooltip, objectType = typeof(VolumeProfile), value = m_VolumeProfileSerializedProperty.objectReferenceValue as VolumeProfile, }; field.AddToClassList("unity-base-field__aligned"); //Align with other BaseField field.Q