拼ui 一些业务逻辑x实现

This commit is contained in:
FloatGaming
2026-03-19 06:15:09 +08:00
parent f5c6f143c0
commit 49e45ac464
1118 changed files with 246518 additions and 5368 deletions
@@ -0,0 +1,133 @@
using UnityEngine;
using UnityEngine.UIElements;
namespace EasyChart.Layers
{
internal sealed class DashedLineElement : VisualElement
{
private Color _color = Color.yellow;
private float _lineWidth = 1f;
private bool _dashed;
private float _dashLength = 4f;
private float _dashGap = 2f;
private float _dashOffset;
public Color Color
{
get => _color;
set
{
if (_color == value) return;
_color = value;
MarkDirtyRepaint();
}
}
public float LineWidth
{
get => _lineWidth;
set
{
float v = Mathf.Max(0f, value);
if (Mathf.Approximately(_lineWidth, v)) return;
_lineWidth = v;
MarkDirtyRepaint();
}
}
public bool Dashed
{
get => _dashed;
set
{
if (_dashed == value) return;
_dashed = value;
MarkDirtyRepaint();
}
}
public float DashLength
{
get => _dashLength;
set
{
float v = Mathf.Max(0f, value);
if (Mathf.Approximately(_dashLength, v)) return;
_dashLength = v;
MarkDirtyRepaint();
}
}
public float DashGap
{
get => _dashGap;
set
{
float v = Mathf.Max(0f, value);
if (Mathf.Approximately(_dashGap, v)) return;
_dashGap = v;
MarkDirtyRepaint();
}
}
public float DashOffset
{
get => _dashOffset;
set
{
if (Mathf.Approximately(_dashOffset, value)) return;
_dashOffset = value;
MarkDirtyRepaint();
}
}
public DashedLineElement()
{
pickingMode = PickingMode.Ignore;
generateVisualContent += OnGenerateVisualContent;
}
private void OnGenerateVisualContent(MeshGenerationContext context)
{
var width = contentRect.width;
var height = contentRect.height;
if (width <= 0 || height <= 0) return;
var painter = context.painter2D;
painter.lineWidth = Mathf.Max(1f, LineWidth);
painter.strokeColor = Color;
bool isVertical = height >= width;
if (isVertical)
{
float x = width * 0.5f;
var a = new Vector2(x, 0);
var b = new Vector2(x, height);
if (Dashed) DashedLineUtils.DrawDashedLine(painter, a, b, DashLength, DashGap, DashOffset);
else
{
painter.BeginPath();
painter.MoveTo(a);
painter.LineTo(b);
painter.Stroke();
}
}
else
{
float y = height * 0.5f;
var a = new Vector2(0, y);
var b = new Vector2(width, y);
if (Dashed) DashedLineUtils.DrawDashedLine(painter, a, b, DashLength, DashGap, DashOffset);
else
{
painter.BeginPath();
painter.MoveTo(a);
painter.LineTo(b);
painter.Stroke();
}
}
}
}
}