[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