diff options
author | Lukas Toenne <lukas.toenne@googlemail.com> | 2011-02-10 21:54:49 +0300 |
---|---|---|
committer | Lukas Toenne <lukas.toenne@googlemail.com> | 2011-02-10 21:54:49 +0300 |
commit | cbe53cc48d5e4460c2d04d1344bd30a882b2cadb (patch) | |
tree | 1756e0745264fa298165d003dc374e2635e5c2ed | |
parent | f7595e98828c1e47db934f61cae6dfe65e1b950c (diff) |
More options for the blur node filter size. This can now be pixel based or relative to both axes or just either width or height.
-rw-r--r-- | source/blender/editors/space_node/drawnode.c | 20 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_node_types.h | 8 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_nodetree.c | 22 | ||||
-rw-r--r-- | source/blender/nodes/intern/CMP_nodes/CMP_blur.c | 14 |
4 files changed, 47 insertions, 17 deletions
diff --git a/source/blender/editors/space_node/drawnode.c b/source/blender/editors/space_node/drawnode.c index 668a7f338f2..42b5835c6df 100644 --- a/source/blender/editors/space_node/drawnode.c +++ b/source/blender/editors/space_node/drawnode.c @@ -548,15 +548,23 @@ static void node_composit_buts_blur(uiLayout *layout, bContext *UNUSED(C), Point uiItemR(col, ptr, "use_gamma_correction", 0, NULL, ICON_NULL); } - uiItemR(col, ptr, "use_relative", 0, NULL, ICON_NULL); + uiItemR(col, ptr, "size_type", 0, NULL, ICON_NULL); col= uiLayoutColumn(layout, 1); - if (RNA_boolean_get(ptr, "use_relative")) { - uiItemR(col, ptr, "factor_x", 0, "X", ICON_NULL); - uiItemR(col, ptr, "factor_y", 0, "Y", ICON_NULL); - } - else { + switch (RNA_enum_get(ptr, "size_type")) { + case CMP_NODE_BLUR_SIZE_PIXEL: uiItemR(col, ptr, "size_x", 0, "X", ICON_NULL); uiItemR(col, ptr, "size_y", 0, "Y", ICON_NULL); + break; + case CMP_NODE_BLUR_SIZE_WIDTH: + uiItemR(col, ptr, "factor_x", 0, "X", ICON_NULL); + break; + case CMP_NODE_BLUR_SIZE_HEIGHT: + uiItemR(col, ptr, "factor_y", 0, "Y", ICON_NULL); + break; + case CMP_NODE_BLUR_SIZE_BOTH: + uiItemR(col, ptr, "factor_x", 0, "X", ICON_NULL); + uiItemR(col, ptr, "factor_y", 0, "Y", ICON_NULL); + break; } } diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h index 0d7edbbce97..85523c3369f 100644 --- a/source/blender/makesdna/DNA_node_types.h +++ b/source/blender/makesdna/DNA_node_types.h @@ -216,7 +216,7 @@ typedef struct NodeImageAnim { typedef struct NodeBlurData { short sizex, sizey; - short samples, maxspeed, minspeed, relative; + short samples, maxspeed, minspeed, size_type; float fac, percentx, percenty; short filtertype; char bokeh, gamma; @@ -336,4 +336,10 @@ typedef struct TexNodeOutput { #define CMP_NODE_CHANNEL_MATTE_CS_YUV 3 #define CMP_NODE_CHANNEL_MATTE_CS_YCC 4 +/* comp blur relative filter size */ +#define CMP_NODE_BLUR_SIZE_PIXEL 0 +#define CMP_NODE_BLUR_SIZE_WIDTH 1 +#define CMP_NODE_BLUR_SIZE_HEIGHT 2 +#define CMP_NODE_BLUR_SIZE_BOTH 3 + #endif diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c index 8ce2489f286..7c8d57b3191 100644 --- a/source/blender/makesrna/intern/rna_nodetree.c +++ b/source/blender/makesrna/intern/rna_nodetree.c @@ -1029,6 +1029,13 @@ static void def_cmp_blur(StructRNA *srna) {R_FILTER_MITCH, "MITCH", 0, "Mitch", ""}, {0, NULL, 0, NULL, NULL}}; + static EnumPropertyItem size_type_items[] = { + {CMP_NODE_BLUR_SIZE_PIXEL, "PIXEL", 0, "Pixel", ""}, + {CMP_NODE_BLUR_SIZE_WIDTH, "WIDTH", 0, "Width", ""}, + {CMP_NODE_BLUR_SIZE_HEIGHT, "HEIGHT", 0, "Height", ""}, + {CMP_NODE_BLUR_SIZE_BOTH, "BOTH", 0, "Both", ""}, + {0, NULL, 0, NULL, NULL}}; + RNA_def_struct_sdna_from(srna, "NodeBlurData", "storage"); prop = RNA_def_property(srna, "size_x", PROP_INT, PROP_NONE); @@ -1043,9 +1050,10 @@ static void def_cmp_blur(StructRNA *srna) RNA_def_property_ui_text(prop, "Size Y", ""); RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); - prop = RNA_def_property(srna, "use_relative", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "relative", 1); - RNA_def_property_ui_text(prop, "Relative", "Use relative (percent) values to define blur radius"); + prop = RNA_def_property(srna, "size_type", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "size_type"); + RNA_def_property_enum_items(prop, size_type_items); + RNA_def_property_ui_text(prop, "Size Type", "Mode of filter size calculation"); RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_NONE); @@ -1054,15 +1062,15 @@ static void def_cmp_blur(StructRNA *srna) RNA_def_property_ui_text(prop, "Factor", ""); RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); - prop = RNA_def_property(srna, "factor_x", PROP_FLOAT, PROP_NONE); + prop = RNA_def_property(srna, "factor_x", PROP_FLOAT, PROP_PERCENTAGE); RNA_def_property_float_sdna(prop, NULL, "percentx"); - RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_range(prop, 0.0f, 100.0f); RNA_def_property_ui_text(prop, "Relative Size X", ""); RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); - prop = RNA_def_property(srna, "factor_y", PROP_FLOAT, PROP_NONE); + prop = RNA_def_property(srna, "factor_y", PROP_FLOAT, PROP_PERCENTAGE); RNA_def_property_float_sdna(prop, NULL, "percenty"); - RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_range(prop, 0.0f, 100.0f); RNA_def_property_ui_text(prop, "Relative Size Y", ""); RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); diff --git a/source/blender/nodes/intern/CMP_nodes/CMP_blur.c b/source/blender/nodes/intern/CMP_nodes/CMP_blur.c index 78a27bc5b16..d92ee6924c9 100644 --- a/source/blender/nodes/intern/CMP_nodes/CMP_blur.c +++ b/source/blender/nodes/intern/CMP_nodes/CMP_blur.c @@ -577,9 +577,17 @@ static void node_composit_exec_blur(void *data, bNode *node, bNodeStack **in, bN if(out[0]->hasoutput==0) return; - if(nbd->relative) { - nbd->sizex= (int)(nbd->percentx*nbd->image_in_width); - nbd->sizey= (int)(nbd->percenty*nbd->image_in_height); + switch (nbd->size_type) { + case CMP_NODE_BLUR_SIZE_WIDTH: + nbd->sizex= nbd->sizey= (int)(nbd->percentx*0.01f*nbd->image_in_width); + break; + case CMP_NODE_BLUR_SIZE_HEIGHT: + nbd->sizex= nbd->sizey= (int)(nbd->percenty*0.01f*nbd->image_in_height); + break; + case CMP_NODE_BLUR_SIZE_BOTH: + nbd->sizex= (int)(nbd->percentx*0.01f*nbd->image_in_width); + nbd->sizey= (int)(nbd->percenty*0.01f*nbd->image_in_height); + break; } if (nbd->sizex==0 && nbd->sizey==0) { |