From 052f86d102c2dd863ac7fd12216d0ff9e3789f99 Mon Sep 17 00:00:00 2001 From: Lenheart <947330670@qq.com> Date: Wed, 18 Dec 2024 18:50:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=BC=A0=E6=A0=87=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sqr/Core/UI_Class/UI_Cursor.nut | 124 ++++++++++++++++++++++++++++++++ sqr/User/UI/Widget/IMouse.nut | 65 +++++++++++++++++ 2 files changed, 189 insertions(+) create mode 100644 sqr/Core/UI_Class/UI_Cursor.nut create mode 100644 sqr/User/UI/Widget/IMouse.nut diff --git a/sqr/Core/UI_Class/UI_Cursor.nut b/sqr/Core/UI_Class/UI_Cursor.nut new file mode 100644 index 0000000..03b0cc2 --- /dev/null +++ b/sqr/Core/UI_Class/UI_Cursor.nut @@ -0,0 +1,124 @@ +/* +文件名:UI_Cursor.nut +路径:Core/UI_Class/UI_Cursor.nut +创建日期:2024-12-18 13:41 +文件用途: +*/ +class _Yosin_Cursor extends Actor { + + Object = null; + + _Mouse_Click_Flag = null; + + constructor() { + base.constructor(); + _Mouse_Click_Flag = {}; + + getroottable().Yosin_Cursor <- this; + } + + //初始化 + function Init() { + //鼠标层级高于一切 + SetZOrder(20000000); + _UiObject_.Addchild(this); + } + + //更换鼠标指针 + function Change(Frame) { + if (Object) { + Removechild(Object); + } + Object = Frame; + Addchild(Frame); + } + + //事件 + function Event(MouseState, Wheel, MousePos_X, MousePos_Y) { + switch (MouseState) { + //常规或者拖动事件 + case 0x305: { + SetPosition(MousePos_X, MousePos_Y); + OnMouseProc(MousePos_X, MousePos_Y); + break; + } + //左键按下 + case 0x101: { + _Mouse_Click_Flag.LbFlag <- true; + OnMouseLbDown(MousePos_X, MousePos_Y); + break; + } + //左键松开 + case 0x001: { + //左键单击 + if (_Mouse_Click_Flag.LbFlag == true) { + _Mouse_Click_Flag.LbFlag <- false; + OnMouseLbClick(MousePos_X, MousePos_Y); + } + OnMouseLbUp(MousePos_X, MousePos_Y); + break; + } + //右键按下 + case 0x102: { + _Mouse_Click_Flag.RbFlag <- true; + OnMouseRbDown(MousePos_X, MousePos_Y); + break; + } + //右键松开 + case 0x002: { + //右键单击 + if (_Mouse_Click_Flag.RbFlag == true) { + _Mouse_Click_Flag.RbFlag <- false; + OnMouseRbClick(MousePos_X, MousePos_Y); + } + OnMouseRbUp(MousePos_X, MousePos_Y); + break; + } + //中键按下 + case 0x103: { + _Mouse_Click_Flag.MbFlag <- true; + OnMouseMbDown(MousePos_X, MousePos_Y); + break; + } + //中键松开 + case 0x003: { + //中键单击 + if (_Mouse_Click_Flag.MbFlag == true) { + _Mouse_Click_Flag.MbFlag <- false; + OnMouseMbClick(MousePos_X, MousePos_Y); + } + OnMouseMbUp(MousePos_X, MousePos_Y); + break; + } + //滚轮事件 + case 0x406: { + OnMouseWheel(Wheel, MousePos_X, MousePos_Y); + break; + } + } + } + + + //鼠标事件回调 + function OnMouseProc(MousePos_X, MousePos_Y) {} + //鼠标左键按下回调 + function OnMouseLbDown(MousePos_X, MousePos_Y) {} + //鼠标左键单击回调 + function OnMouseLbClick(MousePos_X, MousePos_Y) {} + //鼠标左键弹起回调 + function OnMouseLbUp(MousePos_X, MousePos_Y) {} + //鼠标右键按下回调 + function OnMouseRbDown(MousePos_X, MousePos_Y) {} + //鼠标右键单击回调 + function OnMouseRbClick(MousePos_X, MousePos_Y) {} + //鼠标右键弹起回调 + function OnMouseRbUp(MousePos_X, MousePos_Y) {} + //鼠标中键按下回调 + function OnMouseMbDown(MousePos_X, MousePos_Y) {} + //鼠标中键单击回调 + function OnMouseMbClick(MousePos_X, MousePos_Y) {} + //鼠标中键弹起回调 + function OnMouseMbUp(MousePos_X, MousePos_Y) {} + //鼠标滚轮事件回调 + function OnMouseWheel(Wheel, MousePos_X, MousePos_Y) {} +} \ No newline at end of file diff --git a/sqr/User/UI/Widget/IMouse.nut b/sqr/User/UI/Widget/IMouse.nut new file mode 100644 index 0000000..0e523d3 --- /dev/null +++ b/sqr/User/UI/Widget/IMouse.nut @@ -0,0 +1,65 @@ +/* +文件名:IMouse.nut +路径:User/UI/Widget/IMouse.nut +创建日期:2024-12-18 14:03 +文件用途: +*/ +class _IMouse_ extends _Yosin_Cursor { + + NormalC = null; + //普通状态0 + State = 0; + Idx = 0; + + constructor() { + NormalC = []; + base.constructor(); + getroottable().IMouse <- this; + + //关闭系统鼠标 + Sq_ShowCursor(false); + + //调用父类初始化 将自己添加为UI层子对象 + Init(); + //初始化所有普通图标 + InitSprite(); + + //更换为0号指针 + Change(0); + } + + //初始化普通鼠标指针 + function InitSprite() { + for (local i = 0; i< 254; i++) { + local Sp = CL_SpriteObject("sprite/interface/newstyle/windows/cursor.img", i); + NormalC.push(Sp); + } + } + //更换普通鼠标指针 + function Change(Idx) { + State = 0; + this.Idx = Idx; + local Sp = NormalC[Idx]; + base.Change(Sp); + } + + function OnMouseProc(MousePos_X, MousePos_Y) { + + } + + //按下 + function OnMouseLbDown(MousePos_X, MousePos_Y) { + //普通状态的点击效果 + if (Idx == 0) { + Change(1); + } + } + + //抬起 + function OnMouseLbUp(MousePos_X, MousePos_Y) { + //普通状态的点击效果 + if (Idx == 1) { + Change(0); + } + } +} \ No newline at end of file