More tooltip tweaks
[blender.git] / source / blender / makesdna / DNA_gpencil_types.h
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version. 
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * The Original Code is Copyright (C) 2008, Blender Foundation.
19  * This is a new part of Blender
20  *
21  * Contributor(s): Joshua Leung
22  *
23  * ***** END GPL LICENSE BLOCK *****
24  */
25
26 /** \file DNA_gpencil_types.h
27  *  \ingroup DNA
28  */
29
30 #ifndef __DNA_GPENCIL_TYPES_H__
31 #define __DNA_GPENCIL_TYPES_H__
32
33 #include "DNA_listBase.h"
34 #include "DNA_ID.h"
35
36 struct AnimData;
37
38
39 /* Grease-Pencil Annotations - 'Stroke Point'
40  *      -> Coordinates may either be 2d or 3d depending on settings at the time
41  *      -> Coordinates of point on stroke, in proportions of window size
42  *         This assumes that the bottom-left corner is (0,0)
43  */
44 typedef struct bGPDspoint {
45         float x, y, z;                  /* co-ordinates of point (usually 2d, but can be 3d as well) */
46         float pressure;                 /* pressure of input device (from 0 to 1) at this point */
47         float time;                             /* seconds since start of stroke */
48         int flag;                               /* additional options (NOTE: can shrink this field down later if needed) */
49 } bGPDspoint;
50
51 /* bGPDspoint->flag */
52 typedef enum eGPDspoint_Flag {
53         /* stroke point is selected (for editing) */
54         GP_SPOINT_SELECT        = (1 << 0),
55         
56         /* stroke point is tagged (for some editing operation) */
57         GP_SPOINT_TAG       = (1 << 1),
58 } eGPSPoint_Flag;
59
60 /* Grease-Pencil Annotations - 'Stroke'
61  *      -> A stroke represents a (simplified version) of the curve
62  *         drawn by the user in one 'mousedown'->'mouseup' operation
63  */
64 typedef struct bGPDstroke {
65         struct bGPDstroke *next, *prev;
66         bGPDspoint *points;             /* array of data-points for stroke */
67         void *pad;                              /* keep 4 pointers at the beginning, padding for 'inittime' is tricky 64/32bit */
68         int totpoints;                  /* number of data-points in array */
69         
70         short thickness;                /* thickness of stroke (currently not used) */
71         short flag;                             /* various settings about this stroke */
72
73         double inittime;                /* Init time of stroke */
74 } bGPDstroke;
75
76 /* bGPDstroke->flag */
77 typedef enum eGPDstroke_Flag {
78         /* stroke is in 3d-space */
79         GP_STROKE_3DSPACE               = (1 << 0),
80         /* stroke is in 2d-space */
81         GP_STROKE_2DSPACE               = (1 << 1),
82         /* stroke is in 2d-space (but with special 'image' scaling) */
83         GP_STROKE_2DIMAGE               = (1 << 2),
84         /* stroke is selected */
85         GP_STROKE_SELECT                = (1 << 3),
86         /* only for use with stroke-buffer (while drawing eraser) */
87         GP_STROKE_ERASER                = (1 << 15)
88 } eGPDstroke_Flag;
89
90 /* Grease-Pencil Annotations - 'Frame'
91  *      -> Acts as storage for the 'image' formed by strokes
92  */
93 typedef struct bGPDframe {
94         struct bGPDframe *next, *prev;
95         
96         ListBase strokes;       /* list of the simplified 'strokes' that make up the frame's data */
97         
98         int framenum;           /* frame number of this frame */
99         
100         short flag;                     /* temp settings */
101         short key_type;         /* keyframe type (eBezTriple_KeyframeType) */
102 } bGPDframe;
103
104 /* bGPDframe->flag */
105 typedef enum eGPDframe_Flag {
106         /* frame is being painted on */
107         GP_FRAME_PAINT          = (1 << 0),
108         /* for editing in Action Editor */
109         GP_FRAME_SELECT         = (1 << 1)
110 } eGPDframe_Flag;
111
112 /* Grease-Pencil Annotations - 'Layer' */
113 typedef struct bGPDlayer {
114         struct bGPDlayer *next, *prev;
115         
116         ListBase frames;                /* list of annotations to display for frames (bGPDframe list) */
117         bGPDframe *actframe;    /* active frame (should be the frame that is currently being displayed) */
118         
119         short flag;                             /* settings for layer */
120         short thickness;                /* current thickness to apply to strokes */
121         
122         short gstep;                    /* Ghosts Before: max number of ghost frames to show between active frame and the one before it (0 = only the ghost itself) */
123         short gstep_next;               /* Ghosts After:  max number of ghost frames to show after active frame and the following it    (0 = only the ghost itself) */
124         
125         float gcolor_prev[3];   /* optional color for ghosts before the active frame */
126         float gcolor_next[3];   /* optional color for ghosts after the active frame */
127         
128         float color[4];                 /* color that should be used to draw all the strokes in this layer */
129         float fill[4];                  /* color that should be used for drawing "fills" for strokes */
130         
131         char info[128];                 /* optional reference info about this layer (i.e. "director's comments, 12/3")
132                                                          * this is used for the name of the layer  too and kept unique. */
133 } bGPDlayer;
134
135 /* bGPDlayer->flag */
136 typedef enum eGPDlayer_Flag {
137         /* don't display layer */
138         GP_LAYER_HIDE                   = (1 << 0),
139         /* protected from further editing */
140         GP_LAYER_LOCKED                 = (1 << 1),
141         /* layer is 'active' layer being edited */
142         GP_LAYER_ACTIVE                 = (1 << 2),
143         /* draw points of stroke for debugging purposes */
144         GP_LAYER_DRAWDEBUG              = (1 << 3),
145         /* do onion skinning */
146         GP_LAYER_ONIONSKIN              = (1 << 4),
147         /* for editing in Action Editor */
148         GP_LAYER_SELECT                 = (1 << 5),
149         /* current frame for layer can't be changed */
150         GP_LAYER_FRAMELOCK              = (1 << 6),
151         /* don't render xray (which is default) */
152         GP_LAYER_NO_XRAY                = (1 << 7),
153         /* use custom color for ghosts before current frame */
154         GP_LAYER_GHOST_PREVCOL  = (1 << 8),
155         /* use custom color for ghosts after current frame */
156         GP_LAYER_GHOST_NEXTCOL  = (1 << 9),
157         /* "volumetric" strokes (i.e. GLU Quadric discs in 3D) */
158         GP_LAYER_VOLUMETRIC             = (1 << 10),
159 } eGPDlayer_Flag;
160
161 /* Grease-Pencil Annotations - 'DataBlock' */
162 typedef struct bGPdata {
163         ID id;                                  /* Grease Pencil data is a datablock */
164         struct AnimData *adt;   /* animation data - for animating draw settings */
165         
166         /* saved Grease-Pencil data */
167         ListBase layers;                /* bGPDlayers */
168         int flag;                               /* settings for this datablock */
169         
170         /* not-saved stroke buffer data (only used during paint-session) 
171          *      - buffer must be initialized before use, but freed after 
172          *        whole paint operation is over
173          */
174         short sbuffer_size;                     /* number of elements currently in cache */
175         short sbuffer_sflag;            /* flags for stroke that cache represents */
176         void *sbuffer;                          /* stroke buffer (can hold GP_STROKE_BUFFER_MAX) */
177 } bGPdata;
178
179 /* bGPdata->flag */
180 /* NOTE: A few flags have been deprecated since early 2.5,
181  *       since they have been made redundant by interaction
182  *       changes made during the porting process.
183  */
184 typedef enum eGPdata_Flag {
185         /* don't allow painting to occur at all */
186         /* GP_DATA_LMBPLOCK  = (1 << 0), */
187         
188         /* show debugging info in viewport (i.e. status print) */
189         GP_DATA_DISPINFO        = (1 << 1),
190         /* in Action Editor, show as expanded channel */
191         GP_DATA_EXPAND          = (1 << 2),
192         
193         /* is the block overriding all clicks? */
194         /* GP_DATA_EDITPAINT = (1 << 3), */
195         
196 /* ------------------------------------------------ DEPRECATED */
197         /* new strokes are added in viewport space */
198         GP_DATA_VIEWALIGN       = (1 << 4),
199         
200         /* Project into the screen's Z values */
201         GP_DATA_DEPTH_VIEW      = (1 << 5),
202         GP_DATA_DEPTH_STROKE = (1 << 6),
203
204         GP_DATA_DEPTH_STROKE_ENDPOINTS = (1 << 7),
205 /* ------------------------------------------------ DEPRECATED */
206         
207         /* Stroke Editing Mode - Toggle to enable alternative keymap for easier editing of stroke points */
208         GP_DATA_STROKE_EDITMODE = (1 << 8),
209         
210         /* Convenience/cache flag to make it easier to quickly toggle onion skinning on/off */
211         GP_DATA_SHOW_ONIONSKINS = (1 << 9)
212 } eGPdata_Flag;
213
214 #endif /*  __DNA_GPENCIL_TYPES_H__ */