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