Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/curve/editfont_undo.c
| Show All 14 Lines | |||||
| */ | */ | ||||
| /** \file | /** \file | ||||
| * \ingroup edcurve | * \ingroup edcurve | ||||
| */ | */ | ||||
| #include <stdlib.h> | #include <stdlib.h> | ||||
| #include <string.h> | #include <string.h> | ||||
| #include <wchar.h> | #include <uchar.h> | ||||
| #include "MEM_guardedalloc.h" | #include "MEM_guardedalloc.h" | ||||
| #include "BLI_utildefines.h" | #include "BLI_utildefines.h" | ||||
| #include "BLI_array_utils.h" | #include "BLI_array_utils.h" | ||||
| #include "DNA_curve_types.h" | #include "DNA_curve_types.h" | ||||
| #include "DNA_object_types.h" | #include "DNA_object_types.h" | ||||
| Show All 20 Lines | |||||
| # define ARRAY_CHUNK_SIZE 32 | # define ARRAY_CHUNK_SIZE 32 | ||||
| #endif | #endif | ||||
| /* -------------------------------------------------------------------- */ | /* -------------------------------------------------------------------- */ | ||||
| /** \name Undo Conversion | /** \name Undo Conversion | ||||
| * \{ */ | * \{ */ | ||||
| typedef struct UndoFont { | typedef struct UndoFont { | ||||
| wchar_t *textbuf; | char32_t *textbuf; | ||||
| struct CharInfo *textbufinfo; | struct CharInfo *textbufinfo; | ||||
| int len, pos, selstart, selend; | int len, pos, selstart, selend; | ||||
| #ifdef USE_ARRAY_STORE | #ifdef USE_ARRAY_STORE | ||||
| struct { | struct { | ||||
| BArrayState *textbuf; | BArrayState *textbuf; | ||||
| BArrayState *textbufinfo; | BArrayState *textbufinfo; | ||||
| ▲ Show 20 Lines • Show All 158 Lines • ▼ Show 20 Lines | static void undofont_to_editfont(UndoFont *uf, Curve *cu) | ||||
| EditFont *ef = cu->editfont; | EditFont *ef = cu->editfont; | ||||
| size_t final_size; | size_t final_size; | ||||
| #ifdef USE_ARRAY_STORE | #ifdef USE_ARRAY_STORE | ||||
| uf_arraystore_expand(uf); | uf_arraystore_expand(uf); | ||||
| #endif | #endif | ||||
| final_size = sizeof(wchar_t) * (uf->len + 1); | final_size = sizeof(*ef->textbuf) * (uf->len + 1); | ||||
| memcpy(ef->textbuf, uf->textbuf, final_size); | memcpy(ef->textbuf, uf->textbuf, final_size); | ||||
| final_size = sizeof(CharInfo) * (uf->len + 1); | final_size = sizeof(CharInfo) * (uf->len + 1); | ||||
| memcpy(ef->textbufinfo, uf->textbufinfo, final_size); | memcpy(ef->textbufinfo, uf->textbufinfo, final_size); | ||||
| ef->pos = uf->pos; | ef->pos = uf->pos; | ||||
| ef->selstart = uf->selstart; | ef->selstart = uf->selstart; | ||||
| ef->selend = uf->selend; | ef->selend = uf->selend; | ||||
| Show All 9 Lines | static void *undofont_from_editfont(UndoFont *uf, Curve *cu) | ||||
| BLI_assert(BLI_array_is_zeroed(uf, 1)); | BLI_assert(BLI_array_is_zeroed(uf, 1)); | ||||
| EditFont *ef = cu->editfont; | EditFont *ef = cu->editfont; | ||||
| size_t mem_used_prev = MEM_get_memory_in_use(); | size_t mem_used_prev = MEM_get_memory_in_use(); | ||||
| size_t final_size; | size_t final_size; | ||||
| final_size = sizeof(wchar_t) * (ef->len + 1); | BLI_assert(sizeof(*uf->textbuf) == sizeof(ef->textbufinfo)); | ||||
| final_size = sizeof(*uf->textbuf) * (ef->len + 1); | |||||
| uf->textbuf = MEM_mallocN(final_size, __func__); | uf->textbuf = MEM_mallocN(final_size, __func__); | ||||
| memcpy(uf->textbuf, ef->textbuf, final_size); | memcpy(uf->textbuf, ef->textbuf, final_size); | ||||
| final_size = sizeof(CharInfo) * (ef->len + 1); | final_size = sizeof(CharInfo) * (ef->len + 1); | ||||
| uf->textbufinfo = MEM_mallocN(final_size, __func__); | uf->textbufinfo = MEM_mallocN(final_size, __func__); | ||||
| memcpy(uf->textbufinfo, ef->textbufinfo, final_size); | memcpy(uf->textbufinfo, ef->textbufinfo, final_size); | ||||
| uf->pos = ef->pos; | uf->pos = ef->pos; | ||||
| ▲ Show 20 Lines • Show All 135 Lines • Show Last 20 Lines | |||||