update UIElements

This commit is contained in:
何冠峰
2025-02-05 17:26:19 +08:00
parent 698d81a433
commit 7e1dc7ef24
9 changed files with 219 additions and 9 deletions

View File

@@ -17,7 +17,7 @@ namespace YooAsset.Editor
{
}
#else
public new class UxmlFactory : UxmlFactory<PanelSplitView, TwoPaneSplitView.UxmlTraits>
public new class UxmlFactory : UxmlFactory<PanelSplitView, UxmlTraits>
{
}
#endif

View File

@@ -0,0 +1,111 @@
#if UNITY_2019_4_OR_NEWER
using System;
using UnityEditor;
using UnityEngine;
using UnityEditor.UIElements;
using UnityEngine.UIElements;
namespace YooAsset.Editor
{
public class ResizeHandle : VisualElement
{
/// <summary>
/// Instantiates a TableView using data from a UXML file.
/// </summary>
public new class UxmlFactory : UxmlFactory<ResizeHandle, UxmlTraits>
{
}
private bool _isResizing = false;
private float _initialWidth;
private Vector2 _initialMousePos;
/// <summary>
/// 控制的UI元素
/// </summary>
public VisualElement ControlTarget { get; set; }
/// <summary>
/// 控制元素的最小宽度
/// </summary>
public int ControlMinWidth { get; set; }
/// <summary>
/// 控制元素的最大宽度
/// </summary>
public int ControlMaxWidth { get; set; }
/// <summary>
/// 尺寸发生变化
/// </summary>
public Action<float> ResizeChanged { get; set; }
public ResizeHandle()
{
int defaultWidth = 5;
this.style.width = defaultWidth;
this.style.minWidth = defaultWidth;
this.style.maxWidth = defaultWidth;
this.style.opacity = 0;
this.style.cursor = UIElementsCursor.CreateCursor(MouseCursor.ResizeHorizontal);
this.RegisterCallback<MouseDownEvent>(OnMouseDown);
this.RegisterCallback<MouseMoveEvent>(OnMouseMove);
this.RegisterCallback<MouseUpEvent>(OnMouseUp);
}
public ResizeHandle(int handleWidth, VisualElement controlTarget, int controlMinWidth, int controlMaxWidth)
{
ControlTarget = controlTarget;
ControlMinWidth = controlMinWidth;
ControlMaxWidth = controlMaxWidth;
this.style.width = handleWidth;
this.style.minWidth = handleWidth;
this.style.maxWidth = handleWidth;
this.style.opacity = 0;
this.style.cursor = UIElementsCursor.CreateCursor(MouseCursor.ResizeHorizontal);
this.RegisterCallback<MouseDownEvent>(OnMouseDown);
this.RegisterCallback<MouseMoveEvent>(OnMouseMove);
this.RegisterCallback<MouseUpEvent>(OnMouseUp);
}
private void OnMouseDown(MouseDownEvent evt)
{
// 鼠标左键按下
if (ControlTarget != null && evt.button == 0)
{
_isResizing = true;
_initialWidth = ControlTarget.resolvedStyle.width;
_initialMousePos = evt.mousePosition;
this.CaptureMouse();
}
}
private void OnMouseMove(MouseMoveEvent evt)
{
if (ControlTarget != null && _isResizing)
{
// 计算鼠标移动距离
float deltaX = evt.mousePosition.x - _initialMousePos.x;
// 更新控制元素尺寸
float newWidth = _initialWidth + deltaX;
float width = Mathf.Clamp(newWidth, ControlMinWidth, ControlMaxWidth);
ControlTarget.style.width = width;
ControlTarget.style.minWidth = width;
ControlTarget.style.maxWidth = width;
ResizeChanged?.Invoke(width);
}
}
private void OnMouseUp(MouseUpEvent evt)
{
// 鼠标左键释放
if (ControlTarget != null && evt.button == 0)
{
_isResizing = false;
this.ReleaseMouse();
}
}
}
}
#endif

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: adb565f9b5e9fb3428e54d0cfd58676d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: