UTKProperyWindow 개발 중

This commit is contained in:
logonkhi
2026-02-03 20:43:36 +09:00
parent 297ca29082
commit 8181eae4c6
74 changed files with 1268 additions and 385 deletions

View File

@@ -308,6 +308,12 @@ namespace UVC.UIToolkit
#endregion
#region Public Methods
/// <summary>
/// 현재 색상을 설정합니다.
/// </summary>
/// <param name="color"></param>
/// <param name="setAsOriginal"></param>
public void SetColor(Color color, bool setAsOriginal = true)
{
_currentColor = color;
@@ -321,8 +327,15 @@ namespace UVC.UIToolkit
UpdateAllUI();
}
/// <summary>
/// 현재 선택된 색상을 반환합니다.
/// </summary>
/// <returns></returns>
public Color GetColor() => _currentColor;
/// <summary>
/// 피커를 닫고, 정리합니다.
/// </summary>
public void Close()
{
OnClosed?.Invoke();
@@ -331,6 +344,9 @@ namespace UVC.UIToolkit
Dispose();
}
/// <summary>
/// 선택을 취소하고 원래 색상으로 복원합니다.
/// </summary>
public void Cancel()
{
_currentColor = _originalColor;
@@ -338,6 +354,9 @@ namespace UVC.UIToolkit
Close();
}
/// <summary>
/// 현재 색상을 확정하고 선택 이벤트를 발생시킵니다.
/// </summary>
public void Confirm()
{
OnColorSelected?.Invoke(_currentColor);
@@ -535,19 +554,19 @@ namespace UVC.UIToolkit
_hueBar?.RegisterCallback<PointerUpEvent>(OnHueBarPointerUp);
// RGB Sliders
_sliderR?.RegisterValueChangedCallback(evt => OnRGBSliderChanged('R', evt.newValue));
_sliderG?.RegisterValueChangedCallback(evt => OnRGBSliderChanged('G', evt.newValue));
_sliderB?.RegisterValueChangedCallback(evt => OnRGBSliderChanged('B', evt.newValue));
_sliderA?.RegisterValueChangedCallback(evt => OnRGBSliderChanged('A', evt.newValue));
_sliderR?.RegisterCallback<ChangeEvent<float>>(OnSliderRChanged);
_sliderG?.RegisterCallback<ChangeEvent<float>>(OnSliderGChanged);
_sliderB?.RegisterCallback<ChangeEvent<float>>(OnSliderBChanged);
_sliderA?.RegisterCallback<ChangeEvent<float>>(OnSliderAChanged);
// RGB Fields
_fieldR?.RegisterValueChangedCallback(evt => OnRGBFieldChanged('R', evt.newValue));
_fieldG?.RegisterValueChangedCallback(evt => OnRGBFieldChanged('G', evt.newValue));
_fieldB?.RegisterValueChangedCallback(evt => OnRGBFieldChanged('B', evt.newValue));
_fieldA?.RegisterValueChangedCallback(evt => OnRGBFieldChanged('A', evt.newValue));
_fieldR?.RegisterCallback<ChangeEvent<int>>(OnFieldRChanged);
_fieldG?.RegisterCallback<ChangeEvent<int>>(OnFieldGChanged);
_fieldB?.RegisterCallback<ChangeEvent<int>>(OnFieldBChanged);
_fieldA?.RegisterCallback<ChangeEvent<int>>(OnFieldAChanged);
// Hex Field
_hexField?.RegisterValueChangedCallback(OnHexFieldChanged);
_hexField?.RegisterCallback<ChangeEvent<string>>(OnHexFieldChanged);
// Original preview click - 원래 색상으로 복원
_previewOriginal?.RegisterCallback<ClickEvent>(_ => SetColor(_originalColor));
@@ -685,6 +704,16 @@ namespace UVC.UIToolkit
NotifyColorChanged();
}
private void OnSliderRChanged(ChangeEvent<float> evt) => OnRGBSliderChanged('R', evt.newValue);
private void OnSliderGChanged(ChangeEvent<float> evt) => OnRGBSliderChanged('G', evt.newValue);
private void OnSliderBChanged(ChangeEvent<float> evt) => OnRGBSliderChanged('B', evt.newValue);
private void OnSliderAChanged(ChangeEvent<float> evt) => OnRGBSliderChanged('A', evt.newValue);
private void OnFieldRChanged(ChangeEvent<int> evt) => OnRGBFieldChanged('R', evt.newValue);
private void OnFieldGChanged(ChangeEvent<int> evt) => OnRGBFieldChanged('G', evt.newValue);
private void OnFieldBChanged(ChangeEvent<int> evt) => OnRGBFieldChanged('B', evt.newValue);
private void OnFieldAChanged(ChangeEvent<int> evt) => OnRGBFieldChanged('A', evt.newValue);
private void OnRGBSliderChanged(char channel, float value)
{
if (_isUpdating) return;
@@ -1148,6 +1177,19 @@ namespace UVC.UIToolkit
_sliderATexture = null;
}
// 이벤트 콜백 해제
_sliderR?.UnregisterCallback<ChangeEvent<float>>(OnSliderRChanged);
_sliderG?.UnregisterCallback<ChangeEvent<float>>(OnSliderGChanged);
_sliderB?.UnregisterCallback<ChangeEvent<float>>(OnSliderBChanged);
_sliderA?.UnregisterCallback<ChangeEvent<float>>(OnSliderAChanged);
_fieldR?.UnregisterCallback<ChangeEvent<int>>(OnFieldRChanged);
_fieldG?.UnregisterCallback<ChangeEvent<int>>(OnFieldGChanged);
_fieldB?.UnregisterCallback<ChangeEvent<int>>(OnFieldBChanged);
_fieldA?.UnregisterCallback<ChangeEvent<int>>(OnFieldAChanged);
_hexField?.UnregisterCallback<ChangeEvent<string>>(OnHexFieldChanged);
OnColorChanged = null;
OnColorSelected = null;
OnClosed = null;

View File

@@ -533,6 +533,9 @@ namespace UVC.UIToolkit
s_dayNameKeys = DEFAULT_DAY_NAME_KEYS;
}
/// <summary>
/// 피커를 닫고, 정리합니다.
/// </summary>
public void Close()
{
OnClosed?.Invoke();

View File

@@ -83,6 +83,7 @@ namespace UVC.UIToolkit
{
FadeOut(() =>
{
style.display = DisplayStyle.None;
RemoveFromHierarchy();
Dispose();
});