X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fmenu%2Fitem%2Finputbox.c;h=13351cfd32c8f2586a37157f2f0e4677c6a42818;hp=cb1b32e8b1c9a4225e9e3bb09885b935e3945491;hb=39c5a2ddb560b76d6134ee27da5096eb784eac25;hpb=16c35f41a25bb2edf3d4b7d664049d2923000f96 diff --git a/qcsrc/menu/item/inputbox.c b/qcsrc/menu/item/inputbox.c index cb1b32e8b..13351cfd3 100644 --- a/qcsrc/menu/item/inputbox.c +++ b/qcsrc/menu/item/inputbox.c @@ -25,7 +25,7 @@ CLASS(InputBox) EXTENDS(Label) ATTRIB(InputBox, forbiddenCharacters, string, "") ATTRIB(InputBox, color, vector, '1 1 1') ATTRIB(InputBox, colorF, vector, '1 1 1') - ATTRIB(InputBox, maxLength, float, 255) + ATTRIB(InputBox, maxLength, float, 255) // if negative, it counts bytes, not chars ENDCLASS(InputBox) void InputBox_Clear_Click(entity btn, entity me); #endif @@ -79,8 +79,16 @@ void InputBox_enterText(entity me, string ch) for(i = 0; i < strlen(ch); ++i) if(strstrofs(me.forbiddenCharacters, substring(ch, i, 1), 0) > -1) return; - if(strlen(ch) + strlen(me.text) > me.maxLength) - return; + if(me.maxLength > 0) + { + if(strlen(ch) + strlen(me.text) > me.maxLength) + return; + } + else if(me.maxLength < 0) + { + if(u8_strsize(ch) + u8_strsize(me.text) > -me.maxLength) + return; + } me.setText(me, strcat(substring(me.text, 0, me.cursorPos), ch, substring(me.text, me.cursorPos, strlen(me.text) - me.cursorPos))); me.cursorPos += strlen(ch); } @@ -96,15 +104,19 @@ float InputBox_keyDown(entity me, float key, float ascii, float shift) } switch(key) { + case K_KP_LEFTARROW: case K_LEFTARROW: me.cursorPos -= 1; return 1; + case K_KP_RIGHTARROW: case K_RIGHTARROW: me.cursorPos += 1; return 1; + case K_KP_HOME: case K_HOME: me.cursorPos = 0; return 1; + case K_KP_END: case K_END: me.cursorPos = strlen(me.text); return 1; @@ -115,6 +127,7 @@ float InputBox_keyDown(entity me, float key, float ascii, float shift) me.setText(me, strcat(substring(me.text, 0, me.cursorPos), substring(me.text, me.cursorPos + 1, strlen(me.text) - me.cursorPos - 1))); } return 1; + case K_KP_DEL: case K_DEL: if(shift & S_CTRL) me.setText(me, ""); @@ -259,35 +272,6 @@ void InputBox_draw(entity me) draw_Text(p, substring(me.text, i, 2), me.realFontSize, '1 1 1', theAlpha, 0); } } - /*else if(ch2 == "a") // ^a found - { - draw_Fill(p, eX * w + eY * me.realFontSize_y, '1 1 1', 0.5); - draw_Text(p, substring(me.text, i, 2), me.realFontSize, theColor, 0.8, 0); - - component = str2chr(me.text, i+2); - if (component >= '0' && component <= '9') - component = component - '0'; - else if (component >= 'a' && component <= 'f') - component = component - 87; - else if (component >= 'A' && component <= 'F') - component = component - 55; - else - component = -1; - - if (component >= 0) // ^ah found - { - // FIX ME: overflow here - if (component == 20 && theVariableAlpha <= 0.97) - theVariableAlpha = theVariableAlpha + 0.0625; - else if (component == 30 && theVariableAlpha >= 0.03) - theVariableAlpha = theVariableAlpha - 0.0625; - else - theVariableAlpha = component*0.0625; - - draw_Fill(p, eX * draw_TextWidth(substring(me.text, i, 3), 0, me.realFontSize) + eY * me.realFontSize_y, '0.8 0.8 0.8', 0.5); - draw_Text(p, strcat(ch, ch2), me.realFontSize, theColor, 0.8, 0); - } - }*/ else { draw_Fill(p, eX * w + eY * me.realFontSize_y, '1 1 1', 0.5); @@ -303,11 +287,14 @@ void InputBox_draw(entity me) } else draw_Text(me.realOrigin - eX * me.scrollPos, me.text, me.realFontSize, '1 1 1', 1, 0); - // skipping SUPER(InputBox).draw(me); + if(!me.focused || (time - me.lastChangeTime) < floor(time - me.lastChangeTime) + 0.5) draw_Text(me.realOrigin + eX * (cursorPosInWidths - me.scrollPos), CURSOR, me.realFontSize, '1 1 1', 1, 0); draw_ClearClip(); + + // skipping SUPER(InputBox).draw(me); + Item_draw(me); } void InputBox_showNotify(entity me)