stb_textedit: allow overriding key-input typedef
This commit is contained in:
parent
d808adb77f
commit
3f01acced4
@ -1,4 +1,4 @@
|
|||||||
// stb_textedit.h - v1.11 - public domain - Sean Barrett
|
// stb_textedit.h - v1.12 - public domain - Sean Barrett
|
||||||
// Development of this library was sponsored by RAD Game Tools
|
// Development of this library was sponsored by RAD Game Tools
|
||||||
//
|
//
|
||||||
// This C header file implements the guts of a multi-line text-editing
|
// This C header file implements the guts of a multi-line text-editing
|
||||||
@ -29,6 +29,7 @@
|
|||||||
//
|
//
|
||||||
// VERSION HISTORY
|
// VERSION HISTORY
|
||||||
//
|
//
|
||||||
|
// 1.12 (2018-01-29) user can change STB_TEXTEDIT_KEYTYPE
|
||||||
// 1.11 (2017-03-03) fix HOME on last line, dragging off single-line textfield
|
// 1.11 (2017-03-03) fix HOME on last line, dragging off single-line textfield
|
||||||
// 1.10 (2016-10-25) supress warnings about casting away const with -Wcast-qual
|
// 1.10 (2016-10-25) supress warnings about casting away const with -Wcast-qual
|
||||||
// 1.9 (2016-08-27) customizable move-by-word
|
// 1.9 (2016-08-27) customizable move-by-word
|
||||||
@ -198,7 +199,7 @@
|
|||||||
// void stb_textedit_drag(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, float x, float y)
|
// void stb_textedit_drag(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, float x, float y)
|
||||||
// int stb_textedit_cut(STB_TEXTEDIT_STRING *str, STB_TexteditState *state)
|
// int stb_textedit_cut(STB_TEXTEDIT_STRING *str, STB_TexteditState *state)
|
||||||
// int stb_textedit_paste(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, STB_TEXTEDIT_CHARTYPE *text, int len)
|
// int stb_textedit_paste(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, STB_TEXTEDIT_CHARTYPE *text, int len)
|
||||||
// void stb_textedit_key(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, int key)
|
// void stb_textedit_key(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, STB_TEXEDIT_KEYTYPE key)
|
||||||
//
|
//
|
||||||
// Each of these functions potentially updates the string and updates the
|
// Each of these functions potentially updates the string and updates the
|
||||||
// state.
|
// state.
|
||||||
@ -232,7 +233,9 @@
|
|||||||
// inputs, set a high bit to distinguish the two; then you can define the
|
// inputs, set a high bit to distinguish the two; then you can define the
|
||||||
// various definitions like STB_TEXTEDIT_K_LEFT have the is-key-event bit
|
// various definitions like STB_TEXTEDIT_K_LEFT have the is-key-event bit
|
||||||
// set, and make STB_TEXTEDIT_KEYTOCHAR check that the is-key-event bit is
|
// set, and make STB_TEXTEDIT_KEYTOCHAR check that the is-key-event bit is
|
||||||
// clear.
|
// clear. STB_TEXTEDIT_KEYTYPE defaults to int, but you can #define it to
|
||||||
|
// anything other type you wante before including.
|
||||||
|
//
|
||||||
//
|
//
|
||||||
// When rendering, you can read the cursor position and selection state from
|
// When rendering, you can read the cursor position and selection state from
|
||||||
// the STB_TexteditState.
|
// the STB_TexteditState.
|
||||||
@ -711,8 +714,12 @@ static int stb_textedit_paste_internal(STB_TEXTEDIT_STRING *str, STB_TexteditSta
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef STB_TEXTEDIT_KEYTYPE
|
||||||
|
#define STB_TEXTEDIT_KEYTYPE int
|
||||||
|
#endif
|
||||||
|
|
||||||
// API key: process a keyboard input
|
// API key: process a keyboard input
|
||||||
static void stb_textedit_key(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, int key)
|
static void stb_textedit_key(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, STB_TEXTEDIT_KEYTYPE key)
|
||||||
{
|
{
|
||||||
retry:
|
retry:
|
||||||
switch (key) {
|
switch (key) {
|
||||||
|
@ -162,7 +162,7 @@
|
|||||||
// measurement for describing font size, defined as 72 points per inch.
|
// measurement for describing font size, defined as 72 points per inch.
|
||||||
// stb_truetype provides a point API for compatibility. However, true
|
// stb_truetype provides a point API for compatibility. However, true
|
||||||
// "per inch" conventions don't make much sense on computer displays
|
// "per inch" conventions don't make much sense on computer displays
|
||||||
// since they different monitors have different number of pixels per
|
// since different monitors have different number of pixels per
|
||||||
// inch. For example, Windows traditionally uses a convention that
|
// inch. For example, Windows traditionally uses a convention that
|
||||||
// there are 96 pixels per inch, thus making 'inch' measurements have
|
// there are 96 pixels per inch, thus making 'inch' measurements have
|
||||||
// nothing to do with inches, and thus effectively defining a point to
|
// nothing to do with inches, and thus effectively defining a point to
|
||||||
@ -172,6 +172,39 @@
|
|||||||
// for non-commercial fonts, thus making fonts scaled in points
|
// for non-commercial fonts, thus making fonts scaled in points
|
||||||
// according to the TrueType spec incoherently sized in practice.
|
// according to the TrueType spec incoherently sized in practice.
|
||||||
//
|
//
|
||||||
|
// DETAILED USAGE:
|
||||||
|
//
|
||||||
|
// Scale:
|
||||||
|
// Select how high you want the font to be, in points or pixels.
|
||||||
|
// Call ScaleForPixelHeight or ScaleForMappingEmToPixels to compute
|
||||||
|
// a scale factor SF that will be used by all other functions.
|
||||||
|
//
|
||||||
|
// Baseline:
|
||||||
|
// You need to select a y-coordinate that is the baseline of where
|
||||||
|
// your text will appear. Call GetFontBoundingBox to get the baseline-relative
|
||||||
|
// bounding box for all characters. SF*-y0 will be the distance in pixels
|
||||||
|
// that the worst-case character could extend above the baseline, so if
|
||||||
|
// you want the top edge of characters to appear at the top of the
|
||||||
|
// screen where y=0, then you would set the baseline to SF*-y0.
|
||||||
|
//
|
||||||
|
// Current point:
|
||||||
|
// Set the current point where the first character will appear. The
|
||||||
|
// first character could extend left of the current point; this is font
|
||||||
|
// dependent. You can either choose a current point that is the leftmost
|
||||||
|
// point and hope, or add some padding, or check the bounding box or
|
||||||
|
// left-side-bearing of the first character to be displayed and set
|
||||||
|
// the current point based on that.
|
||||||
|
//
|
||||||
|
// Displaying a character:
|
||||||
|
// Compute the bounding box of the character. It will contain signed values
|
||||||
|
// relative to <current_point, baseline>. I.e. if it returns x0,y0,x1,y1,
|
||||||
|
// then the character should be displayed in the rectangle from
|
||||||
|
// <current_point+SF*x0, baseline+SF*y0> to <current_point+SF*x1,baseline+SF*y1).
|
||||||
|
//
|
||||||
|
// Advancing for the next character:
|
||||||
|
// Call GlyphHMetrics, and compute 'current_point += SF * advance'.
|
||||||
|
//
|
||||||
|
//
|
||||||
// ADVANCED USAGE
|
// ADVANCED USAGE
|
||||||
//
|
//
|
||||||
// Quality:
|
// Quality:
|
||||||
|
Loading…
Reference in New Issue
Block a user