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>2015-11-09 22:59:42 +0300
committerBastien Montagne <montagne29@wanadoo.fr>2015-11-09 23:00:53 +0300
commit9c6fe810a3cae2a5498f5760822b7a7e4a82bf4f (patch)
treefae726eb9d43fe1bf587bd952506954efd7268e4 /source/blender/blenkernel
parentf761ae8f116909f1d5c92398f8a4812a5fad8ca4 (diff)
Fake user: add BKE_library helpers to set/clear that flag.
Since it also involves usercount manipulation, safer and cleaner to do it in BKE_library...
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r--source/blender/blenkernel/BKE_library.h2
-rw-r--r--source/blender/blenkernel/intern/brush.c17
-rw-r--r--source/blender/blenkernel/intern/library.c21
-rw-r--r--source/blender/blenkernel/intern/mask.c12
-rw-r--r--source/blender/blenkernel/intern/paint.c2
5 files changed, 28 insertions, 26 deletions
diff --git a/source/blender/blenkernel/BKE_library.h b/source/blender/blenkernel/BKE_library.h
index e11e9496b21..e27198add4c 100644
--- a/source/blender/blenkernel/BKE_library.h
+++ b/source/blender/blenkernel/BKE_library.h
@@ -64,6 +64,8 @@ void BKE_library_filepath_set(struct Library *lib, const char *filepath);
void id_us_ensure_real(struct ID *id);
void id_us_plus(struct ID *id);
void id_us_min(struct ID *id);
+void id_fake_user_set(struct ID *id);
+void id_fake_user_clear(struct ID *id);
bool id_make_local(struct ID *id, bool test);
bool id_single_user(struct bContext *C, struct ID *id, struct PointerRNA *ptr, struct PropertyRNA *prop);
diff --git a/source/blender/blenkernel/intern/brush.c b/source/blender/blenkernel/intern/brush.c
index 201750df5a7..92ab4d745c1 100644
--- a/source/blender/blenkernel/intern/brush.c
+++ b/source/blender/blenkernel/intern/brush.c
@@ -136,7 +136,7 @@ void BKE_brush_init(Brush *brush)
BLI_assert(MEMCMP_STRUCT_OFS_IS_ZERO(brush, id));
/* enable fake user by default */
- brush->id.flag |= LIB_FAKEUSER;
+ id_fake_user_set(&brush->id);
brush_defaults(brush);
@@ -193,11 +193,8 @@ Brush *BKE_brush_copy(Brush *brush)
brushn->curve = curvemapping_copy(brush->curve);
/* enable fake user by default */
- if (!(brushn->id.flag & LIB_FAKEUSER)) {
- brushn->id.flag |= LIB_FAKEUSER;
- id_us_plus(&brushn->id);
- }
-
+ id_fake_user_set(&brush->id);
+
if (brush->id.lib) {
BKE_id_lib_local_paths(G.main, brush->id.lib, &brushn->id);
}
@@ -280,15 +277,11 @@ void BKE_brush_make_local(Brush *brush)
extern_local_brush(brush);
/* enable fake user by default */
- if (!(brush->id.flag & LIB_FAKEUSER)) {
- brush->id.flag |= LIB_FAKEUSER;
- id_us_plus(&brush->id);
- }
+ id_fake_user_set(&brush->id);
}
else if (is_local && is_lib) {
- Brush *brush_new = BKE_brush_copy(brush);
+ Brush *brush_new = BKE_brush_copy(brush); /* Ensures FAKE_USER is set */
brush_new->id.us = 1; /* only keep fake user */
- brush_new->id.flag |= LIB_FAKEUSER;
/* Remap paths of new ID using old library as base. */
BKE_id_lib_local_paths(bmain, brush->id.lib, &brush_new->id);
diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c
index fe5ddb5fd93..5091ab7dfa0 100644
--- a/source/blender/blenkernel/intern/library.c
+++ b/source/blender/blenkernel/intern/library.c
@@ -196,6 +196,22 @@ void id_us_min(ID *id)
}
}
+void id_fake_user_set(ID *id)
+{
+ if (id && !(id->flag & LIB_FAKEUSER)) {
+ id->flag |= LIB_FAKEUSER;
+ id_us_plus(id);
+ }
+}
+
+void id_fake_user_clear(ID *id)
+{
+ if (id && (id->flag & LIB_FAKEUSER)) {
+ id->flag &= ~LIB_FAKEUSER;
+ id_us_min(id);
+ }
+}
+
/* calls the appropriate make_local method for the block, unless test. Returns true
* if the block can be made local. */
bool id_make_local(ID *id, bool test)
@@ -1610,10 +1626,7 @@ void id_clear_lib_data(Main *bmain, ID *id)
BKE_id_lib_local_paths(bmain, id->lib, id);
- if (id->flag & LIB_FAKEUSER) {
- id->us--;
- id->flag &= ~LIB_FAKEUSER;
- }
+ id_fake_user_clear(id);
id->lib = NULL;
id->flag = LIB_LOCAL;
diff --git a/source/blender/blenkernel/intern/mask.c b/source/blender/blenkernel/intern/mask.c
index b79c72a4251..cd26691c3e1 100644
--- a/source/blender/blenkernel/intern/mask.c
+++ b/source/blender/blenkernel/intern/mask.c
@@ -804,7 +804,7 @@ static Mask *mask_alloc(Main *bmain, const char *name)
mask = BKE_libblock_alloc(bmain, ID_MSK, name);
- mask->id.flag |= LIB_FAKEUSER;
+ id_fake_user_set(&mask->id);
return mask;
}
@@ -843,10 +843,7 @@ Mask *BKE_mask_copy_nolib(Mask *mask)
BKE_mask_layer_copy_list(&mask_new->masklayers, &mask->masklayers);
/* enable fake user by default */
- if (!(mask_new->id.flag & LIB_FAKEUSER)) {
- mask_new->id.flag |= LIB_FAKEUSER;
- id_us_plus(&mask_new->id);
- }
+ id_fake_user_set(&mask->id);
return mask_new;
}
@@ -862,10 +859,7 @@ Mask *BKE_mask_copy(Mask *mask)
BKE_mask_layer_copy_list(&mask_new->masklayers, &mask->masklayers);
/* enable fake user by default */
- if (!(mask_new->id.flag & LIB_FAKEUSER)) {
- mask_new->id.flag |= LIB_FAKEUSER;
- id_us_plus(&mask_new->id);
- }
+ id_fake_user_set(&mask->id);
if (mask->id.lib) {
BKE_id_lib_local_paths(G.main, mask->id.lib, &mask_new->id);
diff --git a/source/blender/blenkernel/intern/paint.c b/source/blender/blenkernel/intern/paint.c
index 06844b09a9b..1b6fc92ef5e 100644
--- a/source/blender/blenkernel/intern/paint.c
+++ b/source/blender/blenkernel/intern/paint.c
@@ -373,7 +373,7 @@ Palette *BKE_palette_add(Main *bmain, const char *name)
palette = BKE_libblock_alloc(bmain, ID_PAL, name);
/* enable fake user by default */
- palette->id.flag |= LIB_FAKEUSER;
+ id_fake_user_set(&palette->id);
return palette;
}