Revision: 18003
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18003
Author:   aligorith
Date:     2008-12-22 09:13:25 +0100 (Mon, 22 Dec 2008)

Log Message:
-----------
2.5 - Action Editor / Dopesheet

Initial commit of drawing code for Action Editor / Dopesheet. By default, the 
Dopesheet is now enabled (like in AnimSys2). There are still a few unresolved 
problems (like bad alpha blending for icons, and keyframes still not being 
drawn). However, these will be resolved in due course.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/animation/anim_draw.c
    branches/blender2.5/blender/source/blender/editors/animation/anim_filter.c
    branches/blender2.5/blender/source/blender/editors/include/ED_anim_api.h
    branches/blender2.5/blender/source/blender/editors/include/UI_resources.h
    branches/blender2.5/blender/source/blender/editors/interface/resources.c
    
branches/blender2.5/blender/source/blender/editors/space_action/action_intern.h
    
branches/blender2.5/blender/source/blender/editors/space_action/space_action.c
    
branches/blender2.5/blender/source/blender/editors/space_view3d/drawarmature.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_userdef_types.h

Added Paths:
-----------
    
branches/blender2.5/blender/source/blender/editors/animation/anim_keyframes_draw.c
    
branches/blender2.5/blender/source/blender/editors/include/ED_keyframes_draw.h
    
branches/blender2.5/blender/source/blender/editors/space_action/action_draw.c

Modified: 
branches/blender2.5/blender/source/blender/editors/animation/anim_draw.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/animation/anim_draw.c    
2008-12-22 06:55:24 UTC (rev 18002)
+++ branches/blender2.5/blender/source/blender/editors/animation/anim_draw.c    
2008-12-22 08:13:25 UTC (rev 18003)
@@ -42,8 +42,10 @@
 
 #include "BLI_blenlib.h"
 
+#include "BKE_action.h"
 #include "BKE_context.h"
 #include "BKE_global.h"
+#include "BKE_ipo.h"
 #include "BKE_object.h"
 #include "BKE_screen.h"
 #include "BKE_utildefines.h"
@@ -177,3 +179,79 @@
 }
 
 /* *************************************************** */
+/* KEYFRAME DRAWING UTILITIES */
+
+/* Obtain the Object providing NLA-scaling for the given channel (if 
applicable) */
+Object *ANIM_nla_mapping_get(bAnimContext *ac, bAnimListElem *ale)
+{
+       /* sanity checks */
+       if (ac == NULL)
+               return NULL;
+       
+       /* handling depends on the type of animation-context we've got */
+       if (ELEM(ac->datatype, ANIMCONT_ACTION, ANIMCONT_IPO)) {
+               /* Action Editor (action mode) or Ipo Editor (ipo mode):
+                * Only use if editor is not pinned, and active object has 
action
+                */
+               if (ac->obact && ac->obact->action) {
+                       /* Action Editor */
+                       if (ac->datatype == ANIMCONT_ACTION) {
+                               SpaceAction *saction= (SpaceAction 
*)ac->sa->spacedata.first;
+                               
+                               if (saction->pin == 0)
+                                       return ac->obact;
+                       }
+                       /* IPO Editor */
+                       else if (ac->datatype == ANIMCONT_IPO) {
+                               SpaceIpo *sipo= (SpaceIpo 
*)ac->sa->spacedata.first;
+                               
+                               if (sipo->pin == 0)
+                                       return ac->obact;
+                       }
+               }
+       }
+       else if ((ac->datatype == ANIMCONT_DOPESHEET) && (ale)) {
+               /* Dopesheet:
+                *      Only if channel is available, and is owned by an Object 
with an Action
+                */
+               if ((ale->id) && (GS(ale->id->name) == ID_OB)) {
+                       Object *ob= (Object *)ale->id;
+                       
+                       if (ob->action)
+                               return ob;
+               }
+       }
+       
+       /* no appropriate object found */
+       return NULL;
+}
+
+/* Set/clear temporary mapping of coordinates from 'local-action' time to 
'global-nla-scaled' time
+ *     - the old mapping is stored in a static var, but that shouldn't be too 
bad as UI drawing
+ *       (where this is called) is single-threaded anyway
+ */
+// XXX was called: map_active_strip()
+void ANIM_nla_mapping_draw(gla2DDrawInfo *di, Object *ob, short restore)
+{
+       static rctf stored;
+       
+       if (restore) {
+               /* restore un-mapped coordinates */
+               gla2DSetMap(di, &stored);
+       }
+       else {
+               /* set mapped coordinates */
+               rctf map;
+               
+               gla2DGetMap(di, &stored);
+               map= stored;
+               
+               map.xmin= get_action_frame(ob, map.xmin);
+               map.xmax= get_action_frame(ob, map.xmax);
+               
+               if (map.xmin == map.xmax) map.xmax += 1.0f;
+               gla2DSetMap(di, &map);
+       }
+}
+
+/* *************************************************** */

Modified: 
branches/blender2.5/blender/source/blender/editors/animation/anim_filter.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/animation/anim_filter.c  
2008-12-22 06:55:24 UTC (rev 18002)
+++ branches/blender2.5/blender/source/blender/editors/animation/anim_filter.c  
2008-12-22 08:13:25 UTC (rev 18003)
@@ -140,86 +140,110 @@
 }
 
 /* Get data being edited in Action Editor (depending on current 'mode') */
-static void *actedit_get_context (const bContext *C, SpaceAction *saction, 
short *datatype)
+static short actedit_get_context (const bContext *C, bAnimContext *ac, 
SpaceAction *saction)
 {
-       Scene *scene= CTX_data_scene(C);
-       
        /* sync settings with current view status, then return appropriate data 
*/
        switch (saction->mode) {
                case SACTCONT_ACTION: /* 'Action Editor' */
                        /* if not pinned, sync with active object */
                        if (saction->pin == 0) {
-                               if (OBACT)
-                                       saction->action = OBACT->action;
+                               if (ac->obact)
+                                       saction->action = ac->obact->action;
                                else
                                        saction->action= NULL;
                        }
-                               
-                       *datatype= ANIMCONT_ACTION;
-                       return saction->action;
                        
+                       ac->datatype= ANIMCONT_ACTION;
+                       ac->data= saction->action;
+                       
+                       ac->mode= saction->mode;
+                       return 1;
+                       
                case SACTCONT_SHAPEKEY: /* 'ShapeKey Editor' */
-                       *datatype= ANIMCONT_SHAPEKEY;
-                       return actedit_get_shapekeys(C, saction);
+                       ac->datatype= ANIMCONT_SHAPEKEY;
+                       ac->data= actedit_get_shapekeys(C, saction);
                        
+                       ac->mode= saction->mode;
+                       return 1;
+                       
                case SACTCONT_GPENCIL: /* Grease Pencil */ // XXX review how 
this mode is handled...
-                       *datatype=ANIMCONT_GPENCIL;
-                       return CTX_wm_screen(C); // FIXME: add that dopesheet 
type thing here!
-                       break;
+                       ac->datatype=ANIMCONT_GPENCIL;
+                       ac->data= CTX_wm_screen(C); // FIXME: add that 
dopesheet type thing here!
                        
+                       ac->mode= saction->mode;
+                       return 1;
+                       
                case SACTCONT_DOPESHEET: /* DopeSheet */
                        /* update scene-pointer (no need to check for pinning 
yet, as not implemented) */
-                       saction->ads.source= (ID *)scene;
+                       saction->ads.source= (ID *)ac->scene;
                        
-                       *datatype= ANIMCONT_DOPESHEET;
-                       return &saction->ads;
+                       ac->datatype= ANIMCONT_DOPESHEET;
+                       ac->data= &saction->ads;
+                       
+                       ac->mode= saction->mode;
+                       return 1;
                
                default: /* unhandled yet */
-                       *datatype= ANIMCONT_NONE;
-                       return NULL;
+                       ac->datatype= ANIMCONT_NONE;
+                       ac->data= NULL;
+                       
+                       ac->mode= -1;
+                       return 0;
        }
 }
 
 /* ----------- Private Stuff - IPO Editor ------------- */
 
 /* Get data being edited in IPO Editor (depending on current 'mode') */
-static void *ipoedit_get_context (const bContext *C, SpaceIpo *sipo, short 
*datatype)
+static short ipoedit_get_context (const bContext *C, bAnimContext *ac, 
SpaceIpo *sipo)
 {
        // XXX FIXME...
-       return NULL;
+       return 0;
 }
 
 /* ----------- Public API --------------- */
 
-/* Obtain current anim-data context from Blender Context info */
-void *ANIM_animdata_get_context (const bContext *C, short *datatype)
+/* Obtain current anim-data context from Blender Context info 
+ *     - AnimContext to write to is provided as pointer to var on stack so 
that we don't have
+ *       allocation/freeing costs (which are not that avoidable with channels).
+ *     - 
+ */
+short ANIM_animdata_get_context (const bContext *C, bAnimContext *ac)
 {
-       ScrArea *sa= CTX_wm_area(C);
+       ScrArea *sa= CTX_wm_area(C); // XXX it is assumed that this will always 
be valid
+       ARegion *ar= CTX_wm_region(C);
+       Scene *scene= CTX_data_scene(C);
        
-       /* set datatype to 'None' for convenience */
-       if (datatype == NULL) return NULL;
-       *datatype= ANIMCONT_NONE;
-       if (sa == NULL) return NULL; /* highly unlikely to happen, but still! */
+       /* clear old context info */
+       if (ac == NULL) return 0;
+       memset(ac, 0, sizeof(bAnimContext));
        
+       /* set default context settings */
+       ac->scene= scene;
+       ac->obact= (scene && scene->basact)?  scene->basact->object : NULL;
+       ac->sa= sa;
+       ac->spacetype= sa->spacetype;
+       ac->regiontype= ar->regiontype;
+       
        /* context depends on editor we are currently in */
        switch (sa->spacetype) {
                case SPACE_ACTION:
                {
                        SpaceAction *saction= (SpaceAction 
*)CTX_wm_space_data(C);
-                       return actedit_get_context(C, saction, datatype);
+                       return actedit_get_context(C, ac, saction);
                }
                        break;
                        
                case SPACE_IPO:
                {
                        SpaceIpo *sipo= (SpaceIpo *)CTX_wm_space_data(C);
-                       return ipoedit_get_context(C, sipo, datatype);
+                       return ipoedit_get_context(C, ac, sipo);
                }
                        break;
        }
        
        /* nothing appropriate */
-       return NULL;
+       return 0;
 }
 
 /* ************************************************************ */
@@ -1208,6 +1232,10 @@
                        case ANIMCONT_DOPESHEET:
                                animdata_filter_dopesheet(anim_data, data, 
filter_mode);
                                break;
+                               
+                       case ANIMCONT_IPO:
+                               // FIXME: this will be used for showing a 
single IPO-block (not too useful from animator perspective though!)
+                               break;
                }
                        
                /* remove any weedy entries */

Added: 
branches/blender2.5/blender/source/blender/editors/animation/anim_keyframes_draw.c
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/animation/anim_keyframes_draw.c
                          (rev 0)
+++ 
branches/blender2.5/blender/source/blender/editors/animation/anim_keyframes_draw.c
  2008-12-22 08:13:25 UTC (rev 18003)
@@ -0,0 +1,701 @@
+/**
+ * $Id: drawaction.c 17746 2008-12-08 11:19:44Z aligorith $
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): Joshua Leung
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/* System includes ----------------------------------------------------- */
+
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
+#include <float.h>
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_blenlib.h"
+#include "BLI_arithb.h"
+
+/* Types --------------------------------------------------------------- */
+
+#include "DNA_listBase.h"
+#include "DNA_action_types.h"
+#include "DNA_armature_types.h"
+#include "DNA_camera_types.h"
+#include "DNA_curve_types.h"
+#include "DNA_ipo_types.h"
+#include "DNA_object_types.h"
+#include "DNA_screen_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_space_types.h"
+#include "DNA_constraint_types.h"
+#include "DNA_key_types.h"
+#include "DNA_lamp_types.h"
+#include "DNA_material_types.h"
+#include "DNA_userdef_types.h"
+#include "DNA_gpencil_types.h"
+#include "DNA_windowmanager_types.h"
+
+#include "BKE_action.h"
+#include "BKE_depsgraph.h"
+#include "BKE_ipo.h"
+#include "BKE_key.h"
+#include "BKE_material.h"
+#include "BKE_object.h"
+#include "BKE_global.h"        // XXX remove me!
+#include "BKE_context.h"
+#include "BKE_utildefines.h"
+
+/* Everything from source (BIF, BDR, BSE) ------------------------------ */ 
+

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to