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:
authorBastien Montagne <montagne29@wanadoo.fr>2016-07-11 20:39:34 +0300
committerBastien Montagne <montagne29@wanadoo.fr>2016-07-11 22:30:02 +0300
commit13f0b59f1180042b07f439d36841a52a6ddcd75e (patch)
tree29c32ac5edaaf896d6f9d4ff29ecb81a1654feaa /source/blender/blenkernel/intern/particle.c
parent2ec17e655c4fdabc6251b5c81f4404451160923c (diff)
Use new generic BKE_id_expand_local() for both make_local() and copy() functions of actions, brushes and particles.
This greatly simplifies said code, once again no change expected from user PoV.
Diffstat (limited to 'source/blender/blenkernel/intern/particle.c')
-rw-r--r--source/blender/blenkernel/intern/particle.c21
1 files changed, 4 insertions, 17 deletions
diff --git a/source/blender/blenkernel/intern/particle.c b/source/blender/blenkernel/intern/particle.c
index 8c8a78941d7..8d42aae12d5 100644
--- a/source/blender/blenkernel/intern/particle.c
+++ b/source/blender/blenkernel/intern/particle.c
@@ -3312,6 +3312,7 @@ ParticleSettings *BKE_particlesettings_copy(Main *bmain, ParticleSettings *part)
int a;
partn = BKE_libblock_copy(bmain, &part->id);
+
partn->pd = MEM_dupallocN(part->pd);
partn->pd2 = MEM_dupallocN(part->pd2);
partn->effector_weights = MEM_dupallocN(part->effector_weights);
@@ -3328,12 +3329,13 @@ ParticleSettings *BKE_particlesettings_copy(Main *bmain, ParticleSettings *part)
if (part->mtex[a]) {
partn->mtex[a] = MEM_mallocN(sizeof(MTex), "psys_copy_tex");
memcpy(partn->mtex[a], part->mtex[a], sizeof(MTex));
- id_us_plus((ID *)partn->mtex[a]->tex);
}
}
BLI_duplicatelist(&partn->dupliweights, &part->dupliweights);
+ BKE_id_expand_local(&partn->id, true);
+
if (ID_IS_LINKED_DATABLOCK(part)) {
BKE_id_lib_local_paths(bmain, part->id.lib, &partn->id);
}
@@ -3341,21 +3343,6 @@ ParticleSettings *BKE_particlesettings_copy(Main *bmain, ParticleSettings *part)
return partn;
}
-static int extern_local_particlesettings_callback(
- void *UNUSED(user_data), struct ID *UNUSED(id_self), struct ID **id_pointer, int cd_flag)
-{
- /* We only tag usercounted ID usages as extern... Why? */
- if ((cd_flag & IDWALK_USER) && *id_pointer) {
- id_lib_extern(*id_pointer);
- }
- return IDWALK_RET_NOP;
-}
-
-static void expand_local_particlesettings(ParticleSettings *part)
-{
- BKE_library_foreach_ID_link(&part->id, extern_local_particlesettings_callback, NULL, 0);
-}
-
void BKE_particlesettings_make_local(Main *bmain, ParticleSettings *part)
{
bool is_local = false, is_lib = false;
@@ -3374,7 +3361,7 @@ void BKE_particlesettings_make_local(Main *bmain, ParticleSettings *part)
if (is_local) {
if (!is_lib) {
id_clear_lib_data(bmain, &part->id);
- expand_local_particlesettings(part);
+ BKE_id_expand_local(&part->id, false);
}
else {
ParticleSettings *part_new = BKE_particlesettings_copy(bmain, part);