Skip to content

Commit

Permalink
merge font
Browse files Browse the repository at this point in the history
  • Loading branch information
zhobo63 committed Aug 7, 2023
1 parent 7714cf8 commit 32ec07a
Show file tree
Hide file tree
Showing 9 changed files with 11,747 additions and 5 deletions.
16 changes: 16 additions & 0 deletions imgui/embind/bind-imgui.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1125,6 +1125,22 @@ EMSCRIPTEN_BINDINGS(ImFont) {
.function("ClearGlyphCreated", FUNCTION(void, (ImFont& that), {
that.ClearGlyphCreated();
}))
.function("AddFontRange", FUNCTION(void, (ImFont& that, ImWchar start, ImWchar end), {
that.AddFontRange(start, end);
}))
.function("ClearFontRange", FUNCTION(void, (ImFont& that), {
that.ClearFontRange();
}))
.function("MergeFont", FUNCTION(void, (ImFont& that,emscripten::val _font), {
ImFont *font=_font.as<ImFont*>(emscripten::allow_raw_pointers());
that.MergeFont(font);
}))
.function("ClearSubFont", FUNCTION(void, (ImFont& that), {
that.ClearSubFont();
}))
.function("InRange", FUNCTION(bool, (const ImFont& that, ImWchar ch), {
return that.InRange(ch);
}))
;
}

Expand Down
22 changes: 22 additions & 0 deletions imgui/imgui_user.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,13 @@ void ImFont::Initialize()

const ImFontGlyph* ImFont::FindGlyph(ImWchar c) const
{
for(int i=0;i<SubFonts.size();i++) {
ImFont *font=SubFonts[i];
if(font->InRange(c)) {
return font->FindGlyph(c);
}
}

if(IndexLookup.empty()) {
return FallbackGlyph;
}
Expand Down Expand Up @@ -372,6 +379,12 @@ const char* ImFont::CalcWordWrapPositionA(float scale, const char* text, const c

float ImFont::GetCharAdvance(ImWchar c) const
{
for(int i=0;i<SubFonts.size();i++) {
ImFont *font=SubFonts[i];
if(font->InRange(c)) {
return font->GetCharAdvance(c);
}
}
if(IndexAdvanceX.empty())
return FallbackAdvanceX;
return c < 256 ? IndexAdvanceX[c] : IndexAdvanceX[0];
Expand Down Expand Up @@ -659,4 +672,13 @@ void ImFont::GlyphCreated(const ImFontGlyph &_glyph)
}
}

bool ImFont::InRange(ImWchar ch) const
{
for(int i=0;i<FontRange.size();i++) {
if(FontRange[i].InRange(ch))
return true;
}
return false;
}

#endif
29 changes: 29 additions & 0 deletions imgui/imgui_user.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,17 @@ struct ImFont

ImVector<ImFontGlyph> GlyphsToCreate;

struct ImFontRange
{
ImWchar start;
ImWchar end;

inline bool InRange(ImWchar ch) const {return ch>=start && ch<=end;}
};

ImVector<ImFont*> SubFonts;
ImVector<ImFontRange> FontRange;

ImFont();
~ImFont();

Expand All @@ -81,6 +92,24 @@ struct ImFont
void GlyphCreated(const ImFontGlyph &glyph);
void ClearGlyphCreated() {GlyphsToCreate.clear();}

void AddFontRange(ImWchar start, ImWchar end) {
ImFontRange range;
range.start=start;
range.end=end;
FontRange.push_back(range);
}
void ClearFontRange() {
FontRange.clear();
}
void MergeFont(ImFont *font)
{
SubFonts.push_back(font);
}
void ClearSubFont() {
SubFonts.clear();
}
bool InRange(ImWchar ch) const;

std::string DebugName;
const char* GetDebugName() {
if(DebugName.empty()) {
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@zhobo63/imgui-ts",
"version": "0.1.28",
"version": "0.1.29",
"description": "JavaScript bindings for Dear ImGui using Emscripten and TypeScript, modulized with webpack from imgui-js",
"main": "./src/index",
"scripts": {
Expand Down
6 changes: 6 additions & 0 deletions src/bind-imgui.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -666,6 +666,12 @@ export interface reference_ImFont extends Emscripten.EmscriptenClassReference {
IterateGlyphToCreate(callback: (glyph: reference_ImFontGlyph) => void): void;
GlyphCreated(glyph: interface_ImFontGlyph):void;
ClearGlyphCreated():void;

AddFontRange(start:number, end:number):void;
ClearFontRange():void;
MergeFont(font: reference_ImFont):void;
ClearSubFont():void;
InRange(c:number):boolean;
}

export interface interface_ImFontConfig {
Expand Down
2 changes: 1 addition & 1 deletion src/bind-imgui.js

Large diffs are not rendered by default.

15 changes: 15 additions & 0 deletions src/imgui.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2343,6 +2343,21 @@ export class ImFont
public CreateGlyph(text: string) {
this.native.CreateGlyph(text);
}
AddFontRange(start:number, end:number) {
this.native.AddFontRange(start, end);
}
ClearFontRange() {
this.native.ClearFontRange();
}
MergeFont(font:ImFont) {
this.native.MergeFont(font.native);
}
ClearSubFont() {
this.native.ClearSubFont();
}
InRange(c:number):boolean {
return this.native.InRange(c);
}
}

// a script version of Bind.ImGuiStyle with matching interface
Expand Down
8 changes: 6 additions & 2 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ export function ImGuiObject(obj:any, id:number=0):number
return id;
}

/*


let _main:Main;

Expand Down Expand Up @@ -185,12 +185,16 @@ window.addEventListener('DOMContentLoaded', async ()=>{
//font.FontSize=32;
//font.Ascent=2.5;

let font2=ImGui.CreateFont("Microsoft JhengHei", 16, "bold");
font2.AddFontRange(0x4E00, 0x9FFF);
font.MergeFont(font2);

const canvas:HTMLCanvasElement=document.getElementById("canvas") as HTMLCanvasElement;
ImGui_Impl.Init(canvas);

_main=new Main;
window.requestAnimationFrame(_loop);
});

*/


11,652 changes: 11,651 additions & 1 deletion www/js/main.js

Large diffs are not rendered by default.

0 comments on commit 32ec07a

Please sign in to comment.