internal static Gradient DoGradientField(Rect position, int id, Gradient value, SerializedProperty property, bool hdr)
{
Event evt = Event.current;
switch (evt.GetTypeForControl(id))
{
case EventType.MouseDown:
if (position.Contains(evt.mousePosition))
{
if (evt.button == 0)
{
s_GradientID = id;
GUIUtility.keyboardControl = id;
Gradient gradient = property != null ? property.gradientValue : value;
GradientPicker.Show(gradient, hdr);
GUIUtility.ExitGUI();
}
else if (evt.button == 1)
{
if (property != null)
{
GradientContextMenu.Show(property.Copy());
}
// TODO: make work for Gradient value
}
}
break;
case EventType.Repaint:
{
Rect r2 = new Rect(position.x + 1, position.y + 1, position.width - 2, position.height - 2); // Adjust for box drawn on top
if (property != null)
{
GradientEditor.DrawGradientSwatch(r2, property, Color.white);
}
else
{
GradientEditor.DrawGradientSwatch(r2, value, Color.white);
}
EditorStyles.colorPickerBox.Draw(position, GUIContent.none, id);
break;
}
case EventType.ExecuteCommand:
if (s_GradientID == id && evt.commandName == GradientPicker.GradientPickerChangedCommand)
{
GUI.changed = true;
GradientPreviewCache.ClearCache();
HandleUtility.Repaint();
if (property != null)
{
property.gradientValue = GradientPicker.gradient;
}
return(GradientPicker.gradient);
}
break;
case EventType.ValidateCommand:
if (s_GradientID == id && evt.commandName == EventCommandNames.UndoRedoPerformed)
{
if (property != null)
{
GradientPicker.SetCurrentGradient(property.gradientValue);
}
GradientPreviewCache.ClearCache();
return(value);
}
break;
case EventType.KeyDown:
if (GUIUtility.keyboardControl == id && (evt.keyCode == KeyCode.Space || evt.keyCode == KeyCode.Return || evt.keyCode == KeyCode.KeypadEnter))
{
Event.current.Use();
Gradient gradient = property != null ? property.gradientValue : value;
GradientPicker.Show(gradient, hdr);
GUIUtility.ExitGUI();
}
break;
}
return(value);
}