Cleanup: split BKE_mesh_copy_settings into two functions
[blender.git] / source / blender / makesdna / DNA_color_types.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) 2006 Blender Foundation.
17  * All rights reserved.
18  */
19
20 /** \file
21  * \ingroup DNA
22  */
23
24 #pragma once
25
26 #include "DNA_defs.h"
27 #include "DNA_vec_types.h"
28
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32
33 /* general defines for kernel functions */
34 #define CM_RESOL 32
35 #define CM_TABLE 256
36 #define CM_TABLEDIV (1.0f / 256.0f)
37
38 #define CM_TOT 4
39
40 typedef struct CurveMapPoint {
41   float x, y;
42   /** Shorty for result lookup. */
43   short flag, shorty;
44 } CurveMapPoint;
45
46 /** #CurveMapPoint.flag */
47 enum {
48   CUMA_SELECT = (1 << 0),
49   CUMA_HANDLE_VECTOR = (1 << 1),
50   CUMA_HANDLE_AUTO_ANIM = (1 << 2),
51 };
52
53 typedef struct CurveMap {
54   short totpoint;
55   short flag DNA_DEPRECATED;
56
57   /** Quick multiply value for reading table. */
58   float range;
59   /** The x-axis range for the table. */
60   float mintable, maxtable;
61   /** For extrapolated curves, the direction vector. */
62   float ext_in[2], ext_out[2];
63   /** Actual curve. */
64   CurveMapPoint *curve;
65   /** Display and evaluate table. */
66   CurveMapPoint *table;
67
68   /** For RGB curves, pre-multiplied table. */
69   CurveMapPoint *premultable;
70   /** For RGB curves, pre-multiplied extrapolation vector. */
71   float premul_ext_in[2];
72   float premul_ext_out[2];
73 } CurveMap;
74
75 typedef struct CurveMapping {
76   /** Cur; for buttons, to show active curve. */
77   int flag, cur;
78   int preset;
79   int changed_timestamp;
80
81   /** Current rect, clip rect (is default rect too). */
82   rctf curr, clipr;
83
84   /** Max 4 builtin curves per mapping struct now. */
85   CurveMap cm[4];
86   /** Black/white point (black[0] abused for current frame). */
87   float black[3], white[3];
88   /** Black/white point multiply value, for speed. */
89   float bwmul[3];
90
91   /** Sample values, if flag set it draws line and intersection. */
92   float sample[3];
93
94   short tone;
95   char _pad[6];
96 } CurveMapping;
97
98 /** #CurveMapping.flag */
99 typedef enum eCurveMappingFlags {
100   CUMA_DO_CLIP = (1 << 0),
101   CUMA_PREMULLED = (1 << 1),
102   CUMA_DRAW_CFRA = (1 << 2),
103   CUMA_DRAW_SAMPLE = (1 << 3),
104
105   /** The curve is extended by extrapolation. When not set the curve is extended horizontally. */
106   CUMA_EXTEND_EXTRAPOLATE = (1 << 4),
107 } eCurveMappingFlags;
108
109 /** #CurveMapping.preset */
110 typedef enum eCurveMappingPreset {
111   CURVE_PRESET_LINE = 0,
112   CURVE_PRESET_SHARP = 1,
113   CURVE_PRESET_SMOOTH = 2,
114   CURVE_PRESET_MAX = 3,
115   CURVE_PRESET_MID9 = 4,
116   CURVE_PRESET_ROUND = 5,
117   CURVE_PRESET_ROOT = 6,
118   CURVE_PRESET_GAUSS = 7,
119   CURVE_PRESET_BELL = 8,
120 } eCurveMappingPreset;
121
122 /** #CurveMapping.tone */
123 typedef enum eCurveMappingTone {
124   CURVE_TONE_STANDARD = 0,
125   CURVE_TONE_FILMLIKE = 2,
126 } eCurveMappingTone;
127
128 /** #Histogram.mode */
129 enum {
130   HISTO_MODE_LUMA = 0,
131   HISTO_MODE_RGB = 1,
132   HISTO_MODE_R = 2,
133   HISTO_MODE_G = 3,
134   HISTO_MODE_B = 4,
135   HISTO_MODE_ALPHA = 5,
136 };
137
138 enum {
139   HISTO_FLAG_LINE = (1 << 0),
140   HISTO_FLAG_SAMPLELINE = (1 << 1),
141 };
142
143 typedef struct Histogram {
144   int channels;
145   int x_resolution;
146   float data_luma[256];
147   float data_r[256];
148   float data_g[256];
149   float data_b[256];
150   float data_a[256];
151   float xmax, ymax;
152   short mode;
153   short flag;
154   int height;
155
156   /** Sample line only (image coords: source -> destination). */
157   float co[2][2];
158 } Histogram;
159
160 typedef struct Scopes {
161   int ok;
162   int sample_full;
163   int sample_lines;
164   float accuracy;
165   int wavefrm_mode;
166   float wavefrm_alpha;
167   float wavefrm_yfac;
168   int wavefrm_height;
169   float vecscope_alpha;
170   int vecscope_height;
171   float minmax[3][2];
172   struct Histogram hist;
173   float *waveform_1;
174   float *waveform_2;
175   float *waveform_3;
176   float *vecscope;
177   int waveform_tot;
178   char _pad[4];
179 } Scopes;
180
181 /** #Scopes.wavefrm_mode */
182 enum {
183   SCOPES_WAVEFRM_LUMA = 0,
184   SCOPES_WAVEFRM_RGB_PARADE = 1,
185   SCOPES_WAVEFRM_YCC_601 = 2,
186   SCOPES_WAVEFRM_YCC_709 = 3,
187   SCOPES_WAVEFRM_YCC_JPEG = 4,
188   SCOPES_WAVEFRM_RGB = 5,
189 };
190
191 typedef struct ColorManagedViewSettings {
192   int flag;
193   char _pad[4];
194   /** Look which is being applied when displaying buffer on the screen
195    * (prior to view transform). */
196   char look[64];
197   /** View transform which is being applied when displaying buffer on the screen. */
198   char view_transform[64];
199   /** F-stop exposure. */
200   float exposure;
201   /** Post-display gamma transform. */
202   float gamma;
203   /** Pre-display RGB curves transform. */
204   struct CurveMapping *curve_mapping;
205   void *_pad2;
206 } ColorManagedViewSettings;
207
208 typedef struct ColorManagedDisplaySettings {
209   char display_device[64];
210 } ColorManagedDisplaySettings;
211
212 typedef struct ColorManagedColorspaceSettings {
213   /** MAX_COLORSPACE_NAME. */
214   char name[64];
215 } ColorManagedColorspaceSettings;
216
217 /** #ColorManagedViewSettings.flag */
218 enum {
219   COLORMANAGE_VIEW_USE_CURVES = (1 << 0),
220 };
221
222 #ifdef __cplusplus
223 }
224 #endif