[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [53107] trunk/blender/source/blender: fix [#33580] Masking keyframes disappear from dope sheet when using undo.
Campbell Barton
ideasman42 at gmail.com
Tue Dec 18 09:41:41 CET 2012
Revision: 53107
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=53107
Author: campbellbarton
Date: 2012-12-18 08:41:38 +0000 (Tue, 18 Dec 2012)
Log Message:
-----------
fix [#33580] Masking keyframes disappear from dope sheet when using undo.
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/BKE_library.h
trunk/blender/source/blender/blenkernel/intern/library.c
trunk/blender/source/blender/blenloader/intern/readfile.c
trunk/blender/source/blender/editors/animation/anim_channels_edit.c
trunk/blender/source/blender/editors/space_clip/clip_editor.c
trunk/blender/source/blender/editors/space_image/image_edit.c
Modified: trunk/blender/source/blender/blenkernel/BKE_library.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_library.h 2012-12-18 07:49:09 UTC (rev 53106)
+++ trunk/blender/source/blender/blenkernel/BKE_library.h 2012-12-18 08:41:38 UTC (rev 53107)
@@ -62,6 +62,7 @@
void BKE_id_lib_local_paths(struct Main *bmain, struct Library *lib, struct ID *id);
void id_lib_extern(struct ID *id);
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);
Modified: trunk/blender/source/blender/blenkernel/intern/library.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/library.c 2012-12-18 07:49:09 UTC (rev 53106)
+++ trunk/blender/source/blender/blenkernel/intern/library.c 2012-12-18 08:41:38 UTC (rev 53107)
@@ -152,6 +152,14 @@
}
}
+/* ensure we have a real user */
+void id_us_ensure_real(ID *id)
+{
+ if (ID_REAL_USERS(id) <= 0) {
+ id->us = MAX2(id->us, 0) + 1;
+ }
+}
+
void id_us_plus(ID *id)
{
if (id) {
Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c 2012-12-18 07:49:09 UTC (rev 53106)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c 2012-12-18 08:41:38 UTC (rev 53107)
@@ -5414,7 +5414,14 @@
for (; idn; idn = idn->next) {
if (idn->name[2] == name[0] && strcmp(idn->name+2, name) == 0) {
if (idn->lib == id->lib) {
- if (user && idn->us == 0) idn->us++;
+ if (user == 1) {
+ if (idn->us == 0) {
+ idn->us++;
+ }
+ }
+ else if (user == 2) {
+ id_us_ensure_real(idn);
+ }
break;
}
}
@@ -5580,7 +5587,7 @@
else if (sl->spacetype == SPACE_IMAGE) {
SpaceImage *sima = (SpaceImage *)sl;
- sima->image = restore_pointer_by_name(newmain, (ID *)sima->image, 1);
+ sima->image = restore_pointer_by_name(newmain, (ID *)sima->image, 2);
/* this will be freed, not worth attempting to find same scene,
* since it gets initialized later */
@@ -5596,7 +5603,7 @@
* so assume that here we're doing for undo only...
*/
sima->gpd = restore_pointer_by_name(newmain, (ID *)sima->gpd, 1);
- sima->mask_info.mask = restore_pointer_by_name(newmain, (ID *)sima->mask_info.mask, 1);
+ sima->mask_info.mask = restore_pointer_by_name(newmain, (ID *)sima->mask_info.mask, 2);
}
else if (sl->spacetype == SPACE_SEQ) {
SpaceSeq *sseq = (SpaceSeq *)sl;
@@ -5671,8 +5678,8 @@
else if (sl->spacetype == SPACE_CLIP) {
SpaceClip *sclip = (SpaceClip *)sl;
- sclip->clip = restore_pointer_by_name(newmain, (ID *)sclip->clip, 1);
- sclip->mask_info.mask = restore_pointer_by_name(newmain, (ID *)sclip->mask_info.mask, 1);
+ sclip->clip = restore_pointer_by_name(newmain, (ID *)sclip->clip, 2);
+ sclip->mask_info.mask = restore_pointer_by_name(newmain, (ID *)sclip->mask_info.mask, 2);
sclip->scopes.ok = 0;
}
Modified: trunk/blender/source/blender/editors/animation/anim_channels_edit.c
===================================================================
--- trunk/blender/source/blender/editors/animation/anim_channels_edit.c 2012-12-18 07:49:09 UTC (rev 53106)
+++ trunk/blender/source/blender/editors/animation/anim_channels_edit.c 2012-12-18 08:41:38 UTC (rev 53107)
@@ -1236,7 +1236,7 @@
case ANIMTYPE_MASKLAYER:
{
- /* Grease Pencil layer */
+ /* Mask layer */
Mask *mask = (Mask *)ale->id;
MaskLayer *masklay = (MaskLayer *)ale->data;
Modified: trunk/blender/source/blender/editors/space_clip/clip_editor.c
===================================================================
--- trunk/blender/source/blender/editors/space_clip/clip_editor.c 2012-12-18 07:49:09 UTC (rev 53106)
+++ trunk/blender/source/blender/editors/space_clip/clip_editor.c 2012-12-18 08:41:38 UTC (rev 53107)
@@ -38,6 +38,7 @@
#include "BKE_movieclip.h"
#include "BKE_context.h"
#include "BKE_tracking.h"
+#include "BKE_library.h"
#include "DNA_mask_types.h"
#include "DNA_object_types.h" /* SELECT */
@@ -524,8 +525,7 @@
old_clip = sc->clip;
sc->clip = clip;
- if (sc->clip && sc->clip->id.us == 0)
- sc->clip->id.us = 1;
+ id_us_ensure_real((ID *)sc->clip);
if (screen && sc->view == SC_VIEW_CLIP) {
ScrArea *area;
@@ -561,9 +561,7 @@
{
sc->mask_info.mask = mask;
- if (sc->mask_info.mask && sc->mask_info.mask->id.us == 0) {
- sc->mask_info.mask->id.us = 1;
- }
+ id_us_ensure_real((ID *)sc->mask_info.mask);
if (C) {
WM_event_add_notifier(C, NC_MASK | NA_SELECTED, mask);
Modified: trunk/blender/source/blender/editors/space_image/image_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_image/image_edit.c 2012-12-18 07:49:09 UTC (rev 53106)
+++ trunk/blender/source/blender/editors/space_image/image_edit.c 2012-12-18 08:41:38 UTC (rev 53107)
@@ -40,6 +40,7 @@
#include "BKE_image.h"
#include "BKE_main.h"
#include "BKE_tessmesh.h"
+#include "BKE_library.h"
#include "IMB_imbuf_types.h"
@@ -78,8 +79,7 @@
if (sima->image)
BKE_image_signal(sima->image, &sima->iuser, IMA_SIGNAL_USER_NEW_IMAGE);
- if (sima->image && ID_REAL_USERS(sima->image) <= 0)
- sima->image->id.us = max_ii(sima->image->id.us, 0) + 1;
+ id_us_ensure_real((ID *)sima->image);
if (obedit)
WM_main_add_notifier(NC_GEOM | ND_DATA, obedit->data);
@@ -97,8 +97,7 @@
sima->mask_info.mask = mask;
/* weak, but same as image/space */
- if (sima->mask_info.mask && ID_REAL_USERS(sima->mask_info.mask) <= 0)
- sima->mask_info.mask->id.us = max_ii(sima->mask_info.mask->id.us, 0) + 1;
+ id_us_ensure_real((ID *)sima->mask_info.mask);
if (C) {
WM_event_add_notifier(C, NC_MASK | NA_SELECTED, mask);
More information about the Bf-blender-cvs
mailing list