diff options
author | Hans Goudey <h.goudey@me.com> | 2022-07-30 07:16:58 +0300 |
---|---|---|
committer | Hans Goudey <h.goudey@me.com> | 2022-07-30 07:22:31 +0300 |
commit | 599a7ddf1784882ae796d94f148aa2a830639bc0 (patch) | |
tree | 5b01057eeb9b57c4e5d2a1ff229b8f2f89cbbc26 /source/blender/editors/interface/interface_undo.c | |
parent | e6b1e97dd70d5cae9d6cf06256be77e0bafa6554 (diff) |
Cleanup: Move five interface files to C++
Builds on all four platforms on the buildbot. Includes clang tidy fixes.
Diffstat (limited to 'source/blender/editors/interface/interface_undo.c')
-rw-r--r-- | source/blender/editors/interface/interface_undo.c | 112 |
1 files changed, 0 insertions, 112 deletions
diff --git a/source/blender/editors/interface/interface_undo.c b/source/blender/editors/interface/interface_undo.c deleted file mode 100644 index e998eb6dbed..00000000000 --- a/source/blender/editors/interface/interface_undo.c +++ /dev/null @@ -1,112 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-or-later - * Copyright 2020 Blender Foundation. All rights reserved. */ - -/** \file - * \ingroup edinterface - * - * Undo stack to use for UI widgets that manage their own editing state. - */ - -#include <string.h> - -#include "BLI_listbase.h" - -#include "DNA_listBase.h" - -#include "MEM_guardedalloc.h" - -#include "interface_intern.h" - -/* -------------------------------------------------------------------- */ -/** \name Text Field Undo Stack - * \{ */ - -typedef struct uiUndoStack_Text_State { - struct uiUndoStack_Text_State *next, *prev; - int cursor_index; - char text[0]; -} uiUndoStack_Text_State; - -typedef struct uiUndoStack_Text { - ListBase states; - uiUndoStack_Text_State *current; -} uiUndoStack_Text; - -static const char *ui_textedit_undo_impl(uiUndoStack_Text *stack, int *r_cursor_index) -{ - /* Don't undo if no data has been pushed yet. */ - if (stack->current == NULL) { - return NULL; - } - - /* Travel backwards in the stack and copy information to the caller. */ - if (stack->current->prev != NULL) { - stack->current = stack->current->prev; - - *r_cursor_index = stack->current->cursor_index; - return stack->current->text; - } - return NULL; -} - -static const char *ui_textedit_redo_impl(uiUndoStack_Text *stack, int *r_cursor_index) -{ - /* Don't redo if no data has been pushed yet. */ - if (stack->current == NULL) { - return NULL; - } - - /* Only redo if new data has not been entered since the last undo. */ - if (stack->current->next) { - stack->current = stack->current->next; - - *r_cursor_index = stack->current->cursor_index; - return stack->current->text; - } - return NULL; -} - -const char *ui_textedit_undo(uiUndoStack_Text *stack, int direction, int *r_cursor_index) -{ - BLI_assert(ELEM(direction, -1, 1)); - if (direction < 0) { - return ui_textedit_undo_impl(stack, r_cursor_index); - } - return ui_textedit_redo_impl(stack, r_cursor_index); -} - -void ui_textedit_undo_push(uiUndoStack_Text *stack, const char *text, int cursor_index) -{ - /* Clear all redo actions from the current state. */ - if (stack->current != NULL) { - while (stack->current->next) { - uiUndoStack_Text_State *state = stack->current->next; - BLI_remlink(&stack->states, state); - MEM_freeN(state); - } - } - - /* Create the new state. */ - const int text_size = strlen(text) + 1; - stack->current = MEM_mallocN(sizeof(uiUndoStack_Text_State) + text_size, __func__); - stack->current->cursor_index = cursor_index; - memcpy(stack->current->text, text, text_size); - BLI_addtail(&stack->states, stack->current); -} - -uiUndoStack_Text *ui_textedit_undo_stack_create(void) -{ - uiUndoStack_Text *stack = MEM_mallocN(sizeof(uiUndoStack_Text), __func__); - stack->current = NULL; - BLI_listbase_clear(&stack->states); - - return stack; -} - -void ui_textedit_undo_stack_destroy(uiUndoStack_Text *stack) -{ - BLI_freelistN(&stack->states); - MEM_freeN(stack); -} - -/** \} */ |