Auto-Keyframing (per scene):
authorJoshua Leung <aligorith@gmail.com>
Sat, 27 Sep 2008 06:29:52 +0000 (06:29 +0000)
committerJoshua Leung <aligorith@gmail.com>
Sat, 27 Sep 2008 06:29:52 +0000 (06:29 +0000)
Now auto-keyframing can be enabled/disabled per scene (with the insertion mode also stored per scene). The flags used when insertng keyframes are still stored in the user-prefs.

New scenes have their auto-keyframing settings initialised from the user-preferences.

source/blender/blenkernel/BKE_blender.h
source/blender/blenkernel/intern/scene.c
source/blender/blenloader/intern/readfile.c
source/blender/include/BIF_keyframing.h
source/blender/makesdna/DNA_scene_types.h
source/blender/makesdna/DNA_userdef_types.h
source/blender/src/header_time.c
source/blender/src/space.c

index 14270d3a7c93906e932f01fbd6528c0f7896a2fe..f7af2e4b938f200c4109509f7e01c812e65bdb30 100644 (file)
@@ -41,7 +41,7 @@ struct ListBase;
 struct MemFile;
 
 #define BLENDER_VERSION                        247
-#define BLENDER_SUBVERSION             7
+#define BLENDER_SUBVERSION             8
 
 #define BLENDER_MINVERSION             245
 #define BLENDER_MINSUBVERSION  15
index 701e8ecb31193143bce01a9413a84f4840a585df..dea36a69643c4cafd8d45277434554304d7f2ebc 100644 (file)
@@ -188,6 +188,7 @@ Scene *add_scene(char *name)
        sce->lay= 1;
        sce->selectmode= SCE_SELECT_VERTEX;
        sce->editbutsize= 0.1;
+       sce->autokey_mode= U.autokey_mode;
        
        sce->r.mode= R_GAMMA;
        sce->r.cfra= 1;
index d38eed4d0946fed5f1b61adf0f1e26f474c1f627..5692627281de98f9a52e0fffeabe9a582d78a88c 100644 (file)
@@ -7908,6 +7908,15 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
                        }
                }
        }
+       /* autokey mode settings now used from scene, but need to be initialised off userprefs */
+       if (main->versionfile < 247 || (main->versionfile == 247 && main->subversionfile < 8)) {
+               Scene *sce;
+               
+               for (sce= main->scene.first; sce; sce= sce->id.next) {
+                       if (sce->autokey_mode == 0)
+                               sce->autokey_mode= U.autokey_mode;
+               }
+       }
 
        /* WATCH IT!!!: pointers from libdata have not been converted yet here! */
        /* WATCH IT 2!: Userdef struct init has to be in src/usiblender.c! */
index eeaef957b90f250ec2c918d52cce2da690f08341..7989e6adb45a7a23a8338ddb4d774a6f3443ad29 100644 (file)
@@ -80,6 +80,24 @@ short deletekey(struct ID *id, int blocktype, char *actname, char *constname, in
 void common_insertkey(void);
 void common_deletekey(void);
 
+/* ************ Auto-Keyframing ********************** */
+/* Notes:
+ * - All the defines for this (User-Pref settings and Per-Scene settings)
+ *     are defined in DNA_userdef_types.h
+ * - Scene settings take presidence over those for userprefs, with old files
+ *     inheriting userpref settings for the scene settings
+ * - "On/Off + Mode" are stored per Scene, but "settings" are currently stored
+ *     as userprefs
+ */
+
+/* Auto-Keying macros for use by various tools */
+       /* check if auto-keyframing is enabled (per scene takes presidence) */
+#define IS_AUTOKEY_ON                  ((G.scene) ? (G.scene->autokey_mode & AUTOKEY_ON) : (U.autokey_mode & AUTOKEY_ON))
+       /* check the mode for auto-keyframing (per scene takes presidence)  */
+#define IS_AUTOKEY_MODE(mode)  ((G.scene) ? (G.scene->autokey_mode == AUTOKEY_MODE_##mode) : (U.autokey_mode == AUTOKEY_MODE_##mode))
+       /* check if a flag is set for auto-keyframing (as userprefs only!) */
+#define IS_AUTOKEY_FLAG(flag)  (U.autokey_flag & AUTOKEY_FLAG_##flag)
+
 /* ************ Keyframe Checking ******************** */
 
 /* Checks whether a keyframe exists for the given ID-block one the given frame */
index 3888cb48520f798853d2a8bc830add990dd6efe0..a5eaf222941eee3bf93a4b90a77c6aecf4646287 100644 (file)
@@ -520,7 +520,9 @@ typedef struct Scene {
        float editbutsize;                      /* size of normals */
        short selectmode;                                               /* for mesh only! */
        short proportional, prop_mode;
-       short automerge, pad5, pad6, pad7;
+       short automerge, pad5, pad6;
+       
+       short autokey_mode;                                     /* mode for autokeying (defines in DNA_userdef_types.h */
        
        short use_nodes;
        
index 5d36d5ca973b7c05cb182cbe9a17ce1d592eb914..ead1df4ddac3ee6946af860700b202a07060d33a 100644 (file)
@@ -290,10 +290,6 @@ extern UserDef U; /* from usiblender.c !!!! */
 #define                AUTOKEY_FLAG_INSERTNEEDED       (1<<1)
 #define                AUTOKEY_FLAG_AUTOMATKEY         (1<<2)
 
-/* Auto-Keying macros */
-#define IS_AUTOKEY_ON                  (U.autokey_mode & AUTOKEY_ON)
-#define IS_AUTOKEY_MODE(mode)  (U.autokey_mode == AUTOKEY_MODE_##mode)
-#define IS_AUTOKEY_FLAG(flag)  (U.autokey_flag & AUTOKEY_FLAG_##flag)
 
 /* transopts */
 #define        USER_TR_TOOLTIPS                (1 << 0)
index a67422879d444bafddfe52e84bc06c2dfdddf828..5de4d744a0a781d023244c2a858ed69593181bcb 100644 (file)
@@ -554,12 +554,12 @@ void time_buttons(ScrArea *sa)
        xco+= XIC+8;
        
        uiDefIconButBitS(block, TOG, AUTOKEY_ON, REDRAWINFO, ICON_REC,
-                       xco, 0, XIC, YIC, &(U.autokey_mode), 0, 0, 0, 0, "Automatic keyframe insertion for Objects and Bones");
+                       xco, 0, XIC, YIC, &(G.scene->autokey_mode), 0, 0, 0, 0, "Automatic keyframe insertion for Objects and Bones");
        xco+= XIC;
        if (IS_AUTOKEY_ON) {
                uiDefButS(block, MENU, REDRAWINFO, 
                                        "Auto-Keying Mode %t|Add/Replace Keys%x3|Replace Keys %x5", 
-                                       xco, 0, 3*XIC, YIC, &(U.autokey_mode), 0, 1, 0, 0, 
+                                       xco, 0, 3*XIC, YIC, &(G.scene->autokey_mode), 0, 1, 0, 0, 
                                        "Mode of automatic keyframe insertion for Objects and Bones");
                xco+= (4*XIC);
        }
index 92b5580775ed9601e5c92f13d7a928c662469255..2814e03b75f8b422b1099aefe6beb66450c482be 100644 (file)
 #include "BIF_imasel.h"
 #include "BIF_interface.h"
 #include "BIF_interface_icons.h"
+#include "BIF_keyframing.h"
 #include "BIF_meshtools.h"
 #include "BIF_mywindow.h"
 #include "BIF_oops.h"
@@ -4034,7 +4035,7 @@ void drawinfospace(ScrArea *sa, void *spacedata)
                                (xpos+edgsp+(2*mpref)+(2*midsp)),y5,mpref, buth,
                                &(U.autokey_mode), 0, 0, 0, 0, "Automatic keyframe insertion for Objects and Bones");
                        
-                       if (IS_AUTOKEY_ON) {
+                       if (U.autokey_mode & AUTOKEY_ON) {
                                uiDefButS(block, MENU, REDRAWTIME, 
                                                "Auto-Keying Mode %t|Add/Replace Keys%x3|Replace Keys %x5", 
                                                (xpos+edgsp+(2*mpref)+(2*midsp)),y4,mpref, buth,