using System; using System.Diagnostics; using System.Linq; using System.Numerics; using System.Runtime.InteropServices; namespace Veldrid.Common { public partial class VeldridContent { private bool ismousedown = false; private MousePositon lastposition; public void MouseLeftDown(MousePositon positon) { ismousedown = true; lastposition = positon; } public void MouseRightDown(MousePositon positon) { } public void MouseMiddleDown(MousePositon positon) { } public void MouseLeftUp(MousePositon positon) { ismousedown = false; } public void MouseRightUp(MousePositon positon) { } public void MouseMiddleUp(MousePositon positon) { renders.Where(x => x is IZoomRender zoom && zoom.ZoomEnbled) .Cast() .ToList() .ForEach(x => { x.VScale = 1; x.HScale = 1; x.VOffset = 0; x.HOffset = 0; x.WindowScale = WindowScale; }); Render(); } public void MouseLeave() { ismousedown = false; } public void MouseMove(MousePositon positon) { if (!ismousedown) return; renders.Where(x => x is IZoomRender zoom && zoom.ZoomEnbled) .Cast() .ToList() .ForEach(x => { x.HOffset = x.HOffset + positon.X - lastposition.X; x.VOffset = x.VOffset + positon.Y - lastposition.Y; x.WindowScale = WindowScale; }); lastposition = positon; Render(); } public void MouseWheel(MousePositon positon, int count) { renders.Where(x => x is IZoomRender zoom && zoom.ZoomEnbled) .Cast() .ToList() .ForEach(x => { x.VScale = Math.Clamp(x.VScale + count * 0.01f, 0.01f, 10); x.HScale = Math.Clamp(x.HScale + count * 0.01f, 0.01f, 10); x.WindowScale = WindowScale; }); Render(); } } [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct MousePositon { public short X; public short Y; public static Vector2 operator *(MousePositon positon, Vector2 scale) => new Vector2(positon.X * scale.X, positon.Y * scale.Y); public static Vector2 operator /(MousePositon positon, Vector2 scale) => new Vector2(positon.X / scale.X, positon.Y / scale.Y); } }