Fix for bug [#13479] Particle system "corrupts" when changing material colour and...
[blender.git] / source / blender / include / BDR_drawaction.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) 2001-2002 by NaN Holding BV.
21  * All rights reserved.
22  *
23  * The Original Code is: all of this file.
24  *
25  * Contributor(s): none yet.
26  *
27  * ***** END GPL LICENSE BLOCK *****
28  */
29
30 #ifndef BDR_DRAWACTION_H
31 #define BDR_DRAWACTION_H
32
33 struct BezTriple;
34 struct Ipo;
35 struct IpoCurve;
36 struct gla2DDrawInfo;
37 struct bAction;
38 struct bActionGroup;
39 struct Object;
40 struct ListBase;
41
42 /* ****************************** Base Structs ****************************** */
43
44 /* Keyframe Column Struct */
45 typedef struct ActKeyColumn {
46         struct ActKeyColumn *next, *prev;
47         short sel, handle_type;
48         float cfra;
49         
50         /* only while drawing - used to determine if long-keyframe needs to be drawn */
51         short modified;
52         short totcurve;
53 } ActKeyColumn;
54
55 /* 'Long Keyframe' Struct */
56 typedef struct ActKeyBlock {
57         struct ActKeyBlock *next, *prev;
58         short sel, handle_type;
59         float val;
60         float start, end;
61         
62         /* only while drawing - used to determine if block needs to be drawn */
63         short modified;
64         short totcurve; 
65 } ActKeyBlock;
66
67
68 /* Inclusion-Range Limiting Struct (optional) */
69 typedef struct ActKeysInc {
70         struct Object *ob;                              /* if present, used to find action-scaled time */
71         float start, end;                               /* frames (global-time) to only consider keys between */
72 } ActKeysInc;
73
74 /* ******************************* Methods ****************************** */
75
76 /* Action Generics */
77 void draw_cfra_action(void);
78
79 /* Channel Drawing */
80 void draw_icu_channel(struct gla2DDrawInfo *di, struct IpoCurve *icu, float ypos);
81 void draw_ipo_channel(struct gla2DDrawInfo *di, struct Ipo *ipo, float ypos);
82 void draw_agroup_channel(struct gla2DDrawInfo *di, struct bActionGroup *agrp, float ypos);
83 void draw_action_channel(struct gla2DDrawInfo *di, struct bAction *act, float ypos);
84 void draw_object_channel(struct gla2DDrawInfo *di, struct Object *ob, float ypos);
85
86 /* Keydata Generation */
87 void icu_to_keylist(struct IpoCurve *icu, ListBase *keys, ListBase *blocks, ActKeysInc *aki);
88 void ipo_to_keylist(struct Ipo *ipo, ListBase *keys, ListBase *blocks, ActKeysInc *aki);
89 void agroup_to_keylist(struct bActionGroup *agrp, ListBase *keys, ListBase *blocks, ActKeysInc *aki);
90 void action_to_keylist(struct bAction *act, ListBase *keys, ListBase *blocks, ActKeysInc *aki);
91 void ob_to_keylist(struct Object *ob, ListBase *keys, ListBase *blocks, ActKeysInc *aki);
92
93 #endif  /*  BDR_DRAWACTION_H */
94