public static void nk_textedit_undo(nk_text_edit state) { nk_text_undo_state s = state.Undo; nk_text_undo_record u = new nk_text_undo_record(); if ((s.undo_point) == (0)) { return; } u = (nk_text_undo_record)(s.undo_rec[s.undo_point - 1]); fixed(nk_text_undo_record *r2 = s.undo_rec) { var r = r2 + s.redo_point - 1; r->char_storage = (short)(-1); r->insert_length = (short)(u.delete_length); r->delete_length = (short)(u.insert_length); r->where = (int)(u.where); if ((u.delete_length) != 0) { if ((s.undo_char_point + u.delete_length) >= (999)) { r->insert_length = (short)(0); } else { int i; while ((s.undo_char_point + u.delete_length) > (s.redo_char_point)) { nk_textedit_discard_redo(s); if ((s.redo_point) == (99)) { return; } } r = r2 + s.redo_point - 1; r->char_storage = ((short)(s.redo_char_point - u.delete_length)); s.redo_char_point = ((short)(s.redo_char_point - u.delete_length)); for (i = (int)(0); (i) < (u.delete_length); ++i) { s.undo_char[r->char_storage + i] = (char)(state.Text[(int)(u.where + i)]); } } state.Text.remove_at((int)(u.where), (int)(u.delete_length)); } } if ((u.insert_length) != 0) { state.Text.insert_at((int)(u.where), s.undo_char, u.char_storage, (int)(u.insert_length)); s.undo_char_point = ((short)(s.undo_char_point - u.insert_length)); } state.Cursor = (int)((short)(u.where + u.insert_length)); s.undo_point--; s.redo_point--; }
public static void nk_textedit_undo(nk_text_edit state) { NkTextUndoState s = state.undo; nk_text_undo_record u = new nk_text_undo_record(); nk_text_undo_record *r; if ((s.UndoPoint) == (0)) { return; } u = (nk_text_undo_record)(s.UndoRec[s.UndoPoint - 1]); r = (nk_text_undo_record *)s.UndoRec + s.RedoPoint - 1; r->char_storage = (short)(-1); r->insert_length = (short)(u.delete_length); r->delete_length = (short)(u.insert_length); r->where = (int)(u.where); if ((u.delete_length) != 0) { if ((s.UndoCharPoint + u.delete_length) >= (999)) { r->insert_length = (short)(0); } else { int i; while ((s.UndoCharPoint + u.delete_length) > (s.RedoCharPoint)) { nk_textedit_discard_redo(s); if ((s.RedoPoint) == (99)) { return; } } r = (nk_text_undo_record *)s.UndoRec + s.RedoPoint - 1; r->char_storage = ((short)(s.RedoCharPoint - u.delete_length)); s.RedoCharPoint = ((short)(s.RedoCharPoint - u.delete_length)); for (i = (int)(0); (i) < (u.delete_length); ++i) { s.UndoChar[r->char_storage + i] = (char)(state._string_[(int)(u.where + i)]); } } state._string_.remove_at((int)(u.where), (int)(u.delete_length)); } if ((u.insert_length) != 0) { state._string_.insert_at((int)(u.where), (char *)s.UndoChar + u.char_storage, (int)(u.insert_length)); s.UndoCharPoint = ((short)(s.UndoCharPoint - u.insert_length)); } state.cursor = (int)((short)(u.where + u.insert_length)); s.UndoPoint--; s.RedoPoint--; }
public static void nk_textedit_redo(nk_text_edit state) { nk_text_undo_state s = state.Undo; nk_text_undo_record *u; nk_text_undo_record r = new nk_text_undo_record(); if ((s.redo_point) == (99)) { return; fixed(nk_text_undo_record *u2 = s.undo_rec) { u = u2 + s.undo_point; r = (nk_text_undo_record)(s.undo_rec[s.redo_point]); u->delete_length = (short)(r.insert_length); u->insert_length = (short)(r.delete_length); u->where = (int)(r.where); u->char_storage = (short)(-1); if ((r.delete_length) != 0) { if ((s.undo_char_point + u->insert_length) > (s.redo_char_point)) { u->insert_length = (short)(0); u->delete_length = (short)(0); } else { int i; u->char_storage = (short)(s.undo_char_point); s.undo_char_point = ((short)(s.undo_char_point + u->insert_length)); for (i = (int)(0); (i) < (u->insert_length); ++i) { s.undo_char[u->char_storage + i] = (char)(state.Text[(int)(u->where + i)]); } } state.Text.remove_at((int)(r.where), (int)(r.delete_length)); } } if ((r.insert_length) != 0) { state.Text.insert_at((int)(r.where), s.undo_char, r.char_storage, (int)(r.insert_length)); } state.Cursor = (int)(r.where + r.insert_length); s.undo_point++; s.redo_point++; }
public static void nk_textedit_redo(nk_text_edit state) { NkTextUndoState s = state.undo; nk_text_undo_record *u; nk_text_undo_record r = new nk_text_undo_record(); if ((s.RedoPoint) == (99)) { return; } u = (nk_text_undo_record *)s.UndoRec + s.UndoPoint; r = (nk_text_undo_record)(s.UndoRec[s.RedoPoint]); u->delete_length = (short)(r.insert_length); u->insert_length = (short)(r.delete_length); u->where = (int)(r.where); u->char_storage = (short)(-1); if ((r.delete_length) != 0) { if ((s.UndoCharPoint + u->insert_length) > (s.RedoCharPoint)) { u->insert_length = (short)(0); u->delete_length = (short)(0); } else { int i; u->char_storage = (short)(s.UndoCharPoint); s.UndoCharPoint = ((short)(s.UndoCharPoint + u->insert_length)); for (i = (int)(0); (i) < (u->insert_length); ++i) { s.UndoChar[u->char_storage + i] = (char)(state._string_[(int)(u->where + i)]); } } state._string_.remove_at((int)(r.where), (int)(r.delete_length)); } if ((r.insert_length) != 0) { state._string_.insert_at((int)(r.where), (char *)s.UndoChar + r.char_storage, (int)(r.insert_length)); } state.cursor = (int)(r.where + r.insert_length); s.UndoPoint++; s.RedoPoint++; }