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