2.5
[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 Ipo;
34 struct IpoCurve;
35 struct FCurve;
36 struct BezTriple;
37 struct Scene;
38
39 /* ************************************************ */
40 /* Common Macros and Defines */
41
42 /* --------- BezTriple Selection ------------- */
43
44 #define BEZSELECTED(bezt) ((bezt->f2 & SELECT) || (bezt->f1 & SELECT) || (bezt->f3 & SELECT))
45
46 #define BEZ_SEL(bezt)           { (bezt)->f1 |=  SELECT; (bezt)->f2 |=  SELECT; (bezt)->f3 |=  SELECT; }
47 #define BEZ_DESEL(bezt)         { (bezt)->f1 &= ~SELECT; (bezt)->f2 &= ~SELECT; (bezt)->f3 &= ~SELECT; }
48 #define BEZ_INVSEL(bezt)        { (bezt)->f1 ^=  SELECT; (bezt)->f2 ^=  SELECT; (bezt)->f3 ^=  SELECT; }
49
50 /* --------- Tool Flags ------------ */
51
52 /* bezt validation */
53 typedef enum eEditKeyframes_Validate {
54         BEZT_OK_FRAME   = 1,
55         BEZT_OK_FRAMERANGE,
56         BEZT_OK_SELECTED,
57         BEZT_OK_VALUE,
58 } eEditKeyframes_Validate;
59
60 /* ------------ */
61
62 /* select tools */
63 typedef enum eEditKeyframes_Select {
64         SELECT_REPLACE  =       (1<<0),
65         SELECT_ADD              =       (1<<1),
66         SELECT_SUBTRACT =       (1<<2),
67         SELECT_INVERT   =       (1<<4),
68 } eEditKeyframes_Select;
69
70 /* snapping tools */
71 typedef enum eEditKeyframes_Snap {
72         SNAP_KEYS_CURFRAME = 1,
73         SNAP_KEYS_NEARFRAME,
74         SNAP_KEYS_NEARSEC,
75         SNAP_KEYS_NEARMARKER,
76 } eEditKeyframes_Snap;
77
78 /* mirroring tools */
79 typedef enum eEditKeyframes_Mirror {
80         MIRROR_KEYS_CURFRAME = 1,
81         MIRROR_KEYS_YAXIS,
82         MIRROR_KEYS_XAXIS,
83         MIRROR_KEYS_MARKER,
84 } eEditKeyframes_Mirror;
85
86 /* ************************************************ */
87 /* Non-Destuctive Editing API (keyframes_edit.c) */
88
89 /* --- Generic Properties for Bezier Edit Tools ----- */
90
91 typedef struct BeztEditData {
92         ListBase list;                          /* temp list for storing custom list of data to check */
93         struct Scene *scene;            /* pointer to current scene - many tools need access to cfra/etc.  */
94         void *data;                                     /* pointer to custom data - usually 'Object', but could be other types too */
95         float f1, f2;                           /* storage of times/values as 'decimals' */
96         int i1, i2;                                     /* storage of times/values/flags as 'whole' numbers */
97 } BeztEditData;
98
99 /* ------- Function Pointer Typedefs ---------------- */
100
101         /* callback function that refreshes the IPO curve after use */
102 typedef void (*IcuEditFunc)(struct IpoCurve *icu);
103         /* callback function that operates on the given BezTriple */
104 typedef short (*BeztEditFunc)(BeztEditData *bed, struct BezTriple *bezt);
105
106 /* ---------------- Looping API --------------------- */
107
108 /* functions for looping over keyframes */
109 short ANIM_icu_keys_bezier_loop(BeztEditData *bed, struct IpoCurve *icu, BeztEditFunc bezt_ok, BeztEditFunc bezt_cb, IcuEditFunc icu_cb);
110 short ANIM_ipo_keys_bezier_loop(BeztEditData *bed, struct Ipo *ipo, BeztEditFunc bezt_ok, BeztEditFunc bezt_cb, IcuEditFunc icu_cb);
111
112 /* functions for making sure all keyframes are in good order */
113 void ANIM_editkeyframes_refresh(struct bAnimContext *ac);
114
115 /* ----------- BezTriple Callback Getters ---------- */
116
117 /* accessories */
118 BeztEditFunc ANIM_editkeyframes_ok(short mode);
119
120 /* edit */
121 BeztEditFunc ANIM_editkeyframes_snap(short mode);
122 BeztEditFunc ANIM_editkeyframes_mirror(short mode);
123 BeztEditFunc ANIM_editkeyframes_select(short mode);
124 BeztEditFunc ANIM_editkeyframes_handles(short mode);
125 BeztEditFunc ANIM_editkeyframes_ipo(short mode);
126
127 /* ---------- IpoCurve Callbacks ------------ */
128
129 void ANIM_editkeyframes_ipocurve_ipotype(struct IpoCurve *icu);
130
131 /* ************************************************ */
132 /* Destructive Editing API (keyframes_general.c) */
133
134 void delete_fcurve_key(struct FCurve *fcu, int index, short do_recalc);
135 void delete_ipo_keys(struct Ipo *ipo);
136 void duplicate_ipo_keys(struct Ipo *ipo);
137
138 void clean_fcurve(struct FCurve *fcu, float thresh);
139 void smooth_fcurve(struct FCurve *fcu, short mode);
140
141 /* ************************************************ */
142
143 // XXX all of these funcs should be depreceated or at least renamed!
144
145 /* in keyframes_edit.c */
146 short is_ipo_key_selected(struct Ipo *ipo);
147 void set_ipo_key_selection(struct Ipo *ipo, short sel);
148
149 void setexprap_ipoloop(struct Ipo *ipo, short code);
150
151
152 /* ************************************************ */
153
154 #endif /* ED_KEYFRAMES_EDIT_H */