forked from BilalY/Rasagar
225 lines
8.0 KiB
C#
225 lines
8.0 KiB
C#
|
using System;
|
||
|
using UnityEngine;
|
||
|
using UnityEngine.UIElements;
|
||
|
|
||
|
namespace UnityEditor.U2D.Sprites.SpriteEditorTool
|
||
|
{
|
||
|
[UxmlElement]
|
||
|
internal partial class SpriteOutlineToolOverlayPanel : VisualElement
|
||
|
{
|
||
|
static readonly string kGenerateSingle = L10n.Tr("Generate");
|
||
|
static readonly string kGenerateAll = L10n.Tr("Generate All");
|
||
|
static readonly string kForceGenerate = L10n.Tr("Force Generate All");
|
||
|
|
||
|
FloatField m_OutlineDetailField;
|
||
|
IntegerField m_AlphaToleranceField;
|
||
|
Slider m_OutlineDetailSlider;
|
||
|
SliderInt m_AlphaToleranceSlider;
|
||
|
Toggle m_SnapToggle;
|
||
|
Toggle m_OptimizeOutline;
|
||
|
Toggle m_ForceGenerate;
|
||
|
Button m_GenerateButton;
|
||
|
Button m_CopyButton;
|
||
|
Button m_PasteButton;
|
||
|
|
||
|
public event Action<bool> onGenerateOutline = _ => { };
|
||
|
public event Action<int> onAlphaToleranceChanged = _ => { };
|
||
|
public event Action<float> onOutlineDetailChanged = _ => { };
|
||
|
public event Action onCopy = () => { };
|
||
|
public event Action onPaste = () => { };
|
||
|
public event Action onPasteAll = () => { };
|
||
|
public event Action onPasteAlternate = () => { };
|
||
|
public event Action onPasteAlternateAll = () => { };
|
||
|
|
||
|
public bool snapOn
|
||
|
{
|
||
|
get { return m_SnapToggle.value; }
|
||
|
set { m_SnapToggle.SetValueWithoutNotify(value); }
|
||
|
}
|
||
|
|
||
|
public float outlineDetail
|
||
|
{
|
||
|
get { return m_OutlineDetailField.value; }
|
||
|
set
|
||
|
{
|
||
|
m_OutlineDetailField.SetValueWithoutNotify(value);
|
||
|
m_OutlineDetailSlider.SetValueWithoutNotify(value);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public int alphaTolerance
|
||
|
{
|
||
|
get { return m_AlphaToleranceField.value; }
|
||
|
set
|
||
|
{
|
||
|
m_AlphaToleranceField.SetValueWithoutNotify(value);
|
||
|
m_AlphaToleranceSlider.SetValueWithoutNotify(value);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public bool optimizeOutline
|
||
|
{
|
||
|
get => m_OptimizeOutline.value;
|
||
|
set => m_OptimizeOutline.SetValueWithoutNotify(value);
|
||
|
}
|
||
|
|
||
|
public SpriteOutlineToolOverlayPanel()
|
||
|
{
|
||
|
styleSheets.Add(AssetDatabase.LoadAssetAtPath<StyleSheet>("Packages/com.unity.2d.sprite/Editor/UI/SpriteEditor/SpriteOutlineToolOverlayPanelStyle.uss"));
|
||
|
RegisterCallback<MouseDownEvent>((e) => { e.StopPropagation(); });
|
||
|
RegisterCallback<MouseUpEvent>((e) => { e.StopPropagation(); });
|
||
|
}
|
||
|
|
||
|
|
||
|
public void SetPanelMode(bool hasSelection)
|
||
|
{
|
||
|
if (hasSelection)
|
||
|
{
|
||
|
m_GenerateButton.text = kGenerateSingle;
|
||
|
m_CopyButton.SetEnabled(true);
|
||
|
m_PasteButton.SetEnabled(true);
|
||
|
m_ForceGenerate.SetEnabled(false);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
UpdateGenerateAllButtonText();
|
||
|
m_CopyButton.SetEnabled(false);
|
||
|
m_PasteButton.SetEnabled(false);
|
||
|
m_ForceGenerate.SetEnabled(true);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void UpdateGenerateAllButtonText()
|
||
|
{
|
||
|
m_GenerateButton.text = m_ForceGenerate.value ? kForceGenerate : kGenerateAll;
|
||
|
}
|
||
|
|
||
|
void GenerateOutline()
|
||
|
{
|
||
|
onGenerateOutline(m_ForceGenerate.value);
|
||
|
}
|
||
|
|
||
|
void OnCopy()
|
||
|
{
|
||
|
onCopy();
|
||
|
}
|
||
|
|
||
|
void OnPaste()
|
||
|
{
|
||
|
onPaste();
|
||
|
}
|
||
|
|
||
|
void OnPasteAll()
|
||
|
{
|
||
|
onPasteAll();
|
||
|
}
|
||
|
|
||
|
void OnPasteAlternate()
|
||
|
{
|
||
|
onPasteAlternate();
|
||
|
}
|
||
|
|
||
|
void OnPasteAlternateAll()
|
||
|
{
|
||
|
onPasteAlternateAll();
|
||
|
}
|
||
|
|
||
|
void OnForceGenerateChanged(ChangeEvent<bool> _)
|
||
|
{
|
||
|
UpdateGenerateAllButtonText();
|
||
|
}
|
||
|
|
||
|
private void BindElements(string alternateLabelText)
|
||
|
{
|
||
|
m_GenerateButton = this.Q<Button>("GenerateButton");
|
||
|
m_GenerateButton.clickable.clicked += GenerateOutline;
|
||
|
m_GenerateButton.AddManipulator(m_GenerateButton.clickable);
|
||
|
|
||
|
m_CopyButton = this.Q<Button>("CopyButton");
|
||
|
m_CopyButton.clickable.clicked += OnCopy;
|
||
|
m_CopyButton.AddManipulator(m_CopyButton.clickable);
|
||
|
|
||
|
m_PasteButton = this.Q<Button>("PasteButton");
|
||
|
m_PasteButton.clickable.clicked += OnPaste;
|
||
|
m_PasteButton.AddManipulator(m_PasteButton.clickable);
|
||
|
|
||
|
m_ForceGenerate = this.Q<Toggle>("ForceGenerateToggle");
|
||
|
m_ForceGenerate.RegisterValueChangedCallback(OnForceGenerateChanged);
|
||
|
|
||
|
var button = this.Q<Button>("PasteAllButton");
|
||
|
button.clickable.clicked += OnPasteAll;
|
||
|
button.AddManipulator(button.clickable);
|
||
|
|
||
|
button = this.Q<Button>("PasteAlternateButton");
|
||
|
button.clickable.clicked += OnPasteAlternate;
|
||
|
button.AddManipulator(button.clickable);
|
||
|
|
||
|
button = this.Q<Button>("PasteAlternateAllButton");
|
||
|
button.clickable.clicked += OnPasteAlternateAll;
|
||
|
button.AddManipulator(button.clickable);
|
||
|
|
||
|
var alternateLabel = this.Q<Label>("PasteAlternateLabel");
|
||
|
alternateLabel.text = alternateLabelText;
|
||
|
|
||
|
m_OutlineDetailField = this.Q<FloatField>("OutlineDetailField");
|
||
|
m_AlphaToleranceField = this.Q<IntegerField>("AlphaToleranceField");
|
||
|
m_SnapToggle = this.Q<Toggle>("SnapToggle");
|
||
|
m_OptimizeOutline = this.Q<Toggle>("OptimizeOutlineToggle");
|
||
|
|
||
|
m_OutlineDetailSlider = this.Q<Slider>("OutlineDetailSlider");
|
||
|
m_OutlineDetailSlider.RegisterValueChangedCallback((evt) =>
|
||
|
{
|
||
|
if (!evt.newValue.Equals(m_OutlineDetailField.value))
|
||
|
{
|
||
|
m_OutlineDetailField.SetValueWithoutNotify(evt.newValue);
|
||
|
onOutlineDetailChanged(evt.newValue);
|
||
|
}
|
||
|
|
||
|
});
|
||
|
m_OutlineDetailField.RegisterValueChangedCallback((evt) =>
|
||
|
{
|
||
|
var newValue = evt.newValue;
|
||
|
if (!newValue.Equals(m_OutlineDetailSlider.value))
|
||
|
{
|
||
|
newValue = Math.Min(newValue, m_OutlineDetailSlider.highValue);
|
||
|
newValue = Math.Max(newValue, m_OutlineDetailSlider.lowValue);
|
||
|
m_OutlineDetailSlider.value = newValue;
|
||
|
m_OutlineDetailField.SetValueWithoutNotify(newValue);
|
||
|
onOutlineDetailChanged(evt.newValue);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
m_AlphaToleranceSlider = this.Q<SliderInt>("AlphaToleranceSlider");
|
||
|
m_AlphaToleranceSlider.RegisterValueChangedCallback((evt) =>
|
||
|
{
|
||
|
if (!evt.newValue.Equals(m_OutlineDetailField.value))
|
||
|
{
|
||
|
m_AlphaToleranceField.SetValueWithoutNotify(evt.newValue);
|
||
|
onAlphaToleranceChanged(evt.newValue);
|
||
|
}
|
||
|
|
||
|
});
|
||
|
m_AlphaToleranceField.RegisterValueChangedCallback((evt) =>
|
||
|
{
|
||
|
var newValue = evt.newValue;
|
||
|
if (!newValue.Equals(m_AlphaToleranceSlider.value))
|
||
|
{
|
||
|
newValue = Math.Min(newValue, m_AlphaToleranceSlider.highValue);
|
||
|
newValue = Math.Max(newValue, m_AlphaToleranceSlider.lowValue);
|
||
|
m_AlphaToleranceSlider.value = newValue;
|
||
|
m_AlphaToleranceField.SetValueWithoutNotify(newValue);
|
||
|
onAlphaToleranceChanged(evt.newValue);
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
public static SpriteOutlineToolOverlayPanel GenerateFromUXML(string alternateLabelText)
|
||
|
{
|
||
|
var visualTree = AssetDatabase.LoadAssetAtPath<VisualTreeAsset>("Packages/com.unity.2d.sprite/Editor/UI/SpriteEditor/SpriteOutlineToolOverlayPanel.uxml");
|
||
|
var clone = visualTree.CloneTree().Q<SpriteOutlineToolOverlayPanel>("SpriteOutlineToolOverlayPanel");
|
||
|
clone.BindElements(alternateLabelText);
|
||
|
return clone;
|
||
|
}
|
||
|
}
|
||
|
}
|