Fix #127254: Compositor crop gizmo suggests there is a valid crop when there isn't one
Prevent users from creating an invalid bounding box for cropping. The user input is checked and is overridden if it will invert the bounding box, i.e. `xmin > xmax` and `ymin > ymax` of gizmos is not allowed. Pull Request: https://projects.blender.org/blender/blender/pulls/128550
This commit is contained in:
committed by
Habib Gahbiche
parent
368c5b245b
commit
55c38c9850
@@ -2381,6 +2381,70 @@ void rna_Node_update(Main *bmain, Scene * /*scene*/, PointerRNA *ptr)
|
||||
ED_node_tree_propagate_change(nullptr, bmain, ntree);
|
||||
}
|
||||
|
||||
static void rna_NodeCrop_min_x_set(PointerRNA *ptr, int value)
|
||||
{
|
||||
bNode *node = static_cast<bNode *>(ptr->data);
|
||||
NodeTwoXYs *data = static_cast<NodeTwoXYs *>(node->storage);
|
||||
data->x1 = value;
|
||||
CLAMP_MAX(data->x1, data->x2);
|
||||
}
|
||||
|
||||
static void rna_NodeCrop_max_x_set(PointerRNA *ptr, int value)
|
||||
{
|
||||
bNode *node = static_cast<bNode *>(ptr->data);
|
||||
NodeTwoXYs *data = static_cast<NodeTwoXYs *>(node->storage);
|
||||
data->x2 = value;
|
||||
CLAMP_MIN(data->x2, data->x1);
|
||||
}
|
||||
|
||||
static void rna_NodeCrop_min_y_set(PointerRNA *ptr, int value)
|
||||
{
|
||||
bNode *node = static_cast<bNode *>(ptr->data);
|
||||
NodeTwoXYs *data = static_cast<NodeTwoXYs *>(node->storage);
|
||||
data->y1 = value;
|
||||
CLAMP_MIN(data->y1, data->y2);
|
||||
}
|
||||
|
||||
static void rna_NodeCrop_max_y_set(PointerRNA *ptr, int value)
|
||||
{
|
||||
bNode *node = static_cast<bNode *>(ptr->data);
|
||||
NodeTwoXYs *data = static_cast<NodeTwoXYs *>(node->storage);
|
||||
data->y2 = value;
|
||||
CLAMP_MAX(data->y2, data->y1);
|
||||
}
|
||||
|
||||
static void rna_NodeCrop_rel_min_x_set(PointerRNA *ptr, float value)
|
||||
{
|
||||
bNode *node = static_cast<bNode *>(ptr->data);
|
||||
NodeTwoXYs *data = static_cast<NodeTwoXYs *>(node->storage);
|
||||
data->fac_x1 = value;
|
||||
CLAMP_MAX(data->fac_x1, data->fac_x2);
|
||||
}
|
||||
|
||||
static void rna_NodeCrop_rel_max_x_set(PointerRNA *ptr, float value)
|
||||
{
|
||||
bNode *node = static_cast<bNode *>(ptr->data);
|
||||
NodeTwoXYs *data = static_cast<NodeTwoXYs *>(node->storage);
|
||||
data->fac_x2 = value;
|
||||
CLAMP_MIN(data->fac_x2, data->fac_x1);
|
||||
}
|
||||
|
||||
static void rna_NodeCrop_rel_min_y_set(PointerRNA *ptr, float value)
|
||||
{
|
||||
bNode *node = static_cast<bNode *>(ptr->data);
|
||||
NodeTwoXYs *data = static_cast<NodeTwoXYs *>(node->storage);
|
||||
data->fac_y1 = value;
|
||||
CLAMP_MIN(data->fac_y1, data->fac_y2);
|
||||
}
|
||||
|
||||
static void rna_NodeCrop_rel_max_y_set(PointerRNA *ptr, float value)
|
||||
{
|
||||
bNode *node = static_cast<bNode *>(ptr->data);
|
||||
NodeTwoXYs *data = static_cast<NodeTwoXYs *>(node->storage);
|
||||
data->fac_y2 = value;
|
||||
CLAMP_MAX(data->fac_y2, data->fac_y1);
|
||||
}
|
||||
|
||||
void rna_Node_update_relations(Main *bmain, Scene *scene, PointerRNA *ptr)
|
||||
{
|
||||
rna_Node_update(bmain, scene, ptr);
|
||||
@@ -7805,48 +7869,56 @@ static void def_cmp_crop(StructRNA *srna)
|
||||
|
||||
prop = RNA_def_property(srna, "min_x", PROP_INT, PROP_NONE);
|
||||
RNA_def_property_int_sdna(prop, nullptr, "x1");
|
||||
RNA_def_property_int_funcs(prop, nullptr, "rna_NodeCrop_min_x_set", nullptr);
|
||||
RNA_def_property_range(prop, 0, 10000);
|
||||
RNA_def_property_ui_text(prop, "X1", "");
|
||||
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
|
||||
|
||||
prop = RNA_def_property(srna, "max_x", PROP_INT, PROP_NONE);
|
||||
RNA_def_property_int_sdna(prop, nullptr, "x2");
|
||||
RNA_def_property_int_funcs(prop, nullptr, "rna_NodeCrop_max_x_set", nullptr);
|
||||
RNA_def_property_range(prop, 0, 10000);
|
||||
RNA_def_property_ui_text(prop, "X2", "");
|
||||
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
|
||||
|
||||
prop = RNA_def_property(srna, "min_y", PROP_INT, PROP_NONE);
|
||||
RNA_def_property_int_sdna(prop, nullptr, "y1");
|
||||
RNA_def_property_int_funcs(prop, nullptr, "rna_NodeCrop_min_y_set", nullptr);
|
||||
RNA_def_property_range(prop, 0, 10000);
|
||||
RNA_def_property_ui_text(prop, "Y1", "");
|
||||
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
|
||||
|
||||
prop = RNA_def_property(srna, "max_y", PROP_INT, PROP_NONE);
|
||||
RNA_def_property_int_sdna(prop, nullptr, "y2");
|
||||
RNA_def_property_int_funcs(prop, nullptr, "rna_NodeCrop_max_y_set", nullptr);
|
||||
RNA_def_property_range(prop, 0, 10000);
|
||||
RNA_def_property_ui_text(prop, "Y2", "");
|
||||
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
|
||||
|
||||
prop = RNA_def_property(srna, "rel_min_x", PROP_FLOAT, PROP_NONE);
|
||||
RNA_def_property_float_sdna(prop, nullptr, "fac_x1");
|
||||
RNA_def_property_float_funcs(prop, nullptr, "rna_NodeCrop_rel_min_x_set", nullptr);
|
||||
RNA_def_property_range(prop, 0.0, 1.0);
|
||||
RNA_def_property_ui_text(prop, "X1", "");
|
||||
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
|
||||
|
||||
prop = RNA_def_property(srna, "rel_max_x", PROP_FLOAT, PROP_NONE);
|
||||
RNA_def_property_float_sdna(prop, nullptr, "fac_x2");
|
||||
RNA_def_property_float_funcs(prop, nullptr, "rna_NodeCrop_rel_max_x_set", nullptr);
|
||||
RNA_def_property_range(prop, 0.0, 1.0);
|
||||
RNA_def_property_ui_text(prop, "X2", "");
|
||||
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
|
||||
|
||||
prop = RNA_def_property(srna, "rel_min_y", PROP_FLOAT, PROP_NONE);
|
||||
RNA_def_property_float_sdna(prop, nullptr, "fac_y1");
|
||||
RNA_def_property_float_funcs(prop, nullptr, "rna_NodeCrop_rel_min_y_set", nullptr);
|
||||
RNA_def_property_range(prop, 0.0, 1.0);
|
||||
RNA_def_property_ui_text(prop, "Y1", "");
|
||||
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
|
||||
|
||||
prop = RNA_def_property(srna, "rel_max_y", PROP_FLOAT, PROP_NONE);
|
||||
RNA_def_property_float_sdna(prop, nullptr, "fac_y2");
|
||||
RNA_def_property_float_funcs(prop, nullptr, "rna_NodeCrop_rel_max_y_set", nullptr);
|
||||
RNA_def_property_range(prop, 0.0, 1.0);
|
||||
RNA_def_property_ui_text(prop, "Y2", "");
|
||||
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
|
||||
|
||||
Reference in New Issue
Block a user