You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

76 lines
2.8 KiB

using System.IO;
using UnityEngine;
using UnityEngine.UIElements;
using UnityEditor.UIElements;
namespace UnityEditor.VFX.UI
{
class GradientPropertyRM : PropertyRM<Gradient>
{
public override bool showsEverything { get { return true; } }
private const string VFXGraphGradientPresetFileName = "VFXGradients";
private GradientField m_GradientField;
public GradientPropertyRM(IPropertyRMProvider controller, float labelWidth) : base(controller, labelWidth)
{
m_GradientField = new GradientField(ObjectNames.NicifyVariableName(controller.name));
m_GradientField.RegisterCallback<ChangeEvent<Gradient>>(OnValueChanged);
m_GradientField.colorSpace = ColorSpace.Linear;
m_GradientField.hdr = true;
m_GradientField.RegisterCallback<ClickEvent>(OnClick);
Add(m_GradientField);
}
public override float GetPreferredControlWidth()
{
return 120;
}
public void OnValueChanged(ChangeEvent<Gradient> e)
{
Gradient newValue = m_GradientField.value;
m_Value = newValue;
NotifyValueChanged();
}
public override void UpdateGUI(bool force)
{
m_GradientField.SetValueWithoutNotify(m_Value);
}
protected override void UpdateEnabled()
{
m_GradientField.SetEnabled(propertyEnabled);
}
protected override void UpdateIndeterminate()
{
m_GradientField.visible = !indeterminate;
}
private void OnClick(ClickEvent evt)
{
OnShowGradientPreset();
}
private void OnShowGradientPreset()
{
var saveLoadHelper = new ScriptableObjectSaveLoadHelper<GradientPresetLibrary>("gradients", SaveType.Text);
var defaultLibFilePath = PresetLibraryLocations.defaultLibraryLocation;
if (!string.IsNullOrEmpty(defaultLibFilePath))
{
var vfxPackagePath = VisualEffectGraphPackageInfo.assetPackagePath;
var vfxLibraryFilePath = $"{vfxPackagePath}/Editor/{VFXGraphGradientPresetFileName}".Replace("\\", "/");
var defaultLibraryFilePath = $"{defaultLibFilePath}/{VFXGraphGradientPresetFileName}".Replace("\\", "/");
var vfxLibrary = PresetLibraryManager.instance.GetLibrary(saveLoadHelper, vfxLibraryFilePath);
var defaultLibrary = PresetLibraryManager.instance.GetLibrary(saveLoadHelper, defaultLibraryFilePath);
if (vfxLibrary != null && defaultLibrary == null)
{
PresetLibraryManager.instance.SaveLibrary(saveLoadHelper, vfxLibrary, defaultLibFilePath + VFXGraphGradientPresetFileName);
}
}
}
}
}