You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
232 lines
9.4 KiB
232 lines
9.4 KiB
#define STB_IMAGE_WRITE_STATIC |
|
#define STBIWDEF static inline |
|
|
|
#include "stb_image.h" |
|
#include "stb_rect_pack.h" |
|
#include "stb_truetype.h" |
|
#include "stb_image_write.h" |
|
#include "stb_perlin.h" |
|
#include "stb_dxt.h" |
|
#include "stb_divide.h" |
|
#include "stb_herringbone_wang_tile.h" |
|
#include "stb_ds.h" |
|
#include "stb_hexwave.h" |
|
|
|
#include "stb_sprintf.h" |
|
#define STB_SPRINTF_IMPLEMENTATION |
|
#include "stb_sprintf.h" |
|
|
|
|
|
#define STB_IMAGE_WRITE_IMPLEMENTATION |
|
#define STB_TRUETYPE_IMPLEMENTATION |
|
#define STB_PERLIN_IMPLEMENTATION |
|
#define STB_DXT_IMPLEMENATION |
|
#define STB_C_LEXER_IMPLEMENTATIOn |
|
#define STB_DIVIDE_IMPLEMENTATION |
|
#define STB_IMAGE_IMPLEMENTATION |
|
#define STB_HERRINGBONE_WANG_TILE_IMPLEMENTATION |
|
#define STB_RECT_PACK_IMPLEMENTATION |
|
#define STB_VOXEL_RENDER_IMPLEMENTATION |
|
#define STB_CONNECTED_COMPONENTS_IMPLEMENTATION |
|
#define STB_HEXWAVE_IMPLEMENTATION |
|
#define STB_DS_IMPLEMENTATION |
|
#define STBDS_UNIT_TESTS |
|
|
|
#define STBI_MALLOC my_malloc |
|
#define STBI_FREE my_free |
|
#define STBI_REALLOC my_realloc |
|
|
|
void *my_malloc(size_t) { return 0; } |
|
void *my_realloc(void *, size_t) { return 0; } |
|
void my_free(void *) { } |
|
|
|
#include "stb_image.h" |
|
#include "stb_rect_pack.h" |
|
#include "stb_truetype.h" |
|
#include "stb_image_write.h" |
|
#include "stb_perlin.h" |
|
#include "stb_dxt.h" |
|
#include "stb_c_lexer.h" |
|
#include "stb_divide.h" |
|
#include "stb_herringbone_wang_tile.h" |
|
#include "stb_ds.h" |
|
#include "stb_hexwave.h" |
|
|
|
#define STBCC_GRID_COUNT_X_LOG2 10 |
|
#define STBCC_GRID_COUNT_Y_LOG2 10 |
|
#include "stb_connected_components.h" |
|
|
|
#define STBVOX_CONFIG_MODE 1 |
|
#include "stb_voxel_render.h" |
|
|
|
#define STBTE_DRAW_RECT(x0,y0,x1,y1,color) do ; while(0) |
|
#define STBTE_DRAW_TILE(x,y,id,highlight,data) do ; while(0) |
|
#define STB_TILEMAP_EDITOR_IMPLEMENTATION |
|
#include "stb_tilemap_editor.h" |
|
|
|
#include "stb_easy_font.h" |
|
|
|
#define STB_LEAKCHECK_IMPLEMENTATION |
|
#include "stb_leakcheck.h" |
|
|
|
#define STB_IMAGE_RESIZE_IMPLEMENTATION |
|
#include "stb_image_resize.h" |
|
|
|
//#include "stretchy_buffer.h" // deprecating |
|
|
|
|
|
// avoid unused-function complaints |
|
void dummy2(void) |
|
{ |
|
stb_easy_font_spacing(1.0); |
|
stb_easy_font_print(0,0,NULL,NULL,NULL,0); |
|
stb_easy_font_width(NULL); |
|
stb_easy_font_height(NULL); |
|
} |
|
|
|
|
|
//////////////////////////////////////////////////////////// |
|
// |
|
// text edit |
|
|
|
#include <stdlib.h> |
|
#include <string.h> // memmove |
|
#include <ctype.h> // isspace |
|
|
|
#define STB_TEXTEDIT_CHARTYPE char |
|
#define STB_TEXTEDIT_STRING text_control |
|
|
|
// get the base type |
|
#include "stb_textedit.h" |
|
|
|
// define our editor structure |
|
typedef struct |
|
{ |
|
char *string; |
|
int stringlen; |
|
STB_TexteditState state; |
|
} text_control; |
|
|
|
// define the functions we need |
|
void layout_func(StbTexteditRow *row, STB_TEXTEDIT_STRING *str, int start_i) |
|
{ |
|
int remaining_chars = str->stringlen - start_i; |
|
row->num_chars = remaining_chars > 20 ? 20 : remaining_chars; // should do real word wrap here |
|
row->x0 = 0; |
|
row->x1 = 20; // need to account for actual size of characters |
|
row->baseline_y_delta = 1.25; |
|
row->ymin = -1; |
|
row->ymax = 0; |
|
} |
|
|
|
int delete_chars(STB_TEXTEDIT_STRING *str, int pos, int num) |
|
{ |
|
memmove(&str->string[pos], &str->string[pos+num], str->stringlen - (pos+num)); |
|
str->stringlen -= num; |
|
return 1; // always succeeds |
|
} |
|
|
|
int insert_chars(STB_TEXTEDIT_STRING *str, int pos, STB_TEXTEDIT_CHARTYPE *newtext, int num) |
|
{ |
|
str->string = (char *) realloc(str->string, str->stringlen + num); |
|
memmove(&str->string[pos+num], &str->string[pos], str->stringlen - pos); |
|
memcpy(&str->string[pos], newtext, num); |
|
str->stringlen += num; |
|
return 1; // always succeeds |
|
} |
|
|
|
// define all the #defines needed |
|
|
|
#define KEYDOWN_BIT 0x40000000 |
|
|
|
#define STB_TEXTEDIT_STRINGLEN(tc) ((tc)->stringlen) |
|
#define STB_TEXTEDIT_LAYOUTROW layout_func |
|
#define STB_TEXTEDIT_GETWIDTH(tc,n,i) (1) // quick hack for monospaced |
|
#define STB_TEXTEDIT_KEYTOTEXT(key) (((key) & KEYDOWN_BIT) ? 0 : (key)) |
|
#define STB_TEXTEDIT_GETCHAR(tc,i) ((tc)->string[i]) |
|
#define STB_TEXTEDIT_NEWLINE '\n' |
|
#define STB_TEXTEDIT_IS_SPACE(ch) isspace(ch) |
|
#define STB_TEXTEDIT_DELETECHARS delete_chars |
|
#define STB_TEXTEDIT_INSERTCHARS insert_chars |
|
|
|
#define STB_TEXTEDIT_K_SHIFT 0x20000000 |
|
#define STB_TEXTEDIT_K_CONTROL 0x10000000 |
|
#define STB_TEXTEDIT_K_LEFT (KEYDOWN_BIT | 1) // actually use VK_LEFT, SDLK_LEFT, etc |
|
#define STB_TEXTEDIT_K_RIGHT (KEYDOWN_BIT | 2) // VK_RIGHT |
|
#define STB_TEXTEDIT_K_UP (KEYDOWN_BIT | 3) // VK_UP |
|
#define STB_TEXTEDIT_K_DOWN (KEYDOWN_BIT | 4) // VK_DOWN |
|
#define STB_TEXTEDIT_K_LINESTART (KEYDOWN_BIT | 5) // VK_HOME |
|
#define STB_TEXTEDIT_K_LINEEND (KEYDOWN_BIT | 6) // VK_END |
|
#define STB_TEXTEDIT_K_TEXTSTART (STB_TEXTEDIT_K_LINESTART | STB_TEXTEDIT_K_CONTROL) |
|
#define STB_TEXTEDIT_K_TEXTEND (STB_TEXTEDIT_K_LINEEND | STB_TEXTEDIT_K_CONTROL) |
|
#define STB_TEXTEDIT_K_DELETE (KEYDOWN_BIT | 7) // VK_DELETE |
|
#define STB_TEXTEDIT_K_BACKSPACE (KEYDOWN_BIT | 8) // VK_BACKSPACE |
|
#define STB_TEXTEDIT_K_UNDO (KEYDOWN_BIT | STB_TEXTEDIT_K_CONTROL | 'z') |
|
#define STB_TEXTEDIT_K_REDO (KEYDOWN_BIT | STB_TEXTEDIT_K_CONTROL | 'y') |
|
#define STB_TEXTEDIT_K_INSERT (KEYDOWN_BIT | 9) // VK_INSERT |
|
#define STB_TEXTEDIT_K_WORDLEFT (STB_TEXTEDIT_K_LEFT | STB_TEXTEDIT_K_CONTROL) |
|
#define STB_TEXTEDIT_K_WORDRIGHT (STB_TEXTEDIT_K_RIGHT | STB_TEXTEDIT_K_CONTROL) |
|
#define STB_TEXTEDIT_K_PGUP (KEYDOWN_BIT | 10) // VK_PGUP -- not implemented |
|
#define STB_TEXTEDIT_K_PGDOWN (KEYDOWN_BIT | 11) // VK_PGDOWN -- not implemented |
|
|
|
#define STB_TEXTEDIT_IMPLEMENTATION |
|
#include "stb_textedit.h" |
|
|
|
|
|
void dummy3(void) |
|
{ |
|
stb_textedit_click(0,0,0,0); |
|
stb_textedit_drag(0,0,0,0); |
|
stb_textedit_cut(0,0); |
|
stb_textedit_key(0,0,0); |
|
stb_textedit_initialize_state(0,0); |
|
stb_textedit_paste(0,0,0,0); |
|
} |
|
|
|
#define STB_C_LEX_C_DECIMAL_INTS Y // "0|[1-9][0-9]*" CLEX_intlit |
|
#define STB_C_LEX_C_HEX_INTS Y // "0x[0-9a-fA-F]+" CLEX_intlit |
|
#define STB_C_LEX_C_OCTAL_INTS Y // "[0-7]+" CLEX_intlit |
|
#define STB_C_LEX_C_DECIMAL_FLOATS Y // "[0-9]*(.[0-9]*([eE][-+]?[0-9]+)?) CLEX_floatlit |
|
#define STB_C_LEX_C99_HEX_FLOATS N // "0x{hex}+(.{hex}*)?[pP][-+]?{hex}+ CLEX_floatlit |
|
#define STB_C_LEX_C_IDENTIFIERS Y // "[_a-zA-Z][_a-zA-Z0-9]*" CLEX_id |
|
#define STB_C_LEX_C_DQ_STRINGS Y // double-quote-delimited strings with escapes CLEX_dqstring |
|
#define STB_C_LEX_C_SQ_STRINGS N // single-quote-delimited strings with escapes CLEX_ssstring |
|
#define STB_C_LEX_C_CHARS Y // single-quote-delimited character with escape CLEX_charlits |
|
#define STB_C_LEX_C_COMMENTS Y // "/* comment */" |
|
#define STB_C_LEX_CPP_COMMENTS Y // "// comment to end of line\n" |
|
#define STB_C_LEX_C_COMPARISONS Y // "==" CLEX_eq "!=" CLEX_noteq "<=" CLEX_lesseq ">=" CLEX_greatereq |
|
#define STB_C_LEX_C_LOGICAL Y // "&&" CLEX_andand "||" CLEX_oror |
|
#define STB_C_LEX_C_SHIFTS Y // "<<" CLEX_shl ">>" CLEX_shr |
|
#define STB_C_LEX_C_INCREMENTS Y // "++" CLEX_plusplus "--" CLEX_minusminus |
|
#define STB_C_LEX_C_ARROW Y // "->" CLEX_arrow |
|
#define STB_C_LEX_EQUAL_ARROW N // "=>" CLEX_eqarrow |
|
#define STB_C_LEX_C_BITWISEEQ Y // "&=" CLEX_andeq "|=" CLEX_oreq "^=" CLEX_xoreq |
|
#define STB_C_LEX_C_ARITHEQ Y // "+=" CLEX_pluseq "-=" CLEX_minuseq |
|
// "*=" CLEX_muleq "/=" CLEX_diveq "%=" CLEX_modeq |
|
// if both STB_C_LEX_SHIFTS & STB_C_LEX_ARITHEQ: |
|
// "<<=" CLEX_shleq ">>=" CLEX_shreq |
|
|
|
#define STB_C_LEX_PARSE_SUFFIXES N // letters after numbers are parsed as part of those numbers, and must be in suffix list below |
|
#define STB_C_LEX_DECIMAL_SUFFIXES "" // decimal integer suffixes e.g. "uUlL" -- these are returned as-is in string storage |
|
#define STB_C_LEX_HEX_SUFFIXES "" // e.g. "uUlL" |
|
#define STB_C_LEX_OCTAL_SUFFIXES "" // e.g. "uUlL" |
|
#define STB_C_LEX_FLOAT_SUFFIXES "" // |
|
|
|
#define STB_C_LEX_0_IS_EOF Y // if Y, ends parsing at '\0'; if N, returns '\0' as token |
|
#define STB_C_LEX_INTEGERS_AS_DOUBLES N // parses integers as doubles so they can be larger than 'int', but only if STB_C_LEX_STDLIB==N |
|
#define STB_C_LEX_MULTILINE_DSTRINGS N // allow newlines in double-quoted strings |
|
#define STB_C_LEX_MULTILINE_SSTRINGS N // allow newlines in single-quoted strings |
|
#define STB_C_LEX_USE_STDLIB Y // use strtod,strtol for parsing #s; otherwise inaccurate hack |
|
#define STB_C_LEX_DOLLAR_IDENTIFIER Y // allow $ as an identifier character |
|
#define STB_C_LEX_FLOAT_NO_DECIMAL Y // allow floats that have no decimal point if they have an exponent |
|
|
|
#define STB_C_LEX_DEFINE_ALL_TOKEN_NAMES N // if Y, all CLEX_ token names are defined, even if never returned |
|
// leaving it as N should help you catch config bugs |
|
|
|
#define STB_C_LEX_DISCARD_PREPROCESSOR Y // discard C-preprocessor directives (e.g. after prepocess |
|
// still have #line, #pragma, etc) |
|
|
|
//#define STB_C_LEX_ISWHITE(str) ... // return length in bytes of whitespace characters if first char is whitespace |
|
|
|
#define STB_C_LEXER_DEFINITIONS // This line prevents the header file from replacing your definitions |
|
#include "stb_c_lexer.h"
|
|
|