Cleanup: remove redundant doxygen \file argument
[blender.git] / source / blender / editors / include / ED_keyframes_draw.h
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) (C) 2009 Blender Foundation, Joshua Leung
17  * All rights reserved.
18  */
19
20 /** \file \ingroup editors
21  */
22
23 #ifndef __ED_KEYFRAMES_DRAW_H__
24 #define __ED_KEYFRAMES_DRAW_H__
25
26 struct AnimData;
27 struct CacheFile;
28 struct DLRBT_Tree;
29 struct FCurve;
30 struct ListBase;
31 struct MaskLayer;
32 struct Object;
33 struct Palette;
34 struct Scene;
35 struct View2D;
36 struct bAction;
37 struct bActionGroup;
38 struct bAnimContext;
39 struct bDopeSheet;
40 struct bGPDlayer;
41
42 /* ****************************** Base Structs ****************************** */
43
44 /* Information about the stretch of time from current to the next column */
45 typedef struct ActKeyBlockInfo {
46         /* Combination of flags from all curves. */
47         short flag;
48         /* Mask of flags that differ between curves. */
49         short conflict;
50
51         /* Selection flag. */
52         char sel;
53 } ActKeyBlockInfo;
54
55 /* Keyframe Column Struct */
56 typedef struct ActKeyColumn {
57         /* ListBase linkage */
58         struct ActKeyColumn *next, *prev;
59
60         /* sorting-tree linkage */
61         /** 'children' of this node, less than and greater than it (respectively) */
62         struct ActKeyColumn *left, *right;
63         /** parent of this node in the tree */
64         struct ActKeyColumn *parent;
65         /** DLRB_BLACK or DLRB_RED */
66         char tree_col;
67
68         /* keyframe info */
69         /** eBezTripe_KeyframeType */
70         char key_type;
71         /** eKeyframeHandleDrawOpts */
72         char handle_type;
73         /** eKeyframeExtremeDrawOpts */
74         char extreme_type;
75         short sel;
76         float cfra;
77
78         /* key-block info */
79         ActKeyBlockInfo block;
80
81         /* number of curves and keys in this column */
82         short totcurve, totkey, totblock;
83 } ActKeyColumn;
84
85 /* ActKeyBlockInfo - Flag */
86 typedef enum eActKeyBlock_Hold {
87         /* Key block represents a moving hold */
88         ACTKEYBLOCK_FLAG_MOVING_HOLD     = (1 << 0),
89         /* Key block represents a static hold */
90         ACTKEYBLOCK_FLAG_STATIC_HOLD     = (1 << 1),
91         /* Key block represents any kind of hold */
92         ACTKEYBLOCK_FLAG_ANY_HOLD        = (1 << 2),
93         /* The curve segment uses non-bezier interpolation */
94         ACTKEYBLOCK_FLAG_NON_BEZIER      = (1 << 3),
95 } eActKeyBlock_Flag;
96
97 /* *********************** Keyframe Drawing ****************************** */
98
99 /* options for keyframe shape drawing */
100 typedef enum eKeyframeShapeDrawOpts {
101         /* only the border */
102         KEYFRAME_SHAPE_FRAME = 0,
103         /* only the inside filling */
104         KEYFRAME_SHAPE_INSIDE,
105         /* the whole thing */
106         KEYFRAME_SHAPE_BOTH
107 } eKeyframeShapeDrawOpts;
108
109 /* Handle type. */
110 typedef enum eKeyframeHandleDrawOpts {
111         /* Don't draw */
112         KEYFRAME_HANDLE_NONE = 0,
113         /* Various marks in order of increasing display priority. */
114         KEYFRAME_HANDLE_AUTO_CLAMP,
115         KEYFRAME_HANDLE_AUTO,
116         KEYFRAME_HANDLE_VECTOR,
117         KEYFRAME_HANDLE_ALIGNED,
118         KEYFRAME_HANDLE_FREE,
119 } eKeyframeHandleDrawOpts;
120
121 /* Extreme type. */
122 typedef enum eKeyframeExtremeDrawOpts {
123         KEYFRAME_EXTREME_NONE  = 0,
124         /* Minimum/maximum present. */
125         KEYFRAME_EXTREME_MIN   = (1 << 0),
126         KEYFRAME_EXTREME_MAX   = (1 << 1),
127         /* Grouped keys have different states. */
128         KEYFRAME_EXTREME_MIXED = (1 << 2),
129         /* Both neigbors are equal to this key. */
130         KEYFRAME_EXTREME_FLAT  = (1 << 3),
131 } eKeyframeExtremeDrawOpts;
132
133 /* draw simple diamond-shape keyframe */
134 /* caller should set up vertex format, bind GPU_SHADER_KEYFRAME_DIAMOND,
135  * immBegin(GPU_PRIM_POINTS, n), then call this n times */
136 void draw_keyframe_shape(float x, float y, float size, bool sel, short key_type, short mode, float alpha,
137                          unsigned int pos_id, unsigned int size_id, unsigned int color_id, unsigned int outline_color_id,
138                          unsigned int linemask_id, short ipo_type, short extreme_type);
139
140 /* ******************************* Methods ****************************** */
141
142 /* Channel Drawing ------------------ */
143 /* F-Curve */
144 void draw_fcurve_channel(struct View2D *v2d, struct AnimData *adt, struct FCurve *fcu, float ypos, float yscale_fac, int saction_flag);
145 /* Action Group Summary */
146 void draw_agroup_channel(struct View2D *v2d, struct AnimData *adt, struct bActionGroup *agrp, float ypos, float yscale_fac, int saction_flag);
147 /* Action Summary */
148 void draw_action_channel(struct View2D *v2d, struct AnimData *adt, struct bAction *act, float ypos, float yscale_fac, int saction_flag);
149 /* Object Summary */
150 void draw_object_channel(struct View2D *v2d, struct bDopeSheet *ads, struct Object *ob, float ypos, float yscale_fac, int saction_flag);
151 /* Scene Summary */
152 void draw_scene_channel(struct View2D *v2d, struct bDopeSheet *ads, struct Scene *sce, float ypos, float yscale_fac, int saction_flag);
153 /* DopeSheet Summary */
154 void draw_summary_channel(struct View2D *v2d, struct bAnimContext *ac, float ypos, float yscale_fac, int saction_flag);
155 /* Grease Pencil datablock summary */
156 void draw_gpencil_channel(struct View2D *v2d, struct bDopeSheet *ads, struct bGPdata *gpd, float ypos, float yscale_fac, int saction_flag);
157 /* Grease Pencil Layer */
158 void draw_gpl_channel(struct View2D *v2d, struct bDopeSheet *ads, struct bGPDlayer *gpl, float ypos, float yscale_fac, int saction_flag);
159 /* Mask Layer */
160 void draw_masklay_channel(struct View2D *v2d, struct bDopeSheet *ads, struct MaskLayer *masklay, float ypos, float yscale_fac, int saction_flag);
161
162 /* Keydata Generation --------------- */
163 /* F-Curve */
164 void fcurve_to_keylist(struct AnimData *adt, struct FCurve *fcu, struct DLRBT_Tree *keys, int saction_flag);
165 /* Action Group */
166 void agroup_to_keylist(struct AnimData *adt, struct bActionGroup *agrp, struct DLRBT_Tree *keys, int saction_flag);
167 /* Action */
168 void action_to_keylist(struct AnimData *adt, struct bAction *act, struct DLRBT_Tree *keys, int saction_flag);
169 /* Object */
170 void ob_to_keylist(struct bDopeSheet *ads, struct Object *ob, struct DLRBT_Tree *keys, int saction_flag);
171 /* Cache File */
172 void cachefile_to_keylist(struct bDopeSheet *ads, struct CacheFile *cache_file, struct DLRBT_Tree *keys, int saction_flag);
173 /* Scene */
174 void scene_to_keylist(struct bDopeSheet *ads, struct Scene *sce, struct DLRBT_Tree *keys, int saction_flag);
175 /* DopeSheet Summary */
176 void summary_to_keylist(struct bAnimContext *ac, struct DLRBT_Tree *keys, int saction_flag);
177 /* Grease Pencil datablock summary */
178 void gpencil_to_keylist(struct bDopeSheet *ads, struct bGPdata *gpd, struct DLRBT_Tree *keys, const bool active);
179 /* Grease Pencil Layer */
180 void gpl_to_keylist(struct bDopeSheet *ads, struct bGPDlayer *gpl, struct DLRBT_Tree *keys);
181 /* Mask */
182 void mask_to_keylist(struct bDopeSheet *UNUSED(ads), struct MaskLayer *masklay, struct DLRBT_Tree *keys);
183
184 /* ActKeyColumn API ---------------- */
185 /* Comparator callback used for ActKeyColumns and cframe float-value pointer */
186 short compare_ak_cfraPtr(void *node, void *data);
187
188 /* Checks if ActKeyColumn has any block data */
189 bool actkeyblock_is_valid(ActKeyColumn *ab);
190
191 /* Checks if ActKeyColumn can be used as a block (i.e. drawn/used to detect "holds") */
192 int actkeyblock_get_valid_hold(ActKeyColumn *ab);
193
194 #endif  /*  __ED_KEYFRAMES_DRAW_H__ */