org.lwjgl.stb.STBTruetype Maven / Gradle / Ivy
/*
* Copyright LWJGL. All rights reserved.
* License terms: https://www.lwjgl.org/license
* MACHINE GENERATED FILE, DO NOT EDIT
*/
package org.lwjgl.stb;
import java.nio.*;
import org.lwjgl.*;
import org.lwjgl.system.*;
import static org.lwjgl.system.Checks.*;
import static org.lwjgl.system.MemoryStack.*;
import static org.lwjgl.system.MemoryUtil.*;
/**
* Native bindings to stb_truetype.h from the stb library.
*
* This library processes TrueType files:
*
*
* - parse files
* - extract glyph metrics
* - extract glyph shapes
* - render glyphs to one-channel bitmaps with antialiasing (box filter)
*
*
* ADDITIONAL DOCUMENTATION
*
* Some important concepts to understand to use this library:
*
* Codepoint
*
* Characters are defined by unicode codepoints, e.g. 65 is uppercase A, 231 is lowercase c with a cedilla, 0x7e30 is the hiragana for "ma".
*
* Glyph
*
* A visual character shape (every codepoint is rendered as some glyph)
*
* Glyph index
*
* A font-specific integer ID representing a glyph
*
* Baseline
*
* Glyph shapes are defined relative to a baseline, which is the bottom of uppercase characters. Characters extend both above and below the baseline.
*
* Current Point
*
* As you draw text to the screen, you keep track of a "current point" which is the origin of each character. The current point's vertical position is the
* baseline. Even "baked fonts" use this model.
*
* Vertical Font Metrics
*
* The vertical qualities of the font, used to vertically position and space the characters. See docs for {@link #stbtt_GetFontVMetrics GetFontVMetrics}.
*
* Font Size in Pixels or Points
*
* The preferred interface for specifying font sizes in stb_truetype is to specify how tall the font's vertical extent should be in pixels. If that sounds
* good enough, skip the next paragraph.
*
* Most font APIs instead use "points", which are a common typographic measurement for describing font size, defined as 72 points per inch. stb_truetype
* provides a point API for compatibility. However, true "per inch" conventions don't make much sense on computer displays since different monitors have
* different number of pixels per inch. For example, Windows traditionally uses a convention that there are 96 pixels per inch, thus making 'inch'
* measurements have nothing to do with inches, and thus effectively defining a point to be 1.333 pixels. Additionally, the TrueType font data provides an
* explicit scale factor to scale a given font's glyphs to points, but the author has observed that this scale factor is often wrong for non-commercial
* fonts, thus making fonts scaled in points according to the TrueType spec incoherently sized in practice.
*
* ADVANCED USAGE
*
* Quality:
*
*
* - Use the functions with Subpixel at the end to allow your characters to have subpixel positioning. Since the font is anti-aliased, not hinted, this
* is very important for quality. (This is not possible with baked fonts.)
* - Kerning is now supported, and if you're supporting subpixel rendering then kerning is worth using to give your text a polished look.
*
*
* Performance:
*
*
* - Convert Unicode codepoints to glyph indexes and operate on the glyphs; if you don't do this, stb_truetype is forced to do the conversion on every
* call.
* - There are a lot of memory allocations. We should modify it to take a temp buffer and allocate from the temp buffer (without freeing), should help
* performance a lot.
*
*
* NOTES
*
* The system uses the raw data found in the .ttf file without changing it and without building auxiliary data structures. This is a bit inefficient on
* little-endian systems (the data is big-endian), but assuming you're caching the bitmaps or glyph shapes this shouldn't be a big deal.
*
* It appears to be very hard to programmatically determine what font a given file is in a general way. I provide an API for this, but I don't recommend
* it.
*
* SAMPLE PROGRAMS
*
* Incomplete text-in-3d-api example, which draws quads properly aligned to be lossless:
*
*
* unsigned char ttf_buffer[1<<20];
* unsigned char temp_bitmap[512*512];
*
* stbtt_bakedchar cdata[96]; // ASCII 32..126 is 95 glyphs
* GLuint ftex;
*
* void my_stbtt_initfont(void)
* {
* fread(ttf_buffer, 1, 1<<20, fopen("c:/windows/fonts/times.ttf", "rb"));
* stbtt_BakeFontBitmap(ttf_buffer,0, 32.0, temp_bitmap,512,512, 32,96, cdata); // no guarantee this fits!
* // can free ttf_buffer at this point
* glGenTextures(1, &ftex);
* glBindTexture(GL_TEXTURE_2D, ftex);
* glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, 512,512, 0, GL_ALPHA, GL_UNSIGNED_BYTE, temp_bitmap);
* // can free temp_bitmap at this point
* glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
* }
*
* void my_stbtt_print(float x, float y, char *text)
* {
* // assume orthographic projection with units = screen pixels, origin at top left
* glEnable(GL_TEXTURE_2D);
* glBindTexture(GL_TEXTURE_2D, ftex);
* glBegin(GL_QUADS);
* while (*text) {
* if (*text >= 32 && *text < 128) {
* stbtt_aligned_quad q;
* stbtt_GetBakedQuad(cdata, 512,512, *text-32, &x,&y,&q,1);//1=opengl & d3d10+,0=d3d9
* glTexCoord2f(q.s0,q.t1); glVertex2f(q.x0,q.y0);
* glTexCoord2f(q.s1,q.t1); glVertex2f(q.x1,q.y0);
* glTexCoord2f(q.s1,q.t0); glVertex2f(q.x1,q.y1);
* glTexCoord2f(q.s0,q.t0); glVertex2f(q.x0,q.y1);
* }
* ++text;
* }
* glEnd();
* }
*
* Complete program (this compiles): get a single bitmap, print as ASCII art:
*
*
* char ttf_buffer[1<<25];
*
* int main(int argc, char **argv)
* {
* stbtt_fontinfo font;
* unsigned char *bitmap;
* int w,h,i,j,c = (argc > 1 ? atoi(argv[1]) : 'a'), s = (argc > 2 ? atoi(argv[2]) : 20);
*
* fread(ttf_buffer, 1, 1<<25, fopen(argc > 3 ? argv[3] : "c:/windows/fonts/arialbd.ttf", "rb"));
*
* stbtt_InitFont(&font, ttf_buffer, stbtt_GetFontOffsetForIndex(ttf_buffer,0));
* bitmap = stbtt_GetCodepointBitmap(&font, 0,stbtt_ScaleForPixelHeight(&font, s), c, &w, &h, 0,0);
*
* for (j=0; j < h; ++j) {
* for (i=0; i < w; ++i)
* putchar(" .:ioVM@"[bitmap[j*w+i]>>5]);
* putchar('\n');
* }
* return 0;
* }
*
* Complete program: print "Hello World!" banner, with bugs:
*
*
* char buffer[24<<20];
* unsigned char screen[20][79];
*
* int main(int arg, char **argv)
* {
* stbtt_fontinfo font;
* int i,j,ascent,baseline,ch=0;
* float scale, xpos=2; // leave a little padding in case the character extends left
* char *text = "Heljo World!";
*
* fread(buffer, 1, 1000000, fopen("c:/windows/fonts/arialbd.ttf", "rb"));
* stbtt_InitFont(&font, buffer, 0);
*
* scale = stbtt_ScaleForPixelHeight(&font, 15);
* stbtt_GetFontVMetrics(&font, &ascent,0,0);
* baseline = (int) (ascent*scale);
*
* while (text[ch]) {
* int advance,lsb,x0,y0,x1,y1;
* float x_shift = xpos - (float) floor(xpos);
* stbtt_GetCodepointHMetrics(&font, text[ch], &advance, &lsb);
* stbtt_GetCodepointBitmapBoxSubpixel(&font, text[ch], scale,scale,x_shift,0, &x0,&y0,&x1,&y1);
* stbtt_MakeCodepointBitmapSubpixel(&font, &screen[baseline + y0][(int) xpos + x0], x1-x0,y1-y0, 79, scale,scale,x_shift,0, text[ch]);
* // note that this stomps the old data, so where character boxes overlap (e.g. 'lj') it's wrong
* // because this API is really for baking character bitmaps into textures. if you want to render
* // a sequence of characters, you really need to render each bitmap to a temp buffer, then
* // "alpha blend" that into the working buffer
* xpos += (advance * scale);
* if (text[ch+1])
* xpos += scale*stbtt_GetCodepointKernAdvance(&font, text[ch],text[ch+1]);
* ++ch;
* }
*
* for (j=0; j < 20; ++j) {
* for (i=0; i < 78; ++i)
* putchar(" .:ioVM@"[screen[j][i]>>5]);
* putchar('\n');
* }
*
* return 0;
* }
*
* Finding the right font...
*
* You should really just solve this offline, keep your own tables of what font is what, and don't try to get it out of the .ttf file. That's because
* getting it out of the .ttf file is really hard, because the names in the file can appear in many possible encodings, in many possible languages, and
* e.g. if you need a case-insensitive comparison, the details of that depend on the encoding & language in a complex way (actually underspecified in
* truetype, but also gigantic).
*
* But you can use the provided functions in two possible ways:
*
*
* - {@link #stbtt_FindMatchingFont FindMatchingFont} will use *case-sensitive* comparisons on unicode-encoded names to try to find the font you want; you can run this before
* calling {@link #stbtt_InitFont InitFont}
* - {@link #stbtt_GetFontNameString GetFontNameString} lets you get any of the various strings from the file yourself and do your own comparisons on them. You have to have called
* {@link #stbtt_InitFont InitFont} first.
*
*/
public class STBTruetype {
/** Vertex type. */
public static final byte
STBTT_vmove = 1,
STBTT_vline = 2,
STBTT_vcurve = 3,
STBTT_vcubic = 4;
/** Style flags, use in {@link #stbtt_FindMatchingFont FindMatchingFont}. */
public static final int
STBTT_MACSTYLE_DONTCARE = 0,
STBTT_MACSTYLE_BOLD = 1,
STBTT_MACSTYLE_ITALIC = 2,
STBTT_MACSTYLE_UNDERSCORE = 4,
STBTT_MACSTYLE_NONE = 8;
/** Platform IDs. */
public static final int
STBTT_PLATFORM_ID_UNICODE = 0,
STBTT_PLATFORM_ID_MAC = 1,
STBTT_PLATFORM_ID_ISO = 2,
STBTT_PLATFORM_ID_MICROSOFT = 3;
/** Encoding IDs for {@link #STBTT_PLATFORM_ID_UNICODE PLATFORM_ID_UNICODE}. */
public static final int
STBTT_UNICODE_EID_UNICODE_1_0 = 0,
STBTT_UNICODE_EID_UNICODE_1_1 = 1,
STBTT_UNICODE_EID_ISO_10646 = 2,
STBTT_UNICODE_EID_UNICODE_2_0_BMP = 3,
STBTT_UNICODE_EID_UNICODE_2_0_FULL = 4;
/** Encoding IDs for {@link #STBTT_PLATFORM_ID_MICROSOFT PLATFORM_ID_MICROSOFT}. */
public static final int
STBTT_MS_EID_SYMBOL = 0,
STBTT_MS_EID_UNICODE_BMP = 1,
STBTT_MS_EID_SHIFTJIS = 2,
STBTT_MS_EID_UNICODE_FULL = 10;
/** Encoding IDs for {@link #STBTT_PLATFORM_ID_MAC PLATFORM_ID_MAC}. */
public static final int
STBTT_MAC_EID_ROMAN = 0,
STBTT_MAC_EID_JAPANESE = 1,
STBTT_MAC_EID_CHINESE_TRAD = 2,
STBTT_MAC_EID_KOREAN = 3,
STBTT_MAC_EID_ARABIC = 4,
STBTT_MAC_EID_HEBREW = 5,
STBTT_MAC_EID_GREEK = 6,
STBTT_MAC_EID_RUSSIAN = 7;
/** Language ID for {@link #STBTT_PLATFORM_ID_MICROSOFT PLATFORM_ID_MICROSOFT}. */
public static final int
STBTT_MS_LANG_ENGLISH = 0x409,
STBTT_MS_LANG_CHINESE = 0x804,
STBTT_MS_LANG_DUTCH = 0x413,
STBTT_MS_LANG_FRENCH = 0x40C,
STBTT_MS_LANG_GERMAN = 0x407,
STBTT_MS_LANG_HEBREW = 0x40D,
STBTT_MS_LANG_ITALIAN = 0x410,
STBTT_MS_LANG_JAPANESE = 0x411,
STBTT_MS_LANG_KOREAN = 0x412,
STBTT_MS_LANG_RUSSIAN = 0x419,
STBTT_MS_LANG_SPANISH = 0x409,
STBTT_MS_LANG_SWEDISH = 0x41D;
/** Language ID for {@link #STBTT_PLATFORM_ID_MAC PLATFORM_ID_MAC}. */
public static final int
STBTT_MAC_LANG_ENGLISH = 0,
STBTT_MAC_LANG_ARABIC = 12,
STBTT_MAC_LANG_DUTCH = 4,
STBTT_MAC_LANG_FRENCH = 1,
STBTT_MAC_LANG_GERMAN = 2,
STBTT_MAC_LANG_HEBREW = 10,
STBTT_MAC_LANG_ITALIAN = 3,
STBTT_MAC_LANG_JAPANESE = 11,
STBTT_MAC_LANG_KOREAN = 23,
STBTT_MAC_LANG_RUSSIAN = 32,
STBTT_MAC_LANG_SPANISH = 6,
STBTT_MAC_LANG_SWEDISH = 5,
STBTT_MAC_LANG_CHINESE_SIMPLIFIED = 33,
STBTT_MAC_LANG_CHINESE_TRAD = 19;
static { LibSTB.initialize(); }
protected STBTruetype() {
throw new UnsupportedOperationException();
}
// --- [ stbtt_BakeFontBitmap ] ---
/**
* Unsafe version of: {@link #stbtt_BakeFontBitmap BakeFontBitmap}
*
* @param num_chars the number of characters to bake, starting at {@code first_char}
*/
public static native int nstbtt_BakeFontBitmap(long data, int offset, float pixel_height, long pixels, int pw, int ph, int first_char, int num_chars, long chardata);
/**
* Bakes a font to a bitmap for use as texture.
*
* This uses a very simply packing, use with {@link #stbtt_GetBakedQuad GetBakedQuad}.
*
* @param data the font data
* @param pixel_height the font height, in pixels
* @param pixels a buffer in which to write the font bitmap
* @param pw the bitmap width, in pixels
* @param ph the bitmap height, in pixels
* @param first_char the first character to bake
* @param chardata an array of {@link STBTTBakedChar} structs, it's {@code num_chars} long
*
* @return if positive, the first unused row of the bitmap. If negative, returns the negative of the number of characters that fit. If 0, no characters fit and no
* rows were used.
*/
public static int stbtt_BakeFontBitmap(ByteBuffer data, float pixel_height, ByteBuffer pixels, int pw, int ph, int first_char, STBTTBakedChar.Buffer chardata) {
if (CHECKS) {
check(pixels, pw * ph);
}
return nstbtt_BakeFontBitmap(memAddress(data), 0, pixel_height, memAddress(pixels), pw, ph, first_char, chardata.remaining(), chardata.address());
}
// --- [ stbtt_GetBakedQuad ] ---
/** Unsafe version of: {@link #stbtt_GetBakedQuad GetBakedQuad} */
public static native void nstbtt_GetBakedQuad(long chardata, int pw, int ph, int char_index, long xpos, long ypos, long q, int opengl_fillrule);
/**
* Computes quad to draw for a given char and advances the current position.
*
* The coordinate system used assumes y increases downwards. Characters will extend both above and below the current position; see discussion of
* "BASELINE" above.
*
* @param chardata an array of {@link STBTTBakedChar} structs
* @param pw the bitmap width, in pixels
* @param ph the bitmap height, in pixels
* @param char_index the character index in the {@code chardata} array
* @param xpos the current x position, in screen pixel space
* @param ypos the current y position, in screen pixel space
* @param q an {@link STBTTAlignedQuad} struct in which to return the quad to draw
* @param opengl_fillrule 1 if opengl fill rule; 0 if DX9 or earlier
*/
public static void stbtt_GetBakedQuad(STBTTBakedChar.Buffer chardata, int pw, int ph, int char_index, FloatBuffer xpos, FloatBuffer ypos, STBTTAlignedQuad q, boolean opengl_fillrule) {
if (CHECKS) {
check(chardata, char_index + 1);
check(xpos, 1);
check(ypos, 1);
}
nstbtt_GetBakedQuad(chardata.address(), pw, ph, char_index, memAddress(xpos), memAddress(ypos), q.address(), opengl_fillrule ? 1 : 0);
}
// --- [ stbtt_PackBegin ] ---
/** Unsafe version of: {@link #stbtt_PackBegin PackBegin} */
public static native int nstbtt_PackBegin(long spc, long pixels, int width, int height, int stride_in_bytes, int padding, long alloc_context);
/**
* Initializes a packing context stored in the passed-in {@code stbtt_pack_context}. Future calls using this context will pack characters into the bitmap
* passed in here: a 1-channel bitmap that is width x height.
*
* @param spc an {@link STBTTPackContext} struct
* @param pixels a buffer in which to store the bitmap data
* @param width the bitmap width, in pixels
* @param height the bitmap height, in pixels
* @param stride_in_bytes the distance from one row to the next (or 0 to mean they are packed tightly together)
* @param padding the amount of padding to leave between each character (normally you want '1' for bitmaps you'll use as textures with bilinear filtering)
* @param alloc_context a pointer to an allocation context
*
* @return 1 on success, 0 on failure
*/
public static boolean stbtt_PackBegin(STBTTPackContext spc, ByteBuffer pixels, int width, int height, int stride_in_bytes, int padding, long alloc_context) {
if (CHECKS) {
check(pixels, width * height);
}
return nstbtt_PackBegin(spc.address(), memAddress(pixels), width, height, stride_in_bytes, padding, alloc_context) != 0;
}
/**
* Initializes a packing context stored in the passed-in {@code stbtt_pack_context}. Future calls using this context will pack characters into the bitmap
* passed in here: a 1-channel bitmap that is width x height.
*
* @param spc an {@link STBTTPackContext} struct
* @param pixels a buffer in which to store the bitmap data
* @param width the bitmap width, in pixels
* @param height the bitmap height, in pixels
* @param stride_in_bytes the distance from one row to the next (or 0 to mean they are packed tightly together)
* @param padding the amount of padding to leave between each character (normally you want '1' for bitmaps you'll use as textures with bilinear filtering)
*
* @return 1 on success, 0 on failure
*/
public static boolean stbtt_PackBegin(STBTTPackContext spc, ByteBuffer pixels, int width, int height, int stride_in_bytes, int padding) {
if (CHECKS) {
check(pixels, width * height);
}
return nstbtt_PackBegin(spc.address(), memAddress(pixels), width, height, stride_in_bytes, padding, NULL) != 0;
}
// --- [ stbtt_PackEnd ] ---
/** Unsafe version of: {@link #stbtt_PackEnd PackEnd} */
public static native void nstbtt_PackEnd(long spc);
/**
* Cleans up the packing context and frees all memory.
*
* @param spc an {@link STBTTPackContext} struct
*/
public static void stbtt_PackEnd(STBTTPackContext spc) {
nstbtt_PackEnd(spc.address());
}
// --- [ STBTT_POINT_SIZE ] ---
/**
* Converts the full height of a character from ascender to descender, as computed by {@link #stbtt_ScaleForPixelHeight ScaleForPixelHeight}, to a point size as computed by
* {@link #stbtt_ScaleForMappingEmToPixels ScaleForMappingEmToPixels}.
*
* @param font_size the full height of a character
*
* @return the point size of the character
*/
public static int STBTT_POINT_SIZE(int font_size) {
return -font_size;
}
// --- [ stbtt_PackFontRange ] ---
/**
* Unsafe version of: {@link #stbtt_PackFontRange PackFontRange}
*
* @param num_chars_in_range the number of unicode code points in the range
*/
public static native int nstbtt_PackFontRange(long spc, long fontdata, int font_index, float font_size, int first_unicode_char_in_range, int num_chars_in_range, long chardata_for_range);
/**
* Creates character bitmaps from the {@code font_index}'th font found in fontdata (use {@code font_index=0} if you don't know what that is). It creates
* {@code num_chars_in_range} bitmaps for characters with unicode values starting at {@code first_unicode_char_in_range} and increasing. Data for how to
* render them is stored in {@code chardata_for_range}; pass these to {@link #stbtt_GetPackedQuad GetPackedQuad} to get back renderable quads.
*
* @param spc an {@link STBTTPackContext} struct
* @param fontdata the font data
* @param font_index the font index (use 0 if you don't know what that is
* @param font_size the full height of the character from ascender to descender, as computed by {@link #stbtt_ScaleForPixelHeight ScaleForPixelHeight}. To use a point size as computed by
* {@link #stbtt_ScaleForMappingEmToPixels ScaleForMappingEmToPixels}, wrap the font size in {@link #STBTT_POINT_SIZE} and pass the result, i.e.:
*
*
* ..., 20 , ... // font max minus min y is 20 pixels tall
* ..., STBTT_POINT_SIZE(20), ... // 'M' is 20 pixels tall
* @param first_unicode_char_in_range the first unicode code point in the range
* @param chardata_for_range an array of {@link STBTTPackedchar} structs
*
* @return 1 on success, 0 on failure
*/
public static boolean stbtt_PackFontRange(STBTTPackContext spc, ByteBuffer fontdata, int font_index, float font_size, int first_unicode_char_in_range, STBTTPackedchar.Buffer chardata_for_range) {
return nstbtt_PackFontRange(spc.address(), memAddress(fontdata), font_index, font_size, first_unicode_char_in_range, chardata_for_range.remaining(), chardata_for_range.address()) != 0;
}
// --- [ stbtt_PackFontRanges ] ---
/**
* Unsafe version of: {@link #stbtt_PackFontRanges PackFontRanges}
*
* @param num_ranges the number of {@link STBTTPackRange} structs in {@code ranges}
*/
public static native int nstbtt_PackFontRanges(long spc, long fontdata, int font_index, long ranges, int num_ranges);
/**
* Creates character bitmaps from multiple ranges of characters stored in ranges. This will usually create a better-packed bitmap than multiple calls to
* {@link #stbtt_PackFontRange PackFontRange}. Note that you can call this multiple times within a single {@link #stbtt_PackBegin PackBegin}/{@link #stbtt_PackEnd PackEnd}.
*
* @param spc an {@link STBTTPackContext} struct
* @param fontdata the font data
* @param font_index the font index (use 0 if you don't know what that is
* @param ranges an array of {@link STBTTPackRange} structs
*
* @return 1 on success, 0 on failure
*/
public static boolean stbtt_PackFontRanges(STBTTPackContext spc, ByteBuffer fontdata, int font_index, STBTTPackRange.Buffer ranges) {
if (CHECKS) {
STBTTPackRange.validate(ranges.address(), ranges.remaining());
}
return nstbtt_PackFontRanges(spc.address(), memAddress(fontdata), font_index, ranges.address(), ranges.remaining()) != 0;
}
// --- [ stbtt_PackSetOversampling ] ---
/** Unsafe version of: {@link #stbtt_PackSetOversampling PackSetOversampling} */
public static native void nstbtt_PackSetOversampling(long spc, int h_oversample, int v_oversample);
/**
* Oversampling a font increases the quality by allowing higher-quality subpixel positioning, and is especially valuable at smaller text sizes.
*
* This function sets the amount of oversampling for all following calls to {@link #stbtt_PackFontRange PackFontRange} or {@link #stbtt_PackFontRangesGatherRects PackFontRangesGatherRects} for a given pack context. The
* default (no oversampling) is achieved by {@code h_oversample=1, v_oversample=1}. The total number of pixels required is
* {@code h_oversample*v_oversample} larger than the default; for example, 2x2 oversampling requires 4x the storage of 1x1. For best results, render
* oversampled textures with bilinear filtering. Look at the readme in
* stb/tests/oversample for information about oversampled fonts.
*
* To use with PackFontRangesGather etc., you must set it before calls to {@link #stbtt_PackFontRangesGatherRects PackFontRangesGatherRects}.
*
* @param spc an {@link STBTTPackContext} struct
* @param h_oversample the horizontal oversampling amount
* @param v_oversample the vertical oversampling amount
*/
public static void stbtt_PackSetOversampling(STBTTPackContext spc, int h_oversample, int v_oversample) {
nstbtt_PackSetOversampling(spc.address(), h_oversample, v_oversample);
}
// --- [ stbtt_GetPackedQuad ] ---
/** Unsafe version of: {@link #stbtt_GetPackedQuad GetPackedQuad} */
public static native void nstbtt_GetPackedQuad(long chardata, int pw, int ph, int char_index, long xpos, long ypos, long q, int align_to_integer);
/**
* Computes quad to draw for a given char and advances the current position.
*
* The coordinate system used assumes y increases downwards. Characters will extend both above and below the current position; see discussion of
* "BASELINE" above.
*
* @param chardata an array of {@link STBTTPackedchar} structs
* @param pw the bitmap width, in pixels
* @param ph the bitmap height, in pixels
* @param char_index the character index in the {@code chardata} array
* @param xpos the current x position, in screen pixel space
* @param ypos the current y position, in screen pixel space
* @param q an {@link STBTTAlignedQuad} struct in which to return the quad to draw
* @param align_to_integer 1 to align the quad to integer coordinates
*/
public static void stbtt_GetPackedQuad(STBTTPackedchar.Buffer chardata, int pw, int ph, int char_index, FloatBuffer xpos, FloatBuffer ypos, STBTTAlignedQuad q, boolean align_to_integer) {
if (CHECKS) {
check(chardata, char_index + 1);
check(xpos, 1);
check(ypos, 1);
}
nstbtt_GetPackedQuad(chardata.address(), pw, ph, char_index, memAddress(xpos), memAddress(ypos), q.address(), align_to_integer ? 1 : 0);
}
// --- [ stbtt_PackFontRangesGatherRects ] ---
/**
* Unsafe version of: {@link #stbtt_PackFontRangesGatherRects PackFontRangesGatherRects}
*
* @param num_ranges the number of {@link STBTTPackRange} structs in {@code ranges}
*/
public static native int nstbtt_PackFontRangesGatherRects(long spc, long info, long ranges, int num_ranges, long rects);
/**
* Calling these functions in sequence is roughly equivalent to calling {@link #stbtt_PackFontRanges PackFontRanges}. If you want more control over the packing of multiple fonts, or
* if you want to pack custom data into a font texture, take a look at the source of {@link #stbtt_PackFontRanges PackFontRanges} and create a custom version using these functions,
* e.g. call {@link #stbtt_PackFontRangesGatherRects PackFontRangesGatherRects} multiple times, building up a single array of rects, then call {@link #stbtt_PackFontRangesPackRects PackFontRangesPackRects} once, then call
* {@link #stbtt_PackFontRangesRenderIntoRects PackFontRangesRenderIntoRects} repeatedly. This may result in a better packing than calling {@link #stbtt_PackFontRanges PackFontRanges} multiple times (or it may not).
*
* @param spc an {@link STBTTPackContext} struct
* @param info an {@link STBTTFontinfo} struct
* @param ranges an array of {@link STBTTPackRange} structs
* @param rects an array of {@link STBRPRect} structs. It must be big enough to accommodate all characters in the given ranges.
*
* @return the number of structs written in {@code rects}
*/
public static int stbtt_PackFontRangesGatherRects(STBTTPackContext spc, STBTTFontinfo info, STBTTPackRange.Buffer ranges, STBRPRect rects) {
if (CHECKS) {
STBTTPackRange.validate(ranges.address(), ranges.remaining());
}
return nstbtt_PackFontRangesGatherRects(spc.address(), info.address(), ranges.address(), ranges.remaining(), rects.address());
}
// --- [ stbtt_PackFontRangesPackRects ] ---
/**
* Unsafe version of: {@link #stbtt_PackFontRangesPackRects PackFontRangesPackRects}
*
* @param num_rects the number of structs in {@code rects}
*/
public static native void nstbtt_PackFontRangesPackRects(long spc, long rects, int num_rects);
/**
* See {@link #stbtt_PackFontRangesGatherRects PackFontRangesGatherRects}.
*
* @param spc an {@link STBTTPackContext} struct
* @param rects an array of {@link STBRPRect} structs
*/
public static void stbtt_PackFontRangesPackRects(STBTTPackContext spc, STBRPRect.Buffer rects) {
nstbtt_PackFontRangesPackRects(spc.address(), rects.address(), rects.remaining());
}
// --- [ stbtt_PackFontRangesRenderIntoRects ] ---
/**
* Unsafe version of: {@link #stbtt_PackFontRangesRenderIntoRects PackFontRangesRenderIntoRects}
*
* @param num_ranges the number of {@link STBTTPackRange} structs in {@code ranges}
*/
public static native int nstbtt_PackFontRangesRenderIntoRects(long spc, long info, long ranges, int num_ranges, long rects);
/**
* See {@link #stbtt_PackFontRangesGatherRects PackFontRangesGatherRects}.
*
* @param spc an {@link STBTTPackContext} struct
* @param info an {@link STBTTFontinfo} struct
* @param ranges an array of {@link STBTTPackRange} structs
* @param rects an array of {@link STBRPRect} structs. It must be big enough to accommodate all characters in the given ranges.
*
* @return 1 on success, 0 on failure
*/
public static boolean stbtt_PackFontRangesRenderIntoRects(STBTTPackContext spc, STBTTFontinfo info, STBTTPackRange.Buffer ranges, STBRPRect rects) {
if (CHECKS) {
STBTTPackRange.validate(ranges.address(), ranges.remaining());
}
return nstbtt_PackFontRangesRenderIntoRects(spc.address(), info.address(), ranges.address(), ranges.remaining(), rects.address()) != 0;
}
// --- [ stbtt_GetNumberOfFonts ] ---
/** Unsafe version of: {@link #stbtt_GetNumberOfFonts GetNumberOfFonts} */
public static native int nstbtt_GetNumberOfFonts(long data);
/**
* Determines the number of fonts in a font file.
*
* TrueType collection (.ttc) files may contain multiple fonts, while TrueType font (.ttf) files only contain one font. The number of fonts can be used
* for indexing with {@link #stbtt_GetFontOffsetForIndex GetFontOffsetForIndex} where the index is between zero and one less than the total fonts. If an error occurs, -1 is returned.
*
* @param data the font data
*/
public static int stbtt_GetNumberOfFonts(ByteBuffer data) {
return nstbtt_GetNumberOfFonts(memAddress(data));
}
// --- [ stbtt_GetFontOffsetForIndex ] ---
/** Unsafe version of: {@link #stbtt_GetFontOffsetForIndex GetFontOffsetForIndex} */
public static native int nstbtt_GetFontOffsetForIndex(long data, int index);
/**
* Each .ttf/.ttc file may have more than one font. Each font has a sequential index number starting from 0. Call this function to get the font offset for
* a given index; it returns -1 if the index is out of range. A regular .ttf file will only define one font and it always be at offset 0, so it will
* return '0' for index 0, and -1 for all other indices.
*
* @param data the font data
* @param index the font index
*/
public static int stbtt_GetFontOffsetForIndex(ByteBuffer data, int index) {
return nstbtt_GetFontOffsetForIndex(memAddress(data), index);
}
// --- [ stbtt_InitFont ] ---
/** Unsafe version of: {@link #stbtt_InitFont InitFont} */
public static native int nstbtt_InitFont(long info, long data, int offset);
/**
* Given an offset into the file that defines a font, this function builds the necessary cached info for the rest of the system. You must allocate the
* {@link STBTTFontinfo} yourself, and stbtt_InitFont will fill it out. You don't need to do anything special to free it, because the contents are pure value
* data with no additional data structures.
*
* @param info an {@link STBTTFontinfo} struct
* @param data the font data
* @param offset the font data offset
*
* @return 1 on success, 0 on failure
*/
public static boolean stbtt_InitFont(STBTTFontinfo info, ByteBuffer data, int offset) {
return nstbtt_InitFont(info.address(), memAddress(data), offset) != 0;
}
/**
* Given an offset into the file that defines a font, this function builds the necessary cached info for the rest of the system. You must allocate the
* {@link STBTTFontinfo} yourself, and stbtt_InitFont will fill it out. You don't need to do anything special to free it, because the contents are pure value
* data with no additional data structures.
*
* @param info an {@link STBTTFontinfo} struct
* @param data the font data
*
* @return 1 on success, 0 on failure
*/
public static boolean stbtt_InitFont(STBTTFontinfo info, ByteBuffer data) {
return nstbtt_InitFont(info.address(), memAddress(data), 0) != 0;
}
// --- [ stbtt_FindGlyphIndex ] ---
/** Unsafe version of: {@link #stbtt_FindGlyphIndex FindGlyphIndex} */
public static native int nstbtt_FindGlyphIndex(long info, int unicode_codepoint);
/**
* If you're going to perform multiple operations on the same character and you want a speed-up, call this function with the character you're going to
* process, then use glyph-based functions instead of the codepoint-based functions.
*
* @param info an {@link STBTTFontinfo} struct
* @param unicode_codepoint the unicode code point
*
* @return the glyph index
*/
public static int stbtt_FindGlyphIndex(STBTTFontinfo info, int unicode_codepoint) {
return nstbtt_FindGlyphIndex(info.address(), unicode_codepoint);
}
// --- [ stbtt_ScaleForPixelHeight ] ---
/** Unsafe version of: {@link #stbtt_ScaleForPixelHeight ScaleForPixelHeight} */
public static native float nstbtt_ScaleForPixelHeight(long info, float pixels);
/**
* Computes a scale factor to produce a font whose "height" is {@code pixels} tall. Height is measured as the distance from the highest ascender to the
* lowest descender; in other words, it's equivalent to calling {@link #stbtt_GetFontVMetrics GetFontVMetrics} and computing:
*
*
* scale = pixels / (ascent - descent)
*
* so if you prefer to measure height by the ascent only, use a similar calculation.
*
* @param info an {@link STBTTFontinfo} struct
* @param pixels the font height, in pixels
*
* @return the scale factor
*/
public static float stbtt_ScaleForPixelHeight(STBTTFontinfo info, float pixels) {
return nstbtt_ScaleForPixelHeight(info.address(), pixels);
}
// --- [ stbtt_ScaleForMappingEmToPixels ] ---
/** Unsafe version of: {@link #stbtt_ScaleForMappingEmToPixels ScaleForMappingEmToPixels} */
public static native float nstbtt_ScaleForMappingEmToPixels(long info, float pixels);
/**
* Computes a scale factor to produce a font whose EM size is mapped to {@code pixels} tall. This is probably what traditional APIs compute, but I'm not
* positive.
*
* @param info an {@link STBTTFontinfo} struct
* @param pixels the font height, in pixels
*
* @return the scale factor
*/
public static float stbtt_ScaleForMappingEmToPixels(STBTTFontinfo info, float pixels) {
return nstbtt_ScaleForMappingEmToPixels(info.address(), pixels);
}
// --- [ stbtt_GetFontVMetrics ] ---
/** Unsafe version of: {@link #stbtt_GetFontVMetrics GetFontVMetrics} */
public static native void nstbtt_GetFontVMetrics(long info, long ascent, long descent, long lineGap);
/**
* Returns vertical metrics for the specified font. You should advance the vertical position by {@code *ascent - *descent + *lineGap}
*
* The returned values are expressed in unscaled coordinates, so you must multiply by the scale factor for a given size.
*
* @param info an {@link STBTTFontinfo} struct
* @param ascent returns the coordinate above the baseline the font extends
* @param descent returns the coordinate below the baseline the font extends (i.e. it is typically negative)
* @param lineGap returns the spacing between one row's descent and the next row's ascent
*/
public static void stbtt_GetFontVMetrics(STBTTFontinfo info, IntBuffer ascent, IntBuffer descent, IntBuffer lineGap) {
if (CHECKS) {
checkSafe(ascent, 1);
checkSafe(descent, 1);
checkSafe(lineGap, 1);
}
nstbtt_GetFontVMetrics(info.address(), memAddressSafe(ascent), memAddressSafe(descent), memAddressSafe(lineGap));
}
// --- [ stbtt_GetFontBoundingBox ] ---
/** Unsafe version of: {@link #stbtt_GetFontBoundingBox GetFontBoundingBox} */
public static native void nstbtt_GetFontBoundingBox(long info, long x0, long y0, long x1, long y1);
/**
* Returns the bounding box around all possible characters.
*
* @param info an {@link STBTTFontinfo} struct
* @param x0 the left coordinate
* @param y0 the bottom coordinate
* @param x1 the right coordinate
* @param y1 the top coordinate
*/
public static void stbtt_GetFontBoundingBox(STBTTFontinfo info, IntBuffer x0, IntBuffer y0, IntBuffer x1, IntBuffer y1) {
if (CHECKS) {
check(x0, 1);
check(y0, 1);
check(x1, 1);
check(y1, 1);
}
nstbtt_GetFontBoundingBox(info.address(), memAddress(x0), memAddress(y0), memAddress(x1), memAddress(y1));
}
// --- [ stbtt_GetCodepointHMetrics ] ---
/** Unsafe version of: {@link #stbtt_GetCodepointHMetrics GetCodepointHMetrics} */
public static native void nstbtt_GetCodepointHMetrics(long info, int codepoint, long advanceWidth, long leftSideBearing);
/**
* Returns horizontal metrics for the specified codepoint.
*
* The returned values are expressed in unscaled coordinates.
*
* @param info an {@link STBTTFontinfo} struct
* @param codepoint the unicode codepoint
* @param advanceWidth the offset from the current horizontal position to the next horizontal position
* @param leftSideBearing the offset from the current horizontal position to the left edge of the character
*/
public static void stbtt_GetCodepointHMetrics(STBTTFontinfo info, int codepoint, IntBuffer advanceWidth, IntBuffer leftSideBearing) {
if (CHECKS) {
checkSafe(advanceWidth, 1);
checkSafe(leftSideBearing, 1);
}
nstbtt_GetCodepointHMetrics(info.address(), codepoint, memAddressSafe(advanceWidth), memAddressSafe(leftSideBearing));
}
// --- [ stbtt_GetCodepointKernAdvance ] ---
/** Unsafe version of: {@link #stbtt_GetCodepointKernAdvance GetCodepointKernAdvance} */
public static native int nstbtt_GetCodepointKernAdvance(long info, int ch1, int ch2);
/**
* Returns the additional amount to add to the {@code advance} value between {@code ch1} and {@code ch2}.
*
* @param info an {@link STBTTFontinfo} struct
* @param ch1 the first unicode codepoint
* @param ch2 the second unicode codepoint
*/
public static int stbtt_GetCodepointKernAdvance(STBTTFontinfo info, int ch1, int ch2) {
return nstbtt_GetCodepointKernAdvance(info.address(), ch1, ch2);
}
// --- [ stbtt_GetCodepointBox ] ---
/** Unsafe version of: {@link #stbtt_GetCodepointBox GetCodepointBox} */
public static native int nstbtt_GetCodepointBox(long info, int codepoint, long x0, long y0, long x1, long y1);
/**
* Gets the bounding box of the visible part of the glyph, in unscaled coordinates.
*
* @param info an {@link STBTTFontinfo} struct
* @param codepoint the unicode codepoint
* @param x0 returns the left coordinate
* @param y0 returns the bottom coordinate
* @param x1 returns the right coordinate
* @param y1 returns the top coordinate
*/
public static boolean stbtt_GetCodepointBox(STBTTFontinfo info, int codepoint, IntBuffer x0, IntBuffer y0, IntBuffer x1, IntBuffer y1) {
if (CHECKS) {
checkSafe(x0, 1);
checkSafe(y0, 1);
checkSafe(x1, 1);
checkSafe(y1, 1);
}
return nstbtt_GetCodepointBox(info.address(), codepoint, memAddressSafe(x0), memAddressSafe(y0), memAddressSafe(x1), memAddressSafe(y1)) != 0;
}
// --- [ stbtt_GetGlyphHMetrics ] ---
/** Unsafe version of: {@link #stbtt_GetGlyphHMetrics GetGlyphHMetrics} */
public static native void nstbtt_GetGlyphHMetrics(long info, int glyph_index, long advanceWidth, long leftSideBearing);
/**
* Glyph version of {@link #stbtt_GetCodepointHMetrics GetCodepointHMetrics}, for greater efficiency.
*
* @param info an {@link STBTTFontinfo} struct
* @param glyph_index the glyph index
* @param advanceWidth the offset from the current horizontal position to the next horizontal position
* @param leftSideBearing the offset from the current horizontal position to the left edge of the character
*/
public static void stbtt_GetGlyphHMetrics(STBTTFontinfo info, int glyph_index, IntBuffer advanceWidth, IntBuffer leftSideBearing) {
if (CHECKS) {
checkSafe(advanceWidth, 1);
checkSafe(leftSideBearing, 1);
}
nstbtt_GetGlyphHMetrics(info.address(), glyph_index, memAddressSafe(advanceWidth), memAddressSafe(leftSideBearing));
}
// --- [ stbtt_GetGlyphKernAdvance ] ---
/** Unsafe version of: {@link #stbtt_GetGlyphKernAdvance GetGlyphKernAdvance} */
public static native int nstbtt_GetGlyphKernAdvance(long info, int glyph1, int glyph2);
/**
* Glyph version of {@link #stbtt_GetCodepointKernAdvance GetCodepointKernAdvance}, for greater efficiency.
*
* @param info an {@link STBTTFontinfo} struct
* @param glyph1 the first glyph index
* @param glyph2 the second glyph index
*/
public static int stbtt_GetGlyphKernAdvance(STBTTFontinfo info, int glyph1, int glyph2) {
return nstbtt_GetGlyphKernAdvance(info.address(), glyph1, glyph2);
}
// --- [ stbtt_GetGlyphBox ] ---
/** Unsafe version of: {@link #stbtt_GetGlyphBox GetGlyphBox} */
public static native int nstbtt_GetGlyphBox(long info, int glyph_index, long x0, long y0, long x1, long y1);
/**
* Glyph version of {@link #stbtt_GetCodepointBox GetCodepointBox}, for greater efficiency.
*
* @param info an {@link STBTTFontinfo} struct
* @param glyph_index the glyph index
* @param x0 returns the left coordinate
* @param y0 returns the bottom coordinate
* @param x1 returns the right coordinate
* @param y1 returns the top coordinate
*/
public static boolean stbtt_GetGlyphBox(STBTTFontinfo info, int glyph_index, IntBuffer x0, IntBuffer y0, IntBuffer x1, IntBuffer y1) {
if (CHECKS) {
checkSafe(x0, 1);
checkSafe(y0, 1);
checkSafe(x1, 1);
checkSafe(y1, 1);
}
return nstbtt_GetGlyphBox(info.address(), glyph_index, memAddressSafe(x0), memAddressSafe(y0), memAddressSafe(x1), memAddressSafe(y1)) != 0;
}
// --- [ stbtt_IsGlyphEmpty ] ---
/** Unsafe version of: {@link #stbtt_IsGlyphEmpty IsGlyphEmpty} */
public static native int nstbtt_IsGlyphEmpty(long info, int glyph_index);
/**
* Returns non-zero if nothing is drawn for this glyph.
*
* @param info an {@link STBTTFontinfo} struct
* @param glyph_index the glyph index
*/
public static boolean stbtt_IsGlyphEmpty(STBTTFontinfo info, int glyph_index) {
return nstbtt_IsGlyphEmpty(info.address(), glyph_index) != 0;
}
// --- [ stbtt_GetCodepointShape ] ---
/** Unsafe version of: {@link #stbtt_GetCodepointShape GetCodepointShape} */
public static native int nstbtt_GetCodepointShape(long info, int unicode_codepoint, long vertices);
/**
* Returns number of vertices and fills {@code *vertices} with the pointer to them
*
* The shape is a series of countours. Each one starts with a {@link #STBTT_vmove vmove}, then consists of a series of mixed {@link #STBTT_vline vline} and {@link #STBTT_vcurve vcurve} segments. A {@link #STBTT_vline vline} draws a
* line from previous endpoint to its {@code x,y}; a {@link #STBTT_vcurve vcurve} draws a quadratic bezier from previous endpoint to its {@code x,y}, using {@code cx,cy} as
* the bezier control point.
*
* The {@link STBTTVertex} values are expressed in "unscaled" coordinates.
*
* @param info an {@link STBTTFontinfo} struct
* @param unicode_codepoint the unicode codepoint
* @param vertices returns a pointer to an array of {@link STBTTVertex} structs
*/
public static int stbtt_GetCodepointShape(STBTTFontinfo info, int unicode_codepoint, PointerBuffer vertices) {
if (CHECKS) {
check(vertices, 1);
}
return nstbtt_GetCodepointShape(info.address(), unicode_codepoint, memAddress(vertices));
}
/**
* Returns number of vertices and fills {@code *vertices} with the pointer to them
*
* The shape is a series of countours. Each one starts with a {@link #STBTT_vmove vmove}, then consists of a series of mixed {@link #STBTT_vline vline} and {@link #STBTT_vcurve vcurve} segments. A {@link #STBTT_vline vline} draws a
* line from previous endpoint to its {@code x,y}; a {@link #STBTT_vcurve vcurve} draws a quadratic bezier from previous endpoint to its {@code x,y}, using {@code cx,cy} as
* the bezier control point.
*
* The {@link STBTTVertex} values are expressed in "unscaled" coordinates.
*
* @param info an {@link STBTTFontinfo} struct
* @param unicode_codepoint the unicode codepoint
*/
public static STBTTVertex.Buffer stbtt_GetCodepointShape(STBTTFontinfo info, int unicode_codepoint) {
MemoryStack stack = stackGet(); int stackPointer = stack.getPointer();
try {
PointerBuffer vertices = stack.pointers(NULL);
int __result = nstbtt_GetCodepointShape(info.address(), unicode_codepoint, memAddress(vertices));
return STBTTVertex.create(vertices.get(0), __result);
} finally {
stack.setPointer(stackPointer);
}
}
// --- [ stbtt_GetGlyphShape ] ---
/** Unsafe version of: {@link #stbtt_GetGlyphShape GetGlyphShape} */
public static native int nstbtt_GetGlyphShape(long info, int glyph_index, long vertices);
/**
* Glyph version of {@link #stbtt_GetCodepointShape GetCodepointShape}, for greater efficiency.
*
* @param info an {@link STBTTFontinfo} struct
* @param glyph_index the unicode codepoint
* @param vertices returns a pointer to an array of {@link STBTTVertex} structs
*/
public static int stbtt_GetGlyphShape(STBTTFontinfo info, int glyph_index, PointerBuffer vertices) {
if (CHECKS) {
check(vertices, 1);
}
return nstbtt_GetGlyphShape(info.address(), glyph_index, memAddress(vertices));
}
/**
* Glyph version of {@link #stbtt_GetCodepointShape GetCodepointShape}, for greater efficiency.
*
* @param info an {@link STBTTFontinfo} struct
* @param glyph_index the unicode codepoint
*/
public static STBTTVertex.Buffer stbtt_GetGlyphShape(STBTTFontinfo info, int glyph_index) {
MemoryStack stack = stackGet(); int stackPointer = stack.getPointer();
try {
PointerBuffer vertices = stack.pointers(NULL);
int __result = nstbtt_GetGlyphShape(info.address(), glyph_index, memAddress(vertices));
return STBTTVertex.create(vertices.get(0), __result);
} finally {
stack.setPointer(stackPointer);
}
}
// --- [ stbtt_FreeShape ] ---
/** Unsafe version of: {@link #stbtt_FreeShape FreeShape} */
public static native void nstbtt_FreeShape(long info, long vertices);
/**
* Frees the data allocated by {@link #stbtt_GetCodepointShape GetCodepointShape} and {@link #stbtt_GetGlyphShape GetGlyphShape}.
*
* @param info an {@link STBTTFontinfo} struct
* @param vertices the array of {@link STBTTVertex} structs to free
*/
public static void stbtt_FreeShape(STBTTFontinfo info, STBTTVertex.Buffer vertices) {
if (CHECKS) {
check(vertices, 1);
}
nstbtt_FreeShape(info.address(), vertices.address());
}
// --- [ stbtt_FreeBitmap ] ---
/** Unsafe version of: {@link #stbtt_FreeBitmap FreeBitmap} */
public static native void nstbtt_FreeBitmap(long bitmap, long userdata);
/**
* Frees a bitmap allocated by {@link #stbtt_GetCodepointBitmap GetCodepointBitmap}, {@link #stbtt_GetCodepointBitmapSubpixel GetCodepointBitmapSubpixel}, {@link #stbtt_GetGlyphBitmap GetGlyphBitmap} or {@link #stbtt_GetGlyphBitmapSubpixel GetGlyphBitmapSubpixel}.
*
* @param bitmap the bitmap to free
* @param userdata a pointer to user data
*/
public static void stbtt_FreeBitmap(ByteBuffer bitmap, long userdata) {
nstbtt_FreeBitmap(memAddress(bitmap), userdata);
}
// --- [ stbtt_GetCodepointBitmap ] ---
/** Unsafe version of: {@link #stbtt_GetCodepointBitmap GetCodepointBitmap} */
public static native long nstbtt_GetCodepointBitmap(long info, float scale_x, float scale_y, int codepoint, long width, long height, long xoff, long yoff);
/**
* Allocates a large-enough single-channel 8bpp bitmap and renders the specified character/glyph at the specified scale into it, with antialiasing.
*
* @param info an {@link STBTTFontinfo} struct
* @param scale_x the horizontal scale
* @param scale_y the vertical scale
* @param codepoint the unicode codepoint to render
* @param width returns the bitmap width
* @param height returns the bitmap height
* @param xoff returns the horizontal offset in pixel space from the glyph origin to the left of the bitmap
* @param yoff returns the vertical offset in pixel space from the glyph origin to the top of the bitmap
*/
public static ByteBuffer stbtt_GetCodepointBitmap(STBTTFontinfo info, float scale_x, float scale_y, int codepoint, IntBuffer width, IntBuffer height, IntBuffer xoff, IntBuffer yoff) {
if (CHECKS) {
check(width, 1);
check(height, 1);
checkSafe(xoff, 1);
checkSafe(yoff, 1);
}
long __result = nstbtt_GetCodepointBitmap(info.address(), scale_x, scale_y, codepoint, memAddress(width), memAddress(height), memAddressSafe(xoff), memAddressSafe(yoff));
return memByteBuffer(__result, width.get(width.position()) * height.get(height.position()));
}
// --- [ stbtt_GetCodepointBitmapSubpixel ] ---
/** Unsafe version of: {@link #stbtt_GetCodepointBitmapSubpixel GetCodepointBitmapSubpixel} */
public static native long nstbtt_GetCodepointBitmapSubpixel(long info, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint, long width, long height, long xoff, long yoff);
/**
* Same as {@link #stbtt_GetCodepointBitmap GetCodepointBitmap}, but you can specify a subpixel shift for the character.
*
* @param info an {@link STBTTFontinfo} struct
* @param scale_x the horizontal scale
* @param scale_y the vertical scale
* @param shift_x the horizontal subpixel shift
* @param shift_y the vertical subpixel shift
* @param codepoint the unicode codepoint to render
* @param width returns the bitmap width
* @param height returns the bitmap height
* @param xoff returns the horizontal offset in pixel space from the glyph origin to the left of the bitmap
* @param yoff returns the vertical offset in pixel space from the glyph origin to the top of the bitmap
*/
public static ByteBuffer stbtt_GetCodepointBitmapSubpixel(STBTTFontinfo info, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint, IntBuffer width, IntBuffer height, IntBuffer xoff, IntBuffer yoff) {
if (CHECKS) {
check(width, 1);
check(height, 1);
checkSafe(xoff, 1);
checkSafe(yoff, 1);
}
long __result = nstbtt_GetCodepointBitmapSubpixel(info.address(), scale_x, scale_y, shift_x, shift_y, codepoint, memAddress(width), memAddress(height), memAddressSafe(xoff), memAddressSafe(yoff));
return memByteBuffer(__result, width.get(width.position()) * height.get(height.position()));
}
// --- [ stbtt_MakeCodepointBitmap ] ---
/** Unsafe version of: {@link #stbtt_MakeCodepointBitmap MakeCodepointBitmap} */
public static native void nstbtt_MakeCodepointBitmap(long info, long output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int codepoint);
/**
* Same as {@link #stbtt_GetCodepointBitmap GetCodepointBitmap}, but you pass in storage for the bitmap in the form of {@code output}, with row spacing of {@code out_stride} bytes. The
* bitmap is clipped to {@code out_w/out_h} bytes. Call {@link #stbtt_GetCodepointBitmapBox GetCodepointBitmapBox} to get the width and height and positioning info for it first.
*
* @param info an {@link STBTTFontinfo} struct
* @param output the bitmap storage
* @param out_w the bitmap width
* @param out_h the bitmap height
* @param out_stride the row stride, in bytes
* @param scale_x the horizontal scale
* @param scale_y the vertical scale
* @param codepoint the unicode codepoint to render
*/
public static void stbtt_MakeCodepointBitmap(STBTTFontinfo info, ByteBuffer output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int codepoint) {
if (CHECKS) {
check(output, out_w * out_h);
}
nstbtt_MakeCodepointBitmap(info.address(), memAddress(output), out_w, out_h, out_stride, scale_x, scale_y, codepoint);
}
// --- [ stbtt_MakeCodepointBitmapSubpixel ] ---
/** Unsafe version of: {@link #stbtt_MakeCodepointBitmapSubpixel MakeCodepointBitmapSubpixel} */
public static native void nstbtt_MakeCodepointBitmapSubpixel(long info, long output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint);
/**
* Same as {@link #stbtt_MakeCodepointBitmap MakeCodepointBitmap}, but you can specify a subpixel shift for the character.
*
* @param info an {@link STBTTFontinfo} struct
* @param output the bitmap storage
* @param out_w the bitmap width
* @param out_h the bitmap height
* @param out_stride the row stride, in bytes
* @param scale_x the horizontal scale
* @param scale_y the vertical scale
* @param shift_x the horizontal subpixel shift
* @param shift_y the vertical subpixel shift
* @param codepoint the unicode codepoint to render
*/
public static void stbtt_MakeCodepointBitmapSubpixel(STBTTFontinfo info, ByteBuffer output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint) {
if (CHECKS) {
check(output, out_w * out_h);
}
nstbtt_MakeCodepointBitmapSubpixel(info.address(), memAddress(output), out_w, out_h, out_stride, scale_x, scale_y, shift_x, shift_y, codepoint);
}
// --- [ stbtt_GetCodepointBitmapBox ] ---
/** Unsafe version of: {@link #stbtt_GetCodepointBitmapBox GetCodepointBitmapBox} */
public static native void nstbtt_GetCodepointBitmapBox(long font, int codepoint, float scale_x, float scale_y, long ix0, long iy0, long ix1, long iy1);
/**
* Get the bbox of the bitmap centered around the glyph origin; so the bitmap width is {@code ix1-ix0}, height is {@code iy1-iy0}, and location to place
* the bitmap top left is {@code (leftSideBearing*scale,iy0)}.
*
* Note that the bitmap uses y-increases-down, but the shape uses y-increases-up, so {@code CodepointBitmapBox} and {@code CodepointBox} are inverted.
*
* @param font an {@link STBTTFontinfo} struct
* @param codepoint the unicode codepoint
* @param scale_x the horizontal scale
* @param scale_y the vertical scale
* @param ix0 returns the left coordinate
* @param iy0 returns the bottom coordinate
* @param ix1 returns the right coordinate
* @param iy1 returns the top coordinate
*/
public static void stbtt_GetCodepointBitmapBox(STBTTFontinfo font, int codepoint, float scale_x, float scale_y, IntBuffer ix0, IntBuffer iy0, IntBuffer ix1, IntBuffer iy1) {
if (CHECKS) {
checkSafe(ix0, 1);
checkSafe(iy0, 1);
checkSafe(ix1, 1);
checkSafe(iy1, 1);
}
nstbtt_GetCodepointBitmapBox(font.address(), codepoint, scale_x, scale_y, memAddressSafe(ix0), memAddressSafe(iy0), memAddressSafe(ix1), memAddressSafe(iy1));
}
// --- [ stbtt_GetCodepointBitmapBoxSubpixel ] ---
/** Unsafe version of: {@link #stbtt_GetCodepointBitmapBoxSubpixel GetCodepointBitmapBoxSubpixel} */
public static native void nstbtt_GetCodepointBitmapBoxSubpixel(long font, int codepoint, float scale_x, float scale_y, float shift_x, float shift_y, long ix0, long iy0, long ix1, long iy1);
/**
* Same as {@link #stbtt_GetCodepointBitmapBox GetCodepointBitmapBox}, but you can specify a subpixel shift for the character.
*
* @param font an {@link STBTTFontinfo} struct
* @param codepoint the unicode codepoint
* @param scale_x the horizontal scale
* @param scale_y the vertical scale
* @param shift_x the horizontal subpixel shift
* @param shift_y the vertical subpixel shift
* @param ix0 returns the left coordinate
* @param iy0 returns the bottom coordinate
* @param ix1 returns the right coordinate
* @param iy1 returns the top coordinate
*/
public static void stbtt_GetCodepointBitmapBoxSubpixel(STBTTFontinfo font, int codepoint, float scale_x, float scale_y, float shift_x, float shift_y, IntBuffer ix0, IntBuffer iy0, IntBuffer ix1, IntBuffer iy1) {
if (CHECKS) {
checkSafe(ix0, 1);
checkSafe(iy0, 1);
checkSafe(ix1, 1);
checkSafe(iy1, 1);
}
nstbtt_GetCodepointBitmapBoxSubpixel(font.address(), codepoint, scale_x, scale_y, shift_x, shift_y, memAddressSafe(ix0), memAddressSafe(iy0), memAddressSafe(ix1), memAddressSafe(iy1));
}
// --- [ stbtt_GetGlyphBitmap ] ---
/** Unsafe version of: {@link #stbtt_GetGlyphBitmap GetGlyphBitmap} */
public static native long nstbtt_GetGlyphBitmap(long info, float scale_x, float scale_y, int glyph, long width, long height, long xoff, long yoff);
/**
* Allocates a large-enough single-channel 8bpp bitmap and renders the specified character/glyph at the specified scale into it, with antialiasing.
*
* @param info an {@link STBTTFontinfo} struct
* @param scale_x the horizontal scale
* @param scale_y the vertical scale
* @param glyph the glyph index to render
* @param width returns the bitmap width
* @param height returns the bitmap height
* @param xoff returns the horizontal offset in pixel space from the glyph origin to the left of the bitmap
* @param yoff returns the vertical offset in pixel space from the glyph origin to the top of the bitmap
*/
public static ByteBuffer stbtt_GetGlyphBitmap(STBTTFontinfo info, float scale_x, float scale_y, int glyph, IntBuffer width, IntBuffer height, IntBuffer xoff, IntBuffer yoff) {
if (CHECKS) {
check(width, 1);
check(height, 1);
checkSafe(xoff, 1);
checkSafe(yoff, 1);
}
long __result = nstbtt_GetGlyphBitmap(info.address(), scale_x, scale_y, glyph, memAddress(width), memAddress(height), memAddressSafe(xoff), memAddressSafe(yoff));
return memByteBuffer(__result, width.get(width.position()) * height.get(height.position()));
}
// --- [ stbtt_GetGlyphBitmapSubpixel ] ---
/** Unsafe version of: {@link #stbtt_GetGlyphBitmapSubpixel GetGlyphBitmapSubpixel} */
public static native long nstbtt_GetGlyphBitmapSubpixel(long info, float scale_x, float scale_y, float shift_x, float shift_y, int glyph, long width, long height, long xoff, long yoff);
/**
* Same as {@link #stbtt_GetGlyphBitmap GetGlyphBitmap}, but you can specify a subpixel shift for the character.
*
* @param info an {@link STBTTFontinfo} struct
* @param scale_x the horizontal scale
* @param scale_y the vertical scale
* @param shift_x the horizontal subpixel shift
* @param shift_y the vertical subpixel shift
* @param glyph the glyph index to render
* @param width returns the bitmap width
* @param height returns the bitmap height
* @param xoff returns the horizontal offset in pixel space from the glyph origin to the left of the bitmap
* @param yoff returns the vertical offset in pixel space from the glyph origin to the top of the bitmap
*/
public static ByteBuffer stbtt_GetGlyphBitmapSubpixel(STBTTFontinfo info, float scale_x, float scale_y, float shift_x, float shift_y, int glyph, IntBuffer width, IntBuffer height, IntBuffer xoff, IntBuffer yoff) {
if (CHECKS) {
check(width, 1);
check(height, 1);
checkSafe(xoff, 1);
checkSafe(yoff, 1);
}
long __result = nstbtt_GetGlyphBitmapSubpixel(info.address(), scale_x, scale_y, shift_x, shift_y, glyph, memAddress(width), memAddress(height), memAddressSafe(xoff), memAddressSafe(yoff));
return memByteBuffer(__result, width.get(width.position()) * height.get(height.position()));
}
// --- [ stbtt_MakeGlyphBitmap ] ---
/** Unsafe version of: {@link #stbtt_MakeGlyphBitmap MakeGlyphBitmap} */
public static native void nstbtt_MakeGlyphBitmap(long info, long output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int glyph);
/**
* Same as {@link #stbtt_GetGlyphBitmap GetGlyphBitmap}, but you pass in storage for the bitmap in the form of {@code output}, with row spacing of {@code out_stride} bytes. The
* bitmap is clipped to {@code out_w/out_h} bytes. Call {@link #stbtt_GetGlyphBitmapBox GetGlyphBitmapBox} to get the width and height and positioning info for it first.
*
* @param info an {@link STBTTFontinfo} struct
* @param output the bitmap storage
* @param out_w the bitmap width
* @param out_h the bitmap height
* @param out_stride the row stride, in bytes
* @param scale_x the horizontal scale
* @param scale_y the vertical scale
* @param glyph the glyph index to render
*/
public static void stbtt_MakeGlyphBitmap(STBTTFontinfo info, ByteBuffer output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int glyph) {
if (CHECKS) {
check(output, out_w * out_h);
}
nstbtt_MakeGlyphBitmap(info.address(), memAddress(output), out_w, out_h, out_stride, scale_x, scale_y, glyph);
}
// --- [ stbtt_MakeGlyphBitmapSubpixel ] ---
/** Unsafe version of: {@link #stbtt_MakeGlyphBitmapSubpixel MakeGlyphBitmapSubpixel} */
public static native void nstbtt_MakeGlyphBitmapSubpixel(long info, long output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int glyph);
/**
* Same as {@link #stbtt_MakeGlyphBitmap MakeGlyphBitmap}, but you can specify a subpixel shift for the character.
*
* @param info an {@link STBTTFontinfo} struct
* @param output the bitmap storage
* @param out_w the bitmap width
* @param out_h the bitmap height
* @param out_stride the row stride, in bytes
* @param scale_x the horizontal scale
* @param scale_y the vertical scale
* @param shift_x the horizontal subpixel shift
* @param shift_y the vertical subpixel shift
* @param glyph the glyph index to render
*/
public static void stbtt_MakeGlyphBitmapSubpixel(STBTTFontinfo info, ByteBuffer output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int glyph) {
if (CHECKS) {
check(output, out_w * out_h);
}
nstbtt_MakeGlyphBitmapSubpixel(info.address(), memAddress(output), out_w, out_h, out_stride, scale_x, scale_y, shift_x, shift_y, glyph);
}
// --- [ stbtt_GetGlyphBitmapBox ] ---
/** Unsafe version of: {@link #stbtt_GetGlyphBitmapBox GetGlyphBitmapBox} */
public static native void nstbtt_GetGlyphBitmapBox(long font, int glyph, float scale_x, float scale_y, long ix0, long iy0, long ix1, long iy1);
/**
* Get the bbox of the bitmap centered around the glyph origin; so the bitmap width is {@code ix1-ix0}, height is {@code iy1-iy0}, and location to place
* the bitmap top left is {@code (leftSideBearing*scale,iy0)}.
*
* Note that the bitmap uses y-increases-down, but the shape uses y-increases-up, so {@code GlyphBitmapBox} and {@code GlyphBox} are inverted.
*
* @param font an {@link STBTTFontinfo} struct
* @param glyph the glyph index
* @param scale_x the horizontal scale
* @param scale_y the vertical scale
* @param ix0 returns the left coordinate
* @param iy0 returns the bottom coordinate
* @param ix1 returns the right coordinate
* @param iy1 returns the top coordinate
*/
public static void stbtt_GetGlyphBitmapBox(STBTTFontinfo font, int glyph, float scale_x, float scale_y, IntBuffer ix0, IntBuffer iy0, IntBuffer ix1, IntBuffer iy1) {
if (CHECKS) {
checkSafe(ix0, 1);
checkSafe(iy0, 1);
checkSafe(ix1, 1);
checkSafe(iy1, 1);
}
nstbtt_GetGlyphBitmapBox(font.address(), glyph, scale_x, scale_y, memAddressSafe(ix0), memAddressSafe(iy0), memAddressSafe(ix1), memAddressSafe(iy1));
}
// --- [ stbtt_GetGlyphBitmapBoxSubpixel ] ---
/** Unsafe version of: {@link #stbtt_GetGlyphBitmapBoxSubpixel GetGlyphBitmapBoxSubpixel} */
public static native void nstbtt_GetGlyphBitmapBoxSubpixel(long font, int glyph, float scale_x, float scale_y, float shift_x, float shift_y, long ix0, long iy0, long ix1, long iy1);
/**
* Same as {@link #stbtt_GetGlyphBitmapBox GetGlyphBitmapBox}, but you can specify a subpixel shift for the character.
*
* @param font an {@link STBTTFontinfo} struct
* @param glyph the glyph index
* @param scale_x the horizontal scale
* @param scale_y the vertical scale
* @param shift_x the horizontal subpixel shift
* @param shift_y the vertical subpixel shift
* @param ix0 returns the left coordinate
* @param iy0 returns the bottom coordinate
* @param ix1 returns the right coordinate
* @param iy1 returns the top coordinate
*/
public static void stbtt_GetGlyphBitmapBoxSubpixel(STBTTFontinfo font, int glyph, float scale_x, float scale_y, float shift_x, float shift_y, IntBuffer ix0, IntBuffer iy0, IntBuffer ix1, IntBuffer iy1) {
if (CHECKS) {
checkSafe(ix0, 1);
checkSafe(iy0, 1);
checkSafe(ix1, 1);
checkSafe(iy1, 1);
}
nstbtt_GetGlyphBitmapBoxSubpixel(font.address(), glyph, scale_x, scale_y, shift_x, shift_y, memAddressSafe(ix0), memAddressSafe(iy0), memAddressSafe(ix1), memAddressSafe(iy1));
}
// --- [ stbtt_FindMatchingFont ] ---
/** Unsafe version of: {@link #stbtt_FindMatchingFont FindMatchingFont} */
public static native int nstbtt_FindMatchingFont(long fontdata, long name, int flags);
/**
* Returns the offset (not index) of the font that matches, or -1 if none.
*
* If you use STBTT_MACSTYLE_DONTCARE, use a font name like "Arial Bold". If you use any other flag, use a font name like "Arial"; this checks the
* {@code macStyle} header field; I don't know if fonts set this consistently.
*
* @param fontdata the font data
* @param name the font name
* @param flags the style flags. One of:
{@link #STBTT_MACSTYLE_DONTCARE MACSTYLE_DONTCARE} {@link #STBTT_MACSTYLE_BOLD MACSTYLE_BOLD} {@link #STBTT_MACSTYLE_ITALIC MACSTYLE_ITALIC} {@link #STBTT_MACSTYLE_UNDERSCORE MACSTYLE_UNDERSCORE} {@link #STBTT_MACSTYLE_NONE MACSTYLE_NONE}
*/
public static int stbtt_FindMatchingFont(ByteBuffer fontdata, ByteBuffer name, int flags) {
if (CHECKS) {
checkNT1(name);
}
return nstbtt_FindMatchingFont(memAddress(fontdata), memAddress(name), flags);
}
/**
* Returns the offset (not index) of the font that matches, or -1 if none.
*
* If you use STBTT_MACSTYLE_DONTCARE, use a font name like "Arial Bold". If you use any other flag, use a font name like "Arial"; this checks the
* {@code macStyle} header field; I don't know if fonts set this consistently.
*
* @param fontdata the font data
* @param name the font name
* @param flags the style flags. One of:
{@link #STBTT_MACSTYLE_DONTCARE MACSTYLE_DONTCARE} {@link #STBTT_MACSTYLE_BOLD MACSTYLE_BOLD} {@link #STBTT_MACSTYLE_ITALIC MACSTYLE_ITALIC} {@link #STBTT_MACSTYLE_UNDERSCORE MACSTYLE_UNDERSCORE} {@link #STBTT_MACSTYLE_NONE MACSTYLE_NONE}
*/
public static int stbtt_FindMatchingFont(ByteBuffer fontdata, CharSequence name, int flags) {
MemoryStack stack = stackGet(); int stackPointer = stack.getPointer();
try {
ByteBuffer nameEncoded = stack.UTF8(name);
return nstbtt_FindMatchingFont(memAddress(fontdata), memAddress(nameEncoded), flags);
} finally {
stack.setPointer(stackPointer);
}
}
// --- [ stbtt_CompareUTF8toUTF16_bigendian ] ---
/**
* Unsafe version of: {@link #stbtt_CompareUTF8toUTF16_bigendian CompareUTF8toUTF16_bigendian}
*
* @param len1 the length of the first string, in bytes
* @param len2 the length of the second string, in bytes
*/
public static native int nstbtt_CompareUTF8toUTF16_bigendian(long s1, int len1, long s2, int len2);
/**
* Returns 1/0 whether the first string interpreted as utf8 is identical to the second string interpreted as big-endian utf16... useful for strings
* returned from {@link #stbtt_GetFontNameString GetFontNameString}.
*
* @param s1 the first string
* @param s2 the second string
*/
public static boolean stbtt_CompareUTF8toUTF16_bigendian(ByteBuffer s1, ByteBuffer s2) {
return nstbtt_CompareUTF8toUTF16_bigendian(memAddress(s1), s1.remaining(), memAddress(s2), s2.remaining()) != 0;
}
// --- [ stbtt_GetFontNameString ] ---
/**
* Unsafe version of: {@link #stbtt_GetFontNameString GetFontNameString}
*
* @param length returns the string length, in bytes
*/
public static native long nstbtt_GetFontNameString(long font, long length, int platformID, int encodingID, int languageID, int nameID);
/**
* Returns the string (which may be big-endian double byte, e.g. for unicode) and puts the length in bytes in {@code *length}.
*
* See the truetype spec:
*
*
*
* @param font an {@link STBTTFontinfo} struct
* @param platformID the platform ID. One of:
{@link #STBTT_PLATFORM_ID_UNICODE PLATFORM_ID_UNICODE} {@link #STBTT_PLATFORM_ID_MAC PLATFORM_ID_MAC} {@link #STBTT_PLATFORM_ID_ISO PLATFORM_ID_ISO} {@link #STBTT_PLATFORM_ID_MICROSOFT PLATFORM_ID_MICROSOFT}
* @param encodingID the encoding ID. One of:
{@link #STBTT_UNICODE_EID_UNICODE_1_0 UNICODE_EID_UNICODE_1_0} {@link #STBTT_UNICODE_EID_UNICODE_1_1 UNICODE_EID_UNICODE_1_1} {@link #STBTT_UNICODE_EID_ISO_10646 UNICODE_EID_ISO_10646} {@link #STBTT_UNICODE_EID_UNICODE_2_0_BMP UNICODE_EID_UNICODE_2_0_BMP} {@link #STBTT_UNICODE_EID_UNICODE_2_0_FULL UNICODE_EID_UNICODE_2_0_FULL} {@link #STBTT_MS_EID_SYMBOL MS_EID_SYMBOL} {@link #STBTT_MS_EID_UNICODE_BMP MS_EID_UNICODE_BMP} {@link #STBTT_MS_EID_SHIFTJIS MS_EID_SHIFTJIS} {@link #STBTT_MS_EID_UNICODE_FULL MS_EID_UNICODE_FULL} {@link #STBTT_MAC_EID_ROMAN MAC_EID_ROMAN} {@link #STBTT_MAC_EID_JAPANESE MAC_EID_JAPANESE} {@link #STBTT_MAC_EID_CHINESE_TRAD MAC_EID_CHINESE_TRAD} {@link #STBTT_MAC_EID_KOREAN MAC_EID_KOREAN} {@link #STBTT_MAC_EID_ARABIC MAC_EID_ARABIC} {@link #STBTT_MAC_EID_HEBREW MAC_EID_HEBREW} {@link #STBTT_MAC_EID_GREEK MAC_EID_GREEK} {@link #STBTT_MAC_EID_RUSSIAN MAC_EID_RUSSIAN}
* @param languageID the language ID. One of:
{@link #STBTT_MS_LANG_ENGLISH MS_LANG_ENGLISH} {@link #STBTT_MS_LANG_CHINESE MS_LANG_CHINESE} {@link #STBTT_MS_LANG_DUTCH MS_LANG_DUTCH} {@link #STBTT_MS_LANG_FRENCH MS_LANG_FRENCH} {@link #STBTT_MS_LANG_GERMAN MS_LANG_GERMAN} {@link #STBTT_MS_LANG_HEBREW MS_LANG_HEBREW} {@link #STBTT_MS_LANG_ITALIAN MS_LANG_ITALIAN} {@link #STBTT_MS_LANG_JAPANESE MS_LANG_JAPANESE} {@link #STBTT_MS_LANG_KOREAN MS_LANG_KOREAN} {@link #STBTT_MS_LANG_RUSSIAN MS_LANG_RUSSIAN} {@link #STBTT_MS_LANG_SPANISH MS_LANG_SPANISH} {@link #STBTT_MS_LANG_SWEDISH MS_LANG_SWEDISH} {@link #STBTT_MAC_LANG_ENGLISH MAC_LANG_ENGLISH} {@link #STBTT_MAC_LANG_ARABIC MAC_LANG_ARABIC} {@link #STBTT_MAC_LANG_DUTCH MAC_LANG_DUTCH} {@link #STBTT_MAC_LANG_FRENCH MAC_LANG_FRENCH} {@link #STBTT_MAC_LANG_GERMAN MAC_LANG_GERMAN} {@link #STBTT_MAC_LANG_HEBREW MAC_LANG_HEBREW} {@link #STBTT_MAC_LANG_ITALIAN MAC_LANG_ITALIAN} {@link #STBTT_MAC_LANG_JAPANESE MAC_LANG_JAPANESE} {@link #STBTT_MAC_LANG_KOREAN MAC_LANG_KOREAN} {@link #STBTT_MAC_LANG_RUSSIAN MAC_LANG_RUSSIAN} {@link #STBTT_MAC_LANG_SPANISH MAC_LANG_SPANISH} {@link #STBTT_MAC_LANG_SWEDISH MAC_LANG_SWEDISH} {@link #STBTT_MAC_LANG_CHINESE_SIMPLIFIED MAC_LANG_CHINESE_SIMPLIFIED} {@link #STBTT_MAC_LANG_CHINESE_TRAD MAC_LANG_CHINESE_TRAD}
* @param nameID the name ID
*/
public static ByteBuffer stbtt_GetFontNameString(STBTTFontinfo font, int platformID, int encodingID, int languageID, int nameID) {
MemoryStack stack = stackGet(); int stackPointer = stack.getPointer();
IntBuffer length = stack.callocInt(1);
try {
long __result = nstbtt_GetFontNameString(font.address(), memAddress(length), platformID, encodingID, languageID, nameID);
return memByteBuffer(__result, length.get(0));
} finally {
stack.setPointer(stackPointer);
}
}
/** Array version of: {@link #nstbtt_GetBakedQuad} */
public static native void nstbtt_GetBakedQuad(long chardata, int pw, int ph, int char_index, float[] xpos, float[] ypos, long q, int opengl_fillrule);
/** Array version of: {@link #stbtt_GetBakedQuad GetBakedQuad} */
public static void stbtt_GetBakedQuad(STBTTBakedChar.Buffer chardata, int pw, int ph, int char_index, float[] xpos, float[] ypos, STBTTAlignedQuad q, boolean opengl_fillrule) {
if (CHECKS) {
check(chardata, char_index + 1);
check(xpos, 1);
check(ypos, 1);
}
nstbtt_GetBakedQuad(chardata.address(), pw, ph, char_index, xpos, ypos, q.address(), opengl_fillrule ? 1 : 0);
}
/** Array version of: {@link #nstbtt_GetPackedQuad} */
public static native void nstbtt_GetPackedQuad(long chardata, int pw, int ph, int char_index, float[] xpos, float[] ypos, long q, int align_to_integer);
/** Array version of: {@link #stbtt_GetPackedQuad GetPackedQuad} */
public static void stbtt_GetPackedQuad(STBTTPackedchar.Buffer chardata, int pw, int ph, int char_index, float[] xpos, float[] ypos, STBTTAlignedQuad q, boolean align_to_integer) {
if (CHECKS) {
check(chardata, char_index + 1);
check(xpos, 1);
check(ypos, 1);
}
nstbtt_GetPackedQuad(chardata.address(), pw, ph, char_index, xpos, ypos, q.address(), align_to_integer ? 1 : 0);
}
/** Array version of: {@link #nstbtt_GetFontVMetrics} */
public static native void nstbtt_GetFontVMetrics(long info, int[] ascent, int[] descent, int[] lineGap);
/** Array version of: {@link #stbtt_GetFontVMetrics GetFontVMetrics} */
public static void stbtt_GetFontVMetrics(STBTTFontinfo info, int[] ascent, int[] descent, int[] lineGap) {
if (CHECKS) {
checkSafe(ascent, 1);
checkSafe(descent, 1);
checkSafe(lineGap, 1);
}
nstbtt_GetFontVMetrics(info.address(), ascent, descent, lineGap);
}
/** Array version of: {@link #nstbtt_GetFontBoundingBox} */
public static native void nstbtt_GetFontBoundingBox(long info, int[] x0, int[] y0, int[] x1, int[] y1);
/** Array version of: {@link #stbtt_GetFontBoundingBox GetFontBoundingBox} */
public static void stbtt_GetFontBoundingBox(STBTTFontinfo info, int[] x0, int[] y0, int[] x1, int[] y1) {
if (CHECKS) {
check(x0, 1);
check(y0, 1);
check(x1, 1);
check(y1, 1);
}
nstbtt_GetFontBoundingBox(info.address(), x0, y0, x1, y1);
}
/** Array version of: {@link #nstbtt_GetCodepointHMetrics} */
public static native void nstbtt_GetCodepointHMetrics(long info, int codepoint, int[] advanceWidth, int[] leftSideBearing);
/** Array version of: {@link #stbtt_GetCodepointHMetrics GetCodepointHMetrics} */
public static void stbtt_GetCodepointHMetrics(STBTTFontinfo info, int codepoint, int[] advanceWidth, int[] leftSideBearing) {
if (CHECKS) {
checkSafe(advanceWidth, 1);
checkSafe(leftSideBearing, 1);
}
nstbtt_GetCodepointHMetrics(info.address(), codepoint, advanceWidth, leftSideBearing);
}
/** Array version of: {@link #nstbtt_GetCodepointBox} */
public static native int nstbtt_GetCodepointBox(long info, int codepoint, int[] x0, int[] y0, int[] x1, int[] y1);
/** Array version of: {@link #stbtt_GetCodepointBox GetCodepointBox} */
public static boolean stbtt_GetCodepointBox(STBTTFontinfo info, int codepoint, int[] x0, int[] y0, int[] x1, int[] y1) {
if (CHECKS) {
checkSafe(x0, 1);
checkSafe(y0, 1);
checkSafe(x1, 1);
checkSafe(y1, 1);
}
return nstbtt_GetCodepointBox(info.address(), codepoint, x0, y0, x1, y1) != 0;
}
/** Array version of: {@link #nstbtt_GetGlyphHMetrics} */
public static native void nstbtt_GetGlyphHMetrics(long info, int glyph_index, int[] advanceWidth, int[] leftSideBearing);
/** Array version of: {@link #stbtt_GetGlyphHMetrics GetGlyphHMetrics} */
public static void stbtt_GetGlyphHMetrics(STBTTFontinfo info, int glyph_index, int[] advanceWidth, int[] leftSideBearing) {
if (CHECKS) {
checkSafe(advanceWidth, 1);
checkSafe(leftSideBearing, 1);
}
nstbtt_GetGlyphHMetrics(info.address(), glyph_index, advanceWidth, leftSideBearing);
}
/** Array version of: {@link #nstbtt_GetGlyphBox} */
public static native int nstbtt_GetGlyphBox(long info, int glyph_index, int[] x0, int[] y0, int[] x1, int[] y1);
/** Array version of: {@link #stbtt_GetGlyphBox GetGlyphBox} */
public static boolean stbtt_GetGlyphBox(STBTTFontinfo info, int glyph_index, int[] x0, int[] y0, int[] x1, int[] y1) {
if (CHECKS) {
checkSafe(x0, 1);
checkSafe(y0, 1);
checkSafe(x1, 1);
checkSafe(y1, 1);
}
return nstbtt_GetGlyphBox(info.address(), glyph_index, x0, y0, x1, y1) != 0;
}
/** Array version of: {@link #nstbtt_GetCodepointBitmap} */
public static native long nstbtt_GetCodepointBitmap(long info, float scale_x, float scale_y, int codepoint, int[] width, int[] height, int[] xoff, int[] yoff);
/** Array version of: {@link #stbtt_GetCodepointBitmap GetCodepointBitmap} */
public static ByteBuffer stbtt_GetCodepointBitmap(STBTTFontinfo info, float scale_x, float scale_y, int codepoint, int[] width, int[] height, int[] xoff, int[] yoff) {
if (CHECKS) {
check(width, 1);
check(height, 1);
checkSafe(xoff, 1);
checkSafe(yoff, 1);
}
long __result = nstbtt_GetCodepointBitmap(info.address(), scale_x, scale_y, codepoint, width, height, xoff, yoff);
return memByteBuffer(__result, width[0] * height[0]);
}
/** Array version of: {@link #nstbtt_GetCodepointBitmapSubpixel} */
public static native long nstbtt_GetCodepointBitmapSubpixel(long info, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint, int[] width, int[] height, int[] xoff, int[] yoff);
/** Array version of: {@link #stbtt_GetCodepointBitmapSubpixel GetCodepointBitmapSubpixel} */
public static ByteBuffer stbtt_GetCodepointBitmapSubpixel(STBTTFontinfo info, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint, int[] width, int[] height, int[] xoff, int[] yoff) {
if (CHECKS) {
check(width, 1);
check(height, 1);
checkSafe(xoff, 1);
checkSafe(yoff, 1);
}
long __result = nstbtt_GetCodepointBitmapSubpixel(info.address(), scale_x, scale_y, shift_x, shift_y, codepoint, width, height, xoff, yoff);
return memByteBuffer(__result, width[0] * height[0]);
}
/** Array version of: {@link #nstbtt_GetCodepointBitmapBox} */
public static native void nstbtt_GetCodepointBitmapBox(long font, int codepoint, float scale_x, float scale_y, int[] ix0, int[] iy0, int[] ix1, int[] iy1);
/** Array version of: {@link #stbtt_GetCodepointBitmapBox GetCodepointBitmapBox} */
public static void stbtt_GetCodepointBitmapBox(STBTTFontinfo font, int codepoint, float scale_x, float scale_y, int[] ix0, int[] iy0, int[] ix1, int[] iy1) {
if (CHECKS) {
checkSafe(ix0, 1);
checkSafe(iy0, 1);
checkSafe(ix1, 1);
checkSafe(iy1, 1);
}
nstbtt_GetCodepointBitmapBox(font.address(), codepoint, scale_x, scale_y, ix0, iy0, ix1, iy1);
}
/** Array version of: {@link #nstbtt_GetCodepointBitmapBoxSubpixel} */
public static native void nstbtt_GetCodepointBitmapBoxSubpixel(long font, int codepoint, float scale_x, float scale_y, float shift_x, float shift_y, int[] ix0, int[] iy0, int[] ix1, int[] iy1);
/** Array version of: {@link #stbtt_GetCodepointBitmapBoxSubpixel GetCodepointBitmapBoxSubpixel} */
public static void stbtt_GetCodepointBitmapBoxSubpixel(STBTTFontinfo font, int codepoint, float scale_x, float scale_y, float shift_x, float shift_y, int[] ix0, int[] iy0, int[] ix1, int[] iy1) {
if (CHECKS) {
checkSafe(ix0, 1);
checkSafe(iy0, 1);
checkSafe(ix1, 1);
checkSafe(iy1, 1);
}
nstbtt_GetCodepointBitmapBoxSubpixel(font.address(), codepoint, scale_x, scale_y, shift_x, shift_y, ix0, iy0, ix1, iy1);
}
/** Array version of: {@link #nstbtt_GetGlyphBitmap} */
public static native long nstbtt_GetGlyphBitmap(long info, float scale_x, float scale_y, int glyph, int[] width, int[] height, int[] xoff, int[] yoff);
/** Array version of: {@link #stbtt_GetGlyphBitmap GetGlyphBitmap} */
public static ByteBuffer stbtt_GetGlyphBitmap(STBTTFontinfo info, float scale_x, float scale_y, int glyph, int[] width, int[] height, int[] xoff, int[] yoff) {
if (CHECKS) {
check(width, 1);
check(height, 1);
checkSafe(xoff, 1);
checkSafe(yoff, 1);
}
long __result = nstbtt_GetGlyphBitmap(info.address(), scale_x, scale_y, glyph, width, height, xoff, yoff);
return memByteBuffer(__result, width[0] * height[0]);
}
/** Array version of: {@link #nstbtt_GetGlyphBitmapSubpixel} */
public static native long nstbtt_GetGlyphBitmapSubpixel(long info, float scale_x, float scale_y, float shift_x, float shift_y, int glyph, int[] width, int[] height, int[] xoff, int[] yoff);
/** Array version of: {@link #stbtt_GetGlyphBitmapSubpixel GetGlyphBitmapSubpixel} */
public static ByteBuffer stbtt_GetGlyphBitmapSubpixel(STBTTFontinfo info, float scale_x, float scale_y, float shift_x, float shift_y, int glyph, int[] width, int[] height, int[] xoff, int[] yoff) {
if (CHECKS) {
check(width, 1);
check(height, 1);
checkSafe(xoff, 1);
checkSafe(yoff, 1);
}
long __result = nstbtt_GetGlyphBitmapSubpixel(info.address(), scale_x, scale_y, shift_x, shift_y, glyph, width, height, xoff, yoff);
return memByteBuffer(__result, width[0] * height[0]);
}
/** Array version of: {@link #nstbtt_GetGlyphBitmapBox} */
public static native void nstbtt_GetGlyphBitmapBox(long font, int glyph, float scale_x, float scale_y, int[] ix0, int[] iy0, int[] ix1, int[] iy1);
/** Array version of: {@link #stbtt_GetGlyphBitmapBox GetGlyphBitmapBox} */
public static void stbtt_GetGlyphBitmapBox(STBTTFontinfo font, int glyph, float scale_x, float scale_y, int[] ix0, int[] iy0, int[] ix1, int[] iy1) {
if (CHECKS) {
checkSafe(ix0, 1);
checkSafe(iy0, 1);
checkSafe(ix1, 1);
checkSafe(iy1, 1);
}
nstbtt_GetGlyphBitmapBox(font.address(), glyph, scale_x, scale_y, ix0, iy0, ix1, iy1);
}
/** Array version of: {@link #nstbtt_GetGlyphBitmapBoxSubpixel} */
public static native void nstbtt_GetGlyphBitmapBoxSubpixel(long font, int glyph, float scale_x, float scale_y, float shift_x, float shift_y, int[] ix0, int[] iy0, int[] ix1, int[] iy1);
/** Array version of: {@link #stbtt_GetGlyphBitmapBoxSubpixel GetGlyphBitmapBoxSubpixel} */
public static void stbtt_GetGlyphBitmapBoxSubpixel(STBTTFontinfo font, int glyph, float scale_x, float scale_y, float shift_x, float shift_y, int[] ix0, int[] iy0, int[] ix1, int[] iy1) {
if (CHECKS) {
checkSafe(ix0, 1);
checkSafe(iy0, 1);
checkSafe(ix1, 1);
checkSafe(iy1, 1);
}
nstbtt_GetGlyphBitmapBoxSubpixel(font.address(), glyph, scale_x, scale_y, shift_x, shift_y, ix0, iy0, ix1, iy1);
}
}