Blender V4.5
rna_color.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8
9#include <cstdlib>
10
11#include "DNA_color_types.h"
12#include "DNA_texture_types.h"
13
14#include "BLT_translation.hh"
15
16#include "RNA_define.hh"
17#include "RNA_enum_types.hh"
18#include "rna_internal.hh"
19
20#include "WM_api.hh"
21#include "WM_types.hh"
22
24 {0,
25 "NONE",
26 0,
27 "None",
28 "Do not perform any color transform on load, treat colors as in scene linear space "
29 "already"},
30 {0, nullptr, 0, nullptr, nullptr},
31};
32
33#ifdef RNA_RUNTIME
34
35# include <fmt/format.h>
36
37# include "RNA_access.hh"
38# include "RNA_path.hh"
39
40# include "DNA_image_types.h"
41# include "DNA_material_types.h"
42# include "DNA_movieclip_types.h"
43# include "DNA_node_types.h"
44# include "DNA_object_types.h"
45# include "DNA_particle_types.h"
46# include "DNA_sequence_types.h"
47
48# include "MEM_guardedalloc.h"
49
50# include "BKE_colorband.hh"
51# include "BKE_colortools.hh"
52# include "BKE_image.hh"
53# include "BKE_linestyle.h"
54# include "BKE_main_invariants.hh"
55# include "BKE_movieclip.h"
56# include "BKE_node.hh"
59
60# include "DEG_depsgraph.hh"
61
62# include "ED_node.hh"
63
64# include "IMB_colormanagement.hh"
65# include "IMB_imbuf.hh"
66
67# include "MOV_read.hh"
68
69# include "SEQ_iterator.hh"
70# include "SEQ_relations.hh"
71# include "SEQ_thumbnail_cache.hh"
72
73struct SeqCurveMappingUpdateData {
74 Scene *scene;
75 CurveMapping *curve;
76};
77
78static bool seq_update_modifier_curve(Strip *strip, void *user_data)
79{
80 /* Invalidate cache of any strips that have modifiers using this
81 * curve mapping. */
82 SeqCurveMappingUpdateData *data = static_cast<SeqCurveMappingUpdateData *>(user_data);
84 if (smd->type == seqModifierType_Curves) {
85 CurvesModifierData *cmd = reinterpret_cast<CurvesModifierData *>(smd);
86 if (&cmd->curve_mapping == data->curve) {
88 }
89 }
90 }
91 return true;
92}
93
94static void seq_notify_curve_update(CurveMapping *curve, ID *id)
95{
96 if (id && GS(id->name) == ID_SCE) {
97 Scene *scene = (Scene *)id;
98 if (scene->ed) {
99 SeqCurveMappingUpdateData data{scene, curve};
100 blender::seq::for_each_callback(&scene->ed->seqbase, seq_update_modifier_curve, &data);
101 }
102 }
103}
104
105static int rna_CurveMapping_curves_length(PointerRNA *ptr)
106{
107 CurveMapping *cumap = (CurveMapping *)ptr->data;
108 int len;
109
110 for (len = 0; len < CM_TOT; len++) {
111 if (!cumap->cm[len].curve) {
112 break;
113 }
114 }
115
116 return len;
117}
118
119static void rna_CurveMapping_curves_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
120{
121 CurveMapping *cumap = (CurveMapping *)ptr->data;
122
124 iter, ptr, cumap->cm, sizeof(CurveMap), rna_CurveMapping_curves_length(ptr), 0, nullptr);
125}
126
127static void rna_CurveMapping_clip_set(PointerRNA *ptr, bool value)
128{
129 CurveMapping *cumap = (CurveMapping *)ptr->data;
130
131 /* Clipping is always done for wrapped curves, so don't allow user to change it. */
132 if (cumap->flag & CUMA_USE_WRAPPING) {
133 return;
134 }
135
136 if (value) {
137 cumap->flag |= CUMA_DO_CLIP;
138 }
139 else {
140 cumap->flag &= ~CUMA_DO_CLIP;
141 }
142
143 BKE_curvemapping_changed(cumap, false);
144}
145
146static void rna_CurveMapping_black_level_set(PointerRNA *ptr, const float *values)
147{
148 CurveMapping *cumap = (CurveMapping *)ptr->data;
149 cumap->black[0] = values[0];
150 cumap->black[1] = values[1];
151 cumap->black[2] = values[2];
152 BKE_curvemapping_set_black_white(cumap, nullptr, nullptr);
153}
154
155static void rna_CurveMapping_white_level_set(PointerRNA *ptr, const float *values)
156{
157 CurveMapping *cumap = (CurveMapping *)ptr->data;
158 cumap->white[0] = values[0];
159 cumap->white[1] = values[1];
160 cumap->white[2] = values[2];
161 BKE_curvemapping_set_black_white(cumap, nullptr, nullptr);
162}
163
164static void rna_CurveMapping_tone_update(Main * /*bmain*/, Scene * /*scene*/, PointerRNA *ptr)
165{
166 /* Film-like tone only works with the combined curve, which is the fourth curve, so if the user
167 * changed to film-like make the combined curve current, as we now hide the rest of the curves
168 * since they no longer have an effect. */
169 CurveMapping *curve_mapping = (CurveMapping *)ptr->data;
170 if (curve_mapping->tone == CURVE_TONE_FILMLIKE) {
171 curve_mapping->cur = 3;
172 }
173
174 seq_notify_curve_update(curve_mapping, ptr->owner_id);
177}
178
179static void rna_CurveMapping_extend_update(Main * /*bmain*/,
180 Scene * /*scene*/,
181 PointerRNA * /*ptr*/)
182{
185}
186
187static void rna_CurveMapping_clipminx_range(
188 PointerRNA *ptr, float *min, float *max, float * /*softmin*/, float * /*softmax*/)
189{
190 CurveMapping *cumap = (CurveMapping *)ptr->data;
191
192 *min = -100.0f;
193 *max = cumap->clipr.xmax;
194}
195
196static void rna_CurveMapping_clipminy_range(
197 PointerRNA *ptr, float *min, float *max, float * /*softmin*/, float * /*softmax*/)
198{
199 CurveMapping *cumap = (CurveMapping *)ptr->data;
200
201 *min = -100.0f;
202 *max = cumap->clipr.ymax;
203}
204
205static void rna_CurveMapping_clipmaxx_range(
206 PointerRNA *ptr, float *min, float *max, float * /*softmin*/, float * /*softmax*/)
207{
208 CurveMapping *cumap = (CurveMapping *)ptr->data;
209
210 *min = cumap->clipr.xmin;
211 *max = 100.0f;
212}
213
214static void rna_CurveMapping_clipmaxy_range(
215 PointerRNA *ptr, float *min, float *max, float * /*softmin*/, float * /*softmax*/)
216{
217 CurveMapping *cumap = (CurveMapping *)ptr->data;
218
219 *min = cumap->clipr.ymin;
220 *max = 100.0f;
221}
222
223static std::optional<std::string> rna_ColorRamp_path(const PointerRNA *ptr)
224{
225 /* handle the cases where a single data-block may have 2 ramp types */
226 if (ptr->owner_id) {
227 ID *id = ptr->owner_id;
228
229 switch (GS(id->name)) {
230 case ID_NT: {
231 bNodeTree *ntree = (bNodeTree *)id;
232 bNode *node;
233
234 for (node = static_cast<bNode *>(ntree->nodes.first); node; node = node->next) {
236 if (node->storage == ptr->data) {
237 /* all node color ramp properties called 'color_ramp'
238 * prepend path from ID to the node
239 */
240 PointerRNA node_ptr = RNA_pointer_create_discrete(id, &RNA_Node, node);
241 std::string node_path = RNA_path_from_ID_to_struct(&node_ptr).value_or("");
242 return fmt::format("{}.color_ramp", node_path);
243 }
244 }
245 }
246 break;
247 }
248
249 case ID_LS: {
250 /* may be nullptr */
252 }
253
254 default:
255 /* everything else just uses 'color_ramp' */
256 return "color_ramp";
257 }
258 }
259 else {
260 /* everything else just uses 'color_ramp' */
261 return "color_ramp";
262 }
263
264 return std::nullopt;
265}
266
267static std::optional<std::string> rna_ColorRampElement_path(const PointerRNA *ptr)
268{
269 PointerRNA ramp_ptr;
270 PropertyRNA *prop;
271 std::optional<std::string> path;
272 int index;
273
274 /* helper macro for use here to try and get the path
275 * - this calls the standard code for getting a path to a texture...
276 */
277
278# define COLRAMP_GETPATH \
279 { \
280 prop = RNA_struct_find_property(&ramp_ptr, "elements"); \
281 if (prop) { \
282 index = RNA_property_collection_lookup_index(&ramp_ptr, prop, ptr); \
283 if (index != -1) { \
284 std::string texture_path = rna_ColorRamp_path(&ramp_ptr).value_or(""); \
285 path = fmt::format("{}.elements[{}]", texture_path, index); \
286 } \
287 } \
288 } \
289 (void)0
290
291 /* determine the path from the ID-block to the ramp */
292 /* FIXME: this is a very slow way to do it, but it will have to suffice... */
293 if (ptr->owner_id) {
294 ID *id = ptr->owner_id;
295
296 switch (GS(id->name)) {
297 case ID_NT: {
298 bNodeTree *ntree = (bNodeTree *)id;
299 bNode *node;
300
301 for (node = static_cast<bNode *>(ntree->nodes.first); node; node = node->next) {
303 ramp_ptr = RNA_pointer_create_discrete(id, &RNA_ColorRamp, node->storage);
304 COLRAMP_GETPATH;
305 }
306 }
307 break;
308 }
309 case ID_LS: {
310 ListBase listbase;
311 LinkData *link;
312
314 for (link = (LinkData *)listbase.first; link; link = link->next) {
315 ramp_ptr = RNA_pointer_create_discrete(id, &RNA_ColorRamp, link->data);
316 COLRAMP_GETPATH;
317 }
318 BLI_freelistN(&listbase);
319 break;
320 }
321
322 default: /* everything else should have a "color_ramp" property */
323 {
324 /* create pointer to the ID block, and try to resolve "color_ramp" pointer */
325 ramp_ptr = RNA_id_pointer_create(id);
326 if (RNA_path_resolve(&ramp_ptr, "color_ramp", &ramp_ptr, &prop)) {
327 COLRAMP_GETPATH;
328 }
329 break;
330 }
331 }
332 }
333
334 /* cleanup the macro we defined */
335# undef COLRAMP_GETPATH
336
337 return path;
338}
339
340static void rna_ColorRamp_update(Main *bmain, Scene * /*scene*/, PointerRNA *ptr)
341{
342 if (ptr->owner_id) {
343 ID *id = ptr->owner_id;
344
345 switch (GS(id->name)) {
346 case ID_MA: {
347 Material *ma = (Material *)ptr->owner_id;
348
349 DEG_id_tag_update(&ma->id, 0);
351 break;
352 }
353 case ID_NT: {
354 bNodeTree *ntree = (bNodeTree *)id;
355 bNode *node;
356
357 for (node = static_cast<bNode *>(ntree->nodes.first); node; node = node->next) {
360 BKE_main_ensure_invariants(*bmain, ntree->id);
361 }
362 }
363 break;
364 }
365 case ID_TE: {
366 Tex *tex = (Tex *)ptr->owner_id;
367
368 DEG_id_tag_update(&tex->id, 0);
370 break;
371 }
372 case ID_LS: {
373 FreestyleLineStyle *linestyle = (FreestyleLineStyle *)ptr->owner_id;
374
376 break;
377 }
378 /* Color Ramp for particle display is owned by the object (see #54422) */
379 case ID_OB:
380 case ID_PA: {
381 ParticleSettings *part = (ParticleSettings *)ptr->owner_id;
382
384 }
385 default:
386 break;
387 }
388 }
389}
390
391static void rna_ColorRamp_eval(ColorBand *coba, float position, float color[4])
392{
393 BKE_colorband_evaluate(coba, position, color);
394}
395
396static CBData *rna_ColorRampElement_new(ColorBand *coba, ReportList *reports, float position)
397{
398 CBData *element = BKE_colorband_element_add(coba, position);
399
400 if (element == nullptr) {
401 BKE_reportf(reports, RPT_ERROR, "Unable to add element to colorband (limit %d)", MAXCOLORBAND);
402 }
403
404 return element;
405}
406
407static void rna_ColorRampElement_remove(ColorBand *coba,
409 PointerRNA *element_ptr)
410{
411 CBData *element = static_cast<CBData *>(element_ptr->data);
412 int index = int(element - coba->data);
413 if (!BKE_colorband_element_remove(coba, index)) {
414 BKE_report(reports, RPT_ERROR, "Element not found in element collection or last element");
415 return;
416 }
417
418 element_ptr->invalidate();
419}
420
421static void rna_CurveMap_remove_point(CurveMap *cuma, ReportList *reports, PointerRNA *point_ptr)
422{
423 CurveMapPoint *point = static_cast<CurveMapPoint *>(point_ptr->data);
424 if (BKE_curvemap_remove_point(cuma, point) == false) {
425 BKE_report(reports, RPT_ERROR, "Unable to remove curve point");
426 return;
427 }
428
429 point_ptr->invalidate();
430}
431
432static void rna_Scopes_update(Main * /*bmain*/, Scene * /*scene*/, PointerRNA *ptr)
433{
434 Scopes *s = (Scopes *)ptr->data;
435 s->ok = 0;
436}
437
438static int rna_ColorManagedDisplaySettings_display_device_get(PointerRNA *ptr)
439{
441
442 return IMB_colormanagement_display_get_named_index(display->display_device);
443}
444
445static void rna_ColorManagedDisplaySettings_display_device_set(PointerRNA *ptr, int value)
446{
448 const char *name = IMB_colormanagement_display_get_indexed_name(value);
449
450 if (name) {
451 STRNCPY(display->display_device, name);
452 }
453}
454
455static const EnumPropertyItem *rna_ColorManagedDisplaySettings_display_device_itemf(
456 bContext * /*C*/, PointerRNA * /*ptr*/, PropertyRNA * /*prop*/, bool *r_free)
457{
458 EnumPropertyItem *items = nullptr;
459 int totitem = 0;
460
462 RNA_enum_item_end(&items, &totitem);
463
464 *r_free = true;
465
466 return items;
467}
468
469static void rna_ColorManagedDisplaySettings_display_device_update(Main *bmain,
470 Scene * /*scene*/,
472{
473 ID *id = ptr->owner_id;
474
475 if (!id) {
476 return;
477 }
478
479 if (GS(id->name) == ID_SCE) {
480 Scene *scene = (Scene *)id;
481
483
484 DEG_id_tag_update(id, 0);
486
487 /* Color management can be baked into shaders, need to refresh. */
488 for (Material *ma = static_cast<Material *>(bmain->materials.first); ma;
489 ma = static_cast<Material *>(ma->id.next))
490 {
492 }
493 }
494}
495
496static int rna_ColorManagedViewSettings_view_transform_get(PointerRNA *ptr)
497{
499 return IMB_colormanagement_view_get_id_by_name(view->view_transform);
500}
501
502static void rna_ColorManagedViewSettings_view_transform_set(PointerRNA *ptr, int value)
503{
505
506 const char *view_name = IMB_colormanagement_view_get_name_by_id(value);
507 if (!view_name) {
508 return;
509 }
510
511 STRNCPY(view->view_transform, view_name);
512
513 const char *look_name = IMB_colormanagement_look_validate_for_view(view_name, view->look);
514 if (look_name) {
515 STRNCPY(view->look, look_name);
516 }
517}
518
519static const EnumPropertyItem *rna_ColorManagedViewSettings_view_transform_itemf(
520 bContext *C, PointerRNA * /*ptr*/, PropertyRNA * /*prop*/, bool *r_free)
521{
522 Scene *scene = CTX_data_scene(C);
523 EnumPropertyItem *items = nullptr;
524 ColorManagedDisplaySettings *display_settings = &scene->display_settings;
525 int totitem = 0;
526
527 IMB_colormanagement_view_items_add(&items, &totitem, display_settings->display_device);
528 RNA_enum_item_end(&items, &totitem);
529
530 *r_free = true;
531 return items;
532}
533
534static int rna_ColorManagedViewSettings_look_get(PointerRNA *ptr)
535{
537
539}
540
541static void rna_ColorManagedViewSettings_look_set(PointerRNA *ptr, int value)
542{
544
545 const char *name = IMB_colormanagement_look_get_indexed_name(value);
546
547 if (name) {
548 STRNCPY(view->look, name);
549 }
550}
551
552static const EnumPropertyItem *rna_ColorManagedViewSettings_look_itemf(bContext * /*C*/,
554 PropertyRNA * /*prop*/,
555 bool *r_free)
556{
558 EnumPropertyItem *items = nullptr;
559 int totitem = 0;
560
561 IMB_colormanagement_look_items_add(&items, &totitem, view->view_transform);
562 RNA_enum_item_end(&items, &totitem);
563
564 *r_free = true;
565 return items;
566}
567
568static void rna_ColorManagedViewSettings_use_curves_set(PointerRNA *ptr, bool value)
569{
570 ColorManagedViewSettings *view_settings = (ColorManagedViewSettings *)ptr->data;
571
572 if (value) {
573 view_settings->flag |= COLORMANAGE_VIEW_USE_CURVES;
574
575 if (view_settings->curve_mapping == nullptr) {
576 view_settings->curve_mapping = BKE_curvemapping_add(4, 0.0f, 0.0f, 1.0f, 1.0f);
577 }
578 }
579 else {
580 view_settings->flag &= ~COLORMANAGE_VIEW_USE_CURVES;
581 }
582}
583
584static void rna_ColorManagedViewSettings_whitepoint_get(PointerRNA *ptr, float value[3])
585{
586 const ColorManagedViewSettings *view_settings = (ColorManagedViewSettings *)ptr->data;
587 IMB_colormanagement_get_whitepoint(view_settings->temperature, view_settings->tint, value);
588}
589
590static void rna_ColorManagedViewSettings_whitepoint_set(PointerRNA *ptr, const float value[3])
591{
592 ColorManagedViewSettings *view_settings = (ColorManagedViewSettings *)ptr->data;
593 IMB_colormanagement_set_whitepoint(value, view_settings->temperature, view_settings->tint);
594}
595
596static bool rna_ColorManagedColorspaceSettings_is_data_get(PointerRNA *ptr)
597{
600 return STREQ(colorspace->name, data_name);
601}
602
603static void rna_ColorManagedColorspaceSettings_is_data_set(PointerRNA *ptr, bool value)
604{
606 if (value) {
608 STRNCPY(colorspace->name, data_name);
609 }
610}
611
612static int rna_ColorManagedColorspaceSettings_colorspace_get(PointerRNA *ptr)
613{
615
616 return IMB_colormanagement_colorspace_get_named_index(colorspace->name);
617}
618
619static void rna_ColorManagedColorspaceSettings_colorspace_set(PointerRNA *ptr, int value)
620{
622 const char *name = IMB_colormanagement_colorspace_get_indexed_name(value);
623
624 if (name && name[0]) {
625 STRNCPY(colorspace->name, name);
626 }
627}
628
629static const EnumPropertyItem *rna_ColorManagedColorspaceSettings_colorspace_itemf(
630 bContext * /*C*/, PointerRNA * /*ptr*/, PropertyRNA * /*prop*/, bool *r_free)
631{
632 EnumPropertyItem *items = nullptr;
633 int totitem = 0;
634
636 RNA_enum_item_end(&items, &totitem);
637
638 *r_free = true;
639
640 return items;
641}
642
643struct Seq_colorspace_cb_data {
644 ColorManagedColorspaceSettings *colorspace_settings;
645 Strip *r_seq;
646};
647
653static bool strip_find_colorspace_settings_cb(Strip *strip, void *user_data)
654{
655 Seq_colorspace_cb_data *cd = (Seq_colorspace_cb_data *)user_data;
656 if (strip->data && &strip->data->colorspace_settings == cd->colorspace_settings) {
657 cd->r_seq = strip;
658 return false;
659 }
660 return true;
661}
662
663static void rna_ColorManagedColorspaceSettings_reload_update(Main *bmain,
664 Scene * /*scene*/,
666{
667 ID *id = ptr->owner_id;
668
669 if (!id) {
670 /* Happens for color space settings on operators. */
671 return;
672 }
673
674 if (GS(id->name) == ID_IM) {
675 Image *ima = (Image *)id;
676
677 DEG_id_tag_update(&ima->id, 0);
679
680 BKE_image_signal(bmain, ima, nullptr, IMA_SIGNAL_COLORMANAGE);
681
684 }
685 else if (GS(id->name) == ID_MC) {
686 MovieClip *clip = (MovieClip *)id;
687
690
693 }
694 else if (GS(id->name) == ID_SCE) {
695 Scene *scene = (Scene *)id;
697
698 if (scene->ed) {
700 ptr->data;
701 Seq_colorspace_cb_data cb_data = {colorspace_settings, nullptr};
702
703 if (&scene->sequencer_colorspace_settings == colorspace_settings) {
704 /* Scene colorspace was changed. */
706 }
707 else {
708 /* Strip colorspace was likely changed. */
710 &scene->ed->seqbase, strip_find_colorspace_settings_cb, &cb_data);
711 Strip *strip = cb_data.r_seq;
712
713 if (strip) {
715
716 if (strip->data->proxy && strip->data->proxy->anim) {
717 MOV_close(strip->data->proxy->anim);
718 strip->data->proxy->anim = nullptr;
719 }
720
722 }
723 }
724
726 }
727 }
728}
729
730static std::optional<std::string> rna_ColorManagedSequencerColorspaceSettings_path(
731 const PointerRNA * /*ptr*/)
732{
733 return "sequencer_colorspace_settings";
734}
735
736static void rna_ColorManagement_update(Main * /*bmain*/, Scene * /*scene*/, PointerRNA *ptr)
737{
738 ID *id = ptr->owner_id;
739
740 if (!id) {
741 return;
742 }
743
744 if (GS(id->name) == ID_SCE) {
746 }
747}
748
749/* this function only exists because #BKE_curvemap_evaluateF uses a 'const' qualifier */
750static float rna_CurveMapping_evaluateF(CurveMapping *cumap,
752 CurveMap *cuma,
753 float value)
754{
755 if (&cumap->cm[0] != cuma && &cumap->cm[1] != cuma && &cumap->cm[2] != cuma &&
756 &cumap->cm[3] != cuma)
757 {
758 BKE_report(reports, RPT_ERROR, "CurveMapping does not own CurveMap");
759 return 0.0f;
760 }
761
762 if (!cuma->table) {
764 }
765 return BKE_curvemap_evaluateF(cumap, cuma, value);
766}
767
768static void rna_CurveMap_initialize(CurveMapping *cumap)
769{
771}
772#else
773
775{
776 StructRNA *srna;
777 PropertyRNA *prop;
779 {0, "AUTO", 0, "Auto Handle", ""},
780 {CUMA_HANDLE_AUTO_ANIM, "AUTO_CLAMPED", 0, "Auto-Clamped Handle", ""},
781 {CUMA_HANDLE_VECTOR, "VECTOR", 0, "Vector Handle", ""},
782 {0, nullptr, 0, nullptr, nullptr},
783 };
784
785 srna = RNA_def_struct(brna, "CurveMapPoint", nullptr);
786 RNA_def_struct_ui_text(srna, "CurveMapPoint", "Point of a curve used for a curve mapping");
787
788 prop = RNA_def_property(srna, "location", PROP_FLOAT, PROP_XYZ);
789 RNA_def_property_float_sdna(prop, nullptr, "x");
790 RNA_def_property_array(prop, 2);
791 RNA_def_property_ui_text(prop, "Location", "X/Y coordinates of the curve point");
792
793 prop = RNA_def_property(srna, "handle_type", PROP_ENUM, PROP_NONE);
794 RNA_def_property_enum_bitflag_sdna(prop, nullptr, "flag");
797 prop, "Handle Type", "Curve interpolation at this point: Bézier or vector");
798
799 prop = RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
800 RNA_def_property_boolean_sdna(prop, nullptr, "flag", CUMA_SELECT);
801 RNA_def_property_ui_text(prop, "Select", "Selection state of the curve point");
802}
803
805{
806 StructRNA *srna;
807 PropertyRNA *parm;
808 FunctionRNA *func;
809
810 RNA_def_property_srna(cprop, "CurveMapPoints");
811 srna = RNA_def_struct(brna, "CurveMapPoints", nullptr);
812 RNA_def_struct_sdna(srna, "CurveMap");
813 RNA_def_struct_ui_text(srna, "Curve Map Point", "Collection of Curve Map Points");
814
815 func = RNA_def_function(srna, "new", "BKE_curvemap_insert");
816 RNA_def_function_ui_description(func, "Add point to CurveMap");
817 parm = RNA_def_float(func,
818 "position",
819 0.0f,
820 -FLT_MAX,
821 FLT_MAX,
822 "Position",
823 "Position to add point",
824 -FLT_MAX,
825 FLT_MAX);
827 parm = RNA_def_float(
828 func, "value", 0.0f, -FLT_MAX, FLT_MAX, "Value", "Value of point", -FLT_MAX, FLT_MAX);
830 parm = RNA_def_pointer(func, "point", "CurveMapPoint", "", "New point");
831 RNA_def_function_return(func, parm);
832
833 func = RNA_def_function(srna, "remove", "rna_CurveMap_remove_point");
835 RNA_def_function_ui_description(func, "Delete point from CurveMap");
836 parm = RNA_def_pointer(func, "point", "CurveMapPoint", "", "PointElement to remove");
839}
840
841static void rna_def_curvemap(BlenderRNA *brna)
842{
843 StructRNA *srna;
844 PropertyRNA *prop;
845
846 srna = RNA_def_struct(brna, "CurveMap", nullptr);
847 RNA_def_struct_ui_text(srna, "CurveMap", "Curve in a curve mapping");
848
849 prop = RNA_def_property(srna, "points", PROP_COLLECTION, PROP_NONE);
850 RNA_def_property_collection_sdna(prop, nullptr, "curve", "totpoint");
851 RNA_def_property_struct_type(prop, "CurveMapPoint");
852 RNA_def_property_ui_text(prop, "Points", "");
853 rna_def_curvemap_points_api(brna, prop);
854}
855
857{
858 StructRNA *srna;
859 PropertyRNA *prop, *parm;
860 FunctionRNA *func;
861
862 static const EnumPropertyItem tone_items[] = {
864 "STANDARD",
865 0,
866 "Standard",
867 "Combined curve is applied to each channel individually, which may result in a change of "
868 "hue"},
869 {CURVE_TONE_FILMLIKE, "FILMLIKE", 0, "Filmlike", "Keeps the hue constant"},
870 {0, nullptr, 0, nullptr, nullptr},
871 };
872
873 static const EnumPropertyItem prop_extend_items[] = {
874 {0, "HORIZONTAL", 0, "Horizontal", ""},
875 {CUMA_EXTEND_EXTRAPOLATE, "EXTRAPOLATED", 0, "Extrapolated", ""},
876 {0, nullptr, 0, nullptr, nullptr},
877 };
878
879 srna = RNA_def_struct(brna, "CurveMapping", nullptr);
881 srna,
882 "CurveMapping",
883 "Curve mapping to map color, vector and scalar values to other values using "
884 "a user defined curve");
885
886 prop = RNA_def_property(srna, "tone", PROP_ENUM, PROP_NONE);
887 RNA_def_property_enum_sdna(prop, nullptr, "tone");
888 RNA_def_property_enum_items(prop, tone_items);
889 RNA_def_property_ui_text(prop, "Tone", "Tone of the curve");
890 RNA_def_property_update(prop, 0, "rna_CurveMapping_tone_update");
891
892 prop = RNA_def_property(srna, "use_clip", PROP_BOOLEAN, PROP_NONE);
893 RNA_def_property_boolean_sdna(prop, nullptr, "flag", CUMA_DO_CLIP);
894 RNA_def_property_ui_text(prop, "Clip", "Force the curve view to fit a defined boundary");
895 RNA_def_property_boolean_funcs(prop, nullptr, "rna_CurveMapping_clip_set");
896
897 prop = RNA_def_property(srna, "clip_min_x", PROP_FLOAT, PROP_NONE);
898 RNA_def_property_float_sdna(prop, nullptr, "clipr.xmin");
899 RNA_def_property_range(prop, -100.0f, 100.0f);
900 RNA_def_property_ui_text(prop, "Clip Min X", "");
901 RNA_def_property_float_funcs(prop, nullptr, nullptr, "rna_CurveMapping_clipminx_range");
902
903 prop = RNA_def_property(srna, "clip_min_y", PROP_FLOAT, PROP_NONE);
904 RNA_def_property_float_sdna(prop, nullptr, "clipr.ymin");
905 RNA_def_property_range(prop, -100.0f, 100.0f);
906 RNA_def_property_ui_text(prop, "Clip Min Y", "");
907 RNA_def_property_float_funcs(prop, nullptr, nullptr, "rna_CurveMapping_clipminy_range");
908
909 prop = RNA_def_property(srna, "clip_max_x", PROP_FLOAT, PROP_NONE);
910 RNA_def_property_float_sdna(prop, nullptr, "clipr.xmax");
911 RNA_def_property_range(prop, -100.0f, 100.0f);
912 RNA_def_property_ui_text(prop, "Clip Max X", "");
913 RNA_def_property_float_funcs(prop, nullptr, nullptr, "rna_CurveMapping_clipmaxx_range");
914
915 prop = RNA_def_property(srna, "clip_max_y", PROP_FLOAT, PROP_NONE);
916 RNA_def_property_float_sdna(prop, nullptr, "clipr.ymax");
917 RNA_def_property_range(prop, -100.0f, 100.0f);
918 RNA_def_property_ui_text(prop, "Clip Max Y", "");
919 RNA_def_property_float_funcs(prop, nullptr, nullptr, "rna_CurveMapping_clipmaxy_range");
920
921 prop = RNA_def_property(srna, "extend", PROP_ENUM, PROP_NONE);
922 RNA_def_property_enum_bitflag_sdna(prop, nullptr, "flag");
923 RNA_def_property_enum_items(prop, prop_extend_items);
924 RNA_def_property_ui_text(prop, "Extend", "Extrapolate the curve or extend it horizontally");
926 RNA_def_property_update(prop, 0, "rna_CurveMapping_extend_update");
927
928 prop = RNA_def_property(srna, "curves", PROP_COLLECTION, PROP_NONE);
930 "rna_CurveMapping_curves_begin",
931 "rna_iterator_array_next",
932 "rna_iterator_array_end",
933 "rna_iterator_array_get",
934 "rna_CurveMapping_curves_length",
935 nullptr,
936 nullptr,
937 nullptr);
938 RNA_def_property_struct_type(prop, "CurveMap");
939 RNA_def_property_ui_text(prop, "Curves", "");
940
941 prop = RNA_def_property(srna, "black_level", PROP_FLOAT, PROP_COLOR);
942 RNA_def_property_float_sdna(prop, nullptr, "black");
944 RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 1, 3);
946 prop, "Black Level", "For RGB curves, the color that black is mapped to");
947 RNA_def_property_float_funcs(prop, nullptr, "rna_CurveMapping_black_level_set", nullptr);
948
949 prop = RNA_def_property(srna, "white_level", PROP_FLOAT, PROP_COLOR);
950 RNA_def_property_float_sdna(prop, nullptr, "white");
952 RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 1, 3);
954 prop, "White Level", "For RGB curves, the color that white is mapped to");
955 RNA_def_property_float_funcs(prop, nullptr, "rna_CurveMapping_white_level_set", nullptr);
956
957 func = RNA_def_function(srna, "update", "BKE_curvemapping_changed_all");
958 RNA_def_function_ui_description(func, "Update curve mapping after making changes");
959
960 func = RNA_def_function(srna, "reset_view", "BKE_curvemapping_reset_view");
961 RNA_def_function_ui_description(func, "Reset the curve mapping grid to its clipping size");
962
963 func = RNA_def_function(srna, "initialize", "rna_CurveMap_initialize");
964 RNA_def_function_ui_description(func, "Initialize curve");
965
966 func = RNA_def_function(srna, "evaluate", "rna_CurveMapping_evaluateF");
968 RNA_def_function_ui_description(func, "Evaluate curve at given location");
969 parm = RNA_def_pointer(func, "curve", "CurveMap", "curve", "Curve to evaluate");
971 parm = RNA_def_float(func,
972 "position",
973 0.0f,
974 -FLT_MAX,
975 FLT_MAX,
976 "Position",
977 "Position to evaluate curve at",
978 -FLT_MAX,
979 FLT_MAX);
981 parm = RNA_def_float(func,
982 "value",
983 0.0f,
984 -FLT_MAX,
985 FLT_MAX,
986 "Value",
987 "Value of curve at given location",
988 -FLT_MAX,
989 FLT_MAX);
990 RNA_def_function_return(func, parm);
991}
992
994{
995 StructRNA *srna;
996 PropertyRNA *prop;
997
998 srna = RNA_def_struct(brna, "ColorRampElement", nullptr);
999 RNA_def_struct_sdna(srna, "CBData");
1000 RNA_def_struct_path_func(srna, "rna_ColorRampElement_path");
1002 srna, "Color Ramp Element", "Element defining a color at a position in the color ramp");
1003
1004 prop = RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR);
1005 RNA_def_property_float_sdna(prop, nullptr, "r");
1006 RNA_def_property_array(prop, 4);
1007 RNA_def_property_ui_text(prop, "Color", "Set color of selected color stop");
1008 RNA_def_property_update(prop, 0, "rna_ColorRamp_update");
1009
1010 prop = RNA_def_property(srna, "alpha", PROP_FLOAT, PROP_COLOR);
1011 RNA_def_property_float_sdna(prop, nullptr, "a");
1012 RNA_def_property_ui_text(prop, "Alpha", "Set alpha of selected color stop");
1013 RNA_def_property_update(prop, 0, "rna_ColorRamp_update");
1014
1015 prop = RNA_def_property(srna, "position", PROP_FLOAT, PROP_NONE);
1016 RNA_def_property_float_sdna(prop, nullptr, "pos");
1017 RNA_def_property_range(prop, 0, 1);
1018 RNA_def_property_ui_range(prop, 0, 1, 1, 3);
1019 RNA_def_property_ui_text(prop, "Position", "Set position of selected color stop");
1020 RNA_def_property_update(prop, 0, "rna_ColorRamp_update");
1021}
1022
1024{
1025 StructRNA *srna;
1026 PropertyRNA *parm;
1027 FunctionRNA *func;
1028
1029 RNA_def_property_srna(cprop, "ColorRampElements");
1030 srna = RNA_def_struct(brna, "ColorRampElements", nullptr);
1031 RNA_def_struct_sdna(srna, "ColorBand");
1032 RNA_def_struct_path_func(srna, "rna_ColorRampElement_path");
1033 RNA_def_struct_ui_text(srna, "Color Ramp Elements", "Collection of Color Ramp Elements");
1034
1035 /* TODO: make these functions generic in `texture.cc`. */
1036 func = RNA_def_function(srna, "new", "rna_ColorRampElement_new");
1037 RNA_def_function_ui_description(func, "Add element to Color Ramp");
1039 parm = RNA_def_float(
1040 func, "position", 0.0f, 0.0f, 1.0f, "Position", "Position to add element", 0.0f, 1.0f);
1042 /* return type */
1043 parm = RNA_def_pointer(func, "element", "ColorRampElement", "", "New element");
1044 RNA_def_function_return(func, parm);
1045
1046 func = RNA_def_function(srna, "remove", "rna_ColorRampElement_remove");
1047 RNA_def_function_ui_description(func, "Delete element from Color Ramp");
1049 parm = RNA_def_pointer(func, "element", "ColorRampElement", "", "Element to remove");
1052}
1053
1055{
1056 StructRNA *srna;
1057 PropertyRNA *prop;
1058
1059 FunctionRNA *func;
1060 PropertyRNA *parm;
1061
1062 static const EnumPropertyItem prop_interpolation_items[] = {
1063 {COLBAND_INTERP_EASE, "EASE", 0, "Ease", ""},
1064 {COLBAND_INTERP_CARDINAL, "CARDINAL", 0, "Cardinal", ""},
1065 {COLBAND_INTERP_LINEAR, "LINEAR", 0, "Linear", ""},
1066 {COLBAND_INTERP_B_SPLINE, "B_SPLINE", 0, "B-Spline", ""},
1067 {COLBAND_INTERP_CONSTANT, "CONSTANT", 0, "Constant", ""},
1068 {0, nullptr, 0, nullptr, nullptr},
1069 };
1070
1071 static const EnumPropertyItem prop_mode_items[] = {
1072 {COLBAND_BLEND_RGB, "RGB", 0, "RGB", ""},
1073 {COLBAND_BLEND_HSV, "HSV", 0, "HSV", ""},
1074 {COLBAND_BLEND_HSL, "HSL", 0, "HSL", ""},
1075 {0, nullptr, 0, nullptr, nullptr},
1076 };
1077
1078 static const EnumPropertyItem prop_hsv_items[] = {
1079 {COLBAND_HUE_NEAR, "NEAR", 0, "Near", ""},
1080 {COLBAND_HUE_FAR, "FAR", 0, "Far", ""},
1081 {COLBAND_HUE_CW, "CW", 0, "Clockwise", ""},
1082 {COLBAND_HUE_CCW, "CCW", 0, "Counter-Clockwise", ""},
1083 {0, nullptr, 0, nullptr, nullptr},
1084 };
1085
1086 srna = RNA_def_struct(brna, "ColorRamp", nullptr);
1087 RNA_def_struct_sdna(srna, "ColorBand");
1088 RNA_def_struct_path_func(srna, "rna_ColorRamp_path");
1089 RNA_def_struct_ui_text(srna, "Color Ramp", "Color ramp mapping a scalar value to a color");
1090
1091 prop = RNA_def_property(srna, "elements", PROP_COLLECTION, PROP_COLOR);
1092 RNA_def_property_collection_sdna(prop, nullptr, "data", "tot");
1093 RNA_def_property_struct_type(prop, "ColorRampElement");
1094 RNA_def_property_ui_text(prop, "Elements", "");
1095 RNA_def_property_update(prop, 0, "rna_ColorRamp_update");
1097
1098 prop = RNA_def_property(srna, "interpolation", PROP_ENUM, PROP_NONE);
1099 RNA_def_property_enum_sdna(prop, nullptr, "ipotype");
1100 RNA_def_property_enum_items(prop, prop_interpolation_items);
1101 RNA_def_property_ui_text(prop, "Interpolation", "Set interpolation between color stops");
1102 RNA_def_property_update(prop, 0, "rna_ColorRamp_update");
1103
1104 prop = RNA_def_property(srna, "hue_interpolation", PROP_ENUM, PROP_NONE);
1105 RNA_def_property_enum_sdna(prop, nullptr, "ipotype_hue");
1106 RNA_def_property_enum_items(prop, prop_hsv_items);
1107 RNA_def_property_ui_text(prop, "Color Interpolation", "Set color interpolation");
1108 RNA_def_property_update(prop, 0, "rna_ColorRamp_update");
1109
1110 prop = RNA_def_property(srna, "color_mode", PROP_ENUM, PROP_NONE);
1111 RNA_def_property_enum_sdna(prop, nullptr, "color_mode");
1112 RNA_def_property_enum_items(prop, prop_mode_items);
1113 RNA_def_property_ui_text(prop, "Color Mode", "Set color mode to use for interpolation");
1114 RNA_def_property_update(prop, 0, "rna_ColorRamp_update");
1115
1116# if 0 /* use len(elements) */
1117 prop = RNA_def_property(srna, "total", PROP_INT, PROP_NONE);
1118 RNA_def_property_int_sdna(prop, nullptr, "tot");
1119 /* needs a function to do the right thing when adding elements like colorband_add_cb() */
1121 RNA_def_property_range(prop, 0, 31); /* MAXCOLORBAND = 32 */
1122 RNA_def_property_ui_text(prop, "Total", "Total number of elements");
1123 RNA_def_property_update(prop, 0, "rna_ColorRamp_update");
1124# endif
1125
1126 func = RNA_def_function(srna, "evaluate", "rna_ColorRamp_eval");
1127 RNA_def_function_ui_description(func, "Evaluate Color Ramp");
1128 parm = RNA_def_float(func,
1129 "position",
1130 1.0f,
1131 0.0f,
1132 1.0f,
1133 "Position",
1134 "Evaluate Color Ramp at position",
1135 0.0f,
1136 1.0f);
1138 /* return */
1139 parm = RNA_def_float_color(func,
1140 "color",
1141 4,
1142 nullptr,
1143 -FLT_MAX,
1144 FLT_MAX,
1145 "Color",
1146 "Color at given position",
1147 -FLT_MAX,
1148 FLT_MAX);
1150 RNA_def_function_output(func, parm);
1151}
1152
1154{
1155 StructRNA *srna;
1156 PropertyRNA *prop;
1157
1158 static const EnumPropertyItem prop_mode_items[] = {
1159 {HISTO_MODE_LUMA, "LUMA", 0, "Luma", "Luma"},
1160 {HISTO_MODE_RGB, "RGB", 0, "RGB", "Red Green Blue"},
1161 {HISTO_MODE_R, "R", 0, "R", "Red"},
1162 {HISTO_MODE_G, "G", 0, "G", "Green"},
1163 {HISTO_MODE_B, "B", 0, "B", "Blue"},
1164 {HISTO_MODE_ALPHA, "A", 0, "A", "Alpha"},
1165 {0, nullptr, 0, nullptr, nullptr},
1166 };
1167
1168 srna = RNA_def_struct(brna, "Histogram", nullptr);
1169 RNA_def_struct_ui_text(srna, "Histogram", "Statistical view of the levels of color in an image");
1170
1171 prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
1172 RNA_def_property_enum_sdna(prop, nullptr, "mode");
1173 RNA_def_property_enum_items(prop, prop_mode_items);
1174 RNA_def_property_ui_text(prop, "Mode", "Channels to display in the histogram");
1176
1177 prop = RNA_def_property(srna, "show_line", PROP_BOOLEAN, PROP_NONE);
1178 RNA_def_property_boolean_sdna(prop, nullptr, "flag", HISTO_FLAG_LINE);
1179 RNA_def_property_ui_text(prop, "Show Line", "Display lines rather than filled shapes");
1180 RNA_def_property_ui_icon(prop, ICON_GRAPH, 0);
1181}
1182
1183static void rna_def_scopes(BlenderRNA *brna)
1184{
1185 StructRNA *srna;
1186 PropertyRNA *prop;
1187
1188 static const EnumPropertyItem prop_wavefrm_mode_items[] = {
1189 {SCOPES_WAVEFRM_LUMA, "LUMA", ICON_COLOR, "Luma", ""},
1190 {SCOPES_WAVEFRM_RGB_PARADE, "PARADE", ICON_COLOR, "Parade", ""},
1191 {SCOPES_WAVEFRM_YCC_601, "YCBCR601", ICON_COLOR, "YCbCr (ITU 601)", ""},
1192 {SCOPES_WAVEFRM_YCC_709, "YCBCR709", ICON_COLOR, "YCbCr (ITU 709)", ""},
1193 {SCOPES_WAVEFRM_YCC_JPEG, "YCBCRJPG", ICON_COLOR, "YCbCr (JPEG)", ""},
1194 {SCOPES_WAVEFRM_RGB, "RGB", ICON_COLOR, "Red Green Blue", ""},
1195 {0, nullptr, 0, nullptr, nullptr},
1196 };
1197
1198 static const EnumPropertyItem prop_vecscope_mode_items[] = {
1199 {SCOPES_VECSCOPE_LUMA, "LUMA", ICON_COLOR, "Luma", ""},
1200 {SCOPES_VECSCOPE_RGB, "RGB", ICON_COLOR, "Red Green Blue", ""},
1201 {0, nullptr, 0, nullptr, nullptr},
1202 };
1203
1204 srna = RNA_def_struct(brna, "Scopes", nullptr);
1205 RNA_def_struct_ui_text(srna, "Scopes", "Scopes for statistical view of an image");
1206
1207 prop = RNA_def_property(srna, "use_full_resolution", PROP_BOOLEAN, PROP_NONE);
1208 RNA_def_property_boolean_sdna(prop, "Scopes", "sample_full", 1);
1209 RNA_def_property_ui_text(prop, "Full Sample", "Sample every pixel of the image");
1210 RNA_def_property_update(prop, 0, "rna_Scopes_update");
1211
1212 prop = RNA_def_property(srna, "accuracy", PROP_FLOAT, PROP_PERCENTAGE);
1213 RNA_def_property_float_sdna(prop, "Scopes", "accuracy");
1214 RNA_def_property_range(prop, 0.0, 100.0);
1215 RNA_def_property_ui_range(prop, 0.0, 100.0, 10, 1);
1217 prop, "Accuracy", "Proportion of original image source pixel lines to sample");
1218 RNA_def_property_update(prop, 0, "rna_Scopes_update");
1219
1220 prop = RNA_def_property(srna, "histogram", PROP_POINTER, PROP_NONE);
1221 RNA_def_property_pointer_sdna(prop, "Scopes", "hist");
1222 RNA_def_property_struct_type(prop, "Histogram");
1223 RNA_def_property_ui_text(prop, "Histogram", "Histogram for viewing image statistics");
1224
1225 prop = RNA_def_property(srna, "waveform_mode", PROP_ENUM, PROP_NONE);
1226 RNA_def_property_enum_sdna(prop, "Scopes", "wavefrm_mode");
1227 RNA_def_property_enum_items(prop, prop_wavefrm_mode_items);
1228 RNA_def_property_ui_text(prop, "Waveform Mode", "");
1229 RNA_def_property_update(prop, 0, "rna_Scopes_update");
1230
1231 prop = RNA_def_property(srna, "waveform_alpha", PROP_FLOAT, PROP_FACTOR);
1232 RNA_def_property_float_sdna(prop, "Scopes", "wavefrm_alpha");
1233 RNA_def_property_range(prop, 0, 1);
1234 RNA_def_property_ui_text(prop, "Waveform Opacity", "Opacity of the points");
1235
1236 prop = RNA_def_property(srna, "vectorscope_mode", PROP_ENUM, PROP_NONE);
1237 RNA_def_property_enum_sdna(prop, "Scopes", "vecscope_mode");
1238 RNA_def_property_enum_items(prop, prop_vecscope_mode_items);
1239 RNA_def_property_ui_text(prop, "Vectorscope Mode", "");
1240 RNA_def_property_update(prop, 0, "rna_Scopes_update");
1241
1242 prop = RNA_def_property(srna, "vectorscope_alpha", PROP_FLOAT, PROP_FACTOR);
1243 RNA_def_property_float_sdna(prop, "Scopes", "vecscope_alpha");
1244 RNA_def_property_range(prop, 0, 1);
1245 RNA_def_property_ui_text(prop, "Vectorscope Opacity", "Opacity of the points");
1246}
1247
1249{
1250 StructRNA *srna;
1251 PropertyRNA *prop;
1252
1253 static const EnumPropertyItem display_device_items[] = {
1254 {0, "NONE", 0, "None", ""},
1255 {0, nullptr, 0, nullptr, nullptr},
1256 };
1257
1258 static const EnumPropertyItem look_items[] = {
1259 {0, "NONE", 0, "None", "Do not modify image in an artistic manner"},
1260 {0, nullptr, 0, nullptr, nullptr},
1261 };
1262
1263 static const EnumPropertyItem view_transform_items[] = {
1264 {0,
1265 "NONE",
1266 0,
1267 "None",
1268 "Do not perform any color transform on display, use old non-color managed technique for "
1269 "display"},
1270 {0, nullptr, 0, nullptr, nullptr},
1271 };
1272
1273 /* ** Display Settings ** */
1274 srna = RNA_def_struct(brna, "ColorManagedDisplaySettings", nullptr);
1275 RNA_def_struct_path_func(srna, "rna_ColorManagedDisplaySettings_path");
1277 srna, "ColorManagedDisplaySettings", "Color management specific to display device");
1278
1279 prop = RNA_def_property(srna, "display_device", PROP_ENUM, PROP_NONE);
1280 RNA_def_property_enum_items(prop, display_device_items);
1282 "rna_ColorManagedDisplaySettings_display_device_get",
1283 "rna_ColorManagedDisplaySettings_display_device_set",
1284 "rna_ColorManagedDisplaySettings_display_device_itemf");
1285 RNA_def_property_ui_text(prop, "Display Device", "Display device name");
1287 prop, NC_WINDOW, "rna_ColorManagedDisplaySettings_display_device_update");
1288
1289 /* ** View Settings ** */
1290 srna = RNA_def_struct(brna, "ColorManagedViewSettings", nullptr);
1291 RNA_def_struct_path_func(srna, "rna_ColorManagedViewSettings_path");
1293 "ColorManagedViewSettings",
1294 "Color management settings used for displaying images on the display");
1295
1296 prop = RNA_def_property(srna, "look", PROP_ENUM, PROP_NONE);
1297 RNA_def_property_enum_items(prop, look_items);
1299 "rna_ColorManagedViewSettings_look_get",
1300 "rna_ColorManagedViewSettings_look_set",
1301 "rna_ColorManagedViewSettings_look_itemf");
1303 prop, "Look", "Additional transform applied before view transform for artistic needs");
1304 RNA_def_property_update(prop, NC_WINDOW, "rna_ColorManagement_update");
1305
1306 prop = RNA_def_property(srna, "view_transform", PROP_ENUM, PROP_NONE);
1307 RNA_def_property_enum_items(prop, view_transform_items);
1309 "rna_ColorManagedViewSettings_view_transform_get",
1310 "rna_ColorManagedViewSettings_view_transform_set",
1311 "rna_ColorManagedViewSettings_view_transform_itemf");
1313 prop, "View Transform", "View used when converting image to a display space");
1314 RNA_def_property_update(prop, NC_WINDOW, "rna_ColorManagement_update");
1315
1316 prop = RNA_def_property(srna, "exposure", PROP_FLOAT, PROP_FACTOR);
1317 RNA_def_property_float_sdna(prop, nullptr, "exposure");
1319 RNA_def_property_range(prop, -32.0f, 32.0f);
1320 RNA_def_property_ui_range(prop, -10.0f, 10.0f, 1, 3);
1322 prop,
1323 "Exposure",
1324 "Exposure (stops) applied before display transform, multiplying by 2^exposure");
1325 RNA_def_property_update(prop, NC_WINDOW, "rna_ColorManagement_update");
1326
1327 prop = RNA_def_property(srna, "gamma", PROP_FLOAT, PROP_FACTOR);
1328 RNA_def_property_float_sdna(prop, nullptr, "gamma");
1330 RNA_def_property_range(prop, 0.0f, 5.0f);
1332 prop,
1333 "Gamma",
1334 "Additional gamma encoding after display transform, for output with custom gamma");
1335 RNA_def_property_update(prop, NC_WINDOW, "rna_ColorManagement_update");
1336
1337 prop = RNA_def_property(srna, "curve_mapping", PROP_POINTER, PROP_NONE);
1338 RNA_def_property_pointer_sdna(prop, nullptr, "curve_mapping");
1339 RNA_def_property_ui_text(prop, "Curve", "Color curve mapping applied before display transform");
1340 RNA_def_property_update(prop, NC_WINDOW, "rna_ColorManagement_update");
1341
1342 prop = RNA_def_property(srna, "use_curve_mapping", PROP_BOOLEAN, PROP_NONE);
1344 RNA_def_property_boolean_funcs(prop, nullptr, "rna_ColorManagedViewSettings_use_curves_set");
1345 RNA_def_property_ui_text(prop, "Use Curves", "Use RGB curved for pre-display transformation");
1346 RNA_def_property_update(prop, NC_WINDOW, "rna_ColorManagement_update");
1347
1348 prop = RNA_def_property(srna, "use_white_balance", PROP_BOOLEAN, PROP_NONE);
1351 prop, "Use White Balance", "Perform chromatic adaption from a different white point");
1352 RNA_def_property_update(prop, NC_WINDOW, "rna_ColorManagement_update");
1353
1354 prop = RNA_def_property(srna, "white_balance_temperature", PROP_FLOAT, PROP_COLOR_TEMPERATURE);
1355 RNA_def_property_float_sdna(prop, nullptr, "temperature");
1356 RNA_def_property_float_default(prop, 6500.0f);
1357 RNA_def_property_range(prop, 1800.0f, 100000.0f);
1358 RNA_def_property_ui_range(prop, 2000.0f, 11000.0f, 100, 0);
1359 RNA_def_property_ui_text(prop, "Temperature", "Color temperature of the scene's white point");
1360 RNA_def_property_update(prop, NC_WINDOW, "rna_ColorManagement_update");
1361
1362 prop = RNA_def_property(srna, "white_balance_tint", PROP_FLOAT, PROP_FACTOR);
1363 RNA_def_property_float_sdna(prop, nullptr, "tint");
1364 RNA_def_property_float_default(prop, 10.0f);
1365 RNA_def_property_range(prop, -500.0f, 500.0f);
1366 RNA_def_property_ui_range(prop, -150.0f, 150.0f, 1, 1);
1368 prop, "Tint", "Color tint of the scene's white point (the default of 10 matches daylight)");
1369 RNA_def_property_update(prop, NC_WINDOW, "rna_ColorManagement_update");
1370
1371 prop = RNA_def_property(srna, "white_balance_whitepoint", PROP_FLOAT, PROP_COLOR);
1372 RNA_def_property_array(prop, 3);
1374 "rna_ColorManagedViewSettings_whitepoint_get",
1375 "rna_ColorManagedViewSettings_whitepoint_set",
1376 nullptr);
1378 "White Point",
1379 "The color which gets mapped to white "
1380 "(automatically converted to/from temperature and tint)");
1381 RNA_def_property_update(prop, NC_WINDOW, "rna_ColorManagement_update");
1382
1383 prop = RNA_def_property(srna, "use_hdr_view", PROP_BOOLEAN, PROP_NONE);
1386 prop,
1387 "High Dynamic Range",
1388 "Enable high dynamic range display in rendered viewport, uncapping display brightness. This "
1389 "requires a monitor with HDR support and a view transform designed for HDR. "
1390 "'Filmic' and 'AgX' do not generate HDR colors.");
1391 RNA_def_property_update(prop, NC_WINDOW, "rna_ColorManagedColorspaceSettings_reload_update");
1392
1393 /* ** Color-space ** */
1394 srna = RNA_def_struct(brna, "ColorManagedInputColorspaceSettings", nullptr);
1395 RNA_def_struct_path_func(srna, "rna_ColorManagedInputColorspaceSettings_path");
1397 srna, "ColorManagedInputColorspaceSettings", "Input color space settings");
1398
1399 prop = RNA_def_property(srna, "name", PROP_ENUM, PROP_NONE);
1404 "rna_ColorManagedColorspaceSettings_colorspace_get",
1405 "rna_ColorManagedColorspaceSettings_colorspace_set",
1406 "rna_ColorManagedColorspaceSettings_colorspace_itemf");
1408 prop,
1409 "Input Color Space",
1410 "Color space in the image file, to convert to and from when saving and loading the image");
1411 RNA_def_property_update(prop, NC_WINDOW, "rna_ColorManagedColorspaceSettings_reload_update");
1412
1413 prop = RNA_def_property(srna, "is_data", PROP_BOOLEAN, PROP_NONE);
1416 "rna_ColorManagedColorspaceSettings_is_data_get",
1417 "rna_ColorManagedColorspaceSettings_is_data_set");
1419 prop,
1420 "Is Data",
1421 "Treat image as non-color data without color management, like normal or displacement maps");
1422 RNA_def_property_update(prop, NC_WINDOW, "rna_ColorManagement_update");
1423
1424 //
1425 srna = RNA_def_struct(brna, "ColorManagedSequencerColorspaceSettings", nullptr);
1426 RNA_def_struct_path_func(srna, "rna_ColorManagedSequencerColorspaceSettings_path");
1428 srna, "ColorManagedSequencerColorspaceSettings", "Input color space settings");
1429
1430 prop = RNA_def_property(srna, "name", PROP_ENUM, PROP_NONE);
1434 "rna_ColorManagedColorspaceSettings_colorspace_get",
1435 "rna_ColorManagedColorspaceSettings_colorspace_set",
1436 "rna_ColorManagedColorspaceSettings_colorspace_itemf");
1437 RNA_def_property_ui_text(prop, "Color Space", "Color space that the sequencer operates in");
1438 RNA_def_property_update(prop, NC_WINDOW, "rna_ColorManagedColorspaceSettings_reload_update");
1439}
1440
1442{
1444 rna_def_curvemap(brna);
1447 rna_def_color_ramp(brna);
1448 rna_def_histogram(brna);
1449 rna_def_scopes(brna);
1450 rna_def_colormanage(brna);
1451}
1452
1453#endif
#define MAXCOLORBAND
CBData * BKE_colorband_element_add(ColorBand *coba, float position)
Definition colorband.cc:605
bool BKE_colorband_evaluate(const ColorBand *coba, float in, float out[4])
Definition colorband.cc:395
bool BKE_colorband_element_remove(ColorBand *coba, int index)
Definition colorband.cc:631
void BKE_curvemapping_set_black_white(CurveMapping *cumap, const float black[3], const float white[3])
bool BKE_curvemap_remove_point(CurveMap *cuma, CurveMapPoint *point)
void BKE_curvemapping_init(CurveMapping *cumap)
CurveMapping * BKE_curvemapping_add(int tot, float minx, float miny, float maxx, float maxy)
Definition colortools.cc:89
void BKE_curvemapping_changed(CurveMapping *cumap, bool rem_doubles)
float BKE_curvemap_evaluateF(const CurveMapping *cumap, const CurveMap *cuma, float value)
Scene * CTX_data_scene(const bContext *C)
#define IMA_SIGNAL_COLORMANAGE
Definition BKE_image.hh:167
void BKE_image_signal(Main *bmain, Image *ima, ImageUser *iuser, int signal)
Blender kernel freestyle line style functionality.
void BKE_linestyle_modifier_list_color_ramps(FreestyleLineStyle *linestyle, ListBase *listbase)
std::optional< std::string > BKE_linestyle_path_to_color_ramp(FreestyleLineStyle *linestyle, const struct ColorBand *color_ramp)
void BKE_main_ensure_invariants(Main &bmain, std::optional< blender::Span< ID * > > modified_ids=std::nullopt)
#define CMP_NODE_VALTORGB
#define SH_NODE_VALTORGB
#define TEX_NODE_VALTORGB
void BKE_ntree_update_tag_node_property(bNodeTree *ntree, 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.cc:126
#define LISTBASE_FOREACH(type, var, list)
void void BLI_freelistN(ListBase *listbase) ATTR_NONNULL(1)
Definition listbase.cc:497
char * STRNCPY(char(&dst)[N], const char *src)
Definition BLI_string.h:688
#define ELEM(...)
#define STREQ(a, b)
#define BLT_I18NCONTEXT_ID_CURVE_LEGACY
#define BLT_I18NCONTEXT_COLOR
void DEG_id_tag_update(ID *id, unsigned int flags)
@ ID_RECALC_SOURCE
Definition DNA_ID.h:1051
@ ID_RECALC_SYNC_TO_EVAL
Definition DNA_ID.h:1026
@ ID_MC
@ ID_TE
@ ID_IM
@ ID_NT
@ ID_SCE
@ ID_LS
@ ID_MA
@ ID_OB
@ ID_PA
@ CUMA_EXTEND_EXTRAPOLATE
@ CUMA_DO_CLIP
@ CUMA_USE_WRAPPING
struct CurveMapping CurveMapping
@ COLORMANAGE_VIEW_USE_WHITE_BALANCE
@ COLORMANAGE_VIEW_USE_CURVES
@ COLORMANAGE_VIEW_USE_HDR
@ SCOPES_VECSCOPE_LUMA
@ SCOPES_VECSCOPE_RGB
@ 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
struct ColorManagedColorspaceSettings ColorManagedColorspaceSettings
@ HISTO_FLAG_LINE
@ SCOPES_WAVEFRM_YCC_JPEG
@ SCOPES_WAVEFRM_RGB
@ SCOPES_WAVEFRM_YCC_601
@ SCOPES_WAVEFRM_YCC_709
@ SCOPES_WAVEFRM_LUMA
@ SCOPES_WAVEFRM_RGB_PARADE
@ CURVE_TONE_STANDARD
@ CURVE_TONE_FILMLIKE
@ COLBAND_BLEND_RGB
@ COLBAND_BLEND_HSL
@ COLBAND_BLEND_HSV
@ COLBAND_INTERP_LINEAR
@ COLBAND_INTERP_CONSTANT
@ COLBAND_INTERP_B_SPLINE
@ COLBAND_INTERP_EASE
@ COLBAND_INTERP_CARDINAL
@ COLBAND_HUE_FAR
@ COLBAND_HUE_CW
@ COLBAND_HUE_NEAR
@ COLBAND_HUE_CCW
Object is a sort of wrapper for general info.
struct Scene Scene
@ seqModifierType_Curves
struct Strip Strip
static AppView * view
void IMB_colormanagement_colorspace_items_add(EnumPropertyItem **items, int *totitem)
bool IMB_colormanagement_set_whitepoint(const float whitepoint[3], float &temperature, float &tint)
const char * IMB_colormanagement_colorspace_get_indexed_name(int index)
void IMB_colormanagement_view_items_add(EnumPropertyItem **items, int *totitem, const char *display_name)
const char * IMB_colormanagement_look_get_indexed_name(int index)
const char * IMB_colormanagement_look_validate_for_view(const char *view_name, const char *look_name)
const char * IMB_colormanagement_view_get_name_by_id(int index)
void IMB_colormanagement_validate_settings(const ColorManagedDisplaySettings *display_settings, ColorManagedViewSettings *view_settings)
@ COLOR_ROLE_DATA
void IMB_colormanagement_get_whitepoint(const float temperature, const float tint, float whitepoint[3])
int IMB_colormanagement_view_get_id_by_name(const char *name)
const char * IMB_colormanagement_role_colorspace_name_get(int role)
const char * IMB_colormanagement_display_get_indexed_name(int index)
int IMB_colormanagement_look_get_named_index(const char *name)
void IMB_colormanagement_display_items_add(EnumPropertyItem **items, int *totitem)
int IMB_colormanagement_colorspace_get_named_index(const char *name)
void IMB_colormanagement_look_items_add(EnumPropertyItem **items, int *totitem, const char *view_name)
int IMB_colormanagement_display_get_named_index(const char *name)
Read Guarded memory(de)allocation.
ParameterFlag
Definition RNA_types.hh:510
@ PARM_RNAPTR
Definition RNA_types.hh:513
@ PARM_REQUIRED
Definition RNA_types.hh:511
@ FUNC_USE_REPORTS
Definition RNA_types.hh:805
@ PROP_FLOAT
Definition RNA_types.hh:152
@ PROP_BOOLEAN
Definition RNA_types.hh:150
@ PROP_ENUM
Definition RNA_types.hh:154
@ PROP_INT
Definition RNA_types.hh:151
@ PROP_POINTER
Definition RNA_types.hh:155
@ PROP_COLLECTION
Definition RNA_types.hh:156
PropertyFlag
Definition RNA_types.hh:286
@ PROP_THICK_WRAP
Definition RNA_types.hh:397
@ PROP_ANIMATABLE
Definition RNA_types.hh:305
@ PROP_EDITABLE
Definition RNA_types.hh:292
@ PROP_ENUM_NO_CONTEXT
Definition RNA_types.hh:404
@ PROP_NEVER_NULL
Definition RNA_types.hh:351
@ PROP_XYZ
Definition RNA_types.hh:257
@ PROP_COLOR
Definition RNA_types.hh:248
@ PROP_COLOR_TEMPERATURE
Definition RNA_types.hh:278
@ PROP_NONE
Definition RNA_types.hh:221
@ PROP_PERCENTAGE
Definition RNA_types.hh:238
@ PROP_FACTOR
Definition RNA_types.hh:239
#define C
Definition RandGen.cpp:29
#define ND_SEQUENCER
Definition WM_types.hh:434
#define NC_WINDOW
Definition WM_types.hh:372
#define NC_NODE
Definition WM_types.hh:391
#define NC_LINESTYLE
Definition WM_types.hh:397
#define ND_DISPLAY
Definition WM_types.hh:488
#define NC_MOVIECLIP
Definition WM_types.hh:394
#define NC_SCENE
Definition WM_types.hh:375
#define NA_EDITED
Definition WM_types.hh:581
#define ND_PARTICLE
Definition WM_types.hh:462
ReportList * reports
Definition WM_types.hh:1025
#define NC_MATERIAL
Definition WM_types.hh:377
#define NC_IMAGE
Definition WM_types.hh:381
#define NC_TEXTURE
Definition WM_types.hh:378
#define NC_OBJECT
Definition WM_types.hh:376
#define ND_SHADING_DRAW
Definition WM_types.hh:475
BMesh const char void * data
ATTR_WARN_UNUSED_RESULT const void * element
#define CM_TOT
#define GS(a)
void MOV_close(MovieReader *anim)
Definition movie_read.cc:58
void relations_strip_free_anim(Strip *strip)
void relations_invalidate_cache(Scene *scene, Strip *strip)
void relations_invalidate_scene_strips(const Main *bmain, const Scene *scene_target)
void relations_invalidate_cache_raw(Scene *scene, Strip *strip)
void relations_invalidate_movieclip_strips(Main *bmain, MovieClip *clip_target)
void for_each_callback(ListBase *seqbase, ForEachFunc callback, void *user_data)
Definition iterator.cc:59
void cache_cleanup(Scene *scene)
void rna_iterator_array_begin(CollectionPropertyIterator *iter, PointerRNA *ptr, void *data, int itemsize, int length, bool free_ptr, IteratorSkipFunc skip)
PointerRNA RNA_pointer_create_discrete(ID *id, StructRNA *type, void *data)
PointerRNA RNA_id_pointer_create(ID *id)
static void rna_def_curvemap(BlenderRNA *brna)
Definition rna_color.cc:841
static void rna_def_curvemap_points_api(BlenderRNA *brna, PropertyRNA *cprop)
Definition rna_color.cc:804
void RNA_def_color(BlenderRNA *brna)
static void rna_def_curvemappoint(BlenderRNA *brna)
Definition rna_color.cc:774
static void rna_def_color_ramp(BlenderRNA *brna)
static void rna_def_curvemapping(BlenderRNA *brna)
Definition rna_color.cc:856
static void rna_def_histogram(BlenderRNA *brna)
static void rna_def_color_ramp_element(BlenderRNA *brna)
Definition rna_color.cc:993
static void rna_def_scopes(BlenderRNA *brna)
static void rna_def_colormanage(BlenderRNA *brna)
const EnumPropertyItem rna_enum_color_space_convert_default_items[]
Definition rna_color.cc:23
static void rna_def_color_ramp_element_api(BlenderRNA *brna, PropertyRNA *cprop)
static const EnumPropertyItem prop_handle_type_items[]
void RNA_def_property_boolean_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t booleanbit)
void RNA_def_property_pointer_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_struct_path_func(StructRNA *srna, const char *path)
PropertyRNA * RNA_def_float_color(StructOrFunctionRNA *cont_, const char *identifier, const int len, const float *default_value, const float hardmin, const float hardmax, const char *ui_name, const char *ui_description, const float softmin, const float softmax)
void RNA_def_parameter_clear_flags(PropertyRNA *prop, PropertyFlag flag_property, ParameterFlag flag_parameter)
void RNA_def_property_float_default(PropertyRNA *prop, float value)
void RNA_def_function_return(FunctionRNA *func, PropertyRNA *ret)
void RNA_def_property_float_funcs(PropertyRNA *prop, const char *get, const char *set, const char *range)
void RNA_def_property_ui_text(PropertyRNA *prop, const char *name, const char *description)
void RNA_def_property_ui_icon(PropertyRNA *prop, int icon, int consecutive)
void RNA_def_property_srna(PropertyRNA *prop, const char *type)
PropertyRNA * RNA_def_float(StructOrFunctionRNA *cont_, const char *identifier, const float default_value, const float hardmin, const float hardmax, const char *ui_name, const char *ui_description, const float softmin, const float softmax)
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)
void RNA_def_struct_ui_text(StructRNA *srna, const char *name, const char *description)
void RNA_def_property_boolean_funcs(PropertyRNA *prop, const char *get, const char *set)
void RNA_def_property_enum_items(PropertyRNA *prop, const EnumPropertyItem *item)
void RNA_def_struct_sdna(StructRNA *srna, const char *structname)
FunctionRNA * RNA_def_function(StructRNA *srna, const char *identifier, const char *call)
void RNA_def_property_array(PropertyRNA *prop, int length)
void RNA_def_property_range(PropertyRNA *prop, double min, double max)
PropertyRNA * RNA_def_pointer(StructOrFunctionRNA *cont_, const char *identifier, const char *type, const char *ui_name, const char *ui_description)
void RNA_def_property_struct_type(PropertyRNA *prop, const char *type)
void RNA_def_property_collection_sdna(PropertyRNA *prop, const char *structname, const char *propname, const char *lengthpropname)
void RNA_def_function_ui_description(FunctionRNA *func, const char *description)
void RNA_def_property_update(PropertyRNA *prop, int noteflag, const char *func)
PropertyRNA * RNA_def_property(StructOrFunctionRNA *cont_, const char *identifier, int type, int subtype)
void RNA_def_property_enum_funcs(PropertyRNA *prop, const char *get, const char *set, const char *item)
void RNA_def_property_enum_bitflag_sdna(PropertyRNA *prop, const char *structname, const char *propname)
StructRNA * RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *from)
void RNA_enum_item_end(EnumPropertyItem **items, int *totitem)
void RNA_def_function_flag(FunctionRNA *func, int flag)
void RNA_def_property_clear_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_def_property_enum_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_property_translation_context(PropertyRNA *prop, const char *context)
void RNA_def_function_output(FunctionRNA *, PropertyRNA *ret)
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_def_property_float_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_property_ui_range(PropertyRNA *prop, double min, double max, double step, int precision)
void RNA_def_property_int_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_parameter_flags(PropertyRNA *prop, PropertyFlag flag_property, ParameterFlag flag_parameter)
std::optional< std::string > RNA_path_from_ID_to_struct(const PointerRNA *ptr)
Definition rna_path.cc:1014
bool RNA_path_resolve(const PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop)
Definition rna_path.cc:532
#define min(a, b)
Definition sort.cc:36
#define FLT_MAX
Definition stdcycles.h:14
CBData data[32]
CurveMapPoint * table
CurveMap cm[4]
struct CurveMapping curve_mapping
ListBase seqbase
Definition DNA_ID.h:404
char name[66]
Definition DNA_ID.h:415
void * data
struct LinkData * next
void * first
ListBase materials
Definition BKE_main.hh:251
void invalidate()
Definition RNA_types.hh:110
void * data
Definition RNA_types.hh:53
ColorManagedViewSettings view_settings
struct Editing * ed
ColorManagedColorspaceSettings sequencer_colorspace_settings
ColorManagedDisplaySettings display_settings
StripProxy * proxy
ColorManagedColorspaceSettings colorspace_settings
struct MovieReader * anim
StripData * data
ListBase modifiers
ListBase nodes
int16_t type_legacy
struct bNode * next
void * storage
max
Definition text_draw.cc:251
uint len
void WM_main_add_notifier(uint type, void *reference)
PointerRNA * ptr
Definition wm_files.cc:4226