Fix #135217: ColorManage Settings RNA paths incomplete/wrong

`ColorManagedDisplaySettings`, `ColorManagedViewSettings`,
`ColorManagedInputColorspaceSettings` were affected since these are used
from multiple places (Scene, File output nodes, ..).

Similar to how we are getting the path for `ImageFormatSettings` (which
pretty much has the distinction logic already), we can do so for the
ColorManage Settings as well (piggbacking on the already correct path to
the `ImageFormatSettings`.

With this, we can also remove these "known failures" from the test
introduced in 4032b853c3.

Pull Request: https://projects.blender.org/blender/blender/pulls/135238
This commit is contained in:
Philipp Oeser
2025-02-28 17:13:43 +01:00
committed by Philipp Oeser
parent 559d7575a6
commit 9855c11d2c
4 changed files with 55 additions and 36 deletions

View File

@@ -493,11 +493,6 @@ static void rna_ColorManagedDisplaySettings_display_device_update(Main *bmain,
}
}
static std::optional<std::string> rna_ColorManagedDisplaySettings_path(const PointerRNA * /*ptr*/)
{
return "display_settings";
}
static int rna_ColorManagedViewSettings_view_transform_get(PointerRNA *ptr)
{
ColorManagedViewSettings *view = (ColorManagedViewSettings *)ptr->data;
@@ -587,11 +582,6 @@ static void rna_ColorManagedViewSettings_use_curves_set(PointerRNA *ptr, bool va
}
}
static std::optional<std::string> rna_ColorManagedViewSettings_path(const PointerRNA * /*ptr*/)
{
return "view_settings";
}
static void rna_ColorManagedViewSettings_whitepoint_get(PointerRNA *ptr, float value[3])
{
const ColorManagedViewSettings *view_settings = (ColorManagedViewSettings *)ptr->data;
@@ -744,12 +734,6 @@ static std::optional<std::string> rna_ColorManagedSequencerColorspaceSettings_pa
return "sequencer_colorspace_settings";
}
static std::optional<std::string> rna_ColorManagedInputColorspaceSettings_path(
const PointerRNA * /*ptr*/)
{
return "colorspace_settings";
}
static void rna_ColorManagement_update(Main * /*bmain*/, Scene * /*scene*/, PointerRNA *ptr)
{
ID *id = ptr->owner_id;

View File

@@ -391,6 +391,10 @@ std::optional<std::string> rna_Node_ImageUser_path(const PointerRNA *ptr);
std::optional<std::string> rna_CameraBackgroundImage_image_or_movieclip_user_path(
const PointerRNA *ptr);
std::optional<std::string> rna_ColorManagedDisplaySettings_path(const PointerRNA *ptr);
std::optional<std::string> rna_ColorManagedViewSettings_path(const PointerRNA *ptr);
std::optional<std::string> rna_ColorManagedInputColorspaceSettings_path(const PointerRNA *ptr);
/* Node socket subtypes for group interface. */
void rna_def_node_socket_interface_subtypes(BlenderRNA *brna);

View File

@@ -1238,41 +1238,38 @@ static std::optional<std::string> rna_BakeSettings_path(const PointerRNA * /*ptr
return "render.bake";
}
static std::optional<std::string> rna_ImageFormatSettings_path(const PointerRNA *ptr)
static std::optional<std::string> rna_ImageFormatSettings_path(
const PointerRNA *ptr, blender::FunctionRef<bool(ImageFormatData *)> match)
{
ImageFormatData *imf = (ImageFormatData *)ptr->data;
ID *id = ptr->owner_id;
switch (GS(id->name)) {
case ID_SCE: {
Scene *scene = (Scene *)id;
if (&scene->r.im_format == imf) {
if (match(&scene->r.im_format)) {
return "render.image_settings";
}
else if (&scene->r.bake.im_format == imf) {
else if (match(&scene->r.bake.im_format)) {
return "render.bake.image_settings";
}
return "..";
return std::nullopt;
}
case ID_NT: {
bNodeTree *ntree = (bNodeTree *)id;
bNode *node;
for (node = static_cast<bNode *>(ntree->nodes.first); node; node = node->next) {
for (const bNode *node : ntree->all_nodes()) {
if (node->type_legacy == CMP_NODE_OUTPUT_FILE) {
if (&((NodeImageMultiFile *)node->storage)->format == imf) {
if (match(&((NodeImageMultiFile *)node->storage)->format)) {
char node_name_esc[sizeof(node->name) * 2];
BLI_str_escape(node_name_esc, node->name, sizeof(node_name_esc));
return fmt::format("nodes[\"{}\"].format", node_name_esc);
}
else {
bNodeSocket *sock;
for (sock = static_cast<bNodeSocket *>(node->inputs.first); sock; sock = sock->next) {
LISTBASE_FOREACH (bNodeSocket *, socket, &node->inputs) {
NodeImageMultiFileSocket *sockdata = static_cast<NodeImageMultiFileSocket *>(
sock->storage);
if (&sockdata->format == imf) {
socket->storage);
if (match(&sockdata->format)) {
char node_name_esc[sizeof(node->name) * 2];
BLI_str_escape(node_name_esc, node->name, sizeof(node_name_esc));
@@ -1286,13 +1283,52 @@ static std::optional<std::string> rna_ImageFormatSettings_path(const PointerRNA
}
}
}
return "..";
return std::nullopt;
}
default:
return "..";
return std::nullopt;
}
}
static std::optional<std::string> rna_ImageFormatSettings_path(const PointerRNA *ptr)
{
ImageFormatData *data = static_cast<ImageFormatData *>(ptr->data);
return rna_ImageFormatSettings_path(ptr, [&](ImageFormatData *imf) { return imf == data; });
}
std::optional<std::string> rna_ColorManagedDisplaySettings_path(const PointerRNA *ptr)
{
ColorManagedDisplaySettings *data = static_cast<ColorManagedDisplaySettings *>(ptr->data);
std::optional<std::string> path = rna_ImageFormatSettings_path(
ptr, [&](ImageFormatData *imf) { return &imf->display_settings == data; });
if (path) {
return *path + ".display_settings";
}
return std::nullopt;
}
std::optional<std::string> rna_ColorManagedViewSettings_path(const PointerRNA *ptr)
{
ColorManagedViewSettings *data = static_cast<ColorManagedViewSettings *>(ptr->data);
std::optional<std::string> path = rna_ImageFormatSettings_path(
ptr, [&](ImageFormatData *imf) { return &imf->view_settings == data; });
if (path) {
return *path + ".view_settings";
}
return std::nullopt;
}
std::optional<std::string> rna_ColorManagedInputColorspaceSettings_path(const PointerRNA *ptr)
{
ColorManagedColorspaceSettings *data = static_cast<ColorManagedColorspaceSettings *>(ptr->data);
std::optional<std::string> path = rna_ImageFormatSettings_path(
ptr, [&](ImageFormatData *imf) { return &imf->linear_colorspace_settings == data; });
if (path) {
return *path + ".linear_colorspace_settings";
}
return std::nullopt;
}
static int rna_RenderSettings_threads_get(PointerRNA *ptr)
{
RenderData *rd = (RenderData *)ptr->data;

View File

@@ -10,13 +10,8 @@ import unittest
def process_rna_struct(self, struct, rna_path):
# These paths are currently known failures of `path_from_id`.
KNOWN_FAILURES = {
"view_settings",
"display_settings",
"colorspace_settings",
"render.views[\"left\"]",
"render.views[\"right\"]",
"display_settings",
"colorspace_settings",
"uv_layers[\"UVMap\"]",
"uv_layers[\"UVMap\"]",
}