own fix r34446, was incorrect, fixed properly now.
[blender.git] / source / blender / makesdna / DNA_gpencil_types.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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19  *
20  * The Original Code is Copyright (C) 2008, Blender Foundation.
21  * This is a new part of Blender
22  *
23  * Contributor(s): Joshua Leung
24  *
25  * ***** END GPL LICENSE BLOCK *****
26  */
27 #ifndef DNA_GPENCIL_TYPES_H
28 #define DNA_GPENCIL_TYPES_H
29
30 #include "DNA_listBase.h"
31 #include "DNA_ID.h"
32
33 /* Grease-Pencil Annotations - 'Stroke Point'
34  *      -> Coordinates may either be 2d or 3d depending on settings at the time
35  *      -> Coordinates of point on stroke, in proportions of window size
36  *         This assumes that the bottom-left corner is (0,0)
37  */
38 typedef struct bGPDspoint {
39         float x, y, z;                  /* co-ordinates of point (usually 2d, but can be 3d as well) */                         
40         float pressure;                 /* pressure of input device (from 0 to 1) at this point */
41 } bGPDspoint;
42
43 /* Grease-Pencil Annotations - 'Stroke'
44  *      -> A stroke represents a (simplified version) of the curve
45  *         drawn by the user in one 'mousedown'->'mouseup' operation
46  */
47 typedef struct bGPDstroke {
48         struct bGPDstroke *next, *prev;
49         
50         bGPDspoint *points;             /* array of data-points for stroke */
51         int totpoints;                  /* number of data-points in array */
52         
53         short thickness;                /* thickness of stroke (currently not used) */  
54         short flag;                             /* various settings about this stroke */
55 } bGPDstroke;
56
57 /* bGPDstroke->flag */
58         /* stroke is in 3d-space */
59 #define GP_STROKE_3DSPACE               (1<<0)
60         /* stroke is in 2d-space */
61 #define GP_STROKE_2DSPACE               (1<<1)
62         /* stroke is in 2d-space (but with special 'image' scaling) */
63 #define GP_STROKE_2DIMAGE               (1<<2)
64         /* only for use with stroke-buffer (while drawing eraser) */
65 #define GP_STROKE_ERASER                (1<<15)
66
67
68 /* Grease-Pencil Annotations - 'Frame'
69  *      -> Acts as storage for the 'image' formed by strokes
70  */
71 typedef struct bGPDframe {
72         struct bGPDframe *next, *prev;
73         
74         ListBase strokes;       /* list of the simplified 'strokes' that make up the frame's data */
75         
76         int framenum;           /* frame number of this frame */
77         int flag;                       /* temp settings */
78 } bGPDframe;
79
80 /* bGPDframe->flag */   
81         /* frame is being painted on */
82 #define GP_FRAME_PAINT          (1<<0)
83         /* for editing in Action Editor */
84 #define GP_FRAME_SELECT         (1<<1)
85
86
87 /* Grease-Pencil Annotations - 'Layer' */
88 typedef struct bGPDlayer {
89         struct bGPDlayer *next, *prev;
90         
91         ListBase frames;                /* list of annotations to display for frames (bGPDframe list) */
92         bGPDframe *actframe;    /* active frame (should be the frame that is currently being displayed) */
93         
94         int flag;                               /* settings for layer */                
95         short thickness;                /* current thickness to apply to strokes */
96         short gstep;                    /* max number of frames between active and ghost to show (0=only those on either side) */
97         
98         float color[4];                 /* color that should be used to draw all the strokes in this layer */
99         
100         char info[128];                 /* optional reference info about this layer (i.e. "director's comments, 12/3") */
101 } bGPDlayer;
102
103 /* bGPDlayer->flag */
104         /* don't display layer */
105 #define GP_LAYER_HIDE           (1<<0)
106         /* protected from further editing */
107 #define GP_LAYER_LOCKED         (1<<1)  
108         /* layer is 'active' layer being edited */
109 #define GP_LAYER_ACTIVE         (1<<2)
110         /* draw points of stroke for debugging purposes */
111 #define GP_LAYER_DRAWDEBUG      (1<<3)
112         /* do onionskinning */
113 #define GP_LAYER_ONIONSKIN      (1<<4)
114         /* for editing in Action Editor */
115 #define GP_LAYER_SELECT         (1<<5)
116         /* current frame for layer can't be changed */
117 #define GP_LAYER_FRAMELOCK      (1<<6)
118
119
120 /* Grease-Pencil Annotations - 'DataBlock' */
121 typedef struct bGPdata {
122         ID id;                                  /* Grease Pencil data is */
123         
124         /* saved Grease-Pencil data */
125         ListBase layers;                /* bGPDlayers */
126         int flag;                               /* settings for this datablock */
127         
128         /* not-saved stroke buffer data (only used during paint-session) 
129          *      - buffer must be initialised before use, but freed after 
130          *        whole paint operation is over
131          */
132         short sbuffer_size;                     /* number of elements currently in cache */
133         short sbuffer_sflag;            /* flags for stroke that cache represents */
134         void *sbuffer;                          /* stroke buffer (can hold GP_STROKE_BUFFER_MAX) */
135 } bGPdata;
136
137 /* bGPdata->flag */
138 // XXX many of these flags should be depreceated for more general ideas in 2.5
139         /* don't allow painting to occur at all */
140         // XXX is depreceated - not well understood
141 #define GP_DATA_LMBPLOCK        (1<<0)
142         /* show debugging info in viewport (i.e. status print) */
143 #define GP_DATA_DISPINFO        (1<<1)
144         /* in Action Editor, show as expanded channel */
145 #define GP_DATA_EXPAND          (1<<2)
146         /* is the block overriding all clicks? */
147         // XXX is depreceated - nasty old concept
148 #define GP_DATA_EDITPAINT       (1<<3)
149         /* new strokes are added in viewport space */
150 #define GP_DATA_VIEWALIGN       (1<<4)
151         /* Project into the screens Z values */
152 #define GP_DATA_DEPTH_VIEW      (1<<5)
153 #define GP_DATA_DEPTH_STROKE (1<<6)
154
155 #define GP_DATA_DEPTH_STROKE_ENDPOINTS (1<<7)
156
157 #endif /*  DNA_GPENCIL_TYPES_H */