[fonts] Add ImFont

This commit is contained in:
SpaiR committed 2020-02-10 22:02:44 +03:00
1 parent 944b805efd
commit e28eefd789
3 files changed
+214 -9

No files matched your search

@@ -0,0 +1,203 @@
package imgui;
/**
* Font runtime data and rendering
* ImFontAtlas automatically loads a default embedded font for you when you call GetTexDataAsAlpha8() or GetTexDataAsRGBA32().
*/
public final class ImFont implements ImDestroyable {
final long ptr;
private ImFontGlyph fallbackGlyph = null;
/**
* This class will create a native structure.
* Call {@link #destroy()} method to manually free used memory.
*/
public ImFont() {
ImGui.touch();
ptr = nCreate();
}
ImFont(final long ptr) {
this.ptr = ptr;
}
@Override
public void destroy() {
nDestroy(ptr);
}
/*JNI
#include <imgui.h>
#include "jni_common.h"
jfieldID imFontPtrID;
#define IM_FONT ((ImFont*)env->GetLongField(object, imFontPtrID))
*/
static native void nInit(); /*
jclass jImFontClass = env->FindClass("imgui/ImFont");
imFontPtrID = env->GetFieldID(jImFontClass, "ptr", "J");
*/
private native long nCreate(); /*
ImFont* imFont = new ImFont();
return (long)imFont;
*/
private native void nDestroy(long ptr); /*
delete (ImFont*)ptr;
*/
// TODO IndexAdvanceX
/**
* = FallbackGlyph->AdvanceX
*/
public native float getFallbackAdvanceX(); /*
return IM_FONT->FallbackAdvanceX;
*/
/**
* = FallbackGlyph->AdvanceX
*/
public native void setFallbackAdvanceX(float fallbackAdvanceX); /*
IM_FONT->FallbackAdvanceX = fallbackAdvanceX;
*/
/**
* Height of characters/line, set during loading (don't change after loading)
*/
public native float getFontSize(); /*
return IM_FONT->FontSize;
*/
// TODO IndexLookup, Glyphs
/**
* = FindGlyph(FontFallbackChar)
*/
public ImFontGlyph getFallbackGlyph() {
if (fallbackGlyph == null) {
fallbackGlyph = new ImFontGlyph(nGetFallbackGlyphPtr());
}
return fallbackGlyph;
}
private native long nGetFallbackGlyphPtr(); /*
return (long)IM_FONT->FallbackGlyph;
*/
/**
* Offset font rendering by xx pixels
*/
public native void getDisplayOffset(ImVec2 dstImVec2); /*
Jni::ImVec2Cpy(env, &IM_FONT->DisplayOffset, dstImVec2);
*/
/**
* Offset font rendering by xx pixels
*/
public native void setDisplayOffset(float x, float y); /*
IM_FONT->DisplayOffset.x = x;
IM_FONT->DisplayOffset.y = y;
*/
// TODO ContainerAtlas, ConfigData
/**
* Number of ImFontConfig involved in creating this font.
* Bigger than 1 when merging multiple font sources into one ImFont.
*/
public native short getConfigDataCount(); /*
return IM_FONT->ConfigDataCount;
*/
/**
* Replacement character if a glyph isn't found.
*/
public native short getFallbackChar(); /*
return IM_FONT->FallbackChar;
*/
/**
* Character used for ellipsis rendering.
*/
public native short getEllipsisChar(); /*
return IM_FONT->EllipsisChar;
*/
/**
* Character used for ellipsis rendering.
*/
public native void setEllipsisChar(short ellipsisChar); /*
IM_FONT->EllipsisChar = (ImWchar)ellipsisChar;
*/
/**
* Base font scale, multiplied by the per-window font scale which you can adjust with SetWindowFontScale()
*/
public native float getScale(); /*
return IM_FONT->Scale;
*/
/**
* Base font scale, multiplied by the per-window font scale which you can adjust with SetWindowFontScale()
*/
public native void setScale(float scale); /*
IM_FONT->Scale = scale;
*/
/**
* Ascent: distance from top to bottom of e.g. 'A' [0..FontSize]
*/
public native float getAscent(); /*
return IM_FONT->Ascent;
*/
/**
* Ascent: distance from top to bottom of e.g. 'A' [0..FontSize]
*/
public native void setAscent(float ascent); /*
IM_FONT->Ascent = ascent;
*/
/**
* Ascent: distance from top to bottom of e.g. 'A' [0..FontSize]
*/
public native float getDescent(); /*
return IM_FONT->Descent;
*/
/**
* Ascent: distance from top to bottom of e.g. 'A' [0..FontSize]
*/
public native void setDescent(float descent); /*
IM_FONT->Descent = descent;
*/
/**
* Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs)
*/
public native int getMetricsTotalSurface(); /*
return IM_FONT->MetricsTotalSurface;
*/
/**
* Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs)
*/
public native void setMetricsTotalSurface(int metricsTotalSurface); /*
IM_FONT->MetricsTotalSurface = metricsTotalSurface;
*/
public native boolean getDirtyLookupTables(); /*
return IM_FONT->DirtyLookupTables;
*/
public native void setDirtyLookupTables(boolean dirtyLookupTables); /*
IM_FONT->DirtyLookupTables = dirtyLookupTables;
*/
// TODO methods
}
@@ -50,6 +50,7 @@ public final class ImGui {
ImFontAtlas.nInit();
ImFontConfig.nInit();
ImFontGlyph.nInit();
ImFont.nInit();
nInitInputTextData();
}
+10 -9
View File
@@ -19,10 +19,6 @@ public final class ImGuiIO {
#include "jni_callbacks.h"
*/
private native long nGetFontsPtr(); /*
return (long)ImGui::GetIO().Fonts;
*/
//------------------------------------------------------------------
// Configuration (fill once)
//------------------------------------------------------------------
@@ -170,19 +166,24 @@ public final class ImGuiIO {
return imFontAtlas;
}
private native long nGetFontsPtr(); /*
return (long)ImGui::GetIO().Fonts;
*/
/**
* Font atlas: load, rasterize and pack one or more fonts into a single texture.
* <p>
* BINDING NOTICE: You should manually destroy previously used ImFontAtlas:
* <pre>
* io.getFonts().destroy();
* io.setFonts(newImFontAtlas);
* </pre>
* BINDING NOTICE: You SHOULD manually destroy previously used ImFontAtlas.
*/
public void setFonts(final ImFontAtlas imFontAtlas) {
this.imFontAtlas = imFontAtlas;
nSetImFontAtlas(imFontAtlas.ptr);
}
private native void nSetImFontAtlas(long imFontAtlasPtr); /*
ImGui::GetIO().Fonts = (ImFontAtlas*)imFontAtlasPtr;
*/
// TODO fonts configuration
// Miscellaneous options