merge with trunk at r31523
[blender.git] / source / blender / makesdna / DNA_color_types.h
1 /**
2  *
3  * $Id$ 
4  *
5  * ***** BEGIN GPL LICENSE BLOCK *****
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software Foundation,
19  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20  *
21  * The Original Code is Copyright (C) 2006 Blender Foundation.
22  * All rights reserved.
23  *
24  * The Original Code is: all of this file.
25  *
26  * Contributor(s): none yet.
27  *
28  * ***** END GPL/BL DUAL LICENSE BLOCK *****
29  */
30 #ifndef DNA_COLOR_TYPES_H
31 #define DNA_COLOR_TYPES_H
32
33 #include "DNA_vec_types.h"
34
35 /* general defines for kernel functions */
36 #define CM_RESOL 32
37 #define CM_TABLE 256
38 #define CM_TABLEDIV             (1.0f/256.0f)
39
40 #define CM_TOT  4
41
42 typedef struct CurveMapPoint {
43         float x, y;
44         short flag, shorty;             /* shorty for result lookup */
45 } CurveMapPoint;
46
47 /* curvepoint->flag */
48 #define CUMA_SELECT             1
49 #define CUMA_VECTOR             2
50
51 struct CurveMapPoint;
52
53 typedef struct CurveMap {
54         short totpoint, flag;
55         
56         float range;                                    /* quick multiply value for reading table */
57         float mintable, maxtable;               /* the x-axis range for the table */
58         float ext_in[2], ext_out[2];    /* for extrapolated curves, the direction vector */
59         CurveMapPoint *curve;                   /* actual curve */
60         CurveMapPoint *table;                   /* display and evaluate table */
61         CurveMapPoint *premultable;             /* for RGB curves, premulled table */
62 } CurveMap;
63
64 /* cuma->flag */
65 #define CUMA_EXTEND_EXTRAPOLATE 1
66
67 typedef struct CurveMapping {
68         int flag, cur;                                  /* cur; for buttons, to show active curve */
69         int preset;
70         int changed_timestamp;
71         
72         rctf curr, clipr;                               /* current rect, clip rect (is default rect too) */
73         
74         CurveMap cm[4];                                 /* max 4 builtin curves per mapping struct now */
75         float black[3], white[3];               /* black/white point (black[0] abused for current frame) */
76         float bwmul[3];                                 /* black/white point multiply value, for speed */
77         
78         float sample[3];                                /* sample values, if flag set it draws line and intersection */
79 } CurveMapping;
80
81 /* cumapping->flag */
82 #define CUMA_DO_CLIP                    1
83 #define CUMA_PREMULLED                  2
84 #define CUMA_DRAW_CFRA                  4
85 #define CUMA_DRAW_SAMPLE                8
86
87 /* cumapping->preset */
88 typedef enum CurveMappingPreset {
89         CURVE_PRESET_LINE,
90         CURVE_PRESET_SHARP,
91         CURVE_PRESET_SMOOTH,
92         CURVE_PRESET_MAX,
93         CURVE_PRESET_MID9,
94         CURVE_PRESET_ROUND,
95         CURVE_PRESET_ROOT,
96 } CurveMappingPreset;
97
98 /* histogram->mode */
99 #define HISTO_MODE_LUMA 0
100 #define HISTO_MODE_RGB  1
101 #define HISTO_MODE_R    2
102 #define HISTO_MODE_G    3
103 #define HISTO_MODE_B    4
104
105 typedef struct Histogram {
106         int channels;
107         int x_resolution;
108         float data_r[256];
109         float data_g[256];
110         float data_b[256];
111         float data_luma[256];
112         float xmax, ymax;
113         int mode;
114         int height;
115 } Histogram;
116
117 struct ImBuf;
118
119 typedef struct Scopes {
120         int ok;
121         int sample_full;
122         int sample_lines;
123         float accuracy;
124         int wavefrm_mode;
125         float wavefrm_alpha;
126         float wavefrm_yfac;
127         int wavefrm_height;
128         float vecscope_alpha;
129         int vecscope_height;
130         float minmax[3][2];
131         struct Histogram hist;
132         float *waveform_1;
133         float *waveform_2;
134         float *waveform_3;
135         float *vecscope;
136         int waveform_tot;
137         int pad;
138 } Scopes;
139
140 /* scopes->wavefrm_mode */
141 #define SCOPES_WAVEFRM_LUMA             0
142 #define SCOPES_WAVEFRM_RGB              1
143 #define SCOPES_WAVEFRM_YCC_601  2
144 #define SCOPES_WAVEFRM_YCC_709  3
145 #define SCOPES_WAVEFRM_YCC_JPEG 4
146
147
148 #endif
149