using System.Linq;
using RosettaUI.Builder;
using RosettaUI.Swatch;
using RosettaUI.UndoSystem;
using UnityEngine;
using UnityEngine.UIElements;
namespace RosettaUI.UIToolkit.AnimationCurveEditor
{
///
/// Preset UI for AnimationCurveEditor
///
public partial class AnimationCurveEditor
{
private const string PresetsContainerClassName = USSClassName + "__presets-container";
private const string PopupButtonClassName = USSClassName + "__presets-popup-button";
private PresetsPopup _presetsPopup;
private PresetsPreview _presetsPreview;
private void InitPresetsUI()
{
_presetsPopup = new PresetsPopup(SetCurveFromPreset);
_presetsPopup.RegisterCallback(_ => _presetsPopup.Hide());
Add(_presetsPopup);
var scrollView = this.Q("presets-scroll-view");
var container = new VisualElement();
container.AddToClassList(PresetsContainerClassName);
scrollView.Add(container);
var popupButton = new VisualElement();
popupButton.AddToClassList(PopupButtonClassName);
popupButton.RegisterCallback(OnPopupButtonPointerDown);
container.Add(popupButton);
_presetsPreview = new PresetsPreview(_presetsPopup.PersistentService, SetCurveFromPreset);
container.Add(_presetsPreview);
return;
void OnPopupButtonPointerDown(PointerDownEvent evt)
{
var rect = popupButton.layout;
var popupLeftBottom = new Vector2(rect.xMin, rect.yMax);
_presetsPopup.Show(popupLeftBottom, _curveController.Curve);
evt.StopPropagation();
}
void SetCurveFromPreset(AnimationCurve curve)
{
if (curve.Equals(_curveController.Curve))
{
return;
}
_curveController.Command.SetCurve(curve);
UpdateView();
NotifyEditorValueChanged();
}
}
}
}