/* 文件名:3_Top_tool.nut 路径:User/UI/Window/3_Top_tool.nut 创建日期:2024-12-21 23:43 文件用途: 顶部工具条 */ class _Top_tool extends Yosin_Window { timeTextActor = null; //是否可见 // Visible = false; //是否为顶层窗口 // IsTop = true; //窗口位置 WindowPos = null; WindowMoveFlag = false; BaseCursorWPos = null; constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) { base.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH); //注册绘制 RegisterDraw(); //注册控件 RegisterWidget(); WindowPos = Sq_GetWindowRect(); } function RegisterWidget() { local background = Yosin_EmeStretch( 650, 20, "sprite/interface/lenheartwindowcommon.img", 612); Addchild(background); local timeBackGround = Yosin_EmeStretch( 90, 14, "sprite/interface/lenheartwindowcommon.img", 615); timeBackGround.SetPosition(14, 2); Addchild(timeBackGround); // 时间 timeTextActor = FontAssetManager.GenerateNormal(getTimeString(), true, { color = sq_RGBA(200, 195, 169, 255) }); timeTextActor.SetPosition(20, 4); Addchild(timeTextActor); // 三角 local jiao = CL_SpriteObject("sprite/interface/lenheartwindowcommon.img", 622); jiao.SetPosition(85, 7.5); Addchild(jiao); // 最小化 local minButton = _Top_tool_Button(576, 1, 22, 16 "sprite/interface/lenheartwindowcommon.img", 618); minButton.OnClick = function(Button) { Sq_ShowWindow(6); }.bindenv(this); AddUIChild(minButton); // 最大化 local maxButton = _Top_tool_Button(598, 1, 22, 16 "sprite/interface/lenheartwindowcommon.img", 628); maxButton.OnClick = function(Button) { Sq_ShowWindow(3); }.bindenv(this); AddUIChild(maxButton); // 关闭 local closeButton = _Top_tool_Button(620, 1, 22, 16 "sprite/interface/lenheartwindowcommon.img", 624); closeButton.OnClick = function(Button) { Sq_CloseWindow(); }.bindenv(this); AddUIChild(closeButton); } function RegisterDraw() { } function getTimeString() { local date = date(time()); local timeStr = ""; if (date.hour >= 12) { timeStr = "PM " + (date.hour - 12).tostring() + ":" + date.min.tostring(); } else { timeStr = "AM " + date.hour.tostring() + ":" + date.min.tostring(); } return timeStr; } //逻辑入口 function Proc(Dt) { SyncPos(X, Y); base.Proc(Dt); if (time() % 60 == 0) { timeTextActor.SetText(getTimeString()); } //如果事件在窗口内 if (Math.IsIntersectRect(Yosin_Cursor.X, Yosin_Cursor.Y, 1, 1, X, Y, Width, Height)) { if (!Visible) ResetFocus(); } else { Visible = false; } } //override //鼠标事件回调 function OnMouseProc(MousePos_X, MousePos_Y) { base.OnMouseProc(MousePos_X, MousePos_Y); //设定拖动逻辑 if (WindowMoveFlag) { local pos = Sq_GetCursorPos(); local WX = pos.x - M_Xpos; local WY = pos.y - M_Ypos; M_Xpos = pos.x; M_Ypos = pos.y; WindowPos.left += WX; WindowPos.top += WY; Sq_SetCursorPos(WindowPos.left + BaseCursorWPos.x, WindowPos.top + BaseCursorWPos.y); Sq_SetWindowPos(WindowPos.left, WindowPos.top); } } //override //鼠标左键单击回调 function OnMouseLbDown(MousePos_X, MousePos_Y) { base.OnMouseLbDown(MousePos_X, MousePos_Y); //如果点击事件在窗口内 if (Math.IsIntersectRect(Yosin_Cursor.X, Yosin_Cursor.Y, 1, 1, X, Y, Width, Height)) { WindowMoveFlag = true; local pos = Sq_GetCursorPos(); M_Xpos = pos.x; //原始鼠标位置数据 M_Ypos = pos.y; BaseCursorWPos = { x = MousePos_X, y = MousePos_Y }; } } //override //鼠标左键弹起回调 function OnMouseLbUp(MousePos_X, MousePos_Y) { //调用原生方法 base.OnMouseLbUp(MousePos_X, MousePos_Y); if (WindowMoveFlag) { WindowMoveFlag = false; M_Xpos = null; M_Ypos = null; BaseCursorWPos = null; } } } class _Top_tool_Button extends Yosin_BaseButton { border = null; constructor(X, Y, W, H, Path, Idx) { base.constructor(X, Y, W, H, Path, Idx); border = CL_SpriteObject("sprite/interface/lenheartwindowcommon.img", 623); Addchild(border); } //逻辑入口 function Proc(obj) { base.Proc(obj); border.SetVisible(isLBDown); } }