From 1e45bf6958c88ded947e6e32531be806c3c765fa Mon Sep 17 00:00:00 2001 From: Lenheart <947330670@qq.com> Date: Sat, 14 Dec 2024 16:13:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=AF=E6=8B=96=E5=8A=A8=E6=8C=89=E9=92=AE?= =?UTF-8?q?=E5=B0=81=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sqr/User/UI/Widget/Drag_Button.nut | 57 ++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/sqr/User/UI/Widget/Drag_Button.nut b/sqr/User/UI/Widget/Drag_Button.nut index 320b061..bdb5c2b 100644 --- a/sqr/User/UI/Widget/Drag_Button.nut +++ b/sqr/User/UI/Widget/Drag_Button.nut @@ -9,19 +9,38 @@ class Yosin_DragButton extends Yosin_CommonUi { Path = ""; //索引 Idx = 0; + //方向 + Direction = true; //按钮 Button = null; + //鼠标相对位置 + M_Xpos = null; + M_Ypos = null; + //未移动时的初始坐标 + BasePos = null; + //移动Flag + MoveFlag = false; + //最大移动值 + Max_Move_Value = 0; + //移动值 + Move_Value = 0; constructor(X, Y, W, H, Path, Idx, Direction = true, UnavailableFlag = true) { this.Path = Path; this.Idx = Idx; + this.Direction = Direction; base.constructor(X, Y, W, H); Button = Yosin_SplicingButton(0, 0, W, H, Path, Idx, Direction, UnavailableFlag); Button.DownSimulateOffset = false; AddUIChild(Button); + + BasePos = { + x = X, + y = Y + } } //override @@ -29,5 +48,43 @@ class Yosin_DragButton extends Yosin_CommonUi { function OnMouseLbDown(MousePos_X, MousePos_Y) { base.OnMouseLbDown(MousePos_X, MousePos_Y); + if (isInRect) { + MoveFlag = true; + M_Xpos = MousePos_X; //原始鼠标位置数据 + M_Ypos = MousePos_Y; + B_X = X; //原始窗口位置 + B_Y = Y; + } + } + + //override + function OnMouseProc(MousePos_X, MousePos_Y) { + //调用原生方法 + base.OnMouseProc(MousePos_X, MousePos_Y); + + //移动 + if (MoveFlag) { + //左键拖动 + if (Direction) { + Move_Value = B_X + (MousePos_X - M_Xpos); + if (Move_Value >= (0 + BasePos.x) && Move_Value<(Max_Move_Value - Width + BasePos.x)) X = Move_Value; + } else { + Move_Value = B_Y + (MousePos_Y - M_Ypos); + if (Move_Value >= (0 + BasePos.y) && Move_Value<(Max_Move_Value - Height + BasePos.y)) Y = (Move_Value); + } + + SyncPos(X, Y); + } + } + + //鼠标左键弹起回调 + function OnMouseLbUp(MousePos_X, MousePos_Y) { + base.OnMouseLbUp(MousePos_X, MousePos_Y); + MoveFlag = false; + } + + //设置最大移动值 + function SetMaxMoveValue(Value) { + Max_Move_Value = Value; } } \ No newline at end of file