|
|
|
@ -358,7 +358,10 @@ typedef struct |
|
|
|
|
// included just the "header" portion
|
|
|
|
|
#ifdef STB_TEXTEDIT_IMPLEMENTATION |
|
|
|
|
|
|
|
|
|
#include <string.h> // memmove |
|
|
|
|
#ifndef STBTE_memmove |
|
|
|
|
#include <string.h> |
|
|
|
|
#define STBTE_memmove memmove |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
@ -1038,13 +1041,13 @@ static void stb_textedit_discard_undo(StbUndoState *state) |
|
|
|
|
int n = state->undo_rec[0].insert_length, i; |
|
|
|
|
// delete n characters from all other records
|
|
|
|
|
state->undo_char_point = state->undo_char_point - (short) n; // vsnet05
|
|
|
|
|
memmove(state->undo_char, state->undo_char + n, (size_t) (state->undo_char_point*sizeof(STB_TEXTEDIT_CHARTYPE))); |
|
|
|
|
STBTE_memmove(state->undo_char, state->undo_char + n, (size_t) (state->undo_char_point*sizeof(STB_TEXTEDIT_CHARTYPE))); |
|
|
|
|
for (i=0; i < state->undo_point; ++i) |
|
|
|
|
if (state->undo_rec[i].char_storage >= 0) |
|
|
|
|
state->undo_rec[i].char_storage = state->undo_rec[i].char_storage - (short) n; // vsnet05 // @OPTIMIZE: get rid of char_storage and infer it
|
|
|
|
|
} |
|
|
|
|
--state->undo_point; |
|
|
|
|
memmove(state->undo_rec, state->undo_rec+1, (size_t) (state->undo_point*sizeof(state->undo_rec[0]))); |
|
|
|
|
STBTE_memmove(state->undo_rec, state->undo_rec+1, (size_t) (state->undo_point*sizeof(state->undo_rec[0]))); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -1062,13 +1065,13 @@ static void stb_textedit_discard_redo(StbUndoState *state) |
|
|
|
|
int n = state->undo_rec[k].insert_length, i; |
|
|
|
|
// delete n characters from all other records
|
|
|
|
|
state->redo_char_point = state->redo_char_point + (short) n; // vsnet05
|
|
|
|
|
memmove(state->undo_char + state->redo_char_point, state->undo_char + state->redo_char_point-n, (size_t) ((STB_TEXTEDIT_UNDOSTATECOUNT - state->redo_char_point)*sizeof(STB_TEXTEDIT_CHARTYPE))); |
|
|
|
|
STBTE_memmove(state->undo_char + state->redo_char_point, state->undo_char + state->redo_char_point-n, (size_t) ((STB_TEXTEDIT_UNDOSTATECOUNT - state->redo_char_point)*sizeof(STB_TEXTEDIT_CHARTYPE))); |
|
|
|
|
for (i=state->redo_point; i < k; ++i) |
|
|
|
|
if (state->undo_rec[i].char_storage >= 0) |
|
|
|
|
state->undo_rec[i].char_storage = state->undo_rec[i].char_storage + (short) n; // vsnet05
|
|
|
|
|
} |
|
|
|
|
++state->redo_point; |
|
|
|
|
memmove(state->undo_rec + state->redo_point-1, state->undo_rec + state->redo_point, (size_t) ((STB_TEXTEDIT_UNDOSTATECOUNT - state->redo_point)*sizeof(state->undo_rec[0]))); |
|
|
|
|
STBTE_memmove(state->undo_rec + state->redo_point-1, state->undo_rec + state->redo_point, (size_t) ((STB_TEXTEDIT_UNDOSTATECOUNT - state->redo_point)*sizeof(state->undo_rec[0]))); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|