void InputBox_setText(entity me, string txt)
{
- if (me.text) strunzone(me.text);
+ strfree(me.text);
SUPER(InputBox).setText(me, strzone(txt));
}
float over_ClearButton(entity me, vector pos)
{
+ if (me.text == "")
+ return 0;
if (pos.x >= 1 + me.cb_offset - me.cb_width)
if (pos.x < 1 + me.cb_offset)
if (pos.y >= 0)
return 1;
}
- float InputBox_mousePress(entity me, vector pos)
+ METHOD(InputBox, mousePress, bool(InputBox this, vector pos))
{
- if (me.enableClearButton)
- if (over_ClearButton(me, pos))
+ if (this.enableClearButton)
+ if (over_ClearButton(this, pos))
{
- me.cb_pressed = 1;
- return 1;
+ this.cb_pressed = 1;
+ return true;
}
- me.dragScrollTimer = time;
- me.pressed = 1;
- return InputBox_mouseDrag(me, pos);
+ this.dragScrollTimer = time;
+ this.pressed = 1;
+ return InputBox_mouseDrag(this, pos);
}
float InputBox_mouseRelease(entity me, vector pos)
void InputBox_enterText(entity me, string ch)
{
- float i;
- for (i = 0; i < strlen(ch); ++i)
+ int len = strlen(ch);
+ for (int i = 0; i < len; ++i)
if (strstrofs(me.forbiddenCharacters, substring(ch, i, 1), 0) > -1) return;
if (me.maxLength > 0)
{
- if (strlen(ch) + strlen(me.text) > me.maxLength) return;
+ if (len + 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);
+ me.cursorPos += len;
}
float InputBox_keyDown(entity me, float key, float ascii, float shift)
draw_SetClipRect(eX * me.keepspaceLeft, eX * (1 - me.keepspaceLeft - me.keepspaceRight) + eY);
if (me.editColorCodes)
{
- string ch, ch2;
- float i, n;
- vector theColor;
- float theAlpha; // float theVariableAlpha;
- vector p;
- vector theTempColor;
- float component;
-
- p = me.realOrigin - eX * me.scrollPos;
- theColor = '1 1 1';
- theAlpha = 1; // theVariableAlpha = 1; // changes when ^ax found
+ vector p = me.realOrigin - eX * me.scrollPos;
+ vector theColor = '1 1 1';
+ float theAlpha = 1;
- n = strlen(me.text);
- for (i = 0; i < n; ++i)
+ for (int i = 0, n = strlen(me.text); i < n; ++i)
{
- ch = substring(me.text, i, 1);
+ string ch = substring(me.text, i, 1);
if (ch == "^")
{
float w;
- ch2 = substring(me.text, i + 1, 1);
+ string ch2 = substring(me.text, i + 1, 1);
w = draw_TextWidth(strcat(ch, ch2), 0, me.realFontSize);
+ float fill_alpha = 0.4;
if (ch2 == "^")
{
- draw_Fill(p, eX * w + eY * me.realFontSize.y, '1 1 1', 0.5);
+ if (me.cursorPos > i && me.cursorPos <= i + 2)
+ fill_alpha = 0.6;
+ draw_Fill(p, eX * w + eY * me.realFontSize.y, '1 1 1', fill_alpha);
draw_Text(p + eX * 0.25 * w, "^", me.realFontSize, theColor, theAlpha, 0);
}
- else if (ch2 == "0" || stof(ch2)) // digit?
+ else if (IS_DIGIT(ch2))
{
+ theAlpha = 1;
switch (stof(ch2))
{
- case 0: theColor = '0 0 0';
- theAlpha = 1;
- break;
- case 1: theColor = '1 0 0';
- theAlpha = 1;
- break;
- case 2: theColor = '0 1 0';
- theAlpha = 1;
- break;
- case 3: theColor = '1 1 0';
- theAlpha = 1;
- break;
- case 4: theColor = '0 0 1';
- theAlpha = 1;
- break;
- case 5: theColor = '0 1 1';
- theAlpha = 1;
- break;
- case 6: theColor = '1 0 1';
- theAlpha = 1;
- break;
- case 7: theColor = '1 1 1';
- theAlpha = 1;
- break;
- case 8: theColor = '1 1 1';
- theAlpha = 0.5;
- break;
- case 9: theColor = '0.5 0.5 0.5';
- theAlpha = 1;
- break;
+ case 0: theColor = '0 0 0'; break;
+ case 1: theColor = '1 0 0'; break;
+ case 2: theColor = '0 1 0'; break;
+ case 3: theColor = '1 1 0'; break;
+ case 4: theColor = '0 0 1'; break;
+ case 5: theColor = '0 1 1'; break;
+ case 6: theColor = '1 0 1'; break;
+ case 7: theColor = '1 1 1'; break;
+ case 8: theColor = '1 1 1'; theAlpha = 0.5; break;
+ case 9: theColor = '0.5 0.5 0.5'; break;
}
- draw_Fill(p, eX * w + eY * me.realFontSize.y, '1 1 1', 0.5);
+ if (me.cursorPos > i && me.cursorPos <= i + 2)
+ fill_alpha = 0.6;
+ draw_Fill(p, eX * w + eY * me.realFontSize.y, '1 1 1', fill_alpha);
draw_Text(p, strcat(ch, ch2), me.realFontSize, theColor, theAlpha, 0);
}
else if (ch2 == "x") // ^x found
{
+ vector theTempColor;
theColor = '1 1 1';
-
- component = HEXDIGIT_TO_DEC(substring(me.text, i + 2, 1));
+ float component = HEXDIGIT_TO_DEC(substring(me.text, i + 2, 1));
if (component >= 0) // ^xr found
{
theTempColor.x = component / 15;
theColor = theTempColor;
w = draw_TextWidth(substring(me.text, i, 5), 0, me.realFontSize);
- draw_Fill(p, eX * w + eY * me.realFontSize.y, '1 1 1', 0.5);
- draw_Text(p, substring(me.text, i, 5), me.realFontSize, theColor, 1, 0); // theVariableAlpha instead of 1 using alpha tags ^ax
+ if (me.cursorPos > i && me.cursorPos <= i + 5)
+ fill_alpha = 0.8;
+ draw_Fill(p, eX * w + eY * me.realFontSize.y, '1 1 1', fill_alpha);
+ draw_Text(p, substring(me.text, i, 5), me.realFontSize, theColor, 1, 0);
i += 3;
}
else
{
// blue missing
w = draw_TextWidth(substring(me.text, i, 4), 0, me.realFontSize);
- draw_Fill(p, eX * w + eY * me.realFontSize.y, eZ, 0.5);
+ draw_Fill(p, eX * w + eY * me.realFontSize.y, eZ, fill_alpha);
draw_Text(p, substring(me.text, i, 4), me.realFontSize, '1 1 1', theAlpha, 0);
i += 2;
}
{
// green missing
w = draw_TextWidth(substring(me.text, i, 3), 0, me.realFontSize);
- draw_Fill(p, eX * w + eY * me.realFontSize.y, eY, 0.5);
+ draw_Fill(p, eX * w + eY * me.realFontSize.y, eY, fill_alpha);
draw_Text(p, substring(me.text, i, 3), me.realFontSize, '1 1 1', theAlpha, 0);
i += 1;
}
{
// red missing
// w = draw_TextWidth(substring(me.text, i, 2), 0) * me.realFontSize_x;
- draw_Fill(p, eX * w + eY * me.realFontSize.y, eX, 0.5);
+ draw_Fill(p, eX * w + eY * me.realFontSize.y, eX, fill_alpha);
draw_Text(p, substring(me.text, i, 2), me.realFontSize, '1 1 1', theAlpha, 0);
}
}
else
{
- draw_Fill(p, eX * w + eY * me.realFontSize.y, '1 1 1', 0.5);
+ draw_Fill(p, eX * w + eY * me.realFontSize.y, '1 1 1', fill_alpha);
draw_Text(p, strcat(ch, ch2), me.realFontSize, theColor, theAlpha, 0);
}
p += w * eX;
++i;
continue;
}
- draw_Text(p, ch, me.realFontSize, theColor, theAlpha, 0); // TODO theVariableAlpha
+ draw_Text(p, ch, me.realFontSize, theColor, theAlpha, 0);
p += eX * draw_TextWidth(ch, 0, me.realFontSize);
}
}
draw_Text(me.realOrigin - eX * me.scrollPos, me.text, me.realFontSize, '1 1 1', 1, 0);
}
- 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);
+ 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();
- if (me.enableClearButton)
- if (me.text != "")
- {
- if (me.focused && me.cb_pressed) draw_Picture(eX * (1 + me.cb_offset - me.cb_width), strcat(me.cb_src, "_c"), eX * me.cb_width + eY, me.cb_colorC, 1);
- else if (me.focused && me.cb_focused) draw_Picture(eX * (1 + me.cb_offset - me.cb_width), strcat(me.cb_src, "_f"), eX * me.cb_width + eY, me.cb_colorF, 1);
- else draw_Picture(eX * (1 + me.cb_offset - me.cb_width), strcat(me.cb_src, "_n"), eX * me.cb_width + eY, me.cb_color, 1);
- }
+ if (me.enableClearButton && me.text != "")
+ {
+ if (me.focused && me.cb_pressed)
+ draw_Picture(eX * (1 + me.cb_offset - me.cb_width), strcat(me.cb_src, "_c"), eX * me.cb_width + eY, me.cb_colorC, 1);
+ else if (me.focused && me.cb_focused)
+ draw_Picture(eX * (1 + me.cb_offset - me.cb_width), strcat(me.cb_src, "_f"), eX * me.cb_width + eY, me.cb_colorF, 1);
+ else
+ draw_Picture(eX * (1 + me.cb_offset - me.cb_width), strcat(me.cb_src, "_n"), eX * me.cb_width + eY, me.cb_color, 1);
+ }
// skipping SUPER(InputBox).draw(me);
- Item_draw(me);
+ MenuItem_draw(me);
}
void InputBox_showNotify(entity me)