Example #1
0
        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--;
        }
Example #3
0
        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++;
        }