Emscripten: console text input
This commit is contained in:
@@ -89,12 +89,12 @@
|
||||
}
|
||||
|
||||
#textinputbox {
|
||||
width: 95%;
|
||||
width: 100%;
|
||||
font-size: xx-large;
|
||||
}
|
||||
|
||||
#textinputbutton {
|
||||
width: 95%;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
canvas.emscripten {
|
||||
@@ -226,6 +226,10 @@
|
||||
textInputValue: null,
|
||||
|
||||
startTextInput: function(text) {
|
||||
if (document.getElementById("textinput").style.display != "none") {
|
||||
//Module.print("Text input already started");
|
||||
return;
|
||||
}
|
||||
//Module.print("Start text input!");
|
||||
Module.textInputValue = null;
|
||||
document.getElementById("textinput").style.display = "block";
|
||||
|
||||
@@ -32,6 +32,9 @@
|
||||
#ifdef __ANDROID__
|
||||
#include <SDL_screenkeyboard.h>
|
||||
#endif
|
||||
#ifdef __EMSCRIPTEN__
|
||||
#include <emscripten.h>
|
||||
#endif
|
||||
|
||||
static const uint ICON_HISTORY_SIZE = 20;
|
||||
static const uint ICON_LINE_SPACING = 2;
|
||||
@@ -189,6 +192,13 @@ struct IConsoleWindow : Window
|
||||
this->truncate_timer.SetInterval(3000);
|
||||
ResizeWindow(this, _screen.width - GetMinButtonSize() * 2, _screen.height / 3);
|
||||
this->left = GetMinButtonSize();
|
||||
|
||||
#ifdef __EMSCRIPTEN__
|
||||
// TODO: move this code to SDL2 Emscripten backend
|
||||
EM_ASM({
|
||||
Module.startTextInput(UTF8ToString($0));
|
||||
}, "");
|
||||
#endif // __EMSCRIPTEN__
|
||||
}
|
||||
|
||||
~IConsoleWindow()
|
||||
@@ -234,6 +244,23 @@ struct IConsoleWindow : Window
|
||||
if (_focused_window == this && _iconsole_cmdline.caret) {
|
||||
DrawString(this->line_offset + delta + _iconsole_cmdline.caretxoffs, right, this->height - this->line_height, "_", TC_WHITE, SA_LEFT | SA_FORCE);
|
||||
}
|
||||
|
||||
#ifdef __EMSCRIPTEN__
|
||||
// TODO: move this code to SDL2 Emscripten backend
|
||||
char buf[512] = "";
|
||||
int status = EM_ASM_INT({
|
||||
var value = Module.getTextInput();
|
||||
if (value == null) {
|
||||
return 0;
|
||||
}
|
||||
var lengthBytes = Math.min(512, lengthBytesUTF8(value) + 1);
|
||||
stringToUTF8(value, $0, lengthBytes);
|
||||
return 1;
|
||||
}, buf);
|
||||
if (status) {
|
||||
this->OnQueryTextFinished(buf);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void OnQueryTextFinished(char *str) override
|
||||
@@ -262,6 +289,16 @@ struct IConsoleWindow : Window
|
||||
if (_iconsole_cmdline.HandleCaret()) this->SetDirty();
|
||||
}
|
||||
|
||||
void OnClick(Point pt, int widget, int click_count) override
|
||||
{
|
||||
#ifdef __EMSCRIPTEN__
|
||||
// TODO: move this code to SDL2 Emscripten backend
|
||||
EM_ASM({
|
||||
Module.startTextInput(UTF8ToString($0));
|
||||
}, "");
|
||||
#endif // __EMSCRIPTEN__
|
||||
}
|
||||
|
||||
EventState OnKeyPress(WChar key, uint16 keycode) override
|
||||
{
|
||||
if (_focused_window != this) return ES_NOT_HANDLED;
|
||||
|
||||
Reference in New Issue
Block a user