Blender V5.0
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 == eSeqModifierType_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::foreach_strip(&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,
408 ReportList *reports,
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 const ColorManagedDisplaySettings *rna_display_settings_from_view_settings(
439 const PointerRNA *ptr, const Scene *scene = nullptr)
440{
441 /* Assumes view_settings and display_settings are stored next to each other. */
442 PointerRNA parent_ptr = ptr->parent();
443 if (parent_ptr.data) {
444 PointerRNA display_ptr = RNA_pointer_get(&parent_ptr, "display_settings");
445 if (display_ptr.type == &RNA_ColorManagedDisplaySettings) {
446 return display_ptr.data_as<const ColorManagedDisplaySettings>();
447 }
448 }
449
450 if (ptr->owner_id && GS(ptr->owner_id) == ID_SCE) {
451 return &reinterpret_cast<const Scene *>(ptr->owner_id)->display_settings;
452 }
453
454 if (scene) {
455 /* Shouldn't be necessary and is not correct in general, but just in case. */
456 return &scene->display_settings;
457 }
458
459 return nullptr;
460}
461
462static ColorManagedViewSettings *rna_view_settings_from_display_settings(PointerRNA *ptr)
463{
464 /* Assumes view_settings and display_settings are stored next to each other. */
465 PointerRNA parent_ptr = ptr->parent();
466 if (parent_ptr.data) {
467 PointerRNA view_ptr = RNA_pointer_get(&parent_ptr, "view_settings");
468 if (view_ptr.type == &RNA_ColorManagedViewSettings) {
469 return view_ptr.data_as<ColorManagedViewSettings>();
470 }
471 }
472
473 return nullptr;
474}
475
476static int rna_ColorManagedDisplaySettings_display_device_get(PointerRNA *ptr)
477{
479
480 return IMB_colormanagement_display_get_named_index(display->display_device);
481}
482
483static void rna_ColorManagedDisplaySettings_display_device_set(PointerRNA *ptr, int value)
484{
487
488 if (name) {
489 STRNCPY_UTF8(display->display_device, name);
490 }
491}
492
493static const EnumPropertyItem *rna_ColorManagedDisplaySettings_display_device_itemf(
494 bContext * /*C*/, PointerRNA * /*ptr*/, PropertyRNA * /*prop*/, bool *r_free)
495{
496 EnumPropertyItem *items = nullptr;
497 int totitem = 0;
498
500 RNA_enum_item_end(&items, &totitem);
501
502 *r_free = true;
503
504 return items;
505}
506
507static void rna_display_and_view_settings_node_update(Main *bmain, PointerRNA *ptr)
508{
509 ID *id = ptr->owner_id;
510
511 if (id && GS(id->name) == ID_NT) {
512 /* Find a node ancestor and tag it. */
513 PointerRNA node_ptr = ptr->parent();
514 while (node_ptr.data && !RNA_struct_is_a(node_ptr.type, &RNA_Node)) {
515 node_ptr = node_ptr.parent();
516 }
517
518 if (node_ptr.data) {
519 bNodeTree *ntree = reinterpret_cast<bNodeTree *>(id);
520 bNode *node = node_ptr.data_as<bNode>();
522 BKE_main_ensure_invariants(*bmain, ntree->id);
523 }
524 }
525}
526
527static void rna_ColorManagedDisplaySettings_display_device_update(Main *bmain,
528 Scene * /*scene*/,
530{
531 ID *id = ptr->owner_id;
532
533 if (id && GS(id->name) == ID_SCE) {
534 Scene *scene = (Scene *)id;
535
537
538 DEG_id_tag_update(id, 0);
540
541 /* Color management can be baked into shaders, need to refresh. */
542 for (Material *ma = static_cast<Material *>(bmain->materials.first); ma;
543 ma = static_cast<Material *>(ma->id.next))
544 {
546 }
547 }
548 else {
549 ColorManagedViewSettings *view_settings = rna_view_settings_from_display_settings(ptr);
550 if (view_settings) {
552 view_settings);
553 if (ptr->owner_id) {
554 DEG_id_tag_update(ptr->owner_id, 0);
555 }
556 }
557
558 rna_display_and_view_settings_node_update(bmain, ptr);
559 }
560}
561
562static int rna_ColorManagedViewSettings_view_transform_get(PointerRNA *ptr)
563{
565 return IMB_colormanagement_view_get_id_by_name(view->view_transform);
566}
567
568static void rna_ColorManagedViewSettings_view_transform_set(PointerRNA *ptr, int value)
569{
571
572 const char *view_name = IMB_colormanagement_view_get_name_by_id(value);
573 if (!view_name) {
574 return;
575 }
576
577 STRNCPY_UTF8(view->view_transform, view_name);
578
579 const char *look_name = IMB_colormanagement_look_validate_for_view(view_name, view->look);
580 if (look_name) {
581 STRNCPY_UTF8(view->look, look_name);
582 }
583}
584
585static const EnumPropertyItem *rna_ColorManagedViewSettings_view_transform_itemf(
586 bContext *C, PointerRNA *ptr, PropertyRNA * /*prop*/, bool *r_free)
587{
588 const ColorManagedDisplaySettings *display_settings = rna_display_settings_from_view_settings(
590
591 EnumPropertyItem *items = nullptr;
592 int totitem = 0;
593
594 IMB_colormanagement_view_items_add(&items, &totitem, display_settings->display_device);
595 RNA_enum_item_end(&items, &totitem);
596
597 *r_free = true;
598 return items;
599}
600
601static int rna_ColorManagedViewSettings_look_get(PointerRNA *ptr)
602{
604
606}
607
608static void rna_ColorManagedViewSettings_look_set(PointerRNA *ptr, int value)
609{
611
613
614 if (name) {
615 STRNCPY_UTF8(view->look, name);
616 }
617}
618
619static const EnumPropertyItem *rna_ColorManagedViewSettings_look_itemf(bContext * /*C*/,
621 PropertyRNA * /*prop*/,
622 bool *r_free)
623{
625 EnumPropertyItem *items = nullptr;
626 int totitem = 0;
627
628 IMB_colormanagement_look_items_add(&items, &totitem, view->view_transform);
629 RNA_enum_item_end(&items, &totitem);
630
631 *r_free = true;
632 return items;
633}
634
635static void rna_ColorManagedViewSettings_use_curves_set(PointerRNA *ptr, bool value)
636{
637 ColorManagedViewSettings *view_settings = (ColorManagedViewSettings *)ptr->data;
638
639 if (value) {
640 view_settings->flag |= COLORMANAGE_VIEW_USE_CURVES;
641
642 if (view_settings->curve_mapping == nullptr) {
643 view_settings->curve_mapping = BKE_curvemapping_add(4, 0.0f, 0.0f, 1.0f, 1.0f);
644 }
645 }
646 else {
647 view_settings->flag &= ~COLORMANAGE_VIEW_USE_CURVES;
648 }
649}
650
651static void rna_ColorManagedViewSettings_whitepoint_get(PointerRNA *ptr, float value[3])
652{
653 const ColorManagedViewSettings *view_settings = (ColorManagedViewSettings *)ptr->data;
654 IMB_colormanagement_get_whitepoint(view_settings->temperature, view_settings->tint, value);
655}
656
657static void rna_ColorManagedViewSettings_whitepoint_set(PointerRNA *ptr, const float value[3])
658{
659 ColorManagedViewSettings *view_settings = (ColorManagedViewSettings *)ptr->data;
660 IMB_colormanagement_set_whitepoint(value, view_settings->temperature, view_settings->tint);
661}
662
663static bool rna_ColorManagedViewSettings_is_hdr_get(PointerRNA *ptr)
664{
665 ColorManagedViewSettings *view_settings = (ColorManagedViewSettings *)ptr->data;
666 if (GS(ptr->owner_id->name) != ID_SCE) {
667 return false;
668 }
669 const Scene *scene = reinterpret_cast<const Scene *>(ptr->owner_id);
670 if (&scene->view_settings != view_settings) {
671 return false;
672 }
674 view_settings->view_transform);
675}
676
677static bool rna_ColorManagedViewSettings_support_emulation_get(PointerRNA *ptr)
678{
679 ColorManagedViewSettings *view_settings = (ColorManagedViewSettings *)ptr->data;
680 if (GS(ptr->owner_id->name) != ID_SCE) {
681 return false;
682 }
683 const Scene *scene = reinterpret_cast<const Scene *>(ptr->owner_id);
684 if (&scene->view_settings != view_settings) {
685 return false;
686 }
688 view_settings->view_transform);
689}
690
691static int rna_ViewSettings_only_view_look_editable(const PointerRNA *ptr, const char **r_info)
692{
693 ColorManagedViewSettings *view_settings = (ColorManagedViewSettings *)ptr->data;
694
695 if (view_settings->flag & COLORMANAGE_VIEW_ONLY_VIEW_LOOK) {
696 if (r_info) {
697 *r_info = N_("Only view transform and look can be edited for these settings");
698 }
699 return 0;
700 }
701
702 return PROP_EDITABLE;
703}
704
705static bool rna_ColorManagedColorspaceSettings_is_data_get(PointerRNA *ptr)
706{
709 return STREQ(colorspace->name, data_name);
710}
711
712static void rna_ColorManagedColorspaceSettings_is_data_set(PointerRNA *ptr, bool value)
713{
715 if (value) {
717 STRNCPY_UTF8(colorspace->name, data_name);
718 }
719}
720
721static int rna_ColorManagedColorspaceSettings_colorspace_get(PointerRNA *ptr)
722{
724
725 return IMB_colormanagement_colorspace_get_named_index(colorspace->name);
726}
727
728static void rna_ColorManagedColorspaceSettings_colorspace_set(PointerRNA *ptr, int value)
729{
732
733 if (name && name[0]) {
734 STRNCPY_UTF8(colorspace->name, name);
735 }
736}
737
738static const EnumPropertyItem *rna_ColorManagedColorspaceSettings_colorspace_itemf(
739 bContext * /*C*/, PointerRNA * /*ptr*/, PropertyRNA * /*prop*/, bool *r_free)
740{
741 EnumPropertyItem *items = nullptr;
742 int totitem = 0;
743
745 RNA_enum_item_end(&items, &totitem);
746
747 *r_free = true;
748
749 return items;
750}
751
752struct Seq_colorspace_cb_data {
753 ColorManagedColorspaceSettings *colorspace_settings;
754 Strip *r_seq;
755};
756
762static bool strip_find_colorspace_settings_cb(Strip *strip, void *user_data)
763{
764 Seq_colorspace_cb_data *cd = (Seq_colorspace_cb_data *)user_data;
765 if (strip->data && &strip->data->colorspace_settings == cd->colorspace_settings) {
766 cd->r_seq = strip;
767 return false;
768 }
769 return true;
770}
771
772static void rna_ColorManagedColorspaceSettings_reload_update(Main *bmain,
773 Scene * /*scene*/,
775{
776 ID *id = ptr->owner_id;
777
778 if (!id) {
779 /* Happens for color space settings on operators. */
780 return;
781 }
782
783 if (GS(id->name) == ID_IM) {
784 Image *ima = (Image *)id;
785
786 DEG_id_tag_update(&ima->id, 0);
788
789 BKE_image_signal(bmain, ima, nullptr, IMA_SIGNAL_COLORMANAGE);
790
793 }
794 else if (GS(id->name) == ID_MC) {
795 MovieClip *clip = (MovieClip *)id;
796
799
802 }
803 else if (GS(id->name) == ID_SCE) {
804 Scene *scene = (Scene *)id;
806
807 if (scene->ed) {
809 ptr->data;
810 Seq_colorspace_cb_data cb_data = {colorspace_settings, nullptr};
811
812 if (&scene->sequencer_colorspace_settings == colorspace_settings) {
813 /* Scene colorspace was changed. */
815 }
816 else {
817 /* Strip colorspace was likely changed. */
819 &scene->ed->seqbase, strip_find_colorspace_settings_cb, &cb_data);
820 Strip *strip = cb_data.r_seq;
821
822 if (strip) {
824
825 if (strip->data->proxy && strip->data->proxy->anim) {
826 MOV_close(strip->data->proxy->anim);
827 strip->data->proxy->anim = nullptr;
828 }
829
831 }
832 }
833
835 }
836 }
837}
838
839static std::optional<std::string> rna_ColorManagedSequencerColorspaceSettings_path(
840 const PointerRNA * /*ptr*/)
841{
842 return "sequencer_colorspace_settings";
843}
844
845static void rna_ColorManagement_update(Main *bmain, Scene * /*scene*/, PointerRNA *ptr)
846{
847 ID *id = ptr->owner_id;
848
849 if (!id) {
850 return;
851 }
852
853 if (GS(id->name) == ID_SCE) {
855 }
856 else {
857 rna_display_and_view_settings_node_update(bmain, ptr);
858 }
859}
860
861/* this function only exists because #BKE_curvemap_evaluateF uses a 'const' qualifier */
862static float rna_CurveMapping_evaluateF(CurveMapping *cumap,
863 ReportList *reports,
864 CurveMap *cuma,
865 float value)
866{
867 if (&cumap->cm[0] != cuma && &cumap->cm[1] != cuma && &cumap->cm[2] != cuma &&
868 &cumap->cm[3] != cuma)
869 {
870 BKE_report(reports, RPT_ERROR, "CurveMapping does not own CurveMap");
871 return 0.0f;
872 }
873
874 if (!cuma->table) {
876 }
877 return BKE_curvemap_evaluateF(cumap, cuma, value);
878}
879
880static void rna_CurveMap_initialize(CurveMapping *cumap)
881{
883}
884#else
885
887{
888 StructRNA *srna;
889 PropertyRNA *prop;
891 {0, "AUTO", 0, "Auto Handle", ""},
892 {CUMA_HANDLE_AUTO_ANIM, "AUTO_CLAMPED", 0, "Auto-Clamped Handle", ""},
893 {CUMA_HANDLE_VECTOR, "VECTOR", 0, "Vector Handle", ""},
894 {0, nullptr, 0, nullptr, nullptr},
895 };
896
897 srna = RNA_def_struct(brna, "CurveMapPoint", nullptr);
898 RNA_def_struct_ui_text(srna, "CurveMapPoint", "Point of a curve used for a curve mapping");
899
900 prop = RNA_def_property(srna, "location", PROP_FLOAT, PROP_XYZ);
901 RNA_def_property_float_sdna(prop, nullptr, "x");
902 RNA_def_property_array(prop, 2);
903 RNA_def_property_ui_text(prop, "Location", "X/Y coordinates of the curve point");
904
905 prop = RNA_def_property(srna, "handle_type", PROP_ENUM, PROP_NONE);
906 RNA_def_property_enum_bitflag_sdna(prop, nullptr, "flag");
909 prop, "Handle Type", "Curve interpolation at this point: Bézier or vector");
910
911 prop = RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
912 RNA_def_property_boolean_sdna(prop, nullptr, "flag", CUMA_SELECT);
913 RNA_def_property_ui_text(prop, "Select", "Selection state of the curve point");
914}
915
917{
918 StructRNA *srna;
919 PropertyRNA *parm;
920 FunctionRNA *func;
921
922 RNA_def_property_srna(cprop, "CurveMapPoints");
923 srna = RNA_def_struct(brna, "CurveMapPoints", nullptr);
924 RNA_def_struct_sdna(srna, "CurveMap");
925 RNA_def_struct_ui_text(srna, "Curve Map Point", "Collection of Curve Map Points");
926
927 func = RNA_def_function(srna, "new", "BKE_curvemap_insert");
928 RNA_def_function_ui_description(func, "Add point to CurveMap");
929 parm = RNA_def_float(func,
930 "position",
931 0.0f,
932 -FLT_MAX,
933 FLT_MAX,
934 "Position",
935 "Position to add point",
936 -FLT_MAX,
937 FLT_MAX);
939 parm = RNA_def_float(
940 func, "value", 0.0f, -FLT_MAX, FLT_MAX, "Value", "Value of point", -FLT_MAX, FLT_MAX);
942 parm = RNA_def_pointer(func, "point", "CurveMapPoint", "", "New point");
943 RNA_def_function_return(func, parm);
944
945 func = RNA_def_function(srna, "remove", "rna_CurveMap_remove_point");
947 RNA_def_function_ui_description(func, "Delete point from CurveMap");
948 parm = RNA_def_pointer(func, "point", "CurveMapPoint", "", "PointElement to remove");
951}
952
953static void rna_def_curvemap(BlenderRNA *brna)
954{
955 StructRNA *srna;
956 PropertyRNA *prop;
957
958 srna = RNA_def_struct(brna, "CurveMap", nullptr);
959 RNA_def_struct_ui_text(srna, "CurveMap", "Curve in a curve mapping");
960
961 prop = RNA_def_property(srna, "points", PROP_COLLECTION, PROP_NONE);
962 RNA_def_property_collection_sdna(prop, nullptr, "curve", "totpoint");
963 RNA_def_property_struct_type(prop, "CurveMapPoint");
964 RNA_def_property_ui_text(prop, "Points", "");
965 rna_def_curvemap_points_api(brna, prop);
966}
967
969{
970 StructRNA *srna;
971 PropertyRNA *prop, *parm;
972 FunctionRNA *func;
973
974 static const EnumPropertyItem tone_items[] = {
976 "STANDARD",
977 0,
978 "Standard",
979 "Combined curve is applied to each channel individually, which may result in a change of "
980 "hue"},
981 {CURVE_TONE_FILMLIKE, "FILMLIKE", 0, "Filmlike", "Keeps the hue constant"},
982 {0, nullptr, 0, nullptr, nullptr},
983 };
984
985 static const EnumPropertyItem prop_extend_items[] = {
986 {0, "HORIZONTAL", 0, "Horizontal", ""},
987 {CUMA_EXTEND_EXTRAPOLATE, "EXTRAPOLATED", 0, "Extrapolated", ""},
988 {0, nullptr, 0, nullptr, nullptr},
989 };
990
991 srna = RNA_def_struct(brna, "CurveMapping", nullptr);
993 srna,
994 "CurveMapping",
995 "Curve mapping to map color, vector and scalar values to other values using "
996 "a user defined curve");
997
998 prop = RNA_def_property(srna, "tone", PROP_ENUM, PROP_NONE);
999 RNA_def_property_enum_sdna(prop, nullptr, "tone");
1000 RNA_def_property_enum_items(prop, tone_items);
1001 RNA_def_property_ui_text(prop, "Tone", "Tone of the curve");
1002 RNA_def_property_update(prop, 0, "rna_CurveMapping_tone_update");
1003
1004 prop = RNA_def_property(srna, "use_clip", PROP_BOOLEAN, PROP_NONE);
1005 RNA_def_property_boolean_sdna(prop, nullptr, "flag", CUMA_DO_CLIP);
1006 RNA_def_property_ui_text(prop, "Clip", "Force the curve view to fit a defined boundary");
1007 RNA_def_property_boolean_funcs(prop, nullptr, "rna_CurveMapping_clip_set");
1008
1009 prop = RNA_def_property(srna, "clip_min_x", PROP_FLOAT, PROP_NONE);
1010 RNA_def_property_float_sdna(prop, nullptr, "clipr.xmin");
1011 RNA_def_property_range(prop, -100.0f, 100.0f);
1012 RNA_def_property_ui_text(prop, "Clip Min X", "");
1013 RNA_def_property_float_funcs(prop, nullptr, nullptr, "rna_CurveMapping_clipminx_range");
1014
1015 prop = RNA_def_property(srna, "clip_min_y", PROP_FLOAT, PROP_NONE);
1016 RNA_def_property_float_sdna(prop, nullptr, "clipr.ymin");
1017 RNA_def_property_range(prop, -100.0f, 100.0f);
1018 RNA_def_property_ui_text(prop, "Clip Min Y", "");
1019 RNA_def_property_float_funcs(prop, nullptr, nullptr, "rna_CurveMapping_clipminy_range");
1020
1021 prop = RNA_def_property(srna, "clip_max_x", PROP_FLOAT, PROP_NONE);
1022 RNA_def_property_float_sdna(prop, nullptr, "clipr.xmax");
1023 RNA_def_property_range(prop, -100.0f, 100.0f);
1024 RNA_def_property_ui_text(prop, "Clip Max X", "");
1025 RNA_def_property_float_funcs(prop, nullptr, nullptr, "rna_CurveMapping_clipmaxx_range");
1026
1027 prop = RNA_def_property(srna, "clip_max_y", PROP_FLOAT, PROP_NONE);
1028 RNA_def_property_float_sdna(prop, nullptr, "clipr.ymax");
1029 RNA_def_property_range(prop, -100.0f, 100.0f);
1030 RNA_def_property_ui_text(prop, "Clip Max Y", "");
1031 RNA_def_property_float_funcs(prop, nullptr, nullptr, "rna_CurveMapping_clipmaxy_range");
1032
1033 prop = RNA_def_property(srna, "extend", PROP_ENUM, PROP_NONE);
1034 RNA_def_property_enum_bitflag_sdna(prop, nullptr, "flag");
1035 RNA_def_property_enum_items(prop, prop_extend_items);
1036 RNA_def_property_ui_text(prop, "Extend", "Extrapolate the curve or extend it horizontally");
1038 RNA_def_property_update(prop, 0, "rna_CurveMapping_extend_update");
1039
1040 prop = RNA_def_property(srna, "curves", PROP_COLLECTION, PROP_NONE);
1042 "rna_CurveMapping_curves_begin",
1043 "rna_iterator_array_next",
1044 "rna_iterator_array_end",
1045 "rna_iterator_array_get",
1046 "rna_CurveMapping_curves_length",
1047 nullptr,
1048 nullptr,
1049 nullptr);
1050 RNA_def_property_struct_type(prop, "CurveMap");
1051 RNA_def_property_ui_text(prop, "Curves", "");
1052
1053 prop = RNA_def_property(srna, "black_level", PROP_FLOAT, PROP_COLOR);
1054 RNA_def_property_float_sdna(prop, nullptr, "black");
1056 RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 1, 3);
1058 prop, "Black Level", "For RGB curves, the color that black is mapped to");
1059 RNA_def_property_float_funcs(prop, nullptr, "rna_CurveMapping_black_level_set", nullptr);
1060
1061 prop = RNA_def_property(srna, "white_level", PROP_FLOAT, PROP_COLOR);
1062 RNA_def_property_float_sdna(prop, nullptr, "white");
1064 RNA_def_property_ui_range(prop, -1000.0f, 1000.0f, 1, 3);
1066 prop, "White Level", "For RGB curves, the color that white is mapped to");
1067 RNA_def_property_float_funcs(prop, nullptr, "rna_CurveMapping_white_level_set", nullptr);
1068
1069 func = RNA_def_function(srna, "update", "BKE_curvemapping_changed_all");
1070 RNA_def_function_ui_description(func, "Update curve mapping after making changes");
1071
1072 func = RNA_def_function(srna, "reset_view", "BKE_curvemapping_reset_view");
1073 RNA_def_function_ui_description(func, "Reset the curve mapping grid to its clipping size");
1074
1075 func = RNA_def_function(srna, "initialize", "rna_CurveMap_initialize");
1076 RNA_def_function_ui_description(func, "Initialize curve");
1077
1078 func = RNA_def_function(srna, "evaluate", "rna_CurveMapping_evaluateF");
1080 RNA_def_function_ui_description(func, "Evaluate curve at given location");
1081 parm = RNA_def_pointer(func, "curve", "CurveMap", "curve", "Curve to evaluate");
1083 parm = RNA_def_float(func,
1084 "position",
1085 0.0f,
1086 -FLT_MAX,
1087 FLT_MAX,
1088 "Position",
1089 "Position to evaluate curve at",
1090 -FLT_MAX,
1091 FLT_MAX);
1093 parm = RNA_def_float(func,
1094 "value",
1095 0.0f,
1096 -FLT_MAX,
1097 FLT_MAX,
1098 "Value",
1099 "Value of curve at given location",
1100 -FLT_MAX,
1101 FLT_MAX);
1102 RNA_def_function_return(func, parm);
1103}
1104
1106{
1107 StructRNA *srna;
1108 PropertyRNA *prop;
1109
1110 srna = RNA_def_struct(brna, "ColorRampElement", nullptr);
1111 RNA_def_struct_sdna(srna, "CBData");
1112 RNA_def_struct_path_func(srna, "rna_ColorRampElement_path");
1114 srna, "Color Ramp Element", "Element defining a color at a position in the color ramp");
1115
1116 prop = RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR);
1117 RNA_def_property_float_sdna(prop, nullptr, "r");
1118 RNA_def_property_array(prop, 4);
1119 RNA_def_property_ui_text(prop, "Color", "Set color of selected color stop");
1120 RNA_def_property_update(prop, 0, "rna_ColorRamp_update");
1121
1122 prop = RNA_def_property(srna, "alpha", PROP_FLOAT, PROP_COLOR);
1123 RNA_def_property_float_sdna(prop, nullptr, "a");
1124 RNA_def_property_ui_text(prop, "Alpha", "Set alpha of selected color stop");
1125 RNA_def_property_update(prop, 0, "rna_ColorRamp_update");
1126
1127 prop = RNA_def_property(srna, "position", PROP_FLOAT, PROP_NONE);
1128 RNA_def_property_float_sdna(prop, nullptr, "pos");
1129 RNA_def_property_range(prop, 0, 1);
1130 RNA_def_property_ui_range(prop, 0, 1, 1, 3);
1131 RNA_def_property_ui_text(prop, "Position", "Set position of selected color stop");
1132 RNA_def_property_update(prop, 0, "rna_ColorRamp_update");
1133}
1134
1136{
1137 StructRNA *srna;
1138 PropertyRNA *parm;
1139 FunctionRNA *func;
1140
1141 RNA_def_property_srna(cprop, "ColorRampElements");
1142 srna = RNA_def_struct(brna, "ColorRampElements", nullptr);
1143 RNA_def_struct_sdna(srna, "ColorBand");
1144 RNA_def_struct_path_func(srna, "rna_ColorRampElement_path");
1145 RNA_def_struct_ui_text(srna, "Color Ramp Elements", "Collection of Color Ramp Elements");
1146
1147 /* TODO: make these functions generic in `texture.cc`. */
1148 func = RNA_def_function(srna, "new", "rna_ColorRampElement_new");
1149 RNA_def_function_ui_description(func, "Add element to Color Ramp");
1151 parm = RNA_def_float(
1152 func, "position", 0.0f, 0.0f, 1.0f, "Position", "Position to add element", 0.0f, 1.0f);
1154 /* return type */
1155 parm = RNA_def_pointer(func, "element", "ColorRampElement", "", "New element");
1156 RNA_def_function_return(func, parm);
1157
1158 func = RNA_def_function(srna, "remove", "rna_ColorRampElement_remove");
1159 RNA_def_function_ui_description(func, "Delete element from Color Ramp");
1161 parm = RNA_def_pointer(func, "element", "ColorRampElement", "", "Element to remove");
1164}
1165
1167{
1168 StructRNA *srna;
1169 PropertyRNA *prop;
1170
1171 FunctionRNA *func;
1172 PropertyRNA *parm;
1173
1174 static const EnumPropertyItem prop_interpolation_items[] = {
1175 {COLBAND_INTERP_EASE, "EASE", 0, "Ease", ""},
1176 {COLBAND_INTERP_CARDINAL, "CARDINAL", 0, "Cardinal", ""},
1177 {COLBAND_INTERP_LINEAR, "LINEAR", 0, "Linear", ""},
1178 {COLBAND_INTERP_B_SPLINE, "B_SPLINE", 0, "B-Spline", ""},
1179 {COLBAND_INTERP_CONSTANT, "CONSTANT", 0, "Constant", ""},
1180 {0, nullptr, 0, nullptr, nullptr},
1181 };
1182
1183 static const EnumPropertyItem prop_mode_items[] = {
1184 {COLBAND_BLEND_RGB, "RGB", 0, "RGB", ""},
1185 {COLBAND_BLEND_HSV, "HSV", 0, "HSV", ""},
1186 {COLBAND_BLEND_HSL, "HSL", 0, "HSL", ""},
1187 {0, nullptr, 0, nullptr, nullptr},
1188 };
1189
1190 static const EnumPropertyItem prop_hsv_items[] = {
1191 {COLBAND_HUE_NEAR, "NEAR", 0, "Near", ""},
1192 {COLBAND_HUE_FAR, "FAR", 0, "Far", ""},
1193 {COLBAND_HUE_CW, "CW", 0, "Clockwise", ""},
1194 {COLBAND_HUE_CCW, "CCW", 0, "Counter-Clockwise", ""},
1195 {0, nullptr, 0, nullptr, nullptr},
1196 };
1197
1198 srna = RNA_def_struct(brna, "ColorRamp", nullptr);
1199 RNA_def_struct_sdna(srna, "ColorBand");
1200 RNA_def_struct_path_func(srna, "rna_ColorRamp_path");
1201 RNA_def_struct_ui_text(srna, "Color Ramp", "Color ramp mapping a scalar value to a color");
1202
1203 prop = RNA_def_property(srna, "elements", PROP_COLLECTION, PROP_COLOR);
1204 RNA_def_property_collection_sdna(prop, nullptr, "data", "tot");
1205 RNA_def_property_struct_type(prop, "ColorRampElement");
1206 RNA_def_property_ui_text(prop, "Elements", "");
1207 RNA_def_property_update(prop, 0, "rna_ColorRamp_update");
1209
1210 prop = RNA_def_property(srna, "interpolation", PROP_ENUM, PROP_NONE);
1211 RNA_def_property_enum_sdna(prop, nullptr, "ipotype");
1212 RNA_def_property_enum_items(prop, prop_interpolation_items);
1213 RNA_def_property_ui_text(prop, "Interpolation", "Set interpolation between color stops");
1214 RNA_def_property_update(prop, 0, "rna_ColorRamp_update");
1215
1216 prop = RNA_def_property(srna, "hue_interpolation", PROP_ENUM, PROP_NONE);
1217 RNA_def_property_enum_sdna(prop, nullptr, "ipotype_hue");
1218 RNA_def_property_enum_items(prop, prop_hsv_items);
1219 RNA_def_property_ui_text(prop, "Color Interpolation", "Set color interpolation");
1220 RNA_def_property_update(prop, 0, "rna_ColorRamp_update");
1221
1222 prop = RNA_def_property(srna, "color_mode", PROP_ENUM, PROP_NONE);
1223 RNA_def_property_enum_sdna(prop, nullptr, "color_mode");
1224 RNA_def_property_enum_items(prop, prop_mode_items);
1225 RNA_def_property_ui_text(prop, "Color Mode", "Set color mode to use for interpolation");
1226 RNA_def_property_update(prop, 0, "rna_ColorRamp_update");
1227
1228# if 0 /* use len(elements) */
1229 prop = RNA_def_property(srna, "total", PROP_INT, PROP_NONE);
1230 RNA_def_property_int_sdna(prop, nullptr, "tot");
1231 /* needs a function to do the right thing when adding elements like colorband_add_cb() */
1233 RNA_def_property_range(prop, 0, 31); /* MAXCOLORBAND = 32 */
1234 RNA_def_property_ui_text(prop, "Total", "Total number of elements");
1235 RNA_def_property_update(prop, 0, "rna_ColorRamp_update");
1236# endif
1237
1238 func = RNA_def_function(srna, "evaluate", "rna_ColorRamp_eval");
1239 RNA_def_function_ui_description(func, "Evaluate Color Ramp");
1240 parm = RNA_def_float(func,
1241 "position",
1242 1.0f,
1243 0.0f,
1244 1.0f,
1245 "Position",
1246 "Evaluate Color Ramp at position",
1247 0.0f,
1248 1.0f);
1250 /* return */
1251 parm = RNA_def_float_color(func,
1252 "color",
1253 4,
1254 nullptr,
1255 -FLT_MAX,
1256 FLT_MAX,
1257 "Color",
1258 "Color at given position",
1259 -FLT_MAX,
1260 FLT_MAX);
1262 RNA_def_function_output(func, parm);
1263}
1264
1266{
1267 StructRNA *srna;
1268 PropertyRNA *prop;
1269
1270 static const EnumPropertyItem prop_mode_items[] = {
1271 {HISTO_MODE_LUMA, "LUMA", 0, "Luma", "Luma"},
1272 {HISTO_MODE_RGB, "RGB", 0, "RGB", "Red Green Blue"},
1273 {HISTO_MODE_R, "R", 0, "R", "Red"},
1274 {HISTO_MODE_G, "G", 0, "G", "Green"},
1275 {HISTO_MODE_B, "B", 0, "B", "Blue"},
1276 {HISTO_MODE_ALPHA, "A", 0, "A", "Alpha"},
1277 {0, nullptr, 0, nullptr, nullptr},
1278 };
1279
1280 srna = RNA_def_struct(brna, "Histogram", nullptr);
1281 RNA_def_struct_ui_text(srna, "Histogram", "Statistical view of the levels of color in an image");
1282
1283 prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
1284 RNA_def_property_enum_sdna(prop, nullptr, "mode");
1285 RNA_def_property_enum_items(prop, prop_mode_items);
1286 RNA_def_property_ui_text(prop, "Mode", "Channels to display in the histogram");
1288
1289 prop = RNA_def_property(srna, "show_line", PROP_BOOLEAN, PROP_NONE);
1290 RNA_def_property_boolean_sdna(prop, nullptr, "flag", HISTO_FLAG_LINE);
1291 RNA_def_property_ui_text(prop, "Show Line", "Display lines rather than filled shapes");
1292 RNA_def_property_ui_icon(prop, ICON_GRAPH, 0);
1293}
1294
1295static void rna_def_scopes(BlenderRNA *brna)
1296{
1297 StructRNA *srna;
1298 PropertyRNA *prop;
1299
1300 static const EnumPropertyItem prop_wavefrm_mode_items[] = {
1301 {SCOPES_WAVEFRM_LUMA, "LUMA", ICON_COLOR, "Luma", ""},
1302 {SCOPES_WAVEFRM_RGB_PARADE, "PARADE", ICON_COLOR, "Parade", ""},
1303 {SCOPES_WAVEFRM_YCC_601, "YCBCR601", ICON_COLOR, "YCbCr (ITU 601)", ""},
1304 {SCOPES_WAVEFRM_YCC_709, "YCBCR709", ICON_COLOR, "YCbCr (ITU 709)", ""},
1305 {SCOPES_WAVEFRM_YCC_JPEG, "YCBCRJPG", ICON_COLOR, "YCbCr (JPEG)", ""},
1306 {SCOPES_WAVEFRM_RGB, "RGB", ICON_COLOR, "Red Green Blue", ""},
1307 {0, nullptr, 0, nullptr, nullptr},
1308 };
1309
1310 static const EnumPropertyItem prop_vecscope_mode_items[] = {
1311 {SCOPES_VECSCOPE_LUMA, "LUMA", ICON_COLOR, "Luma", ""},
1312 {SCOPES_VECSCOPE_RGB, "RGB", ICON_COLOR, "Red Green Blue", ""},
1313 {0, nullptr, 0, nullptr, nullptr},
1314 };
1315
1316 srna = RNA_def_struct(brna, "Scopes", nullptr);
1317 RNA_def_struct_ui_text(srna, "Scopes", "Scopes for statistical view of an image");
1318
1319 prop = RNA_def_property(srna, "use_full_resolution", PROP_BOOLEAN, PROP_NONE);
1320 RNA_def_property_boolean_sdna(prop, "Scopes", "sample_full", 1);
1321 RNA_def_property_ui_text(prop, "Full Sample", "Sample every pixel of the image");
1322 RNA_def_property_update(prop, 0, "rna_Scopes_update");
1323
1324 prop = RNA_def_property(srna, "accuracy", PROP_FLOAT, PROP_PERCENTAGE);
1325 RNA_def_property_float_sdna(prop, "Scopes", "accuracy");
1326 RNA_def_property_range(prop, 0.0, 100.0);
1327 RNA_def_property_ui_range(prop, 0.0, 100.0, 10, 1);
1329 prop, "Accuracy", "Proportion of original image source pixel lines to sample");
1330 RNA_def_property_update(prop, 0, "rna_Scopes_update");
1331
1332 prop = RNA_def_property(srna, "histogram", PROP_POINTER, PROP_NONE);
1333 RNA_def_property_pointer_sdna(prop, "Scopes", "hist");
1334 RNA_def_property_struct_type(prop, "Histogram");
1335 RNA_def_property_ui_text(prop, "Histogram", "Histogram for viewing image statistics");
1336
1337 prop = RNA_def_property(srna, "waveform_mode", PROP_ENUM, PROP_NONE);
1338 RNA_def_property_enum_sdna(prop, "Scopes", "wavefrm_mode");
1339 RNA_def_property_enum_items(prop, prop_wavefrm_mode_items);
1340 RNA_def_property_ui_text(prop, "Waveform Mode", "");
1341 RNA_def_property_update(prop, 0, "rna_Scopes_update");
1342
1343 prop = RNA_def_property(srna, "waveform_alpha", PROP_FLOAT, PROP_FACTOR);
1344 RNA_def_property_float_sdna(prop, "Scopes", "wavefrm_alpha");
1345 RNA_def_property_range(prop, 0, 1);
1346 RNA_def_property_ui_text(prop, "Waveform Opacity", "Opacity of the points");
1347
1348 prop = RNA_def_property(srna, "vectorscope_mode", PROP_ENUM, PROP_NONE);
1349 RNA_def_property_enum_sdna(prop, "Scopes", "vecscope_mode");
1350 RNA_def_property_enum_items(prop, prop_vecscope_mode_items);
1351 RNA_def_property_ui_text(prop, "Vectorscope Mode", "");
1352 RNA_def_property_update(prop, 0, "rna_Scopes_update");
1353
1354 prop = RNA_def_property(srna, "vectorscope_alpha", PROP_FLOAT, PROP_FACTOR);
1355 RNA_def_property_float_sdna(prop, "Scopes", "vecscope_alpha");
1356 RNA_def_property_range(prop, 0, 1);
1357 RNA_def_property_ui_text(prop, "Vectorscope Opacity", "Opacity of the points");
1358}
1359
1361{
1362 StructRNA *srna;
1363 PropertyRNA *prop;
1364
1365 static const EnumPropertyItem display_device_items[] = {
1366 {0, "NONE", 0, "None", ""},
1367 {0, nullptr, 0, nullptr, nullptr},
1368 };
1369
1370 static const EnumPropertyItem emulation_items[] = {
1372 "OFF",
1373 0,
1374 "Off",
1375 "Directly output image as produced by OpenColorIO. This is not correct in general, but "
1376 "may be used when the system configuration and actual display device is known to match "
1377 "the chosen display"},
1379 "AUTO",
1380 0,
1381 "Automatic",
1382 "Display images consistent with most other applications, to preview images and video for "
1383 "export. A best effort is made to emulate the chosen display on the actual display "
1384 "device."},
1385 {0, nullptr, 0, nullptr, nullptr},
1386 };
1387
1388 static const EnumPropertyItem look_items[] = {
1389 {0, "NONE", 0, "None", "Do not modify image in an artistic manner"},
1390 {0, nullptr, 0, nullptr, nullptr},
1391 };
1392
1393 static const EnumPropertyItem view_transform_items[] = {
1394 {0,
1395 "NONE",
1396 0,
1397 "None",
1398 "Do not perform any color transform on display, use old non-color managed technique for "
1399 "display"},
1400 {0, nullptr, 0, nullptr, nullptr},
1401 };
1402
1403 /* ** Display Settings ** */
1404 srna = RNA_def_struct(brna, "ColorManagedDisplaySettings", nullptr);
1405 RNA_def_struct_path_func(srna, "rna_ColorManagedDisplaySettings_path");
1407 srna, "ColorManagedDisplaySettings", "Color management specific to display device");
1408
1409 prop = RNA_def_property(srna, "display_device", PROP_ENUM, PROP_NONE);
1410 RNA_def_property_enum_items(prop, display_device_items);
1412 "rna_ColorManagedDisplaySettings_display_device_get",
1413 "rna_ColorManagedDisplaySettings_display_device_set",
1414 "rna_ColorManagedDisplaySettings_display_device_itemf");
1416 prop,
1417 "Display",
1418 "Display name. For viewing, this is the display device that will be emulated by limiting "
1419 "the gamut and HDR colors. For image and video output, this is the display space used for "
1420 "writing.");
1422 prop, NC_WINDOW, "rna_ColorManagedDisplaySettings_display_device_update");
1423
1424 prop = RNA_def_property(srna, "emulation", PROP_ENUM, PROP_NONE);
1425 RNA_def_property_enum_items(prop, emulation_items);
1427 prop,
1428 "Display Emulation",
1429 "Control how images in the chosen display are mapped to the physical display");
1431 prop, NC_WINDOW, "rna_ColorManagedDisplaySettings_display_device_update");
1432
1433 /* ** View Settings ** */
1434 srna = RNA_def_struct(brna, "ColorManagedViewSettings", nullptr);
1435 RNA_def_struct_path_func(srna, "rna_ColorManagedViewSettings_path");
1437 "ColorManagedViewSettings",
1438 "Color management settings used for displaying images on the display");
1439
1440 prop = RNA_def_property(srna, "look", PROP_ENUM, PROP_NONE);
1441 RNA_def_property_enum_items(prop, look_items);
1443 "rna_ColorManagedViewSettings_look_get",
1444 "rna_ColorManagedViewSettings_look_set",
1445 "rna_ColorManagedViewSettings_look_itemf");
1447 prop, "Look", "Additional transform applied before view transform for artistic needs");
1448 RNA_def_property_update(prop, NC_WINDOW, "rna_ColorManagement_update");
1449
1450 prop = RNA_def_property(srna, "view_transform", PROP_ENUM, PROP_NONE);
1451 RNA_def_property_enum_items(prop, view_transform_items);
1453 "rna_ColorManagedViewSettings_view_transform_get",
1454 "rna_ColorManagedViewSettings_view_transform_set",
1455 "rna_ColorManagedViewSettings_view_transform_itemf");
1456 RNA_def_property_ui_text(prop, "View", "View used when converting image to a display space");
1457 RNA_def_property_update(prop, NC_WINDOW, "rna_ColorManagement_update");
1458
1459 prop = RNA_def_property(srna, "exposure", PROP_FLOAT, PROP_FACTOR);
1460 RNA_def_property_float_sdna(prop, nullptr, "exposure");
1462 RNA_def_property_range(prop, -32.0f, 32.0f);
1463 RNA_def_property_ui_range(prop, -10.0f, 10.0f, 1, 3);
1465 prop,
1466 "Exposure",
1467 "Exposure (stops) applied before display transform, multiplying by 2^exposure");
1468 RNA_def_property_update(prop, NC_WINDOW, "rna_ColorManagement_update");
1469 RNA_def_property_editable_func(prop, "rna_ViewSettings_only_view_look_editable");
1470
1471 prop = RNA_def_property(srna, "gamma", PROP_FLOAT, PROP_FACTOR);
1472 RNA_def_property_float_sdna(prop, nullptr, "gamma");
1474 RNA_def_property_range(prop, 0.0f, 5.0f);
1476 prop,
1477 "Gamma",
1478 "Additional gamma encoding after display transform, for output with custom gamma");
1479 RNA_def_property_update(prop, NC_WINDOW, "rna_ColorManagement_update");
1480 RNA_def_property_editable_func(prop, "rna_ViewSettings_only_view_look_editable");
1481
1482 prop = RNA_def_property(srna, "curve_mapping", PROP_POINTER, PROP_NONE);
1483 RNA_def_property_pointer_sdna(prop, nullptr, "curve_mapping");
1484 RNA_def_property_ui_text(prop, "Curve", "Color curve mapping applied before display transform");
1485 RNA_def_property_update(prop, NC_WINDOW, "rna_ColorManagement_update");
1486
1487 prop = RNA_def_property(srna, "use_curve_mapping", PROP_BOOLEAN, PROP_NONE);
1489 RNA_def_property_boolean_funcs(prop, nullptr, "rna_ColorManagedViewSettings_use_curves_set");
1490 RNA_def_property_ui_text(prop, "Use Curves", "Use RGB curved for pre-display transformation");
1491 RNA_def_property_update(prop, NC_WINDOW, "rna_ColorManagement_update");
1492 RNA_def_property_editable_func(prop, "rna_ViewSettings_only_view_look_editable");
1493
1494 prop = RNA_def_property(srna, "use_white_balance", PROP_BOOLEAN, PROP_NONE);
1497 prop, "Use White Balance", "Perform chromatic adaption from a different white point");
1498 RNA_def_property_update(prop, NC_WINDOW, "rna_ColorManagement_update");
1499 RNA_def_property_editable_func(prop, "rna_ViewSettings_only_view_look_editable");
1500
1501 prop = RNA_def_property(srna, "white_balance_temperature", PROP_FLOAT, PROP_COLOR_TEMPERATURE);
1502 RNA_def_property_float_sdna(prop, nullptr, "temperature");
1503 RNA_def_property_float_default(prop, 6500.0f);
1504 RNA_def_property_range(prop, 1800.0f, 100000.0f);
1505 RNA_def_property_ui_range(prop, 2000.0f, 11000.0f, 100, 0);
1506 RNA_def_property_ui_text(prop, "Temperature", "Color temperature of the scene's white point");
1507 RNA_def_property_update(prop, NC_WINDOW, "rna_ColorManagement_update");
1508 RNA_def_property_editable_func(prop, "rna_ViewSettings_only_view_look_editable");
1509
1510 prop = RNA_def_property(srna, "white_balance_tint", PROP_FLOAT, PROP_FACTOR);
1511 RNA_def_property_float_sdna(prop, nullptr, "tint");
1512 RNA_def_property_float_default(prop, 10.0f);
1513 RNA_def_property_range(prop, -500.0f, 500.0f);
1514 RNA_def_property_ui_range(prop, -150.0f, 150.0f, 1, 1);
1516 prop, "Tint", "Color tint of the scene's white point (the default of 10 matches daylight)");
1517 RNA_def_property_update(prop, NC_WINDOW, "rna_ColorManagement_update");
1518 RNA_def_property_editable_func(prop, "rna_ViewSettings_only_view_look_editable");
1519
1520 prop = RNA_def_property(srna, "white_balance_whitepoint", PROP_FLOAT, PROP_COLOR);
1521 RNA_def_property_array(prop, 3);
1523 "rna_ColorManagedViewSettings_whitepoint_get",
1524 "rna_ColorManagedViewSettings_whitepoint_set",
1525 nullptr);
1527 "White Point",
1528 "The color which gets mapped to white "
1529 "(automatically converted to/from temperature and tint)");
1530 RNA_def_property_update(prop, NC_WINDOW, "rna_ColorManagement_update");
1531 RNA_def_property_editable_func(prop, "rna_ViewSettings_only_view_look_editable");
1532
1533 prop = RNA_def_property(srna, "is_hdr", PROP_BOOLEAN, PROP_NONE);
1536 prop, "Is HDR", "The display and view transform supports high dynamic range colors");
1537 RNA_def_property_boolean_funcs(prop, "rna_ColorManagedViewSettings_is_hdr_get", nullptr);
1538
1539 prop = RNA_def_property(srna, "support_emulation", PROP_BOOLEAN, PROP_NONE);
1542 prop,
1543 "Support Emulation",
1544 "The display and view transform supports automatic emulation for another display device, "
1545 "using the display color spaces mechanism in OpenColorIO v2 configurations");
1547 prop, "rna_ColorManagedViewSettings_support_emulation_get", nullptr);
1548
1549 /* ** Color-space ** */
1550 srna = RNA_def_struct(brna, "ColorManagedInputColorspaceSettings", nullptr);
1551 RNA_def_struct_path_func(srna, "rna_ColorManagedInputColorspaceSettings_path");
1553 srna, "ColorManagedInputColorspaceSettings", "Input color space settings");
1554
1555 prop = RNA_def_property(srna, "name", PROP_ENUM, PROP_NONE);
1560 "rna_ColorManagedColorspaceSettings_colorspace_get",
1561 "rna_ColorManagedColorspaceSettings_colorspace_set",
1562 "rna_ColorManagedColorspaceSettings_colorspace_itemf");
1564 prop,
1565 "Input Color Space",
1566 "Color space in the image file, to convert to and from when saving and loading the image");
1567 RNA_def_property_update(prop, NC_WINDOW, "rna_ColorManagedColorspaceSettings_reload_update");
1568
1569 prop = RNA_def_property(srna, "is_data", PROP_BOOLEAN, PROP_NONE);
1572 "rna_ColorManagedColorspaceSettings_is_data_get",
1573 "rna_ColorManagedColorspaceSettings_is_data_set");
1575 prop,
1576 "Is Data",
1577 "Treat image as non-color data without color management, like normal or displacement maps");
1578 RNA_def_property_update(prop, NC_WINDOW, "rna_ColorManagedColorspaceSettings_reload_update");
1579
1580 //
1581 srna = RNA_def_struct(brna, "ColorManagedSequencerColorspaceSettings", nullptr);
1582 RNA_def_struct_path_func(srna, "rna_ColorManagedSequencerColorspaceSettings_path");
1584 srna, "ColorManagedSequencerColorspaceSettings", "Input color space settings");
1585
1586 prop = RNA_def_property(srna, "name", PROP_ENUM, PROP_NONE);
1590 "rna_ColorManagedColorspaceSettings_colorspace_get",
1591 "rna_ColorManagedColorspaceSettings_colorspace_set",
1592 "rna_ColorManagedColorspaceSettings_colorspace_itemf");
1593 RNA_def_property_ui_text(prop, "Color Space", "Color space that the sequencer operates in");
1594 RNA_def_property_update(prop, NC_WINDOW, "rna_ColorManagedColorspaceSettings_reload_update");
1595}
1596
1598{
1600 rna_def_curvemap(brna);
1603 rna_def_color_ramp(brna);
1604 rna_def_histogram(brna);
1605 rna_def_scopes(brna);
1606 rna_def_colormanage(brna);
1607}
1608
1609#endif
#define MAXCOLORBAND
CBData * BKE_colorband_element_add(ColorBand *coba, float position)
Definition colorband.cc:606
bool BKE_colorband_evaluate(const ColorBand *coba, float in, float out[4])
Definition colorband.cc:396
bool BKE_colorband_element_remove(ColorBand *coba, int index)
Definition colorband.cc:632
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:174
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 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
@ RPT_ERROR
Definition BKE_report.hh:39
void BKE_report(ReportList *reports, eReportType type, const char *message)
Definition report.cc:153
#define LISTBASE_FOREACH(type, var, list)
void void BLI_freelistN(ListBase *listbase) ATTR_NONNULL(1)
Definition listbase.cc:497
#define STRNCPY_UTF8(dst, src)
#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:1143
@ ID_RECALC_SYNC_TO_EVAL
Definition DNA_ID.h:1118
@ ID_MC
@ ID_TE
@ ID_IM
@ ID_NT
@ ID_SCE
@ ID_LS
@ ID_MA
@ ID_OB
@ ID_PA
#define CM_TOT
@ COLORMANAGE_VIEW_ONLY_VIEW_LOOK
@ COLORMANAGE_VIEW_USE_WHITE_BALANCE
@ COLORMANAGE_VIEW_USE_CURVES
@ CUMA_EXTEND_EXTRAPOLATE
@ CUMA_DO_CLIP
@ CUMA_USE_WRAPPING
@ HISTO_MODE_B
@ HISTO_MODE_G
@ HISTO_MODE_LUMA
@ HISTO_MODE_RGB
@ HISTO_MODE_ALPHA
@ HISTO_MODE_R
struct CurveMapping CurveMapping
@ HISTO_FLAG_LINE
@ SCOPES_VECSCOPE_LUMA
@ SCOPES_VECSCOPE_RGB
@ CUMA_HANDLE_AUTO_ANIM
@ CUMA_SELECT
@ CUMA_HANDLE_VECTOR
@ SCOPES_WAVEFRM_YCC_JPEG
@ SCOPES_WAVEFRM_RGB
@ SCOPES_WAVEFRM_YCC_601
@ SCOPES_WAVEFRM_YCC_709
@ SCOPES_WAVEFRM_LUMA
@ SCOPES_WAVEFRM_RGB_PARADE
struct ColorManagedColorspaceSettings ColorManagedColorspaceSettings
@ CURVE_TONE_STANDARD
@ CURVE_TONE_FILMLIKE
@ COLORMANAGE_DISPLAY_EMULATION_OFF
@ COLORMANAGE_DISPLAY_EMULATION_AUTO
@ COLBAND_HUE_FAR
@ COLBAND_HUE_CW
@ COLBAND_HUE_NEAR
@ COLBAND_HUE_CCW
@ 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
Object is a sort of wrapper for general info.
struct Scene Scene
@ eSeqModifierType_Curves
struct Strip Strip
static AppView * view
bool IMB_colormanagement_display_support_emulation(const ColorManagedDisplaySettings *display_settings, const char *view_name)
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)
bool IMB_colormanagement_display_is_hdr(const ColorManagedDisplaySettings *display_settings, const char *view_name)
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)
@ COLOR_ROLE_DATA
const char * IMB_colormanagement_view_get_name_by_id(int index)
void IMB_colormanagement_validate_settings(const ColorManagedDisplaySettings *display_settings, ColorManagedViewSettings *view_settings)
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:544
@ PARM_RNAPTR
Definition RNA_types.hh:547
@ PARM_REQUIRED
Definition RNA_types.hh:545
@ FUNC_USE_REPORTS
Definition RNA_types.hh:914
@ PROP_FLOAT
Definition RNA_types.hh:164
@ PROP_BOOLEAN
Definition RNA_types.hh:162
@ PROP_ENUM
Definition RNA_types.hh:166
@ PROP_INT
Definition RNA_types.hh:163
@ PROP_POINTER
Definition RNA_types.hh:167
@ PROP_COLLECTION
Definition RNA_types.hh:168
PropertyFlag
Definition RNA_types.hh:300
@ PROP_THICK_WRAP
Definition RNA_types.hh:423
@ PROP_ANIMATABLE
Definition RNA_types.hh:319
@ PROP_EDITABLE
Definition RNA_types.hh:306
@ PROP_ENUM_NO_CONTEXT
Definition RNA_types.hh:430
@ PROP_NEVER_NULL
Definition RNA_types.hh:377
@ PROP_XYZ
Definition RNA_types.hh:269
@ PROP_COLOR
Definition RNA_types.hh:260
@ PROP_COLOR_TEMPERATURE
Definition RNA_types.hh:290
@ PROP_NONE
Definition RNA_types.hh:233
@ PROP_PERCENTAGE
Definition RNA_types.hh:250
@ PROP_FACTOR
Definition RNA_types.hh:251
#define C
Definition RandGen.cpp:29
#define ND_SEQUENCER
Definition WM_types.hh:437
#define NC_WINDOW
Definition WM_types.hh:375
#define NC_NODE
Definition WM_types.hh:394
#define NC_LINESTYLE
Definition WM_types.hh:400
#define ND_DISPLAY
Definition WM_types.hh:491
#define NC_MOVIECLIP
Definition WM_types.hh:397
#define NC_SCENE
Definition WM_types.hh:378
#define NA_EDITED
Definition WM_types.hh:584
#define ND_PARTICLE
Definition WM_types.hh:465
#define NC_MATERIAL
Definition WM_types.hh:380
#define NC_IMAGE
Definition WM_types.hh:384
#define NC_TEXTURE
Definition WM_types.hh:381
#define NC_OBJECT
Definition WM_types.hh:379
#define ND_SHADING_DRAW
Definition WM_types.hh:478
BMesh const char void * data
ATTR_WARN_UNUSED_RESULT const void * element
#define GS(x)
void MOV_close(MovieReader *anim)
Definition movie_read.cc:66
void relations_strip_free_anim(Strip *strip)
void foreach_strip(ListBase *seqbase, ForEachFunc callback, void *user_data)
Definition iterator.cc:59
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 cache_cleanup(Scene *scene)
const char * name
bool RNA_struct_is_a(const StructRNA *type, const StructRNA *srna)
PointerRNA RNA_pointer_get(PointerRNA *ptr, const char *name)
void rna_iterator_array_begin(CollectionPropertyIterator *iter, PointerRNA *ptr, void *data, size_t itemsize, int64_t 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:953
static void rna_def_curvemap_points_api(BlenderRNA *brna, PropertyRNA *cprop)
Definition rna_color.cc:916
void RNA_def_color(BlenderRNA *brna)
static void rna_def_curvemappoint(BlenderRNA *brna)
Definition rna_color.cc:886
static void rna_def_color_ramp(BlenderRNA *brna)
static void rna_def_curvemapping(BlenderRNA *brna)
Definition rna_color.cc:968
static void rna_def_histogram(BlenderRNA *brna)
static void rna_def_color_ramp_element(BlenderRNA *brna)
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_editable_func(PropertyRNA *prop, const char *editable)
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:414
char name[258]
Definition DNA_ID.h:432
void * data
struct LinkData * next
void * first
ListBase materials
Definition BKE_main.hh:284
T * data_as() const
Definition RNA_types.hh:124
void invalidate()
Definition RNA_types.hh:110
StructRNA * type
Definition RNA_types.hh:52
void * data
Definition RNA_types.hh:53
PointerRNA parent() const
Definition RNA_types.hh:132
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
#define N_(msgid)
void WM_main_add_notifier(uint type, void *reference)
PointerRNA * ptr
Definition wm_files.cc:4238