[fonts] Add ImFont
This commit is contained in:
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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in new issue
Block a user