Open Geistyp opened 8 years ago
I think there may be some Unicode/UTF-8 in OF 0.9.0
Take a look at this and see if it may help http://blog.openframeworks.cc/post/133404738514/openframeworks-090-ofthreadchannel-utf-8-and
Especially the section about ofAppendUTF8(str,key)
Yes, but ImGui combine key code to string and parse to utf8, we just use AddInputCharacter to add key code.
https://github.com/arturoc/glfw/blob/feature-keysUnicode/src/win32_window.c#L320
case WM_SYSKEYDOWN:
{
const int scancode = (lParam >> 16) & 0x1ff;
const int key = translateKey(wParam, lParam);
if (key == _GLFW_KEY_INVALID)
break;
const int unicode = translateToUnicode(wParam,scancode);
_glfwInputKey(window, key, scancode, unicode, GLFW_PRESS, getKeyMods());
break;
}
case WM_CHAR:
{
_glfwInputChar(window, (unsigned int) wParam, getKeyMods(), GL_TRUE);
return 0;
}
case WM_SYSCHAR:
{
_glfwInputChar(window, (unsigned int) wParam, getKeyMods(), GL_FALSE);
return 0;
}
case WM_UNICHAR:
{
// This message is not sent by Windows, but is sent by some
// third-party input method engines
if (wParam == UNICODE_NOCHAR)
{
// Returning TRUE here announces support for this message
return TRUE;
}
_glfwInputChar(window, (unsigned int) wParam, getKeyMods(), GL_TRUE);
return FALSE;
}
oF already translate char to unicode, but ImGui input just need (unsigned int) wParam
There is no different change to use glfwSetCharCallback(), but add features to support IME input.
ok - I think I understand. I will take a look
@Geistyp
static char buf[256] = "";
bool isinput = ImGui::InputText(ofLocaleToUtf8("输入中文").c_str(), buf, IM_ARRAYSIZE(buf));
if (isinput)
{
ofLogNotice( ofToString(buf) );
}
display Garbled
@Geistyp How to convert static char buf[256]
@o2co2 what do you mean? Is that "输入中文" garbled? or your IME input garbled?
@Geistyp see the picture
@o2co2 console output chinese? try _setlocale(LCALL, "chs");
@Geistyp Thank you
static char buf[256] = "";
bool isinput = ImGui::InputText(ofLocaleToUtf8("输入中文").c_str(), buf, IM_ARRAYSIZE(buf));
if (isinput)
{
std::wstring sw = UTF8ToUnicode(ofToString(buf));
std::string uToa = UnicodeToANSI(sw);
ofLogNotice(uToa.c_str());
}
according to https://github.com/ocornut/imgui/blob/master/examples/opengl3_example/imgui_impl_glfw_gl3.cpp
we should use glfwSetCharCallback(window, ImGui_ImplGlfwGL3_CharCallback) to AddInputCharacter()
since like ofKeyEventArgs.codepoint is not the right unicode char, maybe this is a oF core bug.
so I comment all AddInputCharacter in KeyPressed and KeyReleased
And add CharCallback then all works
oF not use this CallBack in glfw setting, so it's fine we use here.