| 
									
										
										
										
											2024-12-14 11:14:20 +08:00
										 |  |  | /* | 
					
						
							|  |  |  | 文件名:Drag_Button.nut | 
					
						
							|  |  |  | 路径:User/UI/Widget/Drag_Button.nut | 
					
						
							|  |  |  | 创建日期:2024-12-14	09:40 | 
					
						
							|  |  |  | 文件用途:拖动按钮 | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | class Yosin_DragButton extends Yosin_CommonUi { | 
					
						
							|  |  |  |     //路径 | 
					
						
							|  |  |  |     Path = ""; | 
					
						
							|  |  |  |     //索引 | 
					
						
							|  |  |  |     Idx = 0; | 
					
						
							| 
									
										
										
										
											2024-12-14 16:13:56 +08:00
										 |  |  |     //方向 | 
					
						
							|  |  |  |     Direction = true; | 
					
						
							| 
									
										
										
										
											2024-12-14 11:14:20 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     //按钮 | 
					
						
							|  |  |  |     Button = null; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-14 16:13:56 +08:00
										 |  |  |     //鼠标相对位置 | 
					
						
							|  |  |  |     M_Xpos = null; | 
					
						
							|  |  |  |     M_Ypos = null; | 
					
						
							|  |  |  |     //未移动时的初始坐标 | 
					
						
							|  |  |  |     BasePos = null; | 
					
						
							|  |  |  |     //移动Flag | 
					
						
							|  |  |  |     MoveFlag = false; | 
					
						
							|  |  |  |     //最大移动值 | 
					
						
							|  |  |  |     Max_Move_Value = 0; | 
					
						
							|  |  |  |     //移动值 | 
					
						
							|  |  |  |     Move_Value = 0; | 
					
						
							| 
									
										
										
										
											2024-12-14 11:14:20 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     constructor(X, Y, W, H, Path, Idx, Direction = true, UnavailableFlag = true) { | 
					
						
							|  |  |  |         this.Path = Path; | 
					
						
							|  |  |  |         this.Idx = Idx; | 
					
						
							| 
									
										
										
										
											2024-12-14 16:13:56 +08:00
										 |  |  |         this.Direction = Direction; | 
					
						
							| 
									
										
										
										
											2024-12-14 11:14:20 +08:00
										 |  |  |         base.constructor(X, Y, W, H); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Button = Yosin_SplicingButton(0, 0, W, H, Path, Idx, Direction, UnavailableFlag); | 
					
						
							|  |  |  |         Button.DownSimulateOffset = false; | 
					
						
							|  |  |  |         AddUIChild(Button); | 
					
						
							| 
									
										
										
										
											2024-12-14 16:13:56 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         BasePos = { | 
					
						
							|  |  |  |             x = X, | 
					
						
							|  |  |  |             y = Y | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2024-12-14 11:14:20 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //override | 
					
						
							|  |  |  |     //鼠标左键按下回调 | 
					
						
							|  |  |  |     function OnMouseLbDown(MousePos_X, MousePos_Y) { | 
					
						
							|  |  |  |         base.OnMouseLbDown(MousePos_X, MousePos_Y); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-14 16:13:56 +08:00
										 |  |  |         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; | 
					
						
							| 
									
										
										
										
											2024-12-14 11:14:20 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | } |