Merge pull request #434 from ocornut/imgui_scintilla_fixes
Scintilla/imgui: removed getFontInfo(), using data exposed by imgui
This commit is contained in:
commit
dc5cac62c5
13
3rdparty/ocornut-imgui/imgui.cpp
vendored
13
3rdparty/ocornut-imgui/imgui.cpp
vendored
@ -2703,7 +2703,7 @@ static void RenderCheckMark(ImVec2 pos, ImU32 col)
|
|||||||
a.x = pos.x + start_x;
|
a.x = pos.x + start_x;
|
||||||
b.x = a.x + rem_third;
|
b.x = a.x + rem_third;
|
||||||
c.x = a.x + rem_third * 3.0f;
|
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;
|
a.y = b.y - rem_third;
|
||||||
c.y = b.y - rem_third * 2.0f;
|
c.y = b.y - rem_third * 2.0f;
|
||||||
|
|
||||||
@ -8910,12 +8910,6 @@ struct ImFontAtlas::ImFontAtlasData
|
|||||||
int RangesCount;
|
int RangesCount;
|
||||||
};
|
};
|
||||||
|
|
||||||
const stbtt_fontinfo& getFontInfo(int index)
|
|
||||||
{
|
|
||||||
const ImGuiIO& io = ImGui::GetIO();
|
|
||||||
return io.Fonts[index].InputData[0]->FontInfo;
|
|
||||||
}
|
|
||||||
|
|
||||||
ImFontAtlas::ImFontAtlas()
|
ImFontAtlas::ImFontAtlas()
|
||||||
{
|
{
|
||||||
TexID = NULL;
|
TexID = NULL;
|
||||||
@ -9215,7 +9209,8 @@ bool ImFontAtlas::Build()
|
|||||||
const float font_scale = stbtt_ScaleForPixelHeight(&data.FontInfo, data.SizePixels);
|
const float font_scale = stbtt_ScaleForPixelHeight(&data.FontInfo, data.SizePixels);
|
||||||
int font_ascent, font_descent, font_line_gap;
|
int font_ascent, font_descent, font_line_gap;
|
||||||
stbtt_GetFontVMetrics(&data.FontInfo, &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);
|
data.OutFont->Glyphs.resize(0);
|
||||||
|
|
||||||
const float uv_scale_x = 1.0f / TexWidth;
|
const float uv_scale_x = 1.0f / TexWidth;
|
||||||
@ -9374,7 +9369,7 @@ void ImFont::Clear()
|
|||||||
{
|
{
|
||||||
FontSize = 0.0f;
|
FontSize = 0.0f;
|
||||||
DisplayOffset = ImVec2(-0.5f, 0.5f);
|
DisplayOffset = ImVec2(-0.5f, 0.5f);
|
||||||
BaseLine = 0.0f;
|
Ascent = Descent = 0.0f;
|
||||||
ContainerAtlas = NULL;
|
ContainerAtlas = NULL;
|
||||||
Glyphs.clear();
|
Glyphs.clear();
|
||||||
FallbackGlyph = NULL;
|
FallbackGlyph = NULL;
|
||||||
|
6
3rdparty/ocornut-imgui/imgui.h
vendored
6
3rdparty/ocornut-imgui/imgui.h
vendored
@ -1106,7 +1106,8 @@ struct ImFont
|
|||||||
signed short XOffset, YOffset;
|
signed short XOffset, YOffset;
|
||||||
float U0, V0, U1, V1; // Texture coordinates
|
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
|
ImFontAtlas* ContainerAtlas; // What we has been loaded into
|
||||||
ImVector<Glyph> Glyphs;
|
ImVector<Glyph> Glyphs;
|
||||||
const Glyph* FallbackGlyph; // == FindGlyph(FontFallbackChar)
|
const Glyph* FallbackGlyph; // == FindGlyph(FontFallbackChar)
|
||||||
@ -1119,9 +1120,10 @@ struct ImFont
|
|||||||
IMGUI_API ~ImFont();
|
IMGUI_API ~ImFont();
|
||||||
IMGUI_API void Clear();
|
IMGUI_API void Clear();
|
||||||
IMGUI_API void BuildLookupTable();
|
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 const Glyph* FindGlyph(unsigned short c) const;
|
||||||
IMGUI_API void SetFallbackChar(ImWchar c);
|
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.
|
// '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.
|
// 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable.
|
||||||
|
@ -58,8 +58,6 @@
|
|||||||
#define IMGUI_NEW(type) new (ImGui::MemAlloc(sizeof(type) ) ) type
|
#define IMGUI_NEW(type) new (ImGui::MemAlloc(sizeof(type) ) ) type
|
||||||
#define IMGUI_DELETE(type, obj) reinterpret_cast<type*>(obj)->~type(), ImGui::MemFree(obj)
|
#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)
|
static void fillRectangle(Scintilla::PRectangle _rc, Scintilla::ColourDesired _color)
|
||||||
{
|
{
|
||||||
const uint32_t abgr = (uint32_t)_color.AsLong();
|
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
|
struct FontInt
|
||||||
{
|
{
|
||||||
stbtt_fontinfo m_fontInfo;
|
ImFont* m_font;
|
||||||
float m_scale;
|
float m_scale;
|
||||||
float m_fontSize;
|
float m_fontSize;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -238,31 +236,19 @@ public:
|
|||||||
virtual Scintilla::XYPOSITION WidthChar(Scintilla::Font& _font, char ch) BX_OVERRIDE
|
virtual Scintilla::XYPOSITION WidthChar(Scintilla::Font& _font, char ch) BX_OVERRIDE
|
||||||
{
|
{
|
||||||
FontInt* fi = (FontInt*)_font.GetID();
|
FontInt* fi = (FontInt*)_font.GetID();
|
||||||
|
return fi->m_font->GetCharAdvance((unsigned int)ch) * fi->m_scale;
|
||||||
int advance, leftBearing;
|
|
||||||
stbtt_GetCodepointHMetrics(&fi->m_fontInfo, ch, &advance, &leftBearing);
|
|
||||||
|
|
||||||
return advance * fi->m_scale;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual Scintilla::XYPOSITION Ascent(Scintilla::Font& _font) BX_OVERRIDE
|
virtual Scintilla::XYPOSITION Ascent(Scintilla::Font& _font) BX_OVERRIDE
|
||||||
{
|
{
|
||||||
FontInt* fi = (FontInt*)_font.GetID();
|
FontInt* fi = (FontInt*)_font.GetID();
|
||||||
|
return fi->m_font->Ascent * fi->m_scale;
|
||||||
int ascent, descent, lineGap;
|
|
||||||
stbtt_GetFontVMetrics(&fi->m_fontInfo, &ascent, &descent, &lineGap);
|
|
||||||
|
|
||||||
return ascent * fi->m_scale;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual Scintilla::XYPOSITION Descent(Scintilla::Font& _font) BX_OVERRIDE
|
virtual Scintilla::XYPOSITION Descent(Scintilla::Font& _font) BX_OVERRIDE
|
||||||
{
|
{
|
||||||
int ascent, descent, lineGap;
|
|
||||||
FontInt* fi = (FontInt*)_font.GetID();
|
FontInt* fi = (FontInt*)_font.GetID();
|
||||||
|
return -fi->m_font->Descent * fi->m_scale;
|
||||||
stbtt_GetFontVMetrics(&fi->m_fontInfo, &ascent, &descent, &lineGap);
|
|
||||||
|
|
||||||
return -descent * fi->m_scale;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual Scintilla::XYPOSITION InternalLeading(Scintilla::Font& /*_font*/) BX_OVERRIDE
|
virtual Scintilla::XYPOSITION InternalLeading(Scintilla::Font& /*_font*/) BX_OVERRIDE
|
||||||
@ -270,12 +256,9 @@ public:
|
|||||||
return 0;
|
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();
|
return 0;
|
||||||
int ascent, descent, lineGap;
|
|
||||||
stbtt_GetFontVMetrics(&fi->m_fontInfo, &ascent, &descent, &lineGap);
|
|
||||||
return lineGap * fi->m_scale;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual Scintilla::XYPOSITION Height(Scintilla::Font& _font) BX_OVERRIDE
|
virtual Scintilla::XYPOSITION Height(Scintilla::Font& _font) BX_OVERRIDE
|
||||||
@ -314,9 +297,8 @@ private:
|
|||||||
FontInt* fi = (FontInt*)_font.GetID();
|
FontInt* fi = (FontInt*)_font.GetID();
|
||||||
|
|
||||||
ImVec2 pos = ImGui::GetCursorScreenPos();
|
ImVec2 pos = ImGui::GetCursorScreenPos();
|
||||||
ImFont* imFont = ImGui::GetWindowFont();
|
|
||||||
ImDrawList* drawList = ImGui::GetWindowDrawList();
|
ImDrawList* drawList = ImGui::GetWindowDrawList();
|
||||||
drawList->AddText(imFont
|
drawList->AddText(fi->m_font
|
||||||
, fi->m_fontSize
|
, fi->m_fontSize
|
||||||
, ImVec2(xt + pos.x, yt + pos.y - fi->m_fontSize)
|
, ImVec2(xt + pos.x, yt + pos.y - fi->m_fontSize)
|
||||||
, fore
|
, fore
|
||||||
@ -872,15 +854,12 @@ namespace Scintilla
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Font::Create(const FontParameters& fp)
|
void Font::Create(const FontParameters& fp)
|
||||||
{
|
{
|
||||||
FontInt* newFont = (FontInt*)ImGui::MemAlloc(sizeof(FontInt) );
|
FontInt* newFont = (FontInt*)ImGui::MemAlloc(sizeof(FontInt) );
|
||||||
fid = newFont;
|
fid = newFont;
|
||||||
|
newFont->m_font = ImGui::GetIO().Fonts->Fonts[0];
|
||||||
const stbtt_fontinfo& fontInfo = getFontInfo(0);
|
|
||||||
|
|
||||||
memcpy(&newFont->m_fontInfo, &fontInfo, sizeof(stbtt_fontinfo) );
|
|
||||||
newFont->m_scale = stbtt_ScaleForPixelHeight(&fontInfo, fp.size);
|
|
||||||
newFont->m_fontSize = fp.size;
|
newFont->m_fontSize = fp.size;
|
||||||
|
newFont->m_scale = fp.size / newFont->m_font->FontSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Font::Release()
|
void Font::Release()
|
||||||
|
Loading…
Reference in New Issue
Block a user