diff --git a/3rdparty/ocornut-imgui/imgui.cpp b/3rdparty/ocornut-imgui/imgui.cpp
index ba6322725..54d015f81 100644
--- a/3rdparty/ocornut-imgui/imgui.cpp
+++ b/3rdparty/ocornut-imgui/imgui.cpp
@@ -2703,7 +2703,7 @@ static void RenderCheckMark(ImVec2 pos, ImU32 col)
     a.x = pos.x + start_x;
     b.x = a.x + rem_third;
     c.x = a.x + rem_third * 3.0f;
-    b.y = pos.y + (float)(int)(g.Font->BaseLine * (g.FontSize / g.Font->FontSize) + 0.5f) + (float)(int)(g.Font->DisplayOffset.y);
+    b.y = pos.y + (float)(int)(g.Font->Ascent * (g.FontSize / g.Font->FontSize) + 0.5f) + (float)(int)(g.Font->DisplayOffset.y);
     a.y = b.y - rem_third;
     c.y = b.y - rem_third * 2.0f;
 
@@ -8910,12 +8910,6 @@ struct ImFontAtlas::ImFontAtlasData
     int                 RangesCount;
 };
 
-const stbtt_fontinfo& getFontInfo(int index)
-{
-    const ImGuiIO& io = ImGui::GetIO();
-    return io.Fonts[index].InputData[0]->FontInfo;
-}
-
 ImFontAtlas::ImFontAtlas()
 {
     TexID = NULL;
@@ -9215,7 +9209,8 @@ bool    ImFontAtlas::Build()
         const float font_scale = stbtt_ScaleForPixelHeight(&data.FontInfo, data.SizePixels);
         int font_ascent, font_descent, font_line_gap;
         stbtt_GetFontVMetrics(&data.FontInfo, &font_ascent, &font_descent, &font_line_gap);
-        data.OutFont->BaseLine = (font_ascent * font_scale);
+        data.OutFont->Ascent = (font_ascent * font_scale);
+        data.OutFont->Descent = (font_descent * font_scale);
         data.OutFont->Glyphs.resize(0);
 
         const float uv_scale_x = 1.0f / TexWidth;
@@ -9374,7 +9369,7 @@ void    ImFont::Clear()
 {
     FontSize = 0.0f;
     DisplayOffset = ImVec2(-0.5f, 0.5f);
-    BaseLine = 0.0f;
+    Ascent = Descent = 0.0f;
     ContainerAtlas = NULL;
     Glyphs.clear();
     FallbackGlyph = NULL;
diff --git a/3rdparty/ocornut-imgui/imgui.h b/3rdparty/ocornut-imgui/imgui.h
index d6bd0b150..c7feda8a6 100644
--- a/3rdparty/ocornut-imgui/imgui.h
+++ b/3rdparty/ocornut-imgui/imgui.h
@@ -1106,7 +1106,8 @@ struct ImFont
         signed short    XOffset, YOffset;
         float           U0, V0, U1, V1;     // Texture coordinates
     };
-    float               BaseLine;           // Distance from top to bottom of e.g. 'A' [0..FontSize]
+    float               Ascent;             // Distance from top to bottom of e.g. 'A' [0..FontSize]
+    float               Descent;            // 
     ImFontAtlas*        ContainerAtlas;     // What we has been loaded into
     ImVector<Glyph>     Glyphs;
     const Glyph*        FallbackGlyph;      // == FindGlyph(FontFallbackChar)
@@ -1119,9 +1120,10 @@ struct ImFont
     IMGUI_API ~ImFont();
     IMGUI_API void              Clear();
     IMGUI_API void              BuildLookupTable();
+    IMGUI_API float             GetCharAdvance(unsigned short c) const  { return ((size_t)c < IndexXAdvance.size()) ? IndexXAdvance[(size_t)c] : FallbackXAdvance; }
     IMGUI_API const Glyph*      FindGlyph(unsigned short c) const;
     IMGUI_API void              SetFallbackChar(ImWchar c);
-    IMGUI_API bool              IsLoaded() const        { return ContainerAtlas != NULL; }
+    IMGUI_API bool              IsLoaded() const                        { return ContainerAtlas != NULL; }
 
     // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable.
     // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable.
diff --git a/examples/common/imgui/scintilla.cpp b/examples/common/imgui/scintilla.cpp
index e9225cd8b..3e39ab82e 100644
--- a/examples/common/imgui/scintilla.cpp
+++ b/examples/common/imgui/scintilla.cpp
@@ -58,8 +58,6 @@
 #define IMGUI_NEW(type)         new (ImGui::MemAlloc(sizeof(type) ) ) type
 #define IMGUI_DELETE(type, obj) reinterpret_cast<type*>(obj)->~type(), ImGui::MemFree(obj)
 
-const stbtt_fontinfo& getFontInfo(int index);
-
 static void fillRectangle(Scintilla::PRectangle _rc, Scintilla::ColourDesired _color)
 {
 	const uint32_t abgr = (uint32_t)_color.AsLong();
@@ -82,8 +80,8 @@ static inline uint32_t makeRgba(uint32_t r, uint32_t g, uint32_t b, uint32_t a =
 
 struct FontInt
 {
-	stbtt_fontinfo m_fontInfo;
-	float m_scale;
+    ImFont* m_font;
+    float m_scale;
 	float m_fontSize;
 };
 
@@ -238,31 +236,19 @@ public:
 	virtual Scintilla::XYPOSITION WidthChar(Scintilla::Font& _font, char ch) BX_OVERRIDE
 	{
 		FontInt* fi = (FontInt*)_font.GetID();
-
-		int advance, leftBearing;
-		stbtt_GetCodepointHMetrics(&fi->m_fontInfo, ch, &advance, &leftBearing);
-
-		return advance * fi->m_scale;
+        return fi->m_font->GetCharAdvance((unsigned int)ch) * fi->m_scale;
 	}
 
 	virtual Scintilla::XYPOSITION Ascent(Scintilla::Font& _font) BX_OVERRIDE
 	{
 		FontInt* fi = (FontInt*)_font.GetID();
-
-		int ascent, descent, lineGap;
-		stbtt_GetFontVMetrics(&fi->m_fontInfo, &ascent, &descent, &lineGap);
-
-		return ascent * fi->m_scale;
+		return fi->m_font->Ascent * fi->m_scale;
 	}
 
 	virtual Scintilla::XYPOSITION Descent(Scintilla::Font& _font) BX_OVERRIDE
 	{
-		int ascent, descent, lineGap;
 		FontInt* fi = (FontInt*)_font.GetID();
-
-		stbtt_GetFontVMetrics(&fi->m_fontInfo, &ascent, &descent, &lineGap);
-
-		return -descent * fi->m_scale;
+		return -fi->m_font->Descent * fi->m_scale;
 	}
 
 	virtual Scintilla::XYPOSITION InternalLeading(Scintilla::Font& /*_font*/) BX_OVERRIDE
@@ -270,12 +256,9 @@ public:
 		return 0;
 	}
 
-	virtual Scintilla::XYPOSITION ExternalLeading(Scintilla::Font& _font) BX_OVERRIDE
+	virtual Scintilla::XYPOSITION ExternalLeading(Scintilla::Font& /*_font*/) BX_OVERRIDE
 	{
-		FontInt* fi = (FontInt*)_font.GetID();
-		int ascent, descent, lineGap;
-		stbtt_GetFontVMetrics(&fi->m_fontInfo, &ascent, &descent, &lineGap);
-		return lineGap * fi->m_scale;
+        return 0;
 	}
 
 	virtual Scintilla::XYPOSITION Height(Scintilla::Font& _font) BX_OVERRIDE
@@ -314,9 +297,8 @@ private:
 		FontInt* fi = (FontInt*)_font.GetID();
 
 		ImVec2 pos = ImGui::GetCursorScreenPos();
-		ImFont* imFont = ImGui::GetWindowFont();
 		ImDrawList* drawList = ImGui::GetWindowDrawList();
-		drawList->AddText(imFont
+		drawList->AddText(fi->m_font
 			, fi->m_fontSize
 			, ImVec2(xt + pos.x, yt + pos.y - fi->m_fontSize)
 			, fore
@@ -872,15 +854,12 @@ namespace Scintilla
 	}
 
 	void Font::Create(const FontParameters& fp)
-	{
+    {
 		FontInt* newFont = (FontInt*)ImGui::MemAlloc(sizeof(FontInt) );
 		fid = newFont;
-
-		const stbtt_fontinfo& fontInfo = getFontInfo(0);
-
-		memcpy(&newFont->m_fontInfo, &fontInfo, sizeof(stbtt_fontinfo) );
-		newFont->m_scale    = stbtt_ScaleForPixelHeight(&fontInfo, fp.size);
+		newFont->m_font = ImGui::GetIO().Fonts->Fonts[0];
 		newFont->m_fontSize = fp.size;
+		newFont->m_scale = fp.size / newFont->m_font->FontSize;
 	}
 
 	void Font::Release()