110 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| /*
 | |
| 文件名:InputBox.nut
 | |
| 路径:User/UI/Widget/InputBox.nut
 | |
| 创建日期:2024-12-02	09:55
 | |
| 文件用途:输入框
 | |
| */
 | |
| //基础按钮
 | |
| class Yosin_InputBox extends Yosin_CommonUi {
 | |
|     //状态
 | |
|     State = 0;
 | |
|     //是否焦点
 | |
|     IsFocus = false;
 | |
|     //内容
 | |
|     str = "";
 | |
|     sliceCode = "|";
 | |
| 
 | |
|     InputController = null;
 | |
| 
 | |
|     //宽度
 | |
|     DWidth = 0;
 | |
| 
 | |
|     //文本对象
 | |
|     Text_Obj = null;
 | |
|     //Path
 | |
|     Path = "sprite/interface/lenheartwindowcommon.img";
 | |
| 
 | |
|     constructor(X, Y, W) {
 | |
|         this.DWidth = W;
 | |
| 
 | |
|         base.constructor(X, Y, W, 20);
 | |
|         local FillCount = DWidth;
 | |
| 
 | |
|         local HeaderSp = CL_SpriteObject(Path, 63);
 | |
|         Addchild(HeaderSp);
 | |
|         for (local i = 0; i< FillCount; i++) {
 | |
|             local MiddleSp = CL_SpriteObject(Path, 64);
 | |
|             MiddleSp.SetPosition(i + 3, 0);
 | |
|             Addchild(MiddleSp);
 | |
|         }
 | |
|         local TailSp = CL_SpriteObject(Path, 65);
 | |
|         TailSp.SetPosition(FillCount + 3, 0);
 | |
|         Addchild(TailSp);
 | |
| 
 | |
|         Text_Obj = TextActor(0, {
 | |
|             color = 0xFFFFFFFF
 | |
|         });
 | |
|         Text_Obj.SetPosition(4, 1);
 | |
|         Addchild(Text_Obj);
 | |
| 
 | |
|         _Imm_Input_Func_.rawset(C_Object, Imm_Input.bindenv(this));
 | |
|     }
 | |
| 
 | |
|     //闪烁时间
 | |
|     FlushTime = 0;
 | |
| 
 | |
|     function SliceCodeFlicker(Dt) {
 | |
|         FlushTime += Dt;
 | |
|         if (FlushTime >= 500) {
 | |
|             FlushTime = 0;
 | |
|             if (sliceCode.len() > 0) sliceCode = "";
 | |
|             else if (sliceCode.len() == 0) sliceCode = "|";
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     //判断是否中文字符
 | |
|     function IsChineseChar(code) {
 | |
|         return (code & 0x80) != 0;
 | |
|     }
 | |
| 
 | |
|     //接收文本数据
 | |
|     function Imm_Input(str) {
 | |
|         if (!this) return -1;
 | |
|         if (!IsFocus) return;
 | |
|         //退格键
 | |
|         if (str == "\b") {
 | |
|             if (this.str.len() > 0) {
 | |
|                 this.str = Sq_RemoveStringLast(this.str);
 | |
|             }
 | |
|             return;
 | |
|         }
 | |
|         this.str += str;
 | |
|     }
 | |
| 
 | |
|     //同步文本对象数据
 | |
|     function SyncText() {
 | |
|         Text_Obj.SetText(str + sliceCode);
 | |
|     }
 | |
| 
 | |
|     function Proc(Dt) {
 | |
|         if (IsFocus) SliceCodeFlicker(Dt);
 | |
|         else sliceCode = "";
 | |
| 
 | |
|         SyncText();
 | |
|     }
 | |
| 
 | |
|     //鼠标左键单击回调
 | |
|     function OnMouseLbClick(MousePos_X, MousePos_Y) {
 | |
|         local Pos = GetWorldPosition();
 | |
|         if (Math.IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, Pos.x, Pos.y, Width, Height)) {
 | |
|             if (OnClick) OnClick(this);
 | |
|             IsFocus = true;
 | |
|             sliceCode = "|";
 | |
|             Sq_SetImmEnabled(true);
 | |
|         } else {
 | |
|             IsFocus = false;
 | |
|             sliceCode = "";
 | |
|             Sq_SetImmEnabled(false);
 | |
|         }
 | |
|     }
 | |
| } |