Undo revision 23130 which was a merge with 2.5, a messy one because I did something...
[blender.git] / source / blender / editors / include / ED_keyframes_edit.h
1 /**
2  * $Id:
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version. 
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
19  *
20  * The Original Code is Copyright (C) 2008 Blender Foundation.
21  * All rights reserved.
22  *
23  * 
24  * Contributor(s): Joshua Leung
25  *
26  * ***** END GPL LICENSE BLOCK *****
27  */
28
29 #ifndef ED_KEYFRAMES_EDIT_H
30 #define ED_KEYFRAMES_EDIT_H
31
32 struct bAnimContext;
33 struct bAnimListElem;
34 struct FCurve;
35 struct BezTriple;
36 struct Scene;
37
38 /* ************************************************ */
39 /* Common Macros and Defines */
40
41 /* --------- BezTriple Selection ------------- */
42
43 #define BEZSELECTED(bezt) ((bezt->f2 & SELECT) || (bezt->f1 & SELECT) || (bezt->f3 & SELECT))
44
45 #define BEZ_SEL(bezt)           { (bezt)->f1 |=  SELECT; (bezt)->f2 |=  SELECT; (bezt)->f3 |=  SELECT; }
46 #define BEZ_DESEL(bezt)         { (bezt)->f1 &= ~SELECT; (bezt)->f2 &= ~SELECT; (bezt)->f3 &= ~SELECT; }
47 #define BEZ_INVSEL(bezt)        { (bezt)->f1 ^=  SELECT; (bezt)->f2 ^=  SELECT; (bezt)->f3 ^=  SELECT; }
48
49 /* --------- Tool Flags ------------ */
50
51 /* bezt validation */
52 typedef enum eEditKeyframes_Validate {
53         BEZT_OK_FRAME   = 1,
54         BEZT_OK_FRAMERANGE,
55         BEZT_OK_SELECTED,
56         BEZT_OK_VALUE,
57         BEZT_OK_VALUERANGE,
58         BEZT_OK_REGION,
59 } eEditKeyframes_Validate;
60
61 /* ------------ */
62
63 /* select tools */
64 typedef enum eEditKeyframes_Select {
65         SELECT_REPLACE  =       (1<<0),
66         SELECT_ADD              =       (1<<1),
67         SELECT_SUBTRACT =       (1<<2),
68         SELECT_INVERT   =       (1<<4),
69 } eEditKeyframes_Select;
70
71 /* snapping tools */
72 typedef enum eEditKeyframes_Snap {
73         SNAP_KEYS_CURFRAME = 1,
74         SNAP_KEYS_NEARFRAME,
75         SNAP_KEYS_NEARSEC,
76         SNAP_KEYS_NEARMARKER,
77         SNAP_KEYS_HORIZONTAL,
78 } eEditKeyframes_Snap;
79
80 /* mirroring tools */
81 typedef enum eEditKeyframes_Mirror {
82         MIRROR_KEYS_CURFRAME = 1,
83         MIRROR_KEYS_YAXIS,
84         MIRROR_KEYS_XAXIS,
85         MIRROR_KEYS_MARKER,
86 } eEditKeyframes_Mirror;
87
88 /* ************************************************ */
89 /* Non-Destuctive Editing API (keyframes_edit.c) */
90
91 /* --- Generic Properties for Bezier Edit Tools ----- */
92
93 typedef struct BeztEditData {
94         ListBase list;                          /* temp list for storing custom list of data to check */
95         struct Scene *scene;            /* pointer to current scene - many tools need access to cfra/etc.  */
96         void *data;                                     /* pointer to custom data - usually 'Object' but also 'rectf', but could be other types too */
97         float f1, f2;                           /* storage of times/values as 'decimals' */
98         int i1, i2;                                     /* storage of times/values/flags as 'whole' numbers */
99 } BeztEditData;
100
101 /* ------- Function Pointer Typedefs ---------------- */
102
103         /* callback function that refreshes the IPO curve after use */
104 typedef void (*FcuEditFunc)(struct FCurve *fcu);
105         /* callback function that operates on the given BezTriple */
106 typedef short (*BeztEditFunc)(BeztEditData *bed, struct BezTriple *bezt);
107
108 /* ---------------- Looping API --------------------- */
109
110 /* functions for looping over keyframes */
111         /* function for working with F-Curve data only (i.e. when filters have been chosen to explicitly use this) */
112 short ANIM_fcurve_keys_bezier_loop(BeztEditData *bed, struct FCurve *fcu, BeztEditFunc bezt_ok, BeztEditFunc bezt_cb, FcuEditFunc fcu_cb);
113         /* function for working with any type (i.e. one of the known types) of animation channel 
114          *      - filterflag is bDopeSheet->flag (DOPESHEET_FILTERFLAG)
115          */
116 short ANIM_animchannel_keys_bezier_loop(BeztEditData *bed, struct bAnimListElem *ale, BeztEditFunc bezt_ok, BeztEditFunc bezt_cb, FcuEditFunc fcu_cb, int filterflag);
117         /* same as above, except bAnimListElem wrapper is not needed... 
118          *      - keytype is eAnim_KeyType
119          */
120 short ANIM_animchanneldata_keys_bezier_loop(BeztEditData *bed, void *data, int keytype, BeztEditFunc bezt_ok, BeztEditFunc bezt_cb, FcuEditFunc fcu_cb, int filterflag);
121
122 /* functions for making sure all keyframes are in good order */
123 void ANIM_editkeyframes_refresh(struct bAnimContext *ac);
124
125 /* ----------- BezTriple Callback Getters ---------- */
126
127 /* accessories */
128 BeztEditFunc ANIM_editkeyframes_ok(short mode);
129
130 /* edit */
131 BeztEditFunc ANIM_editkeyframes_snap(short mode);
132 BeztEditFunc ANIM_editkeyframes_mirror(short mode);
133 BeztEditFunc ANIM_editkeyframes_select(short mode);
134 BeztEditFunc ANIM_editkeyframes_handles(short mode);
135 BeztEditFunc ANIM_editkeyframes_ipo(short mode);
136
137 /* ----------- BezTriple Callback (Assorted Utilities) ---------- */
138
139 short bezt_calc_average(BeztEditData *bed, struct BezTriple *bezt);
140 short bezt_to_cfraelem(BeztEditData *bed, struct BezTriple *bezt);
141
142 /* ************************************************ */
143 /* Destructive Editing API (keyframes_general.c) */
144
145 void delete_fcurve_key(struct FCurve *fcu, int index, short do_recalc);
146 void delete_fcurve_keys(struct FCurve *fcu);
147 void duplicate_fcurve_keys(struct FCurve *fcu);
148
149 void clean_fcurve(struct FCurve *fcu, float thresh);
150 void smooth_fcurve(struct FCurve *fcu);
151
152 /* ----------- */
153
154 void free_anim_copybuf(void);
155 short copy_animedit_keys(struct bAnimContext *ac, ListBase *anim_data);
156 short paste_animedit_keys(struct bAnimContext *ac, ListBase *anim_data);
157
158 /* ************************************************ */
159
160 #endif /* ED_KEYFRAMES_EDIT_H */