Browse Source

Merge pull request #1756 from cloudwu/unicodeimgui

unicode inputChar support for imguiBeginFrame
Бранимир Караџић 6 years ago
parent
commit
3266469823
2 changed files with 10 additions and 3 deletions
  1. 9 2
      examples/common/imgui/imgui.cpp
  2. 1 1
      examples/common/imgui/imgui.h

+ 9 - 2
examples/common/imgui/imgui.cpp

@@ -9,6 +9,7 @@
 #include <bx/math.h>
 #include <bx/math.h>
 #include <bx/timer.h>
 #include <bx/timer.h>
 #include <dear-imgui/imgui.h>
 #include <dear-imgui/imgui.h>
+#include <dear-imgui/imgui_internal.h>
 
 
 #include "imgui.h"
 #include "imgui.h"
 #include "../bgfx_utils.h"
 #include "../bgfx_utils.h"
@@ -340,7 +341,7 @@ struct OcornutImguiContext
 		, int32_t _scroll
 		, int32_t _scroll
 		, int _width
 		, int _width
 		, int _height
 		, int _height
-		, char _inputChar
+		, int _inputChar
 		, bgfx::ViewId _viewId
 		, bgfx::ViewId _viewId
 		)
 		)
 	{
 	{
@@ -350,6 +351,12 @@ struct OcornutImguiContext
 		if (_inputChar < 0x7f)
 		if (_inputChar < 0x7f)
 		{
 		{
 			io.AddInputCharacter(_inputChar); // ASCII or GTFO! :(
 			io.AddInputCharacter(_inputChar); // ASCII or GTFO! :(
+		} else
+		{
+			char tmpstr[6];
+			ImWchar unicode[2] = { (ImWchar)_inputChar, 0 };
+			ImTextStrToUtf8(tmpstr, sizeof(tmpstr), unicode, unicode+1);
+			io.AddInputCharactersUTF8(tmpstr);
 		}
 		}
 
 
 		io.DisplaySize = ImVec2( (float)_width, (float)_height);
 		io.DisplaySize = ImVec2( (float)_width, (float)_height);
@@ -427,7 +434,7 @@ void imguiDestroy()
 	s_ctx.destroy();
 	s_ctx.destroy();
 }
 }
 
 
-void imguiBeginFrame(int32_t _mx, int32_t _my, uint8_t _button, int32_t _scroll, uint16_t _width, uint16_t _height, char _inputChar, bgfx::ViewId _viewId)
+void imguiBeginFrame(int32_t _mx, int32_t _my, uint8_t _button, int32_t _scroll, uint16_t _width, uint16_t _height, int _inputChar, bgfx::ViewId _viewId)
 {
 {
 	s_ctx.beginFrame(_mx, _my, _button, _scroll, _width, _height, _inputChar, _viewId);
 	s_ctx.beginFrame(_mx, _my, _button, _scroll, _width, _height, _inputChar, _viewId);
 }
 }

+ 1 - 1
examples/common/imgui/imgui.h

@@ -30,7 +30,7 @@ namespace bx { struct AllocatorI; }
 void imguiCreate(float _fontSize = 18.0f, bx::AllocatorI* _allocator = NULL);
 void imguiCreate(float _fontSize = 18.0f, bx::AllocatorI* _allocator = NULL);
 void imguiDestroy();
 void imguiDestroy();
 
 
-void imguiBeginFrame(int32_t _mx, int32_t _my, uint8_t _button, int32_t _scroll, uint16_t _width, uint16_t _height, char _inputChar = 0, bgfx::ViewId _view = 255);
+void imguiBeginFrame(int32_t _mx, int32_t _my, uint8_t _button, int32_t _scroll, uint16_t _width, uint16_t _height, int _inputChar = 0, bgfx::ViewId _view = 255);
 void imguiEndFrame();
 void imguiEndFrame();
 
 
 namespace entry { class AppI; }
 namespace entry { class AppI; }