Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2021-08-04 05:43:07 +0300
committerCampbell Barton <ideasman42@gmail.com>2021-08-04 05:43:07 +0300
commit5950b3ab739f0d57cdac44c57d4448c0a5dbebb2 (patch)
tree3cf5a7a0f1591a3fd441941fa03251d449cab94d /source/blender/blenloader
parent71dc134f8908cda02a3e5e5800bb9da966c10ad2 (diff)
Cleanup: de-duplicate ID renaming utility for versioning
Diffstat (limited to 'source/blender/blenloader')
-rw-r--r--source/blender/blenloader/intern/versioning_280.c53
-rw-r--r--source/blender/blenloader/intern/versioning_common.cc37
-rw-r--r--source/blender/blenloader/intern/versioning_common.h6
-rw-r--r--source/blender/blenloader/intern/versioning_defaults.c57
4 files changed, 71 insertions, 82 deletions
diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c
index af05c4b902f..93959237f29 100644
--- a/source/blender/blenloader/intern/versioning_280.c
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -111,40 +111,13 @@
#include "BLO_readfile.h"
#include "readfile.h"
+#include "versioning_common.h"
+
#include "MEM_guardedalloc.h"
/* Make preferences read-only, use versioning_userdef.c. */
#define U (*((const UserDef *)&U))
-/**
- * Rename if the ID doesn't exist.
- */
-static ID *rename_id_for_versioning(Main *bmain,
- const short id_type,
- const char *name_src,
- const char *name_dst)
-{
- /* We can ignore libraries */
- ListBase *lb = which_libbase(bmain, id_type);
- ID *id = NULL;
- LISTBASE_FOREACH (ID *, idtest, lb) {
- if (idtest->lib == NULL) {
- if (STREQ(idtest->name + 2, name_src)) {
- id = idtest;
- }
- if (STREQ(idtest->name + 2, name_dst)) {
- return NULL;
- }
- }
- }
- if (id != NULL) {
- BLI_strncpy(id->name + 2, name_dst, sizeof(id->name) - 2);
- /* We know it's unique, this just sorts. */
- BLI_libblock_ensure_unique_name(bmain, id->name);
- }
- return id;
-}
-
static bScreen *screen_parent_find(const bScreen *screen)
{
/* Can avoid lookup if screen state isn't maximized/full
@@ -1679,32 +1652,32 @@ void do_versions_after_linking_280(Main *bmain, ReportList *UNUSED(reports))
Brush *brush;
Material *ma;
/* Pen Soft brush. */
- brush = (Brush *)rename_id_for_versioning(bmain, ID_BR, "Draw Soft", "Pencil Soft");
+ brush = (Brush *)do_versions_rename_id(bmain, ID_BR, "Draw Soft", "Pencil Soft");
if (brush) {
brush->gpencil_settings->icon_id = GP_BRUSH_ICON_PEN;
}
- rename_id_for_versioning(bmain, ID_BR, "Draw Pencil", "Pencil");
- rename_id_for_versioning(bmain, ID_BR, "Draw Pen", "Pen");
- rename_id_for_versioning(bmain, ID_BR, "Draw Ink", "Ink Pen");
- rename_id_for_versioning(bmain, ID_BR, "Draw Noise", "Ink Pen Rough");
- rename_id_for_versioning(bmain, ID_BR, "Draw Marker", "Marker Bold");
- rename_id_for_versioning(bmain, ID_BR, "Draw Block", "Marker Chisel");
+ do_versions_rename_id(bmain, ID_BR, "Draw Pencil", "Pencil");
+ do_versions_rename_id(bmain, ID_BR, "Draw Pen", "Pen");
+ do_versions_rename_id(bmain, ID_BR, "Draw Ink", "Ink Pen");
+ do_versions_rename_id(bmain, ID_BR, "Draw Noise", "Ink Pen Rough");
+ do_versions_rename_id(bmain, ID_BR, "Draw Marker", "Marker Bold");
+ do_versions_rename_id(bmain, ID_BR, "Draw Block", "Marker Chisel");
ma = BLI_findstring(&bmain->materials, "Black", offsetof(ID, name) + 2);
if (ma && ma->gp_style) {
- rename_id_for_versioning(bmain, ID_MA, "Black", "Solid Stroke");
+ do_versions_rename_id(bmain, ID_MA, "Black", "Solid Stroke");
}
ma = BLI_findstring(&bmain->materials, "Red", offsetof(ID, name) + 2);
if (ma && ma->gp_style) {
- rename_id_for_versioning(bmain, ID_MA, "Red", "Squares Stroke");
+ do_versions_rename_id(bmain, ID_MA, "Red", "Squares Stroke");
}
ma = BLI_findstring(&bmain->materials, "Grey", offsetof(ID, name) + 2);
if (ma && ma->gp_style) {
- rename_id_for_versioning(bmain, ID_MA, "Grey", "Solid Fill");
+ do_versions_rename_id(bmain, ID_MA, "Grey", "Solid Fill");
}
ma = BLI_findstring(&bmain->materials, "Black Dots", offsetof(ID, name) + 2);
if (ma && ma->gp_style) {
- rename_id_for_versioning(bmain, ID_MA, "Black Dots", "Dots Stroke");
+ do_versions_rename_id(bmain, ID_MA, "Black Dots", "Dots Stroke");
}
brush = BLI_findstring(&bmain->brushes, "Pencil", offsetof(ID, name) + 2);
diff --git a/source/blender/blenloader/intern/versioning_common.cc b/source/blender/blenloader/intern/versioning_common.cc
index f5083b8e259..208c02b60d1 100644
--- a/source/blender/blenloader/intern/versioning_common.cc
+++ b/source/blender/blenloader/intern/versioning_common.cc
@@ -20,9 +20,15 @@
/* allow readfile to use deprecated functionality */
#define DNA_DEPRECATED_ALLOW
+#include <cstring>
+
#include "DNA_screen_types.h"
#include "BLI_listbase.h"
+#include "BLI_string.h"
+
+#include "BKE_lib_id.h"
+#include "BKE_main.h"
#include "MEM_guardedalloc.h"
@@ -48,3 +54,34 @@ ARegion *do_versions_add_region_if_not_found(ListBase *regionbase,
BLI_insertlinkafter(regionbase, link_after_region, new_region);
return new_region;
}
+
+/**
+ * Rename if the ID doesn't exist.
+ *
+ * \return the ID (if found).
+ */
+ID *do_versions_rename_id(Main *bmain,
+ const short id_type,
+ const char *name_src,
+ const char *name_dst)
+{
+ /* We can ignore libraries */
+ ListBase *lb = which_libbase(bmain, id_type);
+ ID *id = nullptr;
+ LISTBASE_FOREACH (ID *, idtest, lb) {
+ if (idtest->lib == nullptr) {
+ if (STREQ(idtest->name + 2, name_src)) {
+ id = idtest;
+ }
+ if (STREQ(idtest->name + 2, name_dst)) {
+ return nullptr;
+ }
+ }
+ }
+ if (id != nullptr) {
+ BLI_strncpy(id->name + 2, name_dst, sizeof(id->name) - 2);
+ /* We know it's unique, this just sorts. */
+ BLI_libblock_ensure_unique_name(bmain, id->name);
+ }
+ return id;
+}
diff --git a/source/blender/blenloader/intern/versioning_common.h b/source/blender/blenloader/intern/versioning_common.h
index a1769d4639e..47e0b74a3e4 100644
--- a/source/blender/blenloader/intern/versioning_common.h
+++ b/source/blender/blenloader/intern/versioning_common.h
@@ -22,6 +22,7 @@
struct ARegion;
struct ListBase;
+struct Main;
#ifdef __cplusplus
extern "C" {
@@ -32,6 +33,11 @@ struct ARegion *do_versions_add_region_if_not_found(struct ListBase *regionbase,
const char *name,
int link_after_region_type);
+ID *do_versions_rename_id(Main *bmain,
+ const short id_type,
+ const char *name_src,
+ const char *name_dst);
+
#ifdef __cplusplus
}
#endif
diff --git a/source/blender/blenloader/intern/versioning_defaults.c b/source/blender/blenloader/intern/versioning_defaults.c
index 8362e001ea6..7ff624b44da 100644
--- a/source/blender/blenloader/intern/versioning_defaults.c
+++ b/source/blender/blenloader/intern/versioning_defaults.c
@@ -65,38 +65,11 @@
#include "BLO_readfile.h"
+#include "versioning_common.h"
+
/* Make preferences read-only, use versioning_userdef.c. */
#define U (*((const UserDef *)&U))
-/**
- * Rename if the ID doesn't exist.
- */
-static ID *rename_id_for_versioning(Main *bmain,
- const short id_type,
- const char *name_src,
- const char *name_dst)
-{
- /* We can ignore libraries */
- ListBase *lb = which_libbase(bmain, id_type);
- ID *id = NULL;
- LISTBASE_FOREACH (ID *, idtest, lb) {
- if (idtest->lib == NULL) {
- if (STREQ(idtest->name + 2, name_src)) {
- id = idtest;
- }
- if (STREQ(idtest->name + 2, name_dst)) {
- return NULL;
- }
- }
- }
- if (id != NULL) {
- BLI_strncpy(id->name + 2, name_dst, sizeof(id->name) - 2);
- /* We know it's unique, this just sorts. */
- BLI_libblock_ensure_unique_name(bmain, id->name);
- }
- return id;
-}
-
static bool blo_is_builtin_template(const char *app_template)
{
/* For all builtin templates shipped with Blender. */
@@ -406,28 +379,28 @@ void BLO_update_defaults_startup_blend(Main *bmain, const char *app_template)
Brush *brush;
/* Pencil brush. */
- rename_id_for_versioning(bmain, ID_BR, "Draw Pencil", "Pencil");
+ do_versions_rename_id(bmain, ID_BR, "Draw Pencil", "Pencil");
/* Pen brush. */
- rename_id_for_versioning(bmain, ID_BR, "Draw Pen", "Pen");
+ do_versions_rename_id(bmain, ID_BR, "Draw Pen", "Pen");
/* Pen Soft brush. */
- brush = (Brush *)rename_id_for_versioning(bmain, ID_BR, "Draw Soft", "Pencil Soft");
+ brush = (Brush *)do_versions_rename_id(bmain, ID_BR, "Draw Soft", "Pencil Soft");
if (brush) {
brush->gpencil_settings->icon_id = GP_BRUSH_ICON_PEN;
}
/* Ink Pen brush. */
- rename_id_for_versioning(bmain, ID_BR, "Draw Ink", "Ink Pen");
+ do_versions_rename_id(bmain, ID_BR, "Draw Ink", "Ink Pen");
/* Ink Pen Rough brush. */
- rename_id_for_versioning(bmain, ID_BR, "Draw Noise", "Ink Pen Rough");
+ do_versions_rename_id(bmain, ID_BR, "Draw Noise", "Ink Pen Rough");
/* Marker Bold brush. */
- rename_id_for_versioning(bmain, ID_BR, "Draw Marker", "Marker Bold");
+ do_versions_rename_id(bmain, ID_BR, "Draw Marker", "Marker Bold");
/* Marker Chisel brush. */
- rename_id_for_versioning(bmain, ID_BR, "Draw Block", "Marker Chisel");
+ do_versions_rename_id(bmain, ID_BR, "Draw Block", "Marker Chisel");
/* Remove useless Fill Area.001 brush. */
brush = BLI_findstring(&bmain->brushes, "Fill Area.001", offsetof(ID, name) + 2);
@@ -438,10 +411,10 @@ void BLO_update_defaults_startup_blend(Main *bmain, const char *app_template)
/* Rename and fix materials and enable default object lights on. */
if (app_template && STREQ(app_template, "2D_Animation")) {
Material *ma = NULL;
- rename_id_for_versioning(bmain, ID_MA, "Black", "Solid Stroke");
- rename_id_for_versioning(bmain, ID_MA, "Red", "Squares Stroke");
- rename_id_for_versioning(bmain, ID_MA, "Grey", "Solid Fill");
- rename_id_for_versioning(bmain, ID_MA, "Black Dots", "Dots Stroke");
+ do_versions_rename_id(bmain, ID_MA, "Black", "Solid Stroke");
+ do_versions_rename_id(bmain, ID_MA, "Red", "Squares Stroke");
+ do_versions_rename_id(bmain, ID_MA, "Grey", "Solid Fill");
+ do_versions_rename_id(bmain, ID_MA, "Black Dots", "Dots Stroke");
/* Dots Stroke. */
ma = BLI_findstring(&bmain->materials, "Dots Stroke", offsetof(ID, name) + 2);
@@ -553,8 +526,8 @@ void BLO_update_defaults_startup_blend(Main *bmain, const char *app_template)
}
/* Objects */
- rename_id_for_versioning(bmain, ID_OB, "Lamp", "Light");
- rename_id_for_versioning(bmain, ID_LA, "Lamp", "Light");
+ do_versions_rename_id(bmain, ID_OB, "Lamp", "Light");
+ do_versions_rename_id(bmain, ID_LA, "Lamp", "Light");
if (app_template && STREQ(app_template, "2D_Animation")) {
for (Object *object = bmain->objects.first; object; object = object->id.next) {