Blender  V3.3
rna_color.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
7 #include <stdio.h>
8 #include <stdlib.h>
9 
10 #include "DNA_color_types.h"
11 #include "DNA_texture_types.h"
12 
13 #include "BLI_utildefines.h"
14 
15 #include "BKE_node_tree_update.h"
16 
17 #include "RNA_define.h"
18 #include "rna_internal.h"
19 
20 #include "WM_api.h"
21 #include "WM_types.h"
22 
23 #ifdef RNA_RUNTIME
24 
25 # include "RNA_access.h"
26 # include "RNA_path.h"
27 
28 # include "DNA_image_types.h"
29 # include "DNA_material_types.h"
30 # include "DNA_movieclip_types.h"
31 # include "DNA_node_types.h"
32 # include "DNA_object_types.h"
33 # include "DNA_particle_types.h"
34 # include "DNA_sequence_types.h"
35 
36 # include "MEM_guardedalloc.h"
37 
38 # include "BKE_colorband.h"
39 # include "BKE_colortools.h"
40 # include "BKE_image.h"
41 # include "BKE_linestyle.h"
42 # include "BKE_movieclip.h"
43 # include "BKE_node.h"
44 
45 # include "DEG_depsgraph.h"
46 
47 # include "ED_node.h"
48 
49 # include "IMB_colormanagement.h"
50 # include "IMB_imbuf.h"
51 
52 # include "SEQ_iterator.h"
53 # include "SEQ_relations.h"
54 
55 static int rna_CurveMapping_curves_length(PointerRNA *ptr)
56 {
57  CurveMapping *cumap = (CurveMapping *)ptr->data;
58  int len;
59 
60  for (len = 0; len < CM_TOT; len++) {
61  if (!cumap->cm[len].curve) {
62  break;
63  }
64  }
65 
66  return len;
67 }
68 
69 static void rna_CurveMapping_curves_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
70 {
71  CurveMapping *cumap = (CurveMapping *)ptr->data;
72 
74  iter, cumap->cm, sizeof(CurveMap), rna_CurveMapping_curves_length(ptr), 0, NULL);
75 }
76 
77 static void rna_CurveMapping_clip_set(PointerRNA *ptr, bool value)
78 {
79  CurveMapping *cumap = (CurveMapping *)ptr->data;
80 
81  if (value) {
82  cumap->flag |= CUMA_DO_CLIP;
83  }
84  else {
85  cumap->flag &= ~CUMA_DO_CLIP;
86  }
87 
88  BKE_curvemapping_changed(cumap, false);
89 }
90 
91 static void rna_CurveMapping_black_level_set(PointerRNA *ptr, const float *values)
92 {
93  CurveMapping *cumap = (CurveMapping *)ptr->data;
94  cumap->black[0] = values[0];
95  cumap->black[1] = values[1];
96  cumap->black[2] = values[2];
98 }
99 
100 static void rna_CurveMapping_white_level_set(PointerRNA *ptr, const float *values)
101 {
102  CurveMapping *cumap = (CurveMapping *)ptr->data;
103  cumap->white[0] = values[0];
104  cumap->white[1] = values[1];
105  cumap->white[2] = values[2];
107 }
108 
109 static void rna_CurveMapping_tone_update(Main *UNUSED(bmain),
110  Scene *UNUSED(scene),
112 {
115 }
116 
117 static void rna_CurveMapping_extend_update(Main *UNUSED(bmain),
118  Scene *UNUSED(scene),
120 {
123 }
124 
125 static void rna_CurveMapping_clipminx_range(
126  PointerRNA *ptr, float *min, float *max, float *UNUSED(softmin), float *UNUSED(softmax))
127 {
128  CurveMapping *cumap = (CurveMapping *)ptr->data;
129 
130  *min = -100.0f;
131  *max = cumap->clipr.xmax;
132 }
133 
134 static void rna_CurveMapping_clipminy_range(
135  PointerRNA *ptr, float *min, float *max, float *UNUSED(softmin), float *UNUSED(softmax))
136 {
137  CurveMapping *cumap = (CurveMapping *)ptr->data;
138 
139  *min = -100.0f;
140  *max = cumap->clipr.ymax;
141 }
142 
143 static void rna_CurveMapping_clipmaxx_range(
144  PointerRNA *ptr, float *min, float *max, float *UNUSED(softmin), float *UNUSED(softmax))
145 {
146  CurveMapping *cumap = (CurveMapping *)ptr->data;
147 
148  *min = cumap->clipr.xmin;
149  *max = 100.0f;
150 }
151 
152 static void rna_CurveMapping_clipmaxy_range(
153  PointerRNA *ptr, float *min, float *max, float *UNUSED(softmin), float *UNUSED(softmax))
154 {
155  CurveMapping *cumap = (CurveMapping *)ptr->data;
156 
157  *min = cumap->clipr.ymin;
158  *max = 100.0f;
159 }
160 
161 static char *rna_ColorRamp_path(const PointerRNA *ptr)
162 {
163  char *path = NULL;
164 
165  /* handle the cases where a single data-block may have 2 ramp types */
166  if (ptr->owner_id) {
167  ID *id = ptr->owner_id;
168 
169  switch (GS(id->name)) {
170  case ID_NT: {
171  bNodeTree *ntree = (bNodeTree *)id;
172  bNode *node;
173  PointerRNA node_ptr;
174  char *node_path;
175 
176  for (node = ntree->nodes.first; node; node = node->next) {
178  if (node->storage == ptr->data) {
179  /* all node color ramp properties called 'color_ramp'
180  * prepend path from ID to the node
181  */
182  RNA_pointer_create(id, &RNA_Node, node, &node_ptr);
183  node_path = RNA_path_from_ID_to_struct(&node_ptr);
184  path = BLI_sprintfN("%s.color_ramp", node_path);
185  MEM_freeN(node_path);
186  }
187  }
188  }
189  break;
190  }
191 
192  case ID_LS: {
193  /* may be NULL */
195  break;
196  }
197 
198  default:
199  /* everything else just uses 'color_ramp' */
200  path = BLI_strdup("color_ramp");
201  break;
202  }
203  }
204  else {
205  /* everything else just uses 'color_ramp' */
206  path = BLI_strdup("color_ramp");
207  }
208 
209  return path;
210 }
211 
212 static char *rna_ColorRampElement_path(const PointerRNA *ptr)
213 {
214  PointerRNA ramp_ptr;
215  PropertyRNA *prop;
216  char *path = NULL;
217  int index;
218 
219  /* helper macro for use here to try and get the path
220  * - this calls the standard code for getting a path to a texture...
221  */
222 
223 # define COLRAMP_GETPATH \
224  { \
225  prop = RNA_struct_find_property(&ramp_ptr, "elements"); \
226  if (prop) { \
227  index = RNA_property_collection_lookup_index(&ramp_ptr, prop, ptr); \
228  if (index != -1) { \
229  char *texture_path = rna_ColorRamp_path(&ramp_ptr); \
230  path = BLI_sprintfN("%s.elements[%d]", texture_path, index); \
231  MEM_freeN(texture_path); \
232  } \
233  } \
234  } \
235  (void)0
236 
237  /* determine the path from the ID-block to the ramp */
238  /* FIXME: this is a very slow way to do it, but it will have to suffice... */
239  if (ptr->owner_id) {
240  ID *id = ptr->owner_id;
241 
242  switch (GS(id->name)) {
243  case ID_NT: {
244  bNodeTree *ntree = (bNodeTree *)id;
245  bNode *node;
246 
247  for (node = ntree->nodes.first; node; node = node->next) {
249  RNA_pointer_create(id, &RNA_ColorRamp, node->storage, &ramp_ptr);
250  COLRAMP_GETPATH;
251  }
252  }
253  break;
254  }
255  case ID_LS: {
256  ListBase listbase;
257  LinkData *link;
258 
260  for (link = (LinkData *)listbase.first; link; link = link->next) {
261  RNA_pointer_create(id, &RNA_ColorRamp, link->data, &ramp_ptr);
262  COLRAMP_GETPATH;
263  }
264  BLI_freelistN(&listbase);
265  break;
266  }
267 
268  default: /* everything else should have a "color_ramp" property */
269  {
270  /* create pointer to the ID block, and try to resolve "color_ramp" pointer */
271  RNA_id_pointer_create(id, &ramp_ptr);
272  if (RNA_path_resolve(&ramp_ptr, "color_ramp", &ramp_ptr, &prop)) {
273  COLRAMP_GETPATH;
274  }
275  break;
276  }
277  }
278  }
279 
280  /* cleanup the macro we defined */
281 # undef COLRAMP_GETPATH
282 
283  return path;
284 }
285 
286 static void rna_ColorRamp_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
287 {
288  if (ptr->owner_id) {
289  ID *id = ptr->owner_id;
290 
291  switch (GS(id->name)) {
292  case ID_MA: {
293  Material *ma = (Material *)ptr->owner_id;
294 
295  DEG_id_tag_update(&ma->id, 0);
297  break;
298  }
299  case ID_NT: {
300  bNodeTree *ntree = (bNodeTree *)id;
301  bNode *node;
302 
303  for (node = ntree->nodes.first; node; node = node->next) {
307  }
308  }
309  break;
310  }
311  case ID_TE: {
312  Tex *tex = (Tex *)ptr->owner_id;
313 
314  DEG_id_tag_update(&tex->id, 0);
316  break;
317  }
318  case ID_LS: {
320 
322  break;
323  }
324  /* ColorRamp for particle display is owned by the object (see T54422) */
325  case ID_OB:
326  case ID_PA: {
328 
330  }
331  default:
332  break;
333  }
334  }
335 }
336 
337 static void rna_ColorRamp_eval(struct ColorBand *coba, float position, float color[4])
338 {
339  BKE_colorband_evaluate(coba, position, color);
340 }
341 
342 static CBData *rna_ColorRampElement_new(struct ColorBand *coba,
343  ReportList *reports,
344  float position)
345 {
346  CBData *element = BKE_colorband_element_add(coba, position);
347 
348  if (element == NULL) {
349  BKE_reportf(reports, RPT_ERROR, "Unable to add element to colorband (limit %d)", MAXCOLORBAND);
350  }
351 
352  return element;
353 }
354 
355 static void rna_ColorRampElement_remove(struct ColorBand *coba,
356  ReportList *reports,
357  PointerRNA *element_ptr)
358 {
359  CBData *element = element_ptr->data;
360  int index = (int)(element - coba->data);
361  if (!BKE_colorband_element_remove(coba, index)) {
362  BKE_report(reports, RPT_ERROR, "Element not found in element collection or last element");
363  return;
364  }
365 
366  RNA_POINTER_INVALIDATE(element_ptr);
367 }
368 
369 static void rna_CurveMap_remove_point(CurveMap *cuma, ReportList *reports, PointerRNA *point_ptr)
370 {
371  CurveMapPoint *point = point_ptr->data;
372  if (BKE_curvemap_remove_point(cuma, point) == false) {
373  BKE_report(reports, RPT_ERROR, "Unable to remove curve point");
374  return;
375  }
376 
377  RNA_POINTER_INVALIDATE(point_ptr);
378 }
379 
380 static void rna_Scopes_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
381 {
382  Scopes *s = (Scopes *)ptr->data;
383  s->ok = 0;
384 }
385 
386 static int rna_ColorManagedDisplaySettings_display_device_get(struct PointerRNA *ptr)
387 {
389 
391 }
392 
393 static void rna_ColorManagedDisplaySettings_display_device_set(struct PointerRNA *ptr, int value)
394 {
396  const char *name = IMB_colormanagement_display_get_indexed_name(value);
397 
398  if (name) {
399  BLI_strncpy(display->display_device, name, sizeof(display->display_device));
400  }
401 }
402 
403 static const EnumPropertyItem *rna_ColorManagedDisplaySettings_display_device_itemf(
404  bContext *UNUSED(C), PointerRNA *UNUSED(ptr), PropertyRNA *UNUSED(prop), bool *r_free)
405 {
406  EnumPropertyItem *items = NULL;
407  int totitem = 0;
408 
409  IMB_colormanagement_display_items_add(&items, &totitem);
410  RNA_enum_item_end(&items, &totitem);
411 
412  *r_free = true;
413 
414  return items;
415 }
416 
417 static void rna_ColorManagedDisplaySettings_display_device_update(Main *bmain,
418  Scene *UNUSED(scene),
419  PointerRNA *ptr)
420 {
421  ID *id = ptr->owner_id;
422 
423  if (!id) {
424  return;
425  }
426 
427  if (GS(id->name) == ID_SCE) {
428  Scene *scene = (Scene *)id;
429 
431 
432  DEG_id_tag_update(id, 0);
434 
435  /* Color management can be baked into shaders, need to refresh. */
436  for (Material *ma = bmain->materials.first; ma; ma = ma->id.next) {
438  }
439  }
440 }
441 
442 static char *rna_ColorManagedDisplaySettings_path(const PointerRNA *UNUSED(ptr))
443 {
444  return BLI_strdup("display_settings");
445 }
446 
447 static int rna_ColorManagedViewSettings_view_transform_get(PointerRNA *ptr)
448 {
450 
451  return IMB_colormanagement_view_get_named_index(view->view_transform);
452 }
453 
454 static void rna_ColorManagedViewSettings_view_transform_set(PointerRNA *ptr, int value)
455 {
457 
458  const char *name = IMB_colormanagement_view_get_indexed_name(value);
459 
460  if (name) {
461  BLI_strncpy(view->view_transform, name, sizeof(view->view_transform));
462  }
463 }
464 
465 static const EnumPropertyItem *rna_ColorManagedViewSettings_view_transform_itemf(
466  bContext *C, PointerRNA *UNUSED(ptr), PropertyRNA *UNUSED(prop), bool *r_free)
467 {
469  EnumPropertyItem *items = NULL;
470  ColorManagedDisplaySettings *display_settings = &scene->display_settings;
471  int totitem = 0;
472 
473  IMB_colormanagement_view_items_add(&items, &totitem, display_settings->display_device);
474  RNA_enum_item_end(&items, &totitem);
475 
476  *r_free = true;
477  return items;
478 }
479 
480 static int rna_ColorManagedViewSettings_look_get(PointerRNA *ptr)
481 {
483 
485 }
486 
487 static void rna_ColorManagedViewSettings_look_set(PointerRNA *ptr, int value)
488 {
490 
491  const char *name = IMB_colormanagement_look_get_indexed_name(value);
492 
493  if (name) {
494  BLI_strncpy(view->look, name, sizeof(view->look));
495  }
496 }
497 
498 static const EnumPropertyItem *rna_ColorManagedViewSettings_look_itemf(bContext *UNUSED(C),
499  PointerRNA *ptr,
500  PropertyRNA *UNUSED(prop),
501  bool *r_free)
502 {
504  EnumPropertyItem *items = NULL;
505  int totitem = 0;
506 
507  IMB_colormanagement_look_items_add(&items, &totitem, view->view_transform);
508  RNA_enum_item_end(&items, &totitem);
509 
510  *r_free = true;
511  return items;
512 }
513 
514 static void rna_ColorManagedViewSettings_use_curves_set(PointerRNA *ptr, bool value)
515 {
517 
518  if (value) {
519  view_settings->flag |= COLORMANAGE_VIEW_USE_CURVES;
520 
521  if (view_settings->curve_mapping == NULL) {
522  view_settings->curve_mapping = BKE_curvemapping_add(4, 0.0f, 0.0f, 1.0f, 1.0f);
523  }
524  }
525  else {
526  view_settings->flag &= ~COLORMANAGE_VIEW_USE_CURVES;
527  }
528 }
529 
530 static char *rna_ColorManagedViewSettings_path(const PointerRNA *UNUSED(ptr))
531 {
532  return BLI_strdup("view_settings");
533 }
534 
535 static bool rna_ColorManagedColorspaceSettings_is_data_get(struct PointerRNA *ptr)
536 {
539  return STREQ(colorspace->name, data_name);
540 }
541 
542 static void rna_ColorManagedColorspaceSettings_is_data_set(struct PointerRNA *ptr, bool value)
543 {
545  if (value) {
547  STRNCPY(colorspace->name, data_name);
548  }
549 }
550 
551 static int rna_ColorManagedColorspaceSettings_colorspace_get(struct PointerRNA *ptr)
552 {
554 
556 }
557 
558 static void rna_ColorManagedColorspaceSettings_colorspace_set(struct PointerRNA *ptr, int value)
559 {
561  const char *name = IMB_colormanagement_colorspace_get_indexed_name(value);
562 
563  if (name && name[0]) {
564  BLI_strncpy(colorspace->name, name, sizeof(colorspace->name));
565  }
566 }
567 
568 static const EnumPropertyItem *rna_ColorManagedColorspaceSettings_colorspace_itemf(
569  bContext *UNUSED(C), PointerRNA *UNUSED(ptr), PropertyRNA *UNUSED(prop), bool *r_free)
570 {
571  EnumPropertyItem *items = NULL;
572  int totitem = 0;
573 
575  RNA_enum_item_end(&items, &totitem);
576 
577  *r_free = true;
578 
579  return items;
580 }
581 
582 typedef struct Seq_colorspace_cb_data {
583  ColorManagedColorspaceSettings *colorspace_settings;
584  Sequence *r_seq;
585 } Seq_colorspace_cb_data;
586 
587 static bool seq_find_colorspace_settings_cb(Sequence *seq, void *user_data)
588 {
589  Seq_colorspace_cb_data *cd = (Seq_colorspace_cb_data *)user_data;
590  if (seq->strip && &seq->strip->colorspace_settings == cd->colorspace_settings) {
591  cd->r_seq = seq;
592  return false;
593  }
594  return true;
595 }
596 
597 static bool seq_free_anim_cb(Sequence *seq, void *UNUSED(user_data))
598 {
600  return true;
601 }
602 
603 static void rna_ColorManagedColorspaceSettings_reload_update(Main *bmain,
604  Scene *UNUSED(scene),
605  PointerRNA *ptr)
606 {
607  ID *id = ptr->owner_id;
608 
609  if (!id) {
610  /* Happens for color space settings on operators. */
611  return;
612  }
613 
614  if (GS(id->name) == ID_IM) {
615  Image *ima = (Image *)id;
616 
617  DEG_id_tag_update(&ima->id, 0);
618 
620 
623  }
624  else if (GS(id->name) == ID_MC) {
625  MovieClip *clip = (MovieClip *)id;
626 
629 
632  }
633  else if (GS(id->name) == ID_SCE) {
634  Scene *scene = (Scene *)id;
636 
637  if (scene->ed) {
639  ptr->data;
640  Seq_colorspace_cb_data cb_data = {colorspace_settings, NULL};
641 
642  if (&scene->sequencer_colorspace_settings != colorspace_settings) {
643  SEQ_for_each_callback(&scene->ed->seqbase, seq_find_colorspace_settings_cb, &cb_data);
644  }
645  Sequence *seq = cb_data.r_seq;
646 
647  if (seq) {
649 
650  if (seq->strip->proxy && seq->strip->proxy->anim) {
651  IMB_free_anim(seq->strip->proxy->anim);
652  seq->strip->proxy->anim = NULL;
653  }
654 
656  }
657  else {
658  SEQ_for_each_callback(&scene->ed->seqbase, seq_free_anim_cb, NULL);
659  }
660 
662  }
663  }
664 }
665 
666 static char *rna_ColorManagedSequencerColorspaceSettings_path(const PointerRNA *UNUSED(ptr))
667 {
668  return BLI_strdup("sequencer_colorspace_settings");
669 }
670 
671 static char *rna_ColorManagedInputColorspaceSettings_path(const PointerRNA *UNUSED(ptr))
672 {
673  return BLI_strdup("colorspace_settings");
674 }
675 
676 static void rna_ColorManagement_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
677 {
678  ID *id = ptr->owner_id;
679 
680  if (!id) {
681  return;
682  }
683 
684  if (GS(id->name) == ID_SCE) {
686  }
687 }
688 
689 /* this function only exists because #BKE_curvemap_evaluateF uses a 'const' qualifier */
690 static float rna_CurveMapping_evaluateF(struct CurveMapping *cumap,
691  ReportList *reports,
692  struct CurveMap *cuma,
693  float value)
694 {
695  if (&cumap->cm[0] != cuma && &cumap->cm[1] != cuma && &cumap->cm[2] != cuma &&
696  &cumap->cm[3] != cuma) {
697  BKE_report(reports, RPT_ERROR, "CurveMapping does not own CurveMap");
698  return 0.0f;
699  }
700 
701  if (!cuma->table) {
702  BKE_curvemapping_init(cumap);
703  }
704  return BKE_curvemap_evaluateF(cumap, cuma, value);
705 }
706 
707 static void rna_CurveMap_initialize(struct CurveMapping *cumap)
708 {
709  BKE_curvemapping_init(cumap);
710 }
711 #else
712 
714 {
715  StructRNA *srna;
716  PropertyRNA *prop;
717  static const EnumPropertyItem prop_handle_type_items[] = {
718  {0, "AUTO", 0, "Auto Handle", ""},
719  {CUMA_HANDLE_AUTO_ANIM, "AUTO_CLAMPED", 0, "Auto Clamped Handle", ""},
720  {CUMA_HANDLE_VECTOR, "VECTOR", 0, "Vector Handle", ""},
721  {0, NULL, 0, NULL, NULL},
722  };
723 
724  srna = RNA_def_struct(brna, "CurveMapPoint", NULL);
725  RNA_def_struct_ui_text(srna, "CurveMapPoint", "Point of a curve used for a curve mapping");
726 
727  prop = RNA_def_property(srna, "location", PROP_FLOAT, PROP_XYZ);
728  RNA_def_property_float_sdna(prop, NULL, "x");
729  RNA_def_property_array(prop, 2);
730  RNA_def_property_ui_text(prop, "Location", "X/Y coordinates of the curve point");
731 
732  prop = RNA_def_property(srna, "handle_type", PROP_ENUM, PROP_NONE);
736  prop, "Handle Type", "Curve interpolation at this point: Bezier or vector");
737 
738  prop = RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
740  RNA_def_property_ui_text(prop, "Select", "Selection state of the curve point");
741 }
742 
744 {
745  StructRNA *srna;
746  PropertyRNA *parm;
747  FunctionRNA *func;
748 
749  RNA_def_property_srna(cprop, "CurveMapPoints");
750  srna = RNA_def_struct(brna, "CurveMapPoints", NULL);
751  RNA_def_struct_sdna(srna, "CurveMap");
752  RNA_def_struct_ui_text(srna, "Curve Map Point", "Collection of Curve Map Points");
753 
754  func = RNA_def_function(srna, "new", "BKE_curvemap_insert");
755  RNA_def_function_ui_description(func, "Add point to CurveMap");
756  parm = RNA_def_float(func,
757  "position",
758  0.0f,
759  -FLT_MAX,
760  FLT_MAX,
761  "Position",
762  "Position to add point",
763  -FLT_MAX,
764  FLT_MAX);
766  parm = RNA_def_float(
767  func, "value", 0.0f, -FLT_MAX, FLT_MAX, "Value", "Value of point", -FLT_MAX, FLT_MAX);
769  parm = RNA_def_pointer(func, "point", "CurveMapPoint", "", "New point");
770  RNA_def_function_return(func, parm);
771 
772  func = RNA_def_function(srna, "remove", "rna_CurveMap_remove_point");
774  RNA_def_function_ui_description(func, "Delete point from CurveMap");
775  parm = RNA_def_pointer(func, "point", "CurveMapPoint", "", "PointElement to remove");
778 }
779 
780 static void rna_def_curvemap(BlenderRNA *brna)
781 {
782  StructRNA *srna;
783  PropertyRNA *prop;
784 
785  srna = RNA_def_struct(brna, "CurveMap", NULL);
786  RNA_def_struct_ui_text(srna, "CurveMap", "Curve in a curve mapping");
787 
788  prop = RNA_def_property(srna, "points", PROP_COLLECTION, PROP_NONE);
789  RNA_def_property_collection_sdna(prop, NULL, "curve", "totpoint");
790  RNA_def_property_struct_type(prop, "CurveMapPoint");
791  RNA_def_property_ui_text(prop, "Points", "");
792  rna_def_curvemap_points_api(brna, prop);
793 }
794 
796 {
797  StructRNA *srna;
798  PropertyRNA *prop, *parm;
799  FunctionRNA *func;
800 
801  static const EnumPropertyItem tone_items[] = {
802  {CURVE_TONE_STANDARD, "STANDARD", 0, "Standard", ""},
803  {CURVE_TONE_FILMLIKE, "FILMLIKE", 0, "Filmlike", ""},
804  {0, NULL, 0, NULL, NULL},
805  };
806 
807  static const EnumPropertyItem prop_extend_items[] = {
808  {0, "HORIZONTAL", 0, "Horizontal", ""},
809  {CUMA_EXTEND_EXTRAPOLATE, "EXTRAPOLATED", 0, "Extrapolated", ""},
810  {0, NULL, 0, NULL, NULL},
811  };
812 
813  srna = RNA_def_struct(brna, "CurveMapping", NULL);
815  srna,
816  "CurveMapping",
817  "Curve mapping to map color, vector and scalar values to other values using "
818  "a user defined curve");
819 
820  prop = RNA_def_property(srna, "tone", PROP_ENUM, PROP_NONE);
821  RNA_def_property_enum_sdna(prop, NULL, "tone");
822  RNA_def_property_enum_items(prop, tone_items);
823  RNA_def_property_ui_text(prop, "Tone", "Tone of the curve");
824  RNA_def_property_update(prop, 0, "rna_CurveMapping_tone_update");
825 
826  prop = RNA_def_property(srna, "use_clip", PROP_BOOLEAN, PROP_NONE);
828  RNA_def_property_ui_text(prop, "Clip", "Force the curve view to fit a defined boundary");
829  RNA_def_property_boolean_funcs(prop, NULL, "rna_CurveMapping_clip_set");
830 
831  prop = RNA_def_property(srna, "clip_min_x", PROP_FLOAT, PROP_NONE);
832  RNA_def_property_float_sdna(prop, NULL, "clipr.xmin");
833  RNA_def_property_range(prop, -100.0f, 100.0f);
834  RNA_def_property_ui_text(prop, "Clip Min X", "");
835  RNA_def_property_float_funcs(prop, NULL, NULL, "rna_CurveMapping_clipminx_range");
836 
837  prop = RNA_def_property(srna, "clip_min_y", PROP_FLOAT, PROP_NONE);
838  RNA_def_property_float_sdna(prop, NULL, "clipr.ymin");
839  RNA_def_property_range(prop, -100.0f, 100.0f);
840  RNA_def_property_ui_text(prop, "Clip Min Y", "");
841  RNA_def_property_float_funcs(prop, NULL, NULL, "rna_CurveMapping_clipminy_range");
842 
843  prop = RNA_def_property(srna, "clip_max_x", PROP_FLOAT, PROP_NONE);
844  RNA_def_property_float_sdna(prop, NULL, "clipr.xmax");
845  RNA_def_property_range(prop, -100.0f, 100.0f);
846  RNA_def_property_ui_text(prop, "Clip Max X", "");
847  RNA_def_property_float_funcs(prop, NULL, NULL, "rna_CurveMapping_clipmaxx_range");
848 
849  prop = RNA_def_property(srna, "clip_max_y", PROP_FLOAT, PROP_NONE);
850  RNA_def_property_float_sdna(prop, NULL, "clipr.ymax");
851  RNA_def_property_range(prop, -100.0f, 100.0f);
852  RNA_def_property_ui_text(prop, "Clip Max Y", "");
853  RNA_def_property_float_funcs(prop, NULL, NULL, "rna_CurveMapping_clipmaxy_range");
854 
855  prop = RNA_def_property(srna, "extend", PROP_ENUM, PROP_NONE);
857  RNA_def_property_enum_items(prop, prop_extend_items);
858  RNA_def_property_ui_text(prop, "Extend", "Extrapolate the curve or extend it horizontally");
859  RNA_def_property_update(prop, 0, "rna_CurveMapping_extend_update");
860 
861  prop = RNA_def_property(srna, "curves", PROP_COLLECTION, PROP_NONE);
863  "rna_CurveMapping_curves_begin",
864  "rna_iterator_array_next",
865  "rna_iterator_array_end",
866  "rna_iterator_array_get",
867  "rna_CurveMapping_curves_length",
868  NULL,
869  NULL,
870  NULL);
871  RNA_def_property_struct_type(prop, "CurveMap");
872  RNA_def_property_ui_text(prop, "Curves", "");
873 
874  prop = RNA_def_property(srna, "black_level", PROP_FLOAT, PROP_COLOR);
875  RNA_def_property_float_sdna(prop, NULL, "black");
876  RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
877  RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 1, 3);
879  prop, "Black Level", "For RGB curves, the color that black is mapped to");
880  RNA_def_property_float_funcs(prop, NULL, "rna_CurveMapping_black_level_set", NULL);
881 
882  prop = RNA_def_property(srna, "white_level", PROP_FLOAT, PROP_COLOR);
883  RNA_def_property_float_sdna(prop, NULL, "white");
884  RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
885  RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 1, 3);
887  prop, "White Level", "For RGB curves, the color that white is mapped to");
888  RNA_def_property_float_funcs(prop, NULL, "rna_CurveMapping_white_level_set", NULL);
889 
890  func = RNA_def_function(srna, "update", "BKE_curvemapping_changed_all");
891  RNA_def_function_ui_description(func, "Update curve mapping after making changes");
892 
893  func = RNA_def_function(srna, "reset_view", "BKE_curvemapping_reset_view");
894  RNA_def_function_ui_description(func, "Reset the curve mapping grid to its clipping size");
895 
896  func = RNA_def_function(srna, "initialize", "rna_CurveMap_initialize");
897  RNA_def_function_ui_description(func, "Initialize curve");
898 
899  func = RNA_def_function(srna, "evaluate", "rna_CurveMapping_evaluateF");
901  RNA_def_function_ui_description(func, "Evaluate curve at given location");
902  parm = RNA_def_pointer(func, "curve", "CurveMap", "curve", "Curve to evaluate");
904  parm = RNA_def_float(func,
905  "position",
906  0.0f,
907  -FLT_MAX,
908  FLT_MAX,
909  "Position",
910  "Position to evaluate curve at",
911  -FLT_MAX,
912  FLT_MAX);
914  parm = RNA_def_float(func,
915  "value",
916  0.0f,
917  -FLT_MAX,
918  FLT_MAX,
919  "Value",
920  "Value of curve at given location",
921  -FLT_MAX,
922  FLT_MAX);
923  RNA_def_function_return(func, parm);
924 }
925 
927 {
928  StructRNA *srna;
929  PropertyRNA *prop;
930 
931  srna = RNA_def_struct(brna, "ColorRampElement", NULL);
932  RNA_def_struct_sdna(srna, "CBData");
933  RNA_def_struct_path_func(srna, "rna_ColorRampElement_path");
935  srna, "Color Ramp Element", "Element defining a color at a position in the color ramp");
936 
937  prop = RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR);
938  RNA_def_property_float_sdna(prop, NULL, "r");
939  RNA_def_property_array(prop, 4);
940  RNA_def_property_ui_text(prop, "Color", "Set color of selected color stop");
941  RNA_def_property_update(prop, 0, "rna_ColorRamp_update");
942 
943  prop = RNA_def_property(srna, "alpha", PROP_FLOAT, PROP_COLOR);
944  RNA_def_property_float_sdna(prop, NULL, "a");
945  RNA_def_property_ui_text(prop, "Alpha", "Set alpha of selected color stop");
946  RNA_def_property_update(prop, 0, "rna_ColorRamp_update");
947 
948  prop = RNA_def_property(srna, "position", PROP_FLOAT, PROP_NONE);
949  RNA_def_property_float_sdna(prop, NULL, "pos");
950  RNA_def_property_range(prop, 0, 1);
951  RNA_def_property_ui_range(prop, 0, 1, 1, 3);
952  RNA_def_property_ui_text(prop, "Position", "Set position of selected color stop");
953  RNA_def_property_update(prop, 0, "rna_ColorRamp_update");
954 }
955 
957 {
958  StructRNA *srna;
959  PropertyRNA *parm;
960  FunctionRNA *func;
961 
962  RNA_def_property_srna(cprop, "ColorRampElements");
963  srna = RNA_def_struct(brna, "ColorRampElements", NULL);
964  RNA_def_struct_sdna(srna, "ColorBand");
965  RNA_def_struct_path_func(srna, "rna_ColorRampElement_path");
966  RNA_def_struct_ui_text(srna, "Color Ramp Elements", "Collection of Color Ramp Elements");
967 
968  /* TODO: make these functions generic in `texture.c`. */
969  func = RNA_def_function(srna, "new", "rna_ColorRampElement_new");
970  RNA_def_function_ui_description(func, "Add element to ColorRamp");
972  parm = RNA_def_float(
973  func, "position", 0.0f, 0.0f, 1.0f, "Position", "Position to add element", 0.0f, 1.0f);
975  /* return type */
976  parm = RNA_def_pointer(func, "element", "ColorRampElement", "", "New element");
977  RNA_def_function_return(func, parm);
978 
979  func = RNA_def_function(srna, "remove", "rna_ColorRampElement_remove");
980  RNA_def_function_ui_description(func, "Delete element from ColorRamp");
982  parm = RNA_def_pointer(func, "element", "ColorRampElement", "", "Element to remove");
985 }
986 
987 static void rna_def_color_ramp(BlenderRNA *brna)
988 {
989  StructRNA *srna;
990  PropertyRNA *prop;
991 
992  FunctionRNA *func;
993  PropertyRNA *parm;
994 
995  static const EnumPropertyItem prop_interpolation_items[] = {
996  {COLBAND_INTERP_EASE, "EASE", 0, "Ease", ""},
997  {COLBAND_INTERP_CARDINAL, "CARDINAL", 0, "Cardinal", ""},
998  {COLBAND_INTERP_LINEAR, "LINEAR", 0, "Linear", ""},
999  {COLBAND_INTERP_B_SPLINE, "B_SPLINE", 0, "B-Spline", ""},
1000  {COLBAND_INTERP_CONSTANT, "CONSTANT", 0, "Constant", ""},
1001  {0, NULL, 0, NULL, NULL},
1002  };
1003 
1004  static const EnumPropertyItem prop_mode_items[] = {
1005  {COLBAND_BLEND_RGB, "RGB", 0, "RGB", ""},
1006  {COLBAND_BLEND_HSV, "HSV", 0, "HSV", ""},
1007  {COLBAND_BLEND_HSL, "HSL", 0, "HSL", ""},
1008  {0, NULL, 0, NULL, NULL},
1009  };
1010 
1011  static const EnumPropertyItem prop_hsv_items[] = {
1012  {COLBAND_HUE_NEAR, "NEAR", 0, "Near", ""},
1013  {COLBAND_HUE_FAR, "FAR", 0, "Far", ""},
1014  {COLBAND_HUE_CW, "CW", 0, "Clockwise", ""},
1015  {COLBAND_HUE_CCW, "CCW", 0, "Counter-Clockwise", ""},
1016  {0, NULL, 0, NULL, NULL},
1017  };
1018 
1019  srna = RNA_def_struct(brna, "ColorRamp", NULL);
1020  RNA_def_struct_sdna(srna, "ColorBand");
1021  RNA_def_struct_path_func(srna, "rna_ColorRamp_path");
1022  RNA_def_struct_ui_text(srna, "Color Ramp", "Color ramp mapping a scalar value to a color");
1023 
1024  prop = RNA_def_property(srna, "elements", PROP_COLLECTION, PROP_COLOR);
1025  RNA_def_property_collection_sdna(prop, NULL, "data", "tot");
1026  RNA_def_property_struct_type(prop, "ColorRampElement");
1027  RNA_def_property_ui_text(prop, "Elements", "");
1028  RNA_def_property_update(prop, 0, "rna_ColorRamp_update");
1029  rna_def_color_ramp_element_api(brna, prop);
1030 
1031  prop = RNA_def_property(srna, "interpolation", PROP_ENUM, PROP_NONE);
1032  RNA_def_property_enum_sdna(prop, NULL, "ipotype");
1033  RNA_def_property_enum_items(prop, prop_interpolation_items);
1034  RNA_def_property_ui_text(prop, "Interpolation", "Set interpolation between color stops");
1035  RNA_def_property_update(prop, 0, "rna_ColorRamp_update");
1036 
1037  prop = RNA_def_property(srna, "hue_interpolation", PROP_ENUM, PROP_NONE);
1038  RNA_def_property_enum_sdna(prop, NULL, "ipotype_hue");
1039  RNA_def_property_enum_items(prop, prop_hsv_items);
1040  RNA_def_property_ui_text(prop, "Color Interpolation", "Set color interpolation");
1041  RNA_def_property_update(prop, 0, "rna_ColorRamp_update");
1042 
1043  prop = RNA_def_property(srna, "color_mode", PROP_ENUM, PROP_NONE);
1044  RNA_def_property_enum_sdna(prop, NULL, "color_mode");
1045  RNA_def_property_enum_items(prop, prop_mode_items);
1046  RNA_def_property_ui_text(prop, "Color Mode", "Set color mode to use for interpolation");
1047  RNA_def_property_update(prop, 0, "rna_ColorRamp_update");
1048 
1049 # if 0 /* use len(elements) */
1050  prop = RNA_def_property(srna, "total", PROP_INT, PROP_NONE);
1051  RNA_def_property_int_sdna(prop, NULL, "tot");
1052  /* needs a function to do the right thing when adding elements like colorband_add_cb() */
1054  RNA_def_property_range(prop, 0, 31); /* MAXCOLORBAND = 32 */
1055  RNA_def_property_ui_text(prop, "Total", "Total number of elements");
1056  RNA_def_property_update(prop, 0, "rna_ColorRamp_update");
1057 # endif
1058 
1059  func = RNA_def_function(srna, "evaluate", "rna_ColorRamp_eval");
1060  RNA_def_function_ui_description(func, "Evaluate ColorRamp");
1061  parm = RNA_def_float(func,
1062  "position",
1063  1.0f,
1064  0.0f,
1065  1.0f,
1066  "Position",
1067  "Evaluate ColorRamp at position",
1068  0.0f,
1069  1.0f);
1071  /* return */
1072  parm = RNA_def_float_color(func,
1073  "color",
1074  4,
1075  NULL,
1076  -FLT_MAX,
1077  FLT_MAX,
1078  "Color",
1079  "Color at given position",
1080  -FLT_MAX,
1081  FLT_MAX);
1083  RNA_def_function_output(func, parm);
1084 }
1085 
1086 static void rna_def_histogram(BlenderRNA *brna)
1087 {
1088  StructRNA *srna;
1089  PropertyRNA *prop;
1090 
1091  static const EnumPropertyItem prop_mode_items[] = {
1092  {HISTO_MODE_LUMA, "LUMA", 0, "Luma", "Luma"},
1093  {HISTO_MODE_RGB, "RGB", 0, "RGB", "Red Green Blue"},
1094  {HISTO_MODE_R, "R", 0, "R", "Red"},
1095  {HISTO_MODE_G, "G", 0, "G", "Green"},
1096  {HISTO_MODE_B, "B", 0, "B", "Blue"},
1097  {HISTO_MODE_ALPHA, "A", 0, "A", "Alpha"},
1098  {0, NULL, 0, NULL, NULL},
1099  };
1100 
1101  srna = RNA_def_struct(brna, "Histogram", NULL);
1102  RNA_def_struct_ui_text(srna, "Histogram", "Statistical view of the levels of color in an image");
1103 
1104  prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
1105  RNA_def_property_enum_sdna(prop, NULL, "mode");
1106  RNA_def_property_enum_items(prop, prop_mode_items);
1107  RNA_def_property_ui_text(prop, "Mode", "Channels to display in the histogram");
1108 
1109  prop = RNA_def_property(srna, "show_line", PROP_BOOLEAN, PROP_NONE);
1111  RNA_def_property_ui_text(prop, "Show Line", "Display lines rather than filled shapes");
1112  RNA_def_property_ui_icon(prop, ICON_GRAPH, 0);
1113 }
1114 
1115 static void rna_def_scopes(BlenderRNA *brna)
1116 {
1117  StructRNA *srna;
1118  PropertyRNA *prop;
1119 
1120  static const EnumPropertyItem prop_wavefrm_mode_items[] = {
1121  {SCOPES_WAVEFRM_LUMA, "LUMA", ICON_COLOR, "Luma", ""},
1122  {SCOPES_WAVEFRM_RGB_PARADE, "PARADE", ICON_COLOR, "Parade", ""},
1123  {SCOPES_WAVEFRM_YCC_601, "YCBCR601", ICON_COLOR, "YCbCr (ITU 601)", ""},
1124  {SCOPES_WAVEFRM_YCC_709, "YCBCR709", ICON_COLOR, "YCbCr (ITU 709)", ""},
1125  {SCOPES_WAVEFRM_YCC_JPEG, "YCBCRJPG", ICON_COLOR, "YCbCr (Jpeg)", ""},
1126  {SCOPES_WAVEFRM_RGB, "RGB", ICON_COLOR, "Red Green Blue", ""},
1127  {0, NULL, 0, NULL, NULL},
1128  };
1129 
1130  srna = RNA_def_struct(brna, "Scopes", NULL);
1131  RNA_def_struct_ui_text(srna, "Scopes", "Scopes for statistical view of an image");
1132 
1133  prop = RNA_def_property(srna, "use_full_resolution", PROP_BOOLEAN, PROP_NONE);
1134  RNA_def_property_boolean_sdna(prop, "Scopes", "sample_full", 1);
1135  RNA_def_property_ui_text(prop, "Full Sample", "Sample every pixel of the image");
1136  RNA_def_property_update(prop, 0, "rna_Scopes_update");
1137 
1138  prop = RNA_def_property(srna, "accuracy", PROP_FLOAT, PROP_PERCENTAGE);
1139  RNA_def_property_float_sdna(prop, "Scopes", "accuracy");
1140  RNA_def_property_range(prop, 0.0, 100.0);
1141  RNA_def_property_ui_range(prop, 0.0, 100.0, 10, 1);
1143  prop, "Accuracy", "Proportion of original image source pixel lines to sample");
1144  RNA_def_property_update(prop, 0, "rna_Scopes_update");
1145 
1146  prop = RNA_def_property(srna, "histogram", PROP_POINTER, PROP_NONE);
1147  RNA_def_property_pointer_sdna(prop, "Scopes", "hist");
1148  RNA_def_property_struct_type(prop, "Histogram");
1149  RNA_def_property_ui_text(prop, "Histogram", "Histogram for viewing image statistics");
1150 
1151  prop = RNA_def_property(srna, "waveform_mode", PROP_ENUM, PROP_NONE);
1152  RNA_def_property_enum_sdna(prop, "Scopes", "wavefrm_mode");
1153  RNA_def_property_enum_items(prop, prop_wavefrm_mode_items);
1154  RNA_def_property_ui_text(prop, "Waveform Mode", "");
1155  RNA_def_property_update(prop, 0, "rna_Scopes_update");
1156 
1157  prop = RNA_def_property(srna, "waveform_alpha", PROP_FLOAT, PROP_FACTOR);
1158  RNA_def_property_float_sdna(prop, "Scopes", "wavefrm_alpha");
1159  RNA_def_property_range(prop, 0, 1);
1160  RNA_def_property_ui_text(prop, "Waveform Opacity", "Opacity of the points");
1161 
1162  prop = RNA_def_property(srna, "vectorscope_alpha", PROP_FLOAT, PROP_FACTOR);
1163  RNA_def_property_float_sdna(prop, "Scopes", "vecscope_alpha");
1164  RNA_def_property_range(prop, 0, 1);
1165  RNA_def_property_ui_text(prop, "Vectorscope Opacity", "Opacity of the points");
1166 }
1167 
1169 {
1170  StructRNA *srna;
1171  PropertyRNA *prop;
1172 
1173  static const EnumPropertyItem display_device_items[] = {
1174  {0, "NONE", 0, "None", ""},
1175  {0, NULL, 0, NULL, NULL},
1176  };
1177 
1178  static const EnumPropertyItem look_items[] = {
1179  {0, "NONE", 0, "None", "Do not modify image in an artistic manner"},
1180  {0, NULL, 0, NULL, NULL},
1181  };
1182 
1183  static const EnumPropertyItem view_transform_items[] = {
1184  {0,
1185  "NONE",
1186  0,
1187  "None",
1188  "Do not perform any color transform on display, use old non-color managed technique for "
1189  "display"},
1190  {0, NULL, 0, NULL, NULL},
1191  };
1192 
1193  static const EnumPropertyItem color_space_items[] = {
1194  {0,
1195  "NONE",
1196  0,
1197  "None",
1198  "Do not perform any color transform on load, treat colors as in scene linear space "
1199  "already"},
1200  {0, NULL, 0, NULL, NULL},
1201  };
1202 
1203  /* ** Display Settings ** */
1204  srna = RNA_def_struct(brna, "ColorManagedDisplaySettings", NULL);
1205  RNA_def_struct_path_func(srna, "rna_ColorManagedDisplaySettings_path");
1207  srna, "ColorManagedDisplaySettings", "Color management specific to display device");
1208 
1209  prop = RNA_def_property(srna, "display_device", PROP_ENUM, PROP_NONE);
1210  RNA_def_property_enum_items(prop, display_device_items);
1212  "rna_ColorManagedDisplaySettings_display_device_get",
1213  "rna_ColorManagedDisplaySettings_display_device_set",
1214  "rna_ColorManagedDisplaySettings_display_device_itemf");
1215  RNA_def_property_ui_text(prop, "Display Device", "Display device name");
1217  prop, NC_WINDOW, "rna_ColorManagedDisplaySettings_display_device_update");
1218 
1219  /* ** View Settings ** */
1220  srna = RNA_def_struct(brna, "ColorManagedViewSettings", NULL);
1221  RNA_def_struct_path_func(srna, "rna_ColorManagedViewSettings_path");
1223  "ColorManagedViewSettings",
1224  "Color management settings used for displaying images on the display");
1225 
1226  prop = RNA_def_property(srna, "look", PROP_ENUM, PROP_NONE);
1227  RNA_def_property_enum_items(prop, look_items);
1229  "rna_ColorManagedViewSettings_look_get",
1230  "rna_ColorManagedViewSettings_look_set",
1231  "rna_ColorManagedViewSettings_look_itemf");
1233  prop, "Look", "Additional transform applied before view transform for artistic needs");
1234  RNA_def_property_update(prop, NC_WINDOW, "rna_ColorManagement_update");
1235 
1236  prop = RNA_def_property(srna, "view_transform", PROP_ENUM, PROP_NONE);
1237  RNA_def_property_enum_items(prop, view_transform_items);
1239  "rna_ColorManagedViewSettings_view_transform_get",
1240  "rna_ColorManagedViewSettings_view_transform_set",
1241  "rna_ColorManagedViewSettings_view_transform_itemf");
1243  prop, "View Transform", "View used when converting image to a display space");
1244  RNA_def_property_update(prop, NC_WINDOW, "rna_ColorManagement_update");
1245 
1246  prop = RNA_def_property(srna, "exposure", PROP_FLOAT, PROP_FACTOR);
1247  RNA_def_property_float_sdna(prop, NULL, "exposure");
1248  RNA_def_property_float_default(prop, 0.0f);
1249  RNA_def_property_range(prop, -32.0f, 32.0f);
1250  RNA_def_property_ui_range(prop, -10.0f, 10.0f, 1, 3);
1251  RNA_def_property_ui_text(prop, "Exposure", "Exposure (stops) applied before display transform");
1252  RNA_def_property_update(prop, NC_WINDOW, "rna_ColorManagement_update");
1253 
1254  prop = RNA_def_property(srna, "gamma", PROP_FLOAT, PROP_FACTOR);
1255  RNA_def_property_float_sdna(prop, NULL, "gamma");
1256  RNA_def_property_float_default(prop, 1.0f);
1257  RNA_def_property_range(prop, 0.0f, 5.0f);
1259  prop, "Gamma", "Amount of gamma modification applied after display transform");
1260  RNA_def_property_update(prop, NC_WINDOW, "rna_ColorManagement_update");
1261 
1262  prop = RNA_def_property(srna, "curve_mapping", PROP_POINTER, PROP_NONE);
1263  RNA_def_property_pointer_sdna(prop, NULL, "curve_mapping");
1264  RNA_def_property_ui_text(prop, "Curve", "Color curve mapping applied before display transform");
1265  RNA_def_property_update(prop, NC_WINDOW, "rna_ColorManagement_update");
1266 
1267  prop = RNA_def_property(srna, "use_curve_mapping", PROP_BOOLEAN, PROP_NONE);
1269  RNA_def_property_boolean_funcs(prop, NULL, "rna_ColorManagedViewSettings_use_curves_set");
1270  RNA_def_property_ui_text(prop, "Use Curves", "Use RGB curved for pre-display transformation");
1271  RNA_def_property_update(prop, NC_WINDOW, "rna_ColorManagement_update");
1272 
1273  /* ** Color-space ** */
1274  srna = RNA_def_struct(brna, "ColorManagedInputColorspaceSettings", NULL);
1275  RNA_def_struct_path_func(srna, "rna_ColorManagedInputColorspaceSettings_path");
1277  srna, "ColorManagedInputColorspaceSettings", "Input color space settings");
1278 
1279  prop = RNA_def_property(srna, "name", PROP_ENUM, PROP_NONE);
1282  RNA_def_property_enum_items(prop, color_space_items);
1284  "rna_ColorManagedColorspaceSettings_colorspace_get",
1285  "rna_ColorManagedColorspaceSettings_colorspace_set",
1286  "rna_ColorManagedColorspaceSettings_colorspace_itemf");
1288  prop,
1289  "Input Color Space",
1290  "Color space in the image file, to convert to and from when saving and loading the image");
1291  RNA_def_property_update(prop, NC_WINDOW, "rna_ColorManagedColorspaceSettings_reload_update");
1292 
1293  prop = RNA_def_property(srna, "is_data", PROP_BOOLEAN, PROP_NONE);
1296  "rna_ColorManagedColorspaceSettings_is_data_get",
1297  "rna_ColorManagedColorspaceSettings_is_data_set");
1299  prop,
1300  "Is Data",
1301  "Treat image as non-color data without color management, like normal or displacement maps");
1302  RNA_def_property_update(prop, NC_WINDOW, "rna_ColorManagement_update");
1303 
1304  //
1305  srna = RNA_def_struct(brna, "ColorManagedSequencerColorspaceSettings", NULL);
1306  RNA_def_struct_path_func(srna, "rna_ColorManagedSequencerColorspaceSettings_path");
1308  srna, "ColorManagedSequencerColorspaceSettings", "Input color space settings");
1309 
1310  prop = RNA_def_property(srna, "name", PROP_ENUM, PROP_NONE);
1312  RNA_def_property_enum_items(prop, color_space_items);
1314  "rna_ColorManagedColorspaceSettings_colorspace_get",
1315  "rna_ColorManagedColorspaceSettings_colorspace_set",
1316  "rna_ColorManagedColorspaceSettings_colorspace_itemf");
1317  RNA_def_property_ui_text(prop, "Color Space", "Color space that the sequencer operates in");
1318  RNA_def_property_update(prop, NC_WINDOW, "rna_ColorManagedColorspaceSettings_reload_update");
1319 }
1320 
1322 {
1323  rna_def_curvemappoint(brna);
1324  rna_def_curvemap(brna);
1325  rna_def_curvemapping(brna);
1327  rna_def_color_ramp(brna);
1328  rna_def_histogram(brna);
1329  rna_def_scopes(brna);
1330  rna_def_colormanage(brna);
1331 }
1332 
1333 #endif
bool BKE_colorband_element_remove(struct ColorBand *coba, int index)
Definition: colorband.c:628
#define MAXCOLORBAND
Definition: BKE_colorband.h:16
struct CBData * BKE_colorband_element_add(struct ColorBand *coba, float position)
Definition: colorband.c:602
bool BKE_colorband_evaluate(const struct ColorBand *coba, float in, float out[4])
void BKE_curvemapping_changed(struct CurveMapping *cumap, bool rem_doubles)
Definition: colortools.c:855
void BKE_curvemapping_init(struct CurveMapping *cumap)
Definition: colortools.c:1235
void BKE_curvemapping_set_black_white(struct CurveMapping *cumap, const float black[3], const float white[3])
Definition: colortools.c:152
bool BKE_curvemap_remove_point(struct CurveMap *cuma, struct CurveMapPoint *cmp)
Definition: colortools.c:170
float BKE_curvemap_evaluateF(const struct CurveMapping *cumap, const struct CurveMap *cuma, float value)
struct CurveMapping * BKE_curvemapping_add(int tot, float minx, float miny, float maxx, float maxy)
Definition: colortools.c:72
struct Scene * CTX_data_scene(const bContext *C)
Definition: context.c:1090
#define IMA_SIGNAL_COLORMANAGE
Definition: BKE_image.h:135
void BKE_image_signal(struct Main *bmain, struct Image *ima, struct ImageUser *iuser, int signal)
Blender kernel freestyle line style functionality.
void BKE_linestyle_modifier_list_color_ramps(FreestyleLineStyle *linestyle, ListBase *listbase)
Definition: linestyle.c:1925
char * BKE_linestyle_path_to_color_ramp(FreestyleLineStyle *linestyle, struct ColorBand *color_ramp)
Definition: linestyle.c:1956
#define CMP_NODE_VALTORGB
Definition: BKE_node.h:1200
#define SH_NODE_VALTORGB
Definition: BKE_node.h:1082
#define TEX_NODE_VALTORGB
Definition: BKE_node.h:1354
void BKE_ntree_update_tag_node_property(struct bNodeTree *ntree, struct bNode *node)
void BKE_reportf(ReportList *reports, eReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
void BKE_report(ReportList *reports, eReportType type, const char *message)
Definition: report.c:83
void void BLI_freelistN(struct ListBase *listbase) ATTR_NONNULL(1)
Definition: listbase.c:466
size_t size_t char * BLI_sprintfN(const char *__restrict format,...) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC ATTR_PRINTF_FORMAT(1
#define STRNCPY(dst, src)
Definition: BLI_string.h:483
char * BLI_strdup(const char *str) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL() ATTR_MALLOC
Definition: string.c:42
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t maxncpy) ATTR_NONNULL()
Definition: string.c:64
#define UNUSED(x)
#define ELEM(...)
#define STREQ(a, b)
void DEG_id_tag_update(struct ID *id, int flag)
@ ID_RECALC_COPY_ON_WRITE
Definition: DNA_ID.h:834
@ ID_RECALC_SOURCE
Definition: DNA_ID.h:859
@ ID_MC
Definition: DNA_ID_enums.h:73
@ ID_TE
Definition: DNA_ID_enums.h:52
@ ID_IM
Definition: DNA_ID_enums.h:53
@ ID_NT
Definition: DNA_ID_enums.h:68
@ ID_SCE
Definition: DNA_ID_enums.h:45
@ ID_LS
Definition: DNA_ID_enums.h:75
@ ID_MA
Definition: DNA_ID_enums.h:51
@ ID_OB
Definition: DNA_ID_enums.h:47
@ ID_PA
Definition: DNA_ID_enums.h:70
#define CM_TOT
@ CUMA_EXTEND_EXTRAPOLATE
@ CUMA_DO_CLIP
@ SCOPES_WAVEFRM_YCC_JPEG
@ SCOPES_WAVEFRM_RGB
@ SCOPES_WAVEFRM_YCC_601
@ SCOPES_WAVEFRM_YCC_709
@ SCOPES_WAVEFRM_LUMA
@ SCOPES_WAVEFRM_RGB_PARADE
@ HISTO_MODE_B
@ HISTO_MODE_G
@ HISTO_MODE_LUMA
@ HISTO_MODE_RGB
@ HISTO_MODE_ALPHA
@ HISTO_MODE_R
@ CUMA_HANDLE_AUTO_ANIM
@ CUMA_SELECT
@ CUMA_HANDLE_VECTOR
@ HISTO_FLAG_LINE
@ CURVE_TONE_STANDARD
@ CURVE_TONE_FILMLIKE
@ COLORMANAGE_VIEW_USE_CURVES
Object is a sort of wrapper for general info.
@ COLBAND_BLEND_RGB
@ COLBAND_BLEND_HSL
@ COLBAND_BLEND_HSV
@ COLBAND_HUE_FAR
@ COLBAND_HUE_CW
@ COLBAND_HUE_NEAR
@ COLBAND_HUE_CCW
@ COLBAND_INTERP_LINEAR
@ COLBAND_INTERP_CONSTANT
@ COLBAND_INTERP_B_SPLINE
@ COLBAND_INTERP_EASE
@ COLBAND_INTERP_CARDINAL
void ED_node_tree_propagate_change(const struct bContext *C, struct Main *bmain, struct bNodeTree *ntree)
static AppView * view
const char * IMB_colormanagement_colorspace_get_indexed_name(int index)
void IMB_colormanagement_look_items_add(struct EnumPropertyItem **items, int *totitem, const char *view_name)
@ COLOR_ROLE_DATA
int IMB_colormanagement_view_get_named_index(const char *name)
void IMB_colormanagement_validate_settings(const struct ColorManagedDisplaySettings *display_settings, struct ColorManagedViewSettings *view_settings)
const char * IMB_colormanagement_view_get_indexed_name(int index)
int IMB_colormanagement_look_get_named_index(const char *name)
const char * IMB_colormanagement_role_colorspace_name_get(int role)
int IMB_colormanagement_colorspace_get_named_index(const char *name)
const char * IMB_colormanagement_look_get_indexed_name(int index)
const char * IMB_colormanagement_display_get_indexed_name(int index)
void IMB_colormanagement_display_items_add(struct EnumPropertyItem **items, int *totitem)
int IMB_colormanagement_display_get_named_index(const char *name)
void IMB_colormanagement_view_items_add(struct EnumPropertyItem **items, int *totitem, const char *display_name)
void IMB_colormanagement_colorspace_items_add(struct EnumPropertyItem **items, int *totitem)
void IMB_free_anim(struct anim *anim)
Definition: anim_movie.c:193
Read Guarded memory(de)allocation.
in reality light always falls off quadratically Particle Retrieve the data of the particle that spawned the object for example to give variation to multiple instances of an object Point Retrieve information about points in a point cloud Retrieve the edges of an object as it appears to Cycles topology will always appear triangulated Convert a blackbody temperature to an RGB value Normal Generate a perturbed normal from an RGB normal map image Typically used for faking highly detailed surfaces Generate an OSL shader from a file or text data block Image Sample an image file as a texture Sky Generate a procedural sky texture Noise Generate fractal Perlin noise Wave Generate procedural bands or rings with noise Voronoi Generate Worley noise based on the distance to random points Typically used to generate textures such as or biological cells Brick Generate a procedural texture producing bricks Texture Retrieve multiple types of texture coordinates nTypically used as inputs for texture nodes Vector Convert a point
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Bright Control the brightness and contrast of the input color Vector Map an input vectors to used to fine tune the interpolation of the input Camera Retrieve information about the camera and how it relates to the current shading point s position Clamp a value between a minimum and a maximum Vector Perform vector math operation Invert a color
#define RNA_POINTER_INVALIDATE(ptr)
Definition: RNA_access.h:744
@ PARM_RNAPTR
Definition: RNA_types.h:354
@ PARM_REQUIRED
Definition: RNA_types.h:352
@ FUNC_USE_REPORTS
Definition: RNA_types.h:663
@ PROP_FLOAT
Definition: RNA_types.h:61
@ PROP_BOOLEAN
Definition: RNA_types.h:59
@ PROP_ENUM
Definition: RNA_types.h:63
@ PROP_INT
Definition: RNA_types.h:60
@ PROP_POINTER
Definition: RNA_types.h:64
@ PROP_COLLECTION
Definition: RNA_types.h:65
@ PROP_THICK_WRAP
Definition: RNA_types.h:285
@ PROP_ANIMATABLE
Definition: RNA_types.h:202
@ PROP_EDITABLE
Definition: RNA_types.h:189
@ PROP_ENUM_NO_CONTEXT
Definition: RNA_types.h:292
@ PROP_NEVER_NULL
Definition: RNA_types.h:239
@ PROP_XYZ
Definition: RNA_types.h:162
@ PROP_COLOR
Definition: RNA_types.h:153
@ PROP_NONE
Definition: RNA_types.h:126
@ PROP_PERCENTAGE
Definition: RNA_types.h:143
@ PROP_FACTOR
Definition: RNA_types.h:144
#define C
Definition: RandGen.cpp:25
#define ND_SEQUENCER
Definition: WM_types.h:385
#define NC_WINDOW
Definition: WM_types.h:325
#define NC_NODE
Definition: WM_types.h:344
#define NC_LINESTYLE
Definition: WM_types.h:350
#define ND_DISPLAY
Definition: WM_types.h:439
#define NC_MOVIECLIP
Definition: WM_types.h:347
#define NC_SCENE
Definition: WM_types.h:328
#define NA_EDITED
Definition: WM_types.h:523
#define ND_PARTICLE
Definition: WM_types.h:414
#define NC_MATERIAL
Definition: WM_types.h:330
#define NC_IMAGE
Definition: WM_types.h:334
#define NC_TEXTURE
Definition: WM_types.h:331
#define NC_OBJECT
Definition: WM_types.h:329
#define ND_SHADING_DRAW
Definition: WM_types.h:426
ATTR_WARN_UNUSED_RESULT const void * element
OperationNode * node
Scene scene
FreestyleLineStyle linestyle
void * user_data
int len
Definition: draw_manager.c:108
bNodeTree * ntree
#define GS(x)
Definition: iris.c:225
void SEQ_for_each_callback(ListBase *seqbase, SeqForEachFunc callback, void *user_data)
Definition: iterator.c:76
void(* MEM_freeN)(void *vmemh)
Definition: mallocn.c:27
void RNA_pointer_create(ID *id, StructRNA *type, void *data, PointerRNA *r_ptr)
Definition: rna_access.c:136
void RNA_id_pointer_create(ID *id, PointerRNA *r_ptr)
Definition: rna_access.c:112
void rna_iterator_array_begin(CollectionPropertyIterator *iter, void *ptr, int itemsize, int length, bool free_ptr, IteratorSkipFunc skip)
Definition: rna_access.c:4781
static void rna_def_curvemap(BlenderRNA *brna)
Definition: rna_color.c:780
static void rna_def_curvemap_points_api(BlenderRNA *brna, PropertyRNA *cprop)
Definition: rna_color.c:743
void RNA_def_color(BlenderRNA *brna)
Definition: rna_color.c:1321
static void rna_def_curvemappoint(BlenderRNA *brna)
Definition: rna_color.c:713
static void rna_def_color_ramp(BlenderRNA *brna)
Definition: rna_color.c:987
static void rna_def_curvemapping(BlenderRNA *brna)
Definition: rna_color.c:795
static void rna_def_histogram(BlenderRNA *brna)
Definition: rna_color.c:1086
static void rna_def_color_ramp_element(BlenderRNA *brna)
Definition: rna_color.c:926
static void rna_def_scopes(BlenderRNA *brna)
Definition: rna_color.c:1115
static void rna_def_colormanage(BlenderRNA *brna)
Definition: rna_color.c:1168
static void rna_def_color_ramp_element_api(BlenderRNA *brna, PropertyRNA *cprop)
Definition: rna_color.c:956
static const EnumPropertyItem prop_handle_type_items[]
PropertyRNA * RNA_def_float(StructOrFunctionRNA *cont_, const char *identifier, float default_value, float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax)
Definition: rna_define.c:3836
void RNA_def_property_pointer_sdna(PropertyRNA *prop, const char *structname, const char *propname)
Definition: rna_define.c:2740
void RNA_def_struct_path_func(StructRNA *srna, const char *path)
Definition: rna_define.c:1193
PropertyRNA * RNA_def_pointer(StructOrFunctionRNA *cont_, const char *identifier, const char *type, const char *ui_name, const char *ui_description)
Definition: rna_define.c:4170
void RNA_def_property_boolean_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t bit)
Definition: rna_define.c:2236
void RNA_def_parameter_clear_flags(PropertyRNA *prop, PropertyFlag flag_property, ParameterFlag flag_parameter)
Definition: rna_define.c:1526
void RNA_def_property_float_default(PropertyRNA *prop, float value)
Definition: rna_define.c:2022
void RNA_def_function_return(FunctionRNA *func, PropertyRNA *ret)
Definition: rna_define.c:4312
void RNA_def_property_float_funcs(PropertyRNA *prop, const char *get, const char *set, const char *range)
Definition: rna_define.c:3126
void RNA_def_property_ui_text(PropertyRNA *prop, const char *name, const char *description)
Definition: rna_define.c:1645
void RNA_def_property_ui_icon(PropertyRNA *prop, int icon, int consecutive)
Definition: rna_define.c:1653
FunctionRNA * RNA_def_function(StructRNA *srna, const char *identifier, const char *call)
Definition: rna_define.c:4273
void RNA_def_property_srna(PropertyRNA *prop, const char *type)
Definition: rna_define.c:3474
void RNA_def_property_collection_funcs(PropertyRNA *prop, const char *begin, const char *next, const char *end, const char *get, const char *length, const char *lookupint, const char *lookupstring, const char *assignint)
Definition: rna_define.c:3420
void RNA_def_struct_ui_text(StructRNA *srna, const char *name, const char *description)
Definition: rna_define.c:1237
void RNA_def_function_output(FunctionRNA *UNUSED(func), PropertyRNA *ret)
Definition: rna_define.c:4337
void RNA_def_property_boolean_funcs(PropertyRNA *prop, const char *get, const char *set)
Definition: rna_define.c:2944
void RNA_def_property_enum_items(PropertyRNA *prop, const EnumPropertyItem *item)
Definition: rna_define.c:1872
void RNA_def_struct_sdna(StructRNA *srna, const char *structname)
Definition: rna_define.c:1048
void RNA_def_property_array(PropertyRNA *prop, int length)
Definition: rna_define.c:1539
void RNA_def_property_range(PropertyRNA *prop, double min, double max)
Definition: rna_define.c:1737
void RNA_def_property_struct_type(PropertyRNA *prop, const char *type)
Definition: rna_define.c:1772
void RNA_def_property_collection_sdna(PropertyRNA *prop, const char *structname, const char *propname, const char *lengthpropname)
Definition: rna_define.c:2769
void RNA_def_function_ui_description(FunctionRNA *func, const char *description)
Definition: rna_define.c:4347
void RNA_def_property_update(PropertyRNA *prop, int noteflag, const char *func)
Definition: rna_define.c:2900
void RNA_def_property_enum_funcs(PropertyRNA *prop, const char *get, const char *set, const char *item)
Definition: rna_define.c:3224
PropertyRNA * RNA_def_property(StructOrFunctionRNA *cont_, const char *identifier, int type, int subtype)
Definition: rna_define.c:1257
void RNA_def_property_enum_bitflag_sdna(PropertyRNA *prop, const char *structname, const char *propname)
Definition: rna_define.c:2669
void RNA_enum_item_end(EnumPropertyItem **items, int *totitem)
Definition: rna_define.c:4487
void RNA_def_function_flag(FunctionRNA *func, int flag)
Definition: rna_define.c:4342
void RNA_def_property_clear_flag(PropertyRNA *prop, PropertyFlag flag)
Definition: rna_define.c:1495
StructRNA * RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *from)
Definition: rna_define.c:1028
void RNA_def_property_enum_sdna(PropertyRNA *prop, const char *structname, const char *propname)
Definition: rna_define.c:2601
PropertyRNA * RNA_def_float_color(StructOrFunctionRNA *cont_, const char *identifier, int len, const float *default_value, float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax)
Definition: rna_define.c:3922
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
Definition: rna_define.c:1490
void RNA_def_property_float_sdna(PropertyRNA *prop, const char *structname, const char *propname)
Definition: rna_define.c:2493
void RNA_def_property_ui_range(PropertyRNA *prop, double min, double max, double step, int precision)
Definition: rna_define.c:1664
void RNA_def_property_int_sdna(PropertyRNA *prop, const char *structname, const char *propname)
Definition: rna_define.c:2343
void RNA_def_parameter_flags(PropertyRNA *prop, PropertyFlag flag_property, ParameterFlag flag_parameter)
Definition: rna_define.c:1518
char * RNA_path_from_ID_to_struct(const PointerRNA *ptr)
Definition: rna_path.cc:981
bool RNA_path_resolve(const PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop)
Definition: rna_path.cc:503
#define min(a, b)
Definition: sort.c:35
void SEQ_relations_invalidate_cache_raw(Scene *scene, Sequence *seq)
void SEQ_relations_sequence_free_anim(Sequence *seq)
void SEQ_relations_invalidate_scene_strips(Main *bmain, Scene *scene_target)
void SEQ_relations_invalidate_movieclip_strips(Main *bmain, MovieClip *clip_target)
CBData data[32]
struct CurveMapping * curve_mapping
CurveMapPoint * table
CurveMapPoint * curve
float white[3]
CurveMap cm[4]
float black[3]
ListBase seqbase
Definition: DNA_ID.h:368
void * next
Definition: DNA_ID.h:369
char name[66]
Definition: DNA_ID.h:378
void * data
Definition: DNA_listBase.h:26
struct LinkData * next
Definition: DNA_listBase.h:25
void * first
Definition: DNA_listBase.h:31
Definition: BKE_main.h:121
ListBase materials
Definition: BKE_main.h:174
void * data
Definition: RNA_types.h:38
struct ID * owner_id
Definition: RNA_types.h:36
ColorManagedViewSettings view_settings
struct Editing * ed
ColorManagedColorspaceSettings sequencer_colorspace_settings
ColorManagedDisplaySettings display_settings
struct anim * anim
ColorManagedColorspaceSettings colorspace_settings
StripProxy * proxy
ListBase nodes
float xmax
Definition: DNA_vec_types.h:69
float xmin
Definition: DNA_vec_types.h:69
float ymax
Definition: DNA_vec_types.h:70
float ymin
Definition: DNA_vec_types.h:70
float max
void WM_main_add_notifier(unsigned int type, void *reference)
PointerRNA * ptr
Definition: wm_files.c:3480