Revision: 16850
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16850
Author:   aligorith
Date:     2008-09-30 14:30:56 +0200 (Tue, 30 Sep 2008)

Log Message:
-----------
Keyframing:

- More cleanups, to move the return of success from insertkey to take into 
account results of 'only needed' keying option
- Added a 'better' test for size of area than the previous one (for use with 
the keyframing buttons in the TimeLine)
- Moved the checks for Action/IPO editors to commonkey_context_get() so that 
the keyframing buttons in TimeLine could also consider using these editor's 
keyframing methods too

Modified Paths:
--------------
    trunk/blender/source/blender/src/keyframing.c

Modified: trunk/blender/source/blender/src/keyframing.c
===================================================================
--- trunk/blender/source/blender/src/keyframing.c       2008-09-30 12:03:31 UTC 
(rev 16849)
+++ trunk/blender/source/blender/src/keyframing.c       2008-09-30 12:30:56 UTC 
(rev 16850)
@@ -786,7 +786,7 @@
                        insert_mode= new_key_needed(icu, cfra, curval);
                        
                        /* insert new keyframe at current frame */
-                       if (insert_mode) 
+                       if (insert_mode)
                                insert_vert_icu(icu, cfra, curval, (flag & 
INSERTKEY_FAST));
                        
                        /* delete keyframe immediately before/after newly added 
*/
@@ -798,14 +798,18 @@
                                        delete_icu_key(icu, 1, 1);
                                        break;
                        }
+                       
+                       /* only return success if keyframe added */
+                       if (insert_mode)
+                               return 1;
                }
                else {
                        /* just insert keyframe */
                        insert_vert_icu(icu, cfra, curval, (flag & 
INSERTKEY_FAST));
+                       
+                       /* return success */
+                       return 1;
                }
-               
-               /* return success */
-               return 1;
        }
        
        /* return failure */
@@ -885,6 +889,11 @@
 /* ************************************************** */
 /* COMMON KEYFRAME MANAGEMENT (common_insertkey/deletekey) */
 
+/* mode for common_modifykey */
+enum {
+       COMMONKEY_MODE_INSERT = 0,
+       COMMONKEY_MODE_DELETE,
+} eCommonModifyKey_Modes;
 
 /* ------------- KeyingSet Defines ------------ */
 /* Note: these must all be named with the defks_* prefix, otherwise the 
template macro will not work! */
@@ -1493,7 +1502,7 @@
 
 
 /* get keyingsets for appropriate context */
-static void commonkey_context_get (ScrArea *sa, ListBase *sources, 
bKeyingContext **ksc)
+static void commonkey_context_get (ScrArea *sa, short mode, ListBase *sources, 
bKeyingContext **ksc)
 {
        /* check view type */
        switch (sa->spacetype) {
@@ -1511,10 +1520,21 @@
                }
                        break;
                        
+               /* spaces with their own methods */
+               case SPACE_IPO:
+                       if (mode == COMMONKEY_MODE_INSERT)
+                               insertkey_editipo();
+                       return;
+               case SPACE_ACTION:
+                       if (mode == COMMONKEY_MODE_INSERT)
+                               insertkey_action();
+                       return;
+                       
                /* timeline view - keyframe buttons */
                case SPACE_TIME:
                {
                        ScrArea *sab;
+                       int bigarea= 0;
                        
                        /* try to find largest 3d-view available 
                         * (mostly of the time, this is what when user will 
want this,
@@ -1526,12 +1546,21 @@
                                return;
                        }
                        
-                       /* otherwise, try to find the biggest area
-                        * WARNING: must check if that area is another 
timeline, as that would cause infinite loop
-                        */
-                       sab= closest_bigger_area();
-                       if ((sab) && (sab->spacetype != SPACE_TIME)) 
-                               commonkey_context_get(sab, sources, ksc);
+                       /* if not found, sab is now NULL, so perform own 
biggest area test */
+                       for (sa= G.curscreen->areabase.first; sa; sa= sa->next) 
{
+                               int area= sa->winx * sa->winy;
+                               
+                               if (sa->spacetype != SPACE_TIME) {
+                                       if ( (!sab) || (area > bigarea) ) {
+                                               sab= sa;
+                                               bigarea= area;
+                                       }
+                               }
+                       }
+                       
+                       /* use whichever largest area was found (it shouldn't 
be a time window) */
+                       if (sab)
+                               commonkey_context_get(sab, mode, sources, ksc);
                }
                        break;
        }
@@ -1670,12 +1699,6 @@
 
 /* ---------------- Keyframe Management API -------------------- */
 
-/* mode for common_modifykey */
-enum {
-       COMMONKEY_MODE_INSERT = 0,
-       COMMONKEY_MODE_DELETE,
-} eCommonModifyKey_Modes;
-
 /* Display a menu for handling the insertion of keyframes based on the active 
view */
 // TODO: add back an option for repeating last keytype
 void common_modifykey (short mode)
@@ -1691,26 +1714,10 @@
        if (ELEM(mode, COMMONKEY_MODE_INSERT, COMMONKEY_MODE_DELETE)==0)
                return;
        
-       /* delegate to other functions or get keyingsets to use */
-       switch (curarea->spacetype) {
-                       /* spaces with their own methods */
-               case SPACE_IPO:
-                       if (mode == COMMONKEY_MODE_INSERT)
-                               insertkey_editipo();
-                       return;
-               case SPACE_ACTION:
-                       if (mode == COMMONKEY_MODE_INSERT)
-                               insertkey_action();
-                       return;
-                       
-                       /* TODO: based on UI elements? will that even be 
handled here??? */
-                       
-                       /* default - check per view */
-               default:
-                       /* get the keyingsets and the data to add keyframes to 
*/
-                       commonkey_context_get(curarea, &dsources, &ksc);
-                       break;
-       }       
+       /* delegate to other functions or get keyingsets to use 
+        *      - if the current area doesn't have its own handling, there will 
be data returned...
+        */
+       commonkey_context_get(curarea, mode, &dsources, &ksc);
        
        /* check that there is data to operate on */
        if (ELEM(NULL, dsources.first, ksc)) {


_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to