From 29f3af95272590d26f610ae828b2eeee89c82a00 Mon Sep 17 00:00:00 2001 From: Antonio Vazquez Date: Mon, 9 Mar 2020 16:27:24 +0100 Subject: GPencil: Refactor of Draw Engine, Vertex Paint and all internal functions This commit is a full refactor of the grease pencil modules including Draw Engine, Modifiers, VFX, depsgraph update, improvements in operators and conversion of Sculpt and Weight paint tools to real brushes. Also, a huge code cleanup has been done at all levels. Thanks to @fclem for his work and yo @pepeland and @mendio for the testing and help in the development. Differential Revision: https://developer.blender.org/D6293 --- source/blender/makesrna/intern/rna_brush.c | 266 ++++++++--- source/blender/makesrna/intern/rna_context.c | 1 + source/blender/makesrna/intern/rna_gpencil.c | 416 ++++++++++++----- .../blender/makesrna/intern/rna_gpencil_modifier.c | 493 +++++++++++++++------ source/blender/makesrna/intern/rna_material.c | 146 ++---- source/blender/makesrna/intern/rna_object.c | 29 +- source/blender/makesrna/intern/rna_scene.c | 136 ++++-- source/blender/makesrna/intern/rna_sculpt_paint.c | 313 ++++--------- source/blender/makesrna/intern/rna_shader_fx.c | 129 +++--- source/blender/makesrna/intern/rna_space.c | 41 +- source/blender/makesrna/intern/rna_ui_api.c | 6 +- source/blender/makesrna/intern/rna_userdef.c | 19 - 12 files changed, 1256 insertions(+), 739 deletions(-) (limited to 'source/blender/makesrna/intern') diff --git a/source/blender/makesrna/intern/rna_brush.c b/source/blender/makesrna/intern/rna_brush.c index c2dbb2973a3..39216009e34 100644 --- a/source/blender/makesrna/intern/rna_brush.c +++ b/source/blender/makesrna/intern/rna_brush.c @@ -149,6 +149,73 @@ const EnumPropertyItem rna_enum_brush_gpencil_types_items[] = { ICON_PANEL_CLOSE, "Erase", "The brush is used for erasing strokes"}, + {GPAINT_TOOL_TINT, + "TINT", + ICON_BRUSH_TEXDRAW, + "Tint", + "The brush is of type used for tinting strokes"}, + {0, NULL, 0, NULL, NULL}, +}; + +const EnumPropertyItem rna_enum_brush_gpencil_vertex_types_items[] = { + {GPVERTEX_TOOL_DRAW, "DRAW", ICON_BRUSH_MIX, "Draw", ""}, + {GPVERTEX_TOOL_BLUR, "BLUR", ICON_BRUSH_BLUR, "Blur", ""}, + {GPVERTEX_TOOL_AVERAGE, "AVERAGE", ICON_BRUSH_BLUR, "Average", ""}, + {GPVERTEX_TOOL_SMEAR, "SMEAR", ICON_BRUSH_BLUR, "Smear", ""}, + {GPVERTEX_TOOL_REPLACE, "REPLACE", ICON_BRUSH_BLUR, "Replace", ""}, + {0, NULL, 0, NULL, NULL}, +}; + +const EnumPropertyItem rna_enum_brush_gpencil_sculpt_types_items[] = { + {GPSCULPT_TOOL_SMOOTH, "SMOOTH", ICON_GPBRUSH_SMOOTH, "Smooth", "Smooth stroke points"}, + {GPSCULPT_TOOL_THICKNESS, + "THICKNESS", + ICON_GPBRUSH_THICKNESS, + "Thickness", + "Adjust thickness of strokes"}, + {GPSCULPT_TOOL_STRENGTH, + "STRENGTH", + ICON_GPBRUSH_STRENGTH, + "Strength", + "Adjust color strength of strokes"}, + {GPSCULPT_TOOL_RANDOMIZE, + "RANDOMIZE", + ICON_GPBRUSH_RANDOMIZE, + "Randomize", + "Introduce jitter/randomness into strokes"}, + {GPSCULPT_TOOL_GRAB, + "GRAB", + ICON_GPBRUSH_GRAB, + "Grab", + "Translate the set of points initially within the brush circle"}, + {GPSCULPT_TOOL_PUSH, + "PUSH", + ICON_GPBRUSH_PUSH, + "Push", + "Move points out of the way, as if combing them"}, + {GPSCULPT_TOOL_TWIST, + "TWIST", + ICON_GPBRUSH_TWIST, + "Twist", + "Rotate points around the midpoint of the brush"}, + {GPSCULPT_TOOL_PINCH, + "PINCH", + ICON_GPBRUSH_PINCH, + "Pinch", + "Pull points towards the midpoint of the brush"}, + {GPSCULPT_TOOL_CLONE, + "CLONE", + ICON_GPBRUSH_CLONE, + "Clone", + "Paste copies of the strokes stored on the clipboard"}, + {0, NULL, 0, NULL, NULL}}; + +const EnumPropertyItem rna_enum_brush_gpencil_weight_types_items[] = { + {GPWEIGHT_TOOL_DRAW, + "WEIGHT", + ICON_GPBRUSH_WEIGHT, + "Weight", + "Weight Paint for Vertex Groups"}, {0, NULL, 0, NULL, NULL}, }; @@ -174,7 +241,7 @@ static EnumPropertyItem rna_enum_gpencil_fill_draw_modes_items[] = { {GP_FILL_DMODE_CONTROL, "CONTROL", 0, "Edit Lines", "Use edit lines as fill boundary limits"}, {0, NULL, 0, NULL, NULL}}; -static EnumPropertyItem rna_enum_gpencil_brush_icons_items[] = { +static EnumPropertyItem rna_enum_gpencil_brush_paint_icons_items[] = { {GP_BRUSH_ICON_PENCIL, "PENCIL", ICON_GPBRUSH_PENCIL, "Pencil", ""}, {GP_BRUSH_ICON_PEN, "PEN", ICON_GPBRUSH_PEN, "Pen", ""}, {GP_BRUSH_ICON_INK, "INK", ICON_GPBRUSH_INK, "Ink", ""}, @@ -189,6 +256,32 @@ static EnumPropertyItem rna_enum_gpencil_brush_icons_items[] = { {GP_BRUSH_ICON_ERASE_STROKE, "STROKE", ICON_GPBRUSH_ERASE_STROKE, "Eraser Stroke", ""}, {0, NULL, 0, NULL, NULL}, }; + +static EnumPropertyItem rna_enum_gpencil_brush_sculpt_icons_items[] = { + {GP_BRUSH_ICON_GPBRUSH_SMOOTH, "SMOOTH", ICON_GPBRUSH_SMOOTH, "Smooth", ""}, + {GP_BRUSH_ICON_GPBRUSH_THICKNESS, "THICKNESS", ICON_GPBRUSH_THICKNESS, "Thickness", ""}, + {GP_BRUSH_ICON_GPBRUSH_STRENGTH, "STRENGTH", ICON_GPBRUSH_STRENGTH, "Strength", ""}, + {GP_BRUSH_ICON_GPBRUSH_RANDOMIZE, "RANDOMIZE", ICON_GPBRUSH_RANDOMIZE, "Randomize", ""}, + {GP_BRUSH_ICON_GPBRUSH_GRAB, "GRAB", ICON_GPBRUSH_GRAB, "Grab", ""}, + {GP_BRUSH_ICON_GPBRUSH_PUSH, "PUSH", ICON_GPBRUSH_PUSH, "Push", ""}, + {GP_BRUSH_ICON_GPBRUSH_TWIST, "TWIST", ICON_GPBRUSH_TWIST, "Twist", ""}, + {GP_BRUSH_ICON_GPBRUSH_PINCH, "PINCH", ICON_GPBRUSH_PINCH, "Pinch", ""}, + {GP_BRUSH_ICON_GPBRUSH_CLONE, "CLONE", ICON_GPBRUSH_CLONE, "Clone", ""}, + {0, NULL, 0, NULL, NULL}, +}; + +static EnumPropertyItem rna_enum_gpencil_brush_weight_icons_items[] = { + {GP_BRUSH_ICON_GPBRUSH_WEIGHT, "DRAW", ICON_GPBRUSH_WEIGHT, "Draw", ""}, + {0, NULL, 0, NULL, NULL}, +}; +static EnumPropertyItem rna_enum_gpencil_brush_vertex_icons_items[] = { + {GP_BRUSH_ICON_VERTEX_DRAW, "DRAW", ICON_BRUSH_MIX, "Draw", ""}, + {GP_BRUSH_ICON_VERTEX_BLUR, "BLUR", ICON_BRUSH_BLUR, "Blur", ""}, + {GP_BRUSH_ICON_VERTEX_AVERAGE, "AVERAGE", ICON_BRUSH_BLUR, "Average", ""}, + {GP_BRUSH_ICON_VERTEX_SMEAR, "SMEAR", ICON_BRUSH_BLUR, "Smear", ""}, + {GP_BRUSH_ICON_VERTEX_REPLACE, "REPLACE", ICON_BRUSH_MIX, "Replace", ""}, + {0, NULL, 0, NULL, NULL}, +}; #endif #ifdef RNA_RUNTIME @@ -1072,19 +1165,19 @@ static void rna_def_gpencil_options(BlenderRNA *brna) StructRNA *srna; PropertyRNA *prop; + /* modes */ + static EnumPropertyItem gppaint_mode_types_items[] = { + {GPPAINT_MODE_STROKE, "STROKE", 0, "Stroke", "Vertex Color affects to Stroke only"}, + {GPPAINT_MODE_FILL, "FILL", 0, "Fill", "Vertex Color affects to Fill only"}, + {GPPAINT_MODE_BOTH, "BOTH", 0, "Both", "Vertex Color affects to Stroke and Fill"}, + {0, NULL, 0, NULL, NULL}, + }; + srna = RNA_def_struct(brna, "BrushGpencilSettings", NULL); RNA_def_struct_sdna(srna, "BrushGpencilSettings"); RNA_def_struct_path_func(srna, "rna_BrushGpencilSettings_path"); RNA_def_struct_ui_text(srna, "Grease Pencil Brush Settings", "Settings for grease pencil brush"); - /* Sensitivity factor for new strokes */ - prop = RNA_def_property(srna, "pen_sensitivity_factor", PROP_FLOAT, PROP_NONE); - RNA_def_property_float_sdna(prop, NULL, "draw_sensitivity"); - RNA_def_property_range(prop, 0.1f, 3.0f); - RNA_def_property_ui_text(prop, "Sensitivity", "Pressure sensitivity factor for new strokes"); - RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); - RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, NULL); - /* Strength factor for new strokes */ prop = RNA_def_property(srna, "pen_strength", PROP_FLOAT, PROP_FACTOR); RNA_def_property_float_sdna(prop, NULL, "draw_strength"); @@ -1121,15 +1214,6 @@ static void rna_def_gpencil_options(BlenderRNA *brna) RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, NULL); - /* Randomnes factor for subdivision */ - prop = RNA_def_property(srna, "random_subdiv", PROP_FLOAT, PROP_FACTOR); - RNA_def_property_float_sdna(prop, NULL, "draw_random_sub"); - RNA_def_property_range(prop, 0.0f, 1.0f); - RNA_def_property_ui_text( - prop, "Random Subdivision", "Randomness factor for new strokes after subdivision"); - RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); - RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, NULL); - /* Angle when brush is full size */ prop = RNA_def_property(srna, "angle", PROP_FLOAT, PROP_ANGLE); RNA_def_property_float_sdna(prop, NULL, "draw_angle"); @@ -1171,27 +1255,6 @@ static void rna_def_gpencil_options(BlenderRNA *brna) RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, NULL); - /* Thickness smoothing factor for new strokes */ - prop = RNA_def_property(srna, "pen_thick_smooth_factor", PROP_FLOAT, PROP_NONE); - RNA_def_property_float_sdna(prop, NULL, "thick_smoothfac"); - RNA_def_property_range(prop, 0.0, 2.0f); - RNA_def_property_ui_text(prop, - "Smooth Thickness", - "Amount of thickness smoothing to apply after finish newly created " - "strokes, to reduce jitter/noise"); - RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); - RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, NULL); - - /* Thickness iterations of the Smoothing factor */ - prop = RNA_def_property(srna, "pen_thick_smooth_steps", PROP_INT, PROP_NONE); - RNA_def_property_int_sdna(prop, NULL, "thick_smoothlvl"); - RNA_def_property_range(prop, 1, 3); - RNA_def_property_ui_text(prop, - "Iterations Thickness", - "Number of times to smooth thickness for newly created strokes"); - RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); - RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, NULL); - /* Subdivision level for new strokes */ prop = RNA_def_property(srna, "pen_subdivision_steps", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "draw_subdivide"); @@ -1278,22 +1341,21 @@ static void rna_def_gpencil_options(BlenderRNA *brna) RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, NULL); /* gradient control */ - prop = RNA_def_property(srna, "gradient_factor", PROP_FLOAT, PROP_FACTOR); - RNA_def_property_float_sdna(prop, NULL, "gradient_f"); + prop = RNA_def_property(srna, "hardeness", PROP_FLOAT, PROP_FACTOR); + RNA_def_property_float_sdna(prop, NULL, "hardeness"); RNA_def_property_range(prop, 0.001f, 1.0f); RNA_def_property_float_default(prop, 1.0f); - RNA_def_property_ui_text(prop, - "Border Opacity Factor", - "Amount of gradient for Dot and Box strokes (set to 1 for full solid)"); + RNA_def_property_ui_text( + prop, "Hardeness", "Amount of gradient for Dot and Box strokes (set to 1 for full solid)"); RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0); /* gradient shape ratio */ - prop = RNA_def_property(srna, "gradient_shape", PROP_FLOAT, PROP_XYZ); - RNA_def_property_float_sdna(prop, NULL, "gradient_s"); + prop = RNA_def_property(srna, "aspect", PROP_FLOAT, PROP_XYZ); + RNA_def_property_float_sdna(prop, NULL, "aspect_ratio"); RNA_def_property_array(prop, 2); RNA_def_property_range(prop, 0.01f, 1.0f); RNA_def_property_float_default(prop, 1.0f); - RNA_def_property_ui_text(prop, "Aspect Ratio", ""); + RNA_def_property_ui_text(prop, "Aspect", ""); RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0); prop = RNA_def_property(srna, "input_samples", PROP_INT, PROP_NONE); @@ -1331,12 +1393,45 @@ static void rna_def_gpencil_options(BlenderRNA *brna) RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, NULL); /* brush standard icon */ - prop = RNA_def_property(srna, "gp_icon", PROP_ENUM, PROP_NONE); + prop = RNA_def_property(srna, "gpencil_paint_icon", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "icon_id"); + RNA_def_property_enum_items(prop, rna_enum_gpencil_brush_paint_icons_items); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_ui_text(prop, "Grease Pencil Icon", ""); + + prop = RNA_def_property(srna, "gpencil_sculpt_icon", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "icon_id"); + RNA_def_property_enum_items(prop, rna_enum_gpencil_brush_sculpt_icons_items); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_ui_text(prop, "Grease Pencil Icon", ""); + + prop = RNA_def_property(srna, "gpencil_weight_icon", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "icon_id"); - RNA_def_property_enum_items(prop, rna_enum_gpencil_brush_icons_items); + RNA_def_property_enum_items(prop, rna_enum_gpencil_brush_weight_icons_items); RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); RNA_def_property_ui_text(prop, "Grease Pencil Icon", ""); + prop = RNA_def_property(srna, "gpencil_vertex_icon", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "icon_id"); + RNA_def_property_enum_items(prop, rna_enum_gpencil_brush_vertex_icons_items); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_ui_text(prop, "Grease Pencil Icon", ""); + + /* Mode type. */ + prop = RNA_def_property(srna, "vertex_mode", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_bitflag_sdna(prop, NULL, "vertex_mode"); + RNA_def_property_enum_items(prop, gppaint_mode_types_items); + RNA_def_property_ui_text(prop, "Mode Type", "Defines how vertex color affect to the strokes"); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + + /* Vertex Color mix factor. */ + prop = RNA_def_property(srna, "vertex_color_factor", PROP_FLOAT, PROP_FACTOR); + RNA_def_property_float_sdna(prop, NULL, "vertex_factor"); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_ui_text( + prop, "Vertex Color Factor", "Factor used to mix vertex color to get final color"); + /* Flags */ prop = RNA_def_property(srna, "use_pressure", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_BRUSH_USE_PRESSURE); @@ -1369,12 +1464,6 @@ static void rna_def_gpencil_options(BlenderRNA *brna) "override while drawing"); RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); - prop = RNA_def_property(srna, "use_cursor", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_BRUSH_ENABLE_CURSOR); - RNA_def_property_boolean_default(prop, true); - RNA_def_property_ui_text(prop, "Enable Cursor", "Enable cursor on screen"); - RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); - prop = RNA_def_property(srna, "eraser_mode", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "eraser_mode"); RNA_def_property_enum_items(prop, rna_enum_gpencil_brush_eraser_modes_items); @@ -1395,6 +1484,47 @@ static void rna_def_gpencil_options(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Trim Stroke Ends", "Trim intersecting stroke ends"); RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + prop = RNA_def_property(srna, "use_edit_pressure", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "sculpt_flag", GP_SCULPT_FLAG_SMOOTH_PRESSURE); + RNA_def_property_ui_text( + prop, "Affect Pressure", "Affect pressure values as well when smoothing strokes"); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); + + prop = RNA_def_property(srna, "direction", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_bitflag_sdna(prop, NULL, "sculpt_flag"); + RNA_def_property_enum_items(prop, prop_direction_items); + RNA_def_property_ui_text(prop, "Direction", ""); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); + + prop = RNA_def_property(srna, "use_edit_position", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "sculpt_mode_flag", GP_SCULPT_FLAGMODE_APPLY_POSITION); + RNA_def_property_ui_text(prop, "Affect Position", "The brush affects the position of the point"); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); + + prop = RNA_def_property(srna, "use_edit_strength", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "sculpt_mode_flag", GP_SCULPT_FLAGMODE_APPLY_STRENGTH); + RNA_def_property_ui_text( + prop, "Affect Strength", "The brush affects the color strength of the point"); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); + + prop = RNA_def_property(srna, "use_edit_thickness", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna( + prop, NULL, "sculpt_mode_flag", GP_SCULPT_FLAGMODE_APPLY_THICKNESS); + RNA_def_property_ui_text( + prop, "Affect Thickness", "The brush affects the thickness of the point"); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); + + prop = RNA_def_property(srna, "use_edit_uv", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "sculpt_mode_flag", GP_SCULPT_FLAGMODE_APPLY_UV); + RNA_def_property_ui_text(prop, "Affect UV", "The brush affects the UV rotation of the point"); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); + /* Material */ prop = RNA_def_property(srna, "material", PROP_POINTER, PROP_NONE); RNA_def_property_struct_type(prop, "Material"); @@ -1713,6 +1843,25 @@ static void rna_def_brush(BlenderRNA *brna) RNA_def_property_enum_items(prop, rna_enum_brush_gpencil_types_items); RNA_def_property_ui_text(prop, "Grease Pencil Draw Tool", ""); RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + + prop = RNA_def_property(srna, "gpencil_vertex_tool", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "gpencil_vertex_tool"); + RNA_def_property_enum_items(prop, rna_enum_brush_gpencil_vertex_types_items); + RNA_def_property_ui_text(prop, "Grease Pencil Vertex Paint Tool", ""); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + + prop = RNA_def_property(srna, "gpencil_sculpt_tool", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "gpencil_sculpt_tool"); + RNA_def_property_enum_items(prop, rna_enum_brush_gpencil_sculpt_types_items); + RNA_def_property_ui_text(prop, "Grease Pencil Sculpt Paint Tool", ""); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + + prop = RNA_def_property(srna, "gpencil_weight_tool", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "gpencil_weight_tool"); + RNA_def_property_enum_items(prop, rna_enum_brush_gpencil_weight_types_items); + RNA_def_property_ui_text(prop, "Grease Pencil Weight Paint Tool", ""); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + /** End per mode tool properties. */ prop = RNA_def_property(srna, "direction", PROP_ENUM, PROP_NONE); @@ -2443,7 +2592,12 @@ static void rna_def_brush(BlenderRNA *brna) prop = RNA_def_property(srna, "use_paint_grease_pencil", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "ob_mode", OB_MODE_PAINT_GPENCIL); - RNA_def_property_ui_text(prop, "Use Sculpt", "Use this brush in grease pencil drawing mode"); + RNA_def_property_ui_text(prop, "Use Paint", "Use this brush in grease pencil drawing mode"); + + prop = RNA_def_property(srna, "use_vertex_grease_pencil", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "ob_mode", OB_MODE_VERTEX_GPENCIL); + RNA_def_property_ui_text( + prop, "Use Vertex", "Use this brush in grease pencil vertex color mode"); /* texture */ prop = RNA_def_property(srna, "texture_slot", PROP_POINTER, PROP_NONE); diff --git a/source/blender/makesrna/intern/rna_context.c b/source/blender/makesrna/intern/rna_context.c index 579dd92b703..c4c54aac2c6 100644 --- a/source/blender/makesrna/intern/rna_context.c +++ b/source/blender/makesrna/intern/rna_context.c @@ -52,6 +52,7 @@ const EnumPropertyItem rna_enum_context_mode_items[] = { {CTX_MODE_EDIT_GPENCIL, "EDIT_GPENCIL", 0, "Grease Pencil Edit", ""}, {CTX_MODE_SCULPT_GPENCIL, "SCULPT_GPENCIL", 0, "Grease Pencil Sculpt", ""}, {CTX_MODE_WEIGHT_GPENCIL, "WEIGHT_GPENCIL", 0, "Grease Pencil Weight Paint", ""}, + {CTX_MODE_VERTEX_GPENCIL, "VERTEX_GPENCIL", 0, "Grease Pencil Vertex Paint", ""}, {0, NULL, 0, NULL, NULL}, }; diff --git a/source/blender/makesrna/intern/rna_gpencil.c b/source/blender/makesrna/intern/rna_gpencil.c index 17163095d4b..e828d9d3d95 100644 --- a/source/blender/makesrna/intern/rna_gpencil.c +++ b/source/blender/makesrna/intern/rna_gpencil.c @@ -141,6 +141,7 @@ static EnumPropertyItem rna_enum_gpencil_caps_modes_items[] = { # include "BKE_icons.h" # include "DEG_depsgraph.h" +# include "DEG_depsgraph_build.h" static void rna_GPencil_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr) { @@ -148,6 +149,28 @@ static void rna_GPencil_update(Main *UNUSED(bmain), Scene *UNUSED(scene), Pointe WM_main_add_notifier(NC_GPENCIL | NA_EDITED, NULL); } +static void rna_GPencil_dependency_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr) +{ + DEG_id_tag_update(ptr->owner_id, ID_RECALC_TRANSFORM); + DEG_relations_tag_update(bmain); + WM_main_add_notifier(NC_OBJECT | ND_PARENT, ptr->owner_id); + + DEG_id_tag_update(ptr->owner_id, ID_RECALC_GEOMETRY); + WM_main_add_notifier(NC_GPENCIL | NA_EDITED, NULL); +} + +static void rna_GPencil_uv_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr) +{ + /* Force to recalc the UVs. */ + bGPDstroke *gps = (bGPDstroke *)ptr->data; + + /* Calc geometry data. */ + BKE_gpencil_stroke_geometry_update(gps); + + DEG_id_tag_update(ptr->owner_id, ID_RECALC_GEOMETRY); + WM_main_add_notifier(NC_GPENCIL | NA_EDITED, NULL); +} + static void rna_GPencil_autolock(Main *bmain, Scene *scene, PointerRNA *ptr) { bGPdata *gpd = (bGPdata *)ptr->owner_id; @@ -167,25 +190,6 @@ static void rna_GPencil_editmode_update(Main *UNUSED(bmain), Scene *UNUSED(scene WM_main_add_notifier(NC_SCENE | ND_MODE | NC_MOVIECLIP, NULL); } -/* Recalc UVs and Fill for all strokes. */ -static void rna_GPencil_strokes_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr) -{ - bGPdata *gpd = (bGPdata *)ptr->owner_id; - if (gpd) { - for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) { - for (bGPDframe *gpf = gpl->frames.first; gpf; gpf = gpf->next) { - for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) { - BKE_gpencil_triangulate_stroke_fill(gpd, gps); - } - } - } - } - - /* Now do standard updates... */ - DEG_id_tag_update(ptr->owner_id, ID_RECALC_GEOMETRY | ID_RECALC_COPY_ON_WRITE); - WM_main_add_notifier(NC_GPENCIL | NA_EDITED, NULL); -} - /* Poll Callback to filter GP Datablocks to only show those for Annotations */ bool rna_GPencil_datablocks_annotations_poll(PointerRNA *UNUSED(ptr), const PointerRNA value) { @@ -294,6 +298,42 @@ static void rna_GPencilLayer_parent_bone_set(PointerRNA *ptr, const char *value) } } +static char *rna_GPencilLayerMask_path(PointerRNA *ptr) +{ + bGPdata *gpd = (bGPdata *)ptr->owner_id; + bGPDlayer *gpl = BKE_gpencil_layer_active_get(gpd); + bGPDlayer_Mask *mask = (bGPDlayer_Mask *)ptr->data; + + char name_layer[sizeof(gpl->info) * 2]; + char name_mask[sizeof(mask->name) * 2]; + + BLI_strescape(name_layer, gpl->info, sizeof(name_layer)); + BLI_strescape(name_mask, mask->name, sizeof(name_mask)); + + return BLI_sprintfN("layers[\"%s\"].mask_layers[\"%s\"]", name_layer, name_mask); +} + +static int rna_GPencil_active_mask_index_get(PointerRNA *ptr) +{ + bGPDlayer *gpl = (bGPDlayer *)ptr->data; + return gpl->act_mask - 1; +} + +static void rna_GPencil_active_mask_index_set(PointerRNA *ptr, int value) +{ + bGPDlayer *gpl = (bGPDlayer *)ptr->data; + gpl->act_mask = value + 1; +} + +static void rna_GPencil_active_mask_index_range( + PointerRNA *ptr, int *min, int *max, int *UNUSED(softmin), int *UNUSED(softmax)) +{ + bGPDlayer *gpl = (bGPDlayer *)ptr->data; + + *min = 0; + *max = max_ii(0, BLI_listbase_count(&gpl->mask_layers) - 1); +} + /* parent types enum */ static const EnumPropertyItem *rna_Object_parent_type_itemf(bContext *UNUSED(C), PointerRNA *ptr, @@ -383,7 +423,7 @@ static void rna_GPencil_active_layer_set(PointerRNA *ptr, static int rna_GPencil_active_layer_index_get(PointerRNA *ptr) { bGPdata *gpd = (bGPdata *)ptr->owner_id; - bGPDlayer *gpl = BKE_gpencil_layer_getactive(gpd); + bGPDlayer *gpl = BKE_gpencil_layer_active_get(gpd); return BLI_findindex(&gpd->layers, gpl); } @@ -393,7 +433,7 @@ static void rna_GPencil_active_layer_index_set(PointerRNA *ptr, int value) bGPdata *gpd = (bGPdata *)ptr->owner_id; bGPDlayer *gpl = BLI_findlink(&gpd->layers, value); - BKE_gpencil_layer_setactive(gpd, gpl); + BKE_gpencil_layer_active_set(gpd, gpl); /* Now do standard updates... */ DEG_id_tag_update(&gpd->id, ID_RECALC_GEOMETRY); @@ -433,7 +473,8 @@ static const EnumPropertyItem *rna_GPencil_active_layer_itemf(bContext *C, item_tmp.name = gpl->info; item_tmp.value = i; - item_tmp.icon = BKE_icon_gplayer_color_ensure(gpl); + item_tmp.icon = (gpd->flag & GP_DATA_ANNOTATIONS) ? BKE_icon_gplayer_color_ensure(gpl) : + ICON_GREASEPENCIL; RNA_enum_item_add(&item, &totitem, &item_tmp); } @@ -460,6 +501,45 @@ static void rna_GPencilLayer_info_set(PointerRNA *ptr, const char *value) /* now fix animation paths */ BKE_animdata_fix_paths_rename_all(&gpd->id, "layers", oldname, gpl->info); + + /* Fix mask layers. */ + LISTBASE_FOREACH (bGPDlayer *, gpl_, &gpd->layers) { + LISTBASE_FOREACH (bGPDlayer_Mask *, mask, &gpl_->mask_layers) { + if (STREQ(mask->name, oldname)) { + BLI_strncpy(mask->name, gpl->info, sizeof(mask->name)); + } + } + } +} + +static void rna_GPencilLayer_mask_info_set(PointerRNA *ptr, const char *value) +{ + bGPdata *gpd = (bGPdata *)ptr->owner_id; + bGPDlayer_Mask *mask = ptr->data; + char oldname[128] = ""; + BLI_strncpy(oldname, mask->name, sizeof(oldname)); + + /* Really is changing the layer name. */ + bGPDlayer *gpl = BKE_gpencil_layer_named_get(gpd, oldname); + if (gpl) { + /* copy the new name into the name slot */ + BLI_strncpy_utf8(gpl->info, value, sizeof(gpl->info)); + + BLI_uniquename( + &gpd->layers, gpl, DATA_("GP_Layer"), '.', offsetof(bGPDlayer, info), sizeof(gpl->info)); + + /* now fix animation paths */ + BKE_animdata_fix_paths_rename_all(&gpd->id, "layers", oldname, gpl->info); + + /* Fix mask layers. */ + LISTBASE_FOREACH (bGPDlayer *, gpl_, &gpd->layers) { + LISTBASE_FOREACH (bGPDlayer_Mask *, mask_, &gpl_->mask_layers) { + if (STREQ(mask_->name, oldname)) { + BLI_strncpy(mask_->name, gpl->info, sizeof(mask_->name)); + } + } + } + } } static bGPDstroke *rna_GPencil_stroke_point_find_stroke(const bGPdata *gpd, @@ -558,7 +638,8 @@ static void rna_GPencil_stroke_point_add( stroke->totpoints += count; - stroke->flag |= GP_STROKE_RECALC_GEOMETRY; + /* Calc geometry data. */ + BKE_gpencil_stroke_geometry_update(stroke); gpd->flag |= GP_DATA_PYTHON_UPDATED; DEG_id_tag_update(&gpd->id, @@ -619,7 +700,8 @@ static void rna_GPencil_stroke_point_pop(ID *id, MEM_freeN(pt_dvert); } - stroke->flag |= GP_STROKE_RECALC_GEOMETRY; + /* Calc geometry data. */ + BKE_gpencil_stroke_geometry_update(stroke); gpd->flag |= GP_DATA_PYTHON_UPDATED; DEG_id_tag_update(&gpd->id, ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY | ID_RECALC_COPY_ON_WRITE); @@ -630,8 +712,9 @@ static void rna_GPencil_stroke_point_pop(ID *id, static bGPDstroke *rna_GPencil_stroke_new(bGPDframe *frame) { bGPDstroke *stroke = MEM_callocN(sizeof(bGPDstroke), "gp_stroke"); - stroke->gradient_f = 1.0f; - ARRAY_SET_ITEMS(stroke->gradient_s, 1.0f, 1.0f); + stroke->hardeness = 1.0f; + ARRAY_SET_ITEMS(stroke->aspect_ratio, 1.0f, 1.0f); + stroke->uv_scale = 1.0f; BLI_addtail(&frame->strokes, stroke); return stroke; @@ -665,7 +748,7 @@ static void rna_GPencil_stroke_close(ID *id, return; } - BKE_gpencil_close_stroke(stroke); + BKE_gpencil_stroke_close(stroke); DEG_id_tag_update(&gpd->id, ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY | ID_RECALC_COPY_ON_WRITE); WM_main_add_notifier(NC_GPENCIL | ND_DATA | NA_EDITED, NULL); @@ -703,14 +786,14 @@ static bGPDframe *rna_GPencil_frame_new(bGPDlayer *layer, { bGPDframe *frame; - if (BKE_gpencil_layer_find_frame(layer, frame_number)) { + if (BKE_gpencil_layer_frame_find(layer, frame_number)) { BKE_reportf(reports, RPT_ERROR, "Frame already exists on this frame number %d", frame_number); return NULL; } frame = BKE_gpencil_frame_addnew(layer, frame_number); if (active) { - layer->actframe = BKE_gpencil_layer_getframe(layer, frame_number, GP_GETFRAME_USE_PREV); + layer->actframe = BKE_gpencil_layer_frame_get(layer, frame_number, GP_GETFRAME_USE_PREV); } WM_main_add_notifier(NC_GPENCIL | NA_EDITED, NULL); @@ -725,7 +808,7 @@ static void rna_GPencil_frame_remove(bGPDlayer *layer, ReportList *reports, Poin return; } - BKE_gpencil_layer_delframe(layer, frame); + BKE_gpencil_layer_frame_delete(layer, frame); RNA_POINTER_INVALIDATE(frame_ptr); WM_main_add_notifier(NC_GPENCIL | NA_EDITED, NULL); @@ -735,7 +818,7 @@ static bGPDframe *rna_GPencil_frame_copy(bGPDlayer *layer, bGPDframe *src) { bGPDframe *frame = BKE_gpencil_frame_duplicate(src); - while (BKE_gpencil_layer_find_frame(layer, frame->framenum)) { + while (BKE_gpencil_layer_frame_find(layer, frame->framenum)) { frame->framenum++; } @@ -791,6 +874,31 @@ static void rna_GPencil_layer_move(bGPdata *gpd, WM_main_add_notifier(NC_GPENCIL | ND_DATA | NA_EDITED, NULL); } +static void rna_GPencil_layer_mask_add(bGPDlayer *gpl, PointerRNA *layer_ptr) +{ + bGPDlayer *gpl_mask = layer_ptr->data; + + BKE_gpencil_layer_mask_add(gpl, gpl_mask->info); + + WM_main_add_notifier(NC_GPENCIL | ND_DATA | NA_EDITED, NULL); +} + +static void rna_GPencil_layer_mask_remove(bGPDlayer *gpl, + ReportList *reports, + PointerRNA *mask_ptr) +{ + bGPDlayer_Mask *mask = mask_ptr->data; + if (BLI_findindex(&gpl->mask_layers, mask) == -1) { + BKE_report(reports, RPT_ERROR, "Mask not found in mask list"); + return; + } + + BKE_gpencil_layer_mask_remove(gpl, mask); + RNA_POINTER_INVALIDATE(mask_ptr); + + WM_main_add_notifier(NC_GPENCIL | ND_DATA | NA_EDITED, NULL); +} + static void rna_GPencil_frame_clear(bGPDframe *frame) { BKE_gpencil_free_strokes(frame); @@ -879,6 +987,16 @@ static void rna_def_gpencil_stroke_point(BlenderRNA *brna) RNA_def_property_boolean_funcs(prop, NULL, "rna_GPencil_stroke_point_select_set"); RNA_def_property_ui_text(prop, "Select", "Point is selected for viewport editing"); RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_update"); + + /* Vertex color. */ + prop = RNA_def_property(srna, "vertex_color", PROP_FLOAT, PROP_COLOR); + RNA_def_property_float_sdna(prop, NULL, "vert_color"); + RNA_def_property_array(prop, 4); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_ui_text( + prop, "Vertex Color", "Color used to mix with point color to get final color"); + RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_update"); } static void rna_def_gpencil_stroke_points_api(BlenderRNA *brna, PropertyRNA *cprop) @@ -951,27 +1069,6 @@ static void rna_def_gpencil_triangle(BlenderRNA *brna) RNA_def_property_int_sdna(prop, NULL, "verts[2]"); RNA_def_property_ui_text(prop, "v3", "Third triangle vertex index"); RNA_def_property_clear_flag(prop, PROP_EDITABLE); - - /* texture coord for point v1 */ - prop = RNA_def_property(srna, "uv1", PROP_FLOAT, PROP_COORDS); - RNA_def_property_float_sdna(prop, NULL, "uv[0]"); - RNA_def_property_array(prop, 2); - RNA_def_property_ui_text(prop, "uv1", "First triangle vertex texture coordinates"); - RNA_def_property_clear_flag(prop, PROP_EDITABLE); - - /* texture coord for point v2 */ - prop = RNA_def_property(srna, "uv2", PROP_FLOAT, PROP_COORDS); - RNA_def_property_float_sdna(prop, NULL, "uv[1]"); - RNA_def_property_array(prop, 2); - RNA_def_property_ui_text(prop, "uv2", "Second triangle vertex texture coordinates"); - RNA_def_property_clear_flag(prop, PROP_EDITABLE); - - /* texture coord for point v3 */ - prop = RNA_def_property(srna, "uv3", PROP_FLOAT, PROP_COORDS); - RNA_def_property_float_sdna(prop, NULL, "uv[2]"); - RNA_def_property_array(prop, 2); - RNA_def_property_ui_text(prop, "uv3", "Third triangle vertex texture coordinates"); - RNA_def_property_clear_flag(prop, PROP_EDITABLE); } static void rna_def_gpencil_mvert_group(BlenderRNA *brna) @@ -1103,22 +1200,70 @@ static void rna_def_gpencil_stroke(BlenderRNA *brna) RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_update"); /* gradient control along y */ - prop = RNA_def_property(srna, "gradient_factor", PROP_FLOAT, PROP_FACTOR); - RNA_def_property_float_sdna(prop, NULL, "gradient_f"); + prop = RNA_def_property(srna, "hardeness", PROP_FLOAT, PROP_FACTOR); + RNA_def_property_float_sdna(prop, NULL, "hardeness"); RNA_def_property_range(prop, 0.001f, 1.0f); RNA_def_property_float_default(prop, 1.0f); - RNA_def_property_ui_text( - prop, "Border Opacity Factor", "Amount of gradient along section of stroke"); + RNA_def_property_ui_text(prop, "Hardeness", "Amount of gradient along section of stroke"); RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0); RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_update"); + /* Stroke bound box */ + prop = RNA_def_property(srna, "bound_box_min", PROP_FLOAT, PROP_XYZ); + RNA_def_property_float_sdna(prop, NULL, "boundbox_min"); + RNA_def_property_array(prop, 3); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Boundbox Min", ""); + + prop = RNA_def_property(srna, "bound_box_max", PROP_FLOAT, PROP_XYZ); + RNA_def_property_float_sdna(prop, NULL, "boundbox_max"); + RNA_def_property_array(prop, 3); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Boundbox Max", ""); + /* gradient shape ratio */ - prop = RNA_def_property(srna, "gradient_shape", PROP_FLOAT, PROP_XYZ); - RNA_def_property_float_sdna(prop, NULL, "gradient_s"); + prop = RNA_def_property(srna, "aspect", PROP_FLOAT, PROP_XYZ); + RNA_def_property_float_sdna(prop, NULL, "aspect_ratio"); RNA_def_property_array(prop, 2); RNA_def_property_range(prop, 0.01f, 1.0f); RNA_def_property_float_default(prop, 1.0f); - RNA_def_property_ui_text(prop, "Aspect Ratio", ""); + RNA_def_property_ui_text(prop, "Aspect", ""); + RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_update"); + + /* UV translation. */ + prop = RNA_def_property(srna, "uv_translation", PROP_FLOAT, PROP_XYZ); + RNA_def_property_float_sdna(prop, NULL, "uv_translation"); + RNA_def_property_array(prop, 2); + RNA_def_property_float_default(prop, 0.0f); + RNA_def_property_ui_text(prop, "UV Translation", "Translation of default UV postion"); + RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0); + RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_uv_update"); + + /* UV rotation. */ + prop = RNA_def_property(srna, "uv_rotation", PROP_FLOAT, PROP_ANGLE); + RNA_def_property_float_sdna(prop, NULL, "uv_rotation"); + RNA_def_property_float_default(prop, 0.0f); + RNA_def_property_ui_text(prop, "UV Rotation", "Rotation of the UV"); + RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0); + RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_uv_update"); + + /* UV scale. */ + prop = RNA_def_property(srna, "uv_scale", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "uv_scale"); + RNA_def_property_float_default(prop, 1.0f); + RNA_def_property_range(prop, 0.01f, 100.0f); + RNA_def_property_ui_text(prop, "UV Scale", "Scale of the UV"); + RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0); + RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_uv_update"); + + /* Vertex Color for Fill. */ + prop = RNA_def_property(srna, "vertex_color_fill", PROP_FLOAT, PROP_COLOR); + RNA_def_property_float_sdna(prop, NULL, "vert_color_fill"); + RNA_def_property_array(prop, 4); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_ui_text( + prop, "Vertex Fill Color", "Color used to mix with fill color to get final color"); RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_update"); } @@ -1239,6 +1384,74 @@ static void rna_def_gpencil_frames_api(BlenderRNA *brna, PropertyRNA *cprop) RNA_def_function_return(func, parm); } +static void rna_def_gpencil_layers_mask_api(BlenderRNA *brna, PropertyRNA *cprop) +{ + StructRNA *srna; + PropertyRNA *prop; + + FunctionRNA *func; + PropertyRNA *parm; + + RNA_def_property_srna(cprop, "GreasePencilMaskLayers"); + srna = RNA_def_struct(brna, "GreasePencilMaskLayers", NULL); + RNA_def_struct_sdna(srna, "bGPDlayer"); + RNA_def_struct_ui_text( + srna, "Grease Pencil Mask Layers", "Collection of grease pencil masking layers"); + + prop = RNA_def_property(srna, "active_mask_index", PROP_INT, PROP_UNSIGNED); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_int_funcs(prop, + "rna_GPencil_active_mask_index_get", + "rna_GPencil_active_mask_index_set", + "rna_GPencil_active_mask_index_range"); + RNA_def_property_ui_text(prop, "Active Layer Mask Index", "Active index in layer mask array"); + + func = RNA_def_function(srna, "add", "rna_GPencil_layer_mask_add"); + RNA_def_function_ui_description(func, "Add a layer to mask list"); + parm = RNA_def_pointer(func, "layer", "GPencilLayer", "", "Layer to add as mask"); + RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR); + RNA_def_parameter_clear_flags(parm, PROP_THICK_WRAP, 0); + + func = RNA_def_function(srna, "remove", "rna_GPencil_layer_mask_remove"); + RNA_def_function_ui_description(func, "Remove a layer from mask list"); + RNA_def_function_flag(func, FUNC_USE_REPORTS); + parm = RNA_def_pointer(func, "mask", "GPencilLayerMask", "", "Mask to remove"); + RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR); + RNA_def_parameter_clear_flags(parm, PROP_THICK_WRAP, 0); +} + +static void rna_def_gpencil_layer_mask(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + srna = RNA_def_struct(brna, "GPencilLayerMask", NULL); + RNA_def_struct_sdna(srna, "bGPDlayer_Mask"); + RNA_def_struct_ui_text(srna, "Grease Pencil Masking Layers", "List of Mask Layers"); + RNA_def_struct_path_func(srna, "rna_GPencilLayerMask_path"); + + /* Name */ + prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE); + RNA_def_property_ui_text(prop, "Layer", "Mask layer name"); + RNA_def_property_string_funcs(prop, NULL, NULL, "rna_GPencilLayer_mask_info_set"); + RNA_def_struct_name_property(srna, prop); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_update(prop, NC_GPENCIL | ND_DATA | NA_RENAME, NULL); + + /* Flags */ + prop = RNA_def_property(srna, "hide", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_MASK_HIDE); + RNA_def_property_ui_icon(prop, ICON_HIDE_OFF, -1); + RNA_def_property_ui_text(prop, "Hide", "Set mask Visibility"); + RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_update"); + + prop = RNA_def_property(srna, "invert", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_MASK_INVERT); + RNA_def_property_ui_icon(prop, ICON_CLIPUV_HLT, -1); + RNA_def_property_ui_text(prop, "Invert", "Invert mask"); + RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_update"); +} + static void rna_def_gpencil_layer(BlenderRNA *brna) { StructRNA *srna; @@ -1267,6 +1480,13 @@ static void rna_def_gpencil_layer(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Frames", "Sketches for this layer on different frames"); rna_def_gpencil_frames_api(brna, prop); + /* Mask Layers */ + prop = RNA_def_property(srna, "mask_layers", PROP_COLLECTION, PROP_NONE); + RNA_def_property_collection_sdna(prop, NULL, "mask_layers", NULL); + RNA_def_property_struct_type(prop, "GPencilLayerMask"); + RNA_def_property_ui_text(prop, "Masks", "List of Masking Layers"); + rna_def_gpencil_layers_mask_api(brna, prop); + /* Active Frame */ prop = RNA_def_property(srna, "active_frame", PROP_POINTER, PROP_NONE); RNA_def_property_pointer_sdna(prop, NULL, "actframe"); @@ -1308,7 +1528,7 @@ static void rna_def_gpencil_layer(BlenderRNA *brna) RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_update"); /* Tint Color */ - prop = RNA_def_property(srna, "tint_color", PROP_FLOAT, PROP_COLOR_GAMMA); + prop = RNA_def_property(srna, "tint_color", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "tintcolor"); RNA_def_property_array(prop, 3); RNA_def_property_range(prop, 0.0f, 1.0f); @@ -1316,12 +1536,20 @@ static void rna_def_gpencil_layer(BlenderRNA *brna) RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_update"); /* Tint factor */ - prop = RNA_def_property(srna, "tint_factor", PROP_FLOAT, PROP_NONE); + prop = RNA_def_property(srna, "tint_factor", PROP_FLOAT, PROP_FACTOR); RNA_def_property_float_sdna(prop, NULL, "tintcolor[3]"); RNA_def_property_range(prop, 0.0, 1.0f); RNA_def_property_ui_text(prop, "Tint Factor", "Factor of tinting color"); RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_update"); + /* Vertex Paint opacity factor */ + prop = RNA_def_property(srna, "vertex_paint_opacity", PROP_FLOAT, PROP_FACTOR); + RNA_def_property_float_sdna(prop, NULL, "vertex_paint_opacity"); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_float_default(prop, 1.0f); + RNA_def_property_ui_text(prop, "Vertex Paint Opacity", "Vertex Paint mix factor"); + RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_update"); + /* Line Thickness Change */ prop = RNA_def_property(srna, "line_change", PROP_INT, PROP_PIXEL); RNA_def_property_int_sdna(prop, NULL, "line_change"); @@ -1434,11 +1662,17 @@ static void rna_def_gpencil_layer(BlenderRNA *brna) prop, "Disallow Locked Materials Editing", "Avoids editing locked materials in the layer"); RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, NULL); - prop = RNA_def_property(srna, "mask_layer", PROP_BOOLEAN, PROP_NONE); + prop = RNA_def_property(srna, "use_mask_layer", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_LAYER_USE_MASK); RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_ui_text(prop, "Mask Layer", "Mask pixels from underlying layers drawing"); + RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_update"); + + prop = RNA_def_property(srna, "use_lights", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_LAYER_USE_LIGHTS); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); RNA_def_property_ui_text( - prop, "Mask Layer", "Remove any pixel outside underlying layers drawing"); + prop, "Use Lights", "Enable the use of lights on stroke and fill materials"); RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_update"); /* solo mode: Only display frames with keyframe */ @@ -1454,15 +1688,6 @@ static void rna_def_gpencil_layer(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Ruler", "This is a special ruler layer"); RNA_def_property_clear_flag(prop, PROP_EDITABLE); - /* exposed as layers.active */ -# if 0 - prop = RNA_def_property(srna, "active", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_LAYER_ACTIVE); - RNA_def_property_boolean_funcs(prop, NULL, "rna_GPencilLayer_active_set"); - RNA_def_property_ui_text(prop, "Active", "Set active layer for editing"); - RNA_def_property_update(prop, NC_GPENCIL | ND_DATA | NA_SELECTED, NULL); -# endif - prop = RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_LAYER_SELECT); RNA_def_property_ui_text(prop, "Select", "Layer is selected for editing in the Dope Sheet"); @@ -1486,7 +1711,7 @@ static void rna_def_gpencil_layer(BlenderRNA *brna) RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK); RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY); RNA_def_property_ui_text(prop, "Parent", "Parent Object"); - RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_update"); + RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_dependency_update"); /* parent type */ prop = RNA_def_property(srna, "parent_type", PROP_ENUM, PROP_NONE); @@ -1686,7 +1911,9 @@ static void rna_def_gpencil_data(BlenderRNA *brna) RNA_def_property_enum_sdna(prop, NULL, "draw_mode"); RNA_def_property_enum_items(prop, rna_enum_gpencil_stroke_depth_order_items); RNA_def_property_ui_text( - prop, "Stroke Depth Order", "Defines how the strokes are ordered in 3D space"); + prop, + "Stroke Depth Order", + "Defines how the strokes are ordered in 3D space (for objects not displayed 'In Front')"); RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_update"); /* Flags */ @@ -1719,6 +1946,13 @@ static void rna_def_gpencil_data(BlenderRNA *brna) RNA_def_property_update( prop, NC_GPENCIL | ND_DATA | ND_GPENCIL_EDITMODE, "rna_GPencil_editmode_update"); + prop = RNA_def_property(srna, "is_stroke_vertex_mode", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_DATA_STROKE_VERTEXMODE); + RNA_def_property_ui_text(prop, "Stroke Vertex Paint Mode", "Grease Pencil vertex paint"); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_update( + prop, NC_GPENCIL | ND_DATA | ND_GPENCIL_EDITMODE, "rna_GPencil_editmode_update"); + prop = RNA_def_property(srna, "use_onion_skinning", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_DATA_SHOW_ONIONSKINS); RNA_def_property_boolean_default(prop, true); @@ -1727,14 +1961,6 @@ static void rna_def_gpencil_data(BlenderRNA *brna) RNA_def_property_update( prop, NC_SCREEN | NC_SCENE | ND_TOOLSETTINGS | ND_DATA | NC_GPENCIL, "rna_GPencil_update"); - prop = RNA_def_property(srna, "show_stroke_direction", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_DATA_SHOW_DIRECTION); - RNA_def_property_ui_text(prop, - "Show Direction", - "Show stroke drawing direction with a bigger green dot (start) " - "and smaller red dot (end) points"); - RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_update"); - prop = RNA_def_property(srna, "stroke_thickness_space", PROP_ENUM, PROP_NONE); /* as an enum */ RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag"); RNA_def_property_enum_items(prop, stroke_thickness_items); @@ -1760,20 +1986,6 @@ static void rna_def_gpencil_data(BlenderRNA *brna) "(keyframes must be selected to be included)"); RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_update"); - prop = RNA_def_property(srna, "use_force_fill_recalc", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_DATA_STROKE_FORCE_RECALC); - RNA_def_property_ui_text( - prop, - "Force Fill Update", - "Force recalc of fill data after use deformation modifiers (reduce FPS)"); - RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_update"); - - prop = RNA_def_property(srna, "use_adaptive_uv", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_DATA_UV_ADAPTIVE); - RNA_def_property_ui_text( - prop, "Adaptive UV", "Automatic UVs are calculated depending of the stroke size"); - RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_strokes_update"); - prop = RNA_def_property(srna, "use_autolock_layers", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_DATA_AUTOLOCK_LAYERS); RNA_def_property_ui_text( @@ -1820,7 +2032,7 @@ static void rna_def_gpencil_data(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Use Custom Ghost Colors", "Use custom colors for ghost frames"); RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_update"); - prop = RNA_def_property(srna, "before_color", PROP_FLOAT, PROP_COLOR_GAMMA); + prop = RNA_def_property(srna, "before_color", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "gcolor_prev"); RNA_def_property_array(prop, 3); RNA_def_property_range(prop, 0.0f, 1.0f); @@ -1829,7 +2041,7 @@ static void rna_def_gpencil_data(BlenderRNA *brna) RNA_def_property_update( prop, NC_SCREEN | NC_SCENE | ND_TOOLSETTINGS | ND_DATA | NC_GPENCIL, "rna_GPencil_update"); - prop = RNA_def_property(srna, "after_color", PROP_FLOAT, PROP_COLOR_GAMMA); + prop = RNA_def_property(srna, "after_color", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "gcolor_next"); RNA_def_property_array(prop, 3); RNA_def_property_range(prop, 0.0f, 1.0f); @@ -1871,10 +2083,8 @@ static void rna_def_gpencil_data(BlenderRNA *brna) prop = RNA_def_property(srna, "use_onion_loop", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "onion_flag", GP_ONION_LOOP); RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0); - RNA_def_property_ui_text(prop, - "Loop", - "Display first onion keyframes using next frame color to show " - "indication of loop start frame"); + RNA_def_property_ui_text( + prop, "Show Start Frame", "Display onion keyframes for looping animations"); RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_update"); prop = RNA_def_property(srna, "onion_factor", PROP_FLOAT, PROP_NONE); @@ -1889,6 +2099,7 @@ static void rna_def_gpencil_data(BlenderRNA *brna) RNA_def_property_float_sdna(prop, NULL, "zdepth_offset"); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.1f, 3); + RNA_def_property_float_default(prop, 0.150f); RNA_def_property_ui_text(prop, "Surface Offset", "Offset amount when drawing in surface mode"); RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_update"); @@ -1918,6 +2129,7 @@ void RNA_def_gpencil(BlenderRNA *brna) rna_def_gpencil_data(brna); rna_def_gpencil_layer(brna); + rna_def_gpencil_layer_mask(brna); rna_def_gpencil_frame(brna); rna_def_gpencil_stroke(brna); diff --git a/source/blender/makesrna/intern/rna_gpencil_modifier.c b/source/blender/makesrna/intern/rna_gpencil_modifier.c index 53fa3f7459d..0caa93940c8 100644 --- a/source/blender/makesrna/intern/rna_gpencil_modifier.c +++ b/source/blender/makesrna/intern/rna_gpencil_modifier.c @@ -23,6 +23,7 @@ #include #include "DNA_armature_types.h" +#include "DNA_brush_types.h" #include "DNA_cachefile_types.h" #include "DNA_mesh_types.h" #include "DNA_gpencil_modifier_types.h" @@ -33,6 +34,7 @@ #include "MEM_guardedalloc.h" #include "BLI_math.h" +#include "BLI_rand.h" #include "BLT_translation.h" @@ -127,6 +129,11 @@ const EnumPropertyItem rna_enum_object_greasepencil_modifier_type_items[] = { "Opacity", "Opacity of the strokes"}, {eGpencilModifierType_Tint, "GP_TINT", ICON_MOD_TINT, "Tint", "Tint strokes with new color"}, + {eGpencilModifierType_Vertexcolor, + "GP_VERTEXCOLOR", + ICON_MOD_NORMALEDIT, + "Vertex Color", + "Apply color changes to Vertex Color"}, {0, NULL, 0, NULL, NULL}, }; @@ -138,16 +145,6 @@ static const EnumPropertyItem modifier_modify_color_items[] = { {0, NULL, 0, NULL, NULL}, }; -static const EnumPropertyItem modifier_opacity_mode_items[] = { - {GP_OPACITY_MODE_MATERIAL, - "MATERIAL", - 0, - "Material", - "Modify opacity using alpha channel of material"}, - {GP_OPACITY_MODE_STRENGTH, "STRENGTH", 0, "Strength", "Modify opacity using point strength"}, - {0, NULL, 0, NULL, NULL}, -}; - static const EnumPropertyItem modifier_gphook_falloff_items[] = { {eGPHook_Falloff_None, "NONE", 0, "No Falloff", ""}, {eGPHook_Falloff_Curve, "CURVE", 0, "Curve", ""}, @@ -168,6 +165,11 @@ static const EnumPropertyItem rna_enum_time_mode_items[] = { {0, NULL, 0, NULL, NULL}, }; +static const EnumPropertyItem gpencil_subdivision_type_items[] = { + {GP_SUBDIV_CATMULL, "CATMULL_CLARK", 0, "Catmull-Clark", ""}, + {GP_SUBDIV_SIMPLE, "SIMPLE", 0, "Simple", ""}, + {0, NULL, 0, NULL, NULL}, +}; #endif #ifdef RNA_RUNTIME @@ -224,6 +226,8 @@ static StructRNA *rna_GpencilModifier_refine(struct PointerRNA *ptr) return &RNA_ArmatureGpencilModifier; case eGpencilModifierType_Multiply: return &RNA_MultiplyGpencilModifier; + case eGpencilModifierType_Vertexcolor: + return &RNA_VertexcolorGpencilModifier; /* Default */ case eGpencilModifierType_None: case NUM_GREASEPENCIL_MODIFIER_TYPES: @@ -338,6 +342,17 @@ static void rna_HookGpencilModifier_object_set(PointerRNA *ptr, BKE_object_modifier_gpencil_hook_reset(ob, hmd); } +static void rna_VertexcolorGpencilModifier_object_set(PointerRNA *ptr, + PointerRNA value, + struct ReportList *UNUSED(reports)) +{ + VertexcolorGpencilModifierData *hmd = ptr->data; + Object *ob = (Object *)value.data; + + hmd->object = ob; + id_lib_extern((ID *)ob); +} + static void rna_TimeModifier_start_frame_set(PointerRNA *ptr, int value) { TimeGpencilModifierData *tmd = ptr->data; @@ -360,6 +375,42 @@ static void rna_TimeModifier_end_frame_set(PointerRNA *ptr, int value) } } +static void rna_GpencilOpacity_range( + PointerRNA *ptr, float *min, float *max, float *softmin, float *softmax) +{ + OpacityGpencilModifierData *md = (OpacityGpencilModifierData *)ptr->data; + + *min = 0.0f; + *softmin = 0.0f; + + *softmax = (md->flag & GP_OPACITY_NORMALIZE) ? 1.0f : 2.0f; + *max = *softmax; +} + +static void rna_GpencilOpacity_max_set(PointerRNA *ptr, float value) +{ + OpacityGpencilModifierData *md = (OpacityGpencilModifierData *)ptr->data; + + md->factor = value; + if (md->flag & GP_OPACITY_NORMALIZE) { + if (md->factor > 1.0f) { + md->factor = 1.0f; + } + } +} + +static void rna_GpencilModifier_opacity_update(Main *bmain, Scene *scene, PointerRNA *ptr) +{ + OpacityGpencilModifierData *md = (OpacityGpencilModifierData *)ptr->data; + if (md->flag & GP_OPACITY_NORMALIZE) { + if (md->factor > 1.0f) { + md->factor = 1.0f; + } + } + + rna_GpencilModifier_update(bmain, scene, ptr); +} + #else static void rna_def_modifier_gpencilnoise(BlenderRNA *brna) @@ -388,15 +439,41 @@ static void rna_def_modifier_gpencilnoise(BlenderRNA *brna) RNA_def_property_string_funcs(prop, NULL, NULL, "rna_NoiseGpencilModifier_vgname_set"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); - prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_NONE); + prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_FACTOR); RNA_def_property_float_sdna(prop, NULL, "factor"); - RNA_def_property_range(prop, 0, 30.0); - RNA_def_property_ui_text(prop, "Factor", "Amount of noise to apply"); + RNA_def_property_range(prop, 0.0, FLT_MAX); + RNA_def_property_ui_range(prop, 0.0, 1.0, 0.1, 2); + RNA_def_property_float_default(prop, 0.5f); + RNA_def_property_ui_text(prop, "Offset Factor", "Amount of noise to apply"); + RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); + + prop = RNA_def_property(srna, "factor_strength", PROP_FLOAT, PROP_FACTOR); + RNA_def_property_float_sdna(prop, NULL, "factor_strength"); + RNA_def_property_range(prop, 0.0, FLT_MAX); + RNA_def_property_ui_range(prop, 0.0, 1.0, 0.1, 2); + RNA_def_property_float_default(prop, 0.5f); + RNA_def_property_ui_text(prop, "Strength Factor", "Amount of noise to apply to opacity"); + RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); + + prop = RNA_def_property(srna, "factor_thickness", PROP_FLOAT, PROP_FACTOR); + RNA_def_property_float_sdna(prop, NULL, "factor_thickness"); + RNA_def_property_range(prop, 0.0, FLT_MAX); + RNA_def_property_ui_range(prop, 0.0, 1.0, 0.1, 2); + RNA_def_property_float_default(prop, 0.5f); + RNA_def_property_ui_text(prop, "Thickness Factor", "Amount of noise to apply to thickness"); + RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); + + prop = RNA_def_property(srna, "factor_uvs", PROP_FLOAT, PROP_FACTOR); + RNA_def_property_float_sdna(prop, NULL, "factor_uvs"); + RNA_def_property_range(prop, 0.0, FLT_MAX); + RNA_def_property_ui_range(prop, 0.0, 1.0, 0.1, 2); + RNA_def_property_float_default(prop, 0.5f); + RNA_def_property_ui_text(prop, "UV Factor", "Amount of noise to apply uv rotation"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); prop = RNA_def_property(srna, "random", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_NOISE_USE_RANDOM); - RNA_def_property_ui_text(prop, "Random", "Use random values"); + RNA_def_property_ui_text(prop, "Random", "Use random values over time"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); prop = RNA_def_property(srna, "seed", PROP_INT, PROP_UNSIGNED); @@ -409,33 +486,21 @@ static void rna_def_modifier_gpencilnoise(BlenderRNA *brna) prop, "Affect Position", "The modifier affects the position of the point"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); - prop = RNA_def_property(srna, "use_edit_strength", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_NOISE_MOD_STRENGTH); - RNA_def_property_ui_text( - prop, "Affect Strength", "The modifier affects the color strength of the point"); - RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); - - prop = RNA_def_property(srna, "use_edit_thickness", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_NOISE_MOD_THICKNESS); - RNA_def_property_ui_text( - prop, "Affect Thickness", "The modifier affects the thickness of the point"); - RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); - - prop = RNA_def_property(srna, "use_edit_uv", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_NOISE_MOD_UV); - RNA_def_property_ui_text( - prop, "Affect UV", "The modifier affects the UV rotation factor of the point"); + prop = RNA_def_property(srna, "noise_scale", PROP_FLOAT, PROP_FACTOR); + RNA_def_property_float_sdna(prop, NULL, "noise_scale"); + RNA_def_property_range(prop, 0.0, 1.0); + RNA_def_property_ui_text(prop, "Noise Scale", "Scale the noise frequency"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); - prop = RNA_def_property(srna, "full_stroke", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_NOISE_FULL_STROKE); + prop = RNA_def_property(srna, "use_custom_curve", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_NOISE_CUSTOM_CURVE); RNA_def_property_ui_text( - prop, "Full Stroke", "The noise moves the stroke as a whole, not point by point"); + prop, "Custom Curve", "Use a custom curve to define noise effect along the strokes"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); - prop = RNA_def_property(srna, "move_extreme", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_NOISE_MOVE_EXTREME); - RNA_def_property_ui_text(prop, "Move Extremes", "The noise moves the stroke extreme points"); + prop = RNA_def_property(srna, "curve", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "curve_intensity"); + RNA_def_property_ui_text(prop, "Curve", "Custom curve to apply effect"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_NONE); @@ -509,9 +574,9 @@ static void rna_def_modifier_gpencilsmooth(BlenderRNA *brna) RNA_def_property_string_funcs(prop, NULL, NULL, "rna_SmoothGpencilModifier_vgname_set"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); - prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_NONE); + prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_FACTOR); RNA_def_property_float_sdna(prop, NULL, "factor"); - RNA_def_property_range(prop, 0, 2); + RNA_def_property_range(prop, 0, 1); RNA_def_property_ui_text(prop, "Factor", "Amount of smooth to apply"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); @@ -582,6 +647,17 @@ static void rna_def_modifier_gpencilsmooth(BlenderRNA *brna) RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SMOOTH_INVERT_LAYERPASS); RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); + + prop = RNA_def_property(srna, "use_custom_curve", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SMOOTH_CUSTOM_CURVE); + RNA_def_property_ui_text( + prop, "Custom Curve", "Use a custom curve to define smooth effect along the strokes"); + RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); + + prop = RNA_def_property(srna, "curve", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "curve_intensity"); + RNA_def_property_ui_text(prop, "Curve", "Custom curve to apply effect"); + RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); } static void rna_def_modifier_gpencilsubdiv(BlenderRNA *brna) @@ -610,9 +686,10 @@ static void rna_def_modifier_gpencilsubdiv(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Level", "Number of subdivisions"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); - prop = RNA_def_property(srna, "simple", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SUBDIV_SIMPLE); - RNA_def_property_ui_text(prop, "Simple", "The modifier only add control points"); + prop = RNA_def_property(srna, "subdivision_type", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "type"); + RNA_def_property_enum_items(prop, gpencil_subdivision_type_items); + RNA_def_property_ui_text(prop, "Subdivision Type", "Select type of subdivision algorithm"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_NONE); @@ -663,7 +740,7 @@ static void rna_def_modifier_gpencilsimplify(BlenderRNA *brna) "ADAPTIVE", ICON_IPO_EASE_IN_OUT, "Adaptive", - "Use a RDP algorithm to simplify the stroke"}, + "Use a Ramer-Douglas-Peucker algorithm to simplify the stroke preserving main shape"}, {GP_SIMPLIFY_SAMPLE, "SAMPLE", ICON_IPO_EASE_IN_OUT, @@ -692,7 +769,7 @@ static void rna_def_modifier_gpencilsimplify(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Material", "Material name"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); - prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_NONE); + prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_FACTOR); RNA_def_property_float_sdna(prop, NULL, "factor"); RNA_def_property_range(prop, 0, 100.0); RNA_def_property_ui_range(prop, 0, 100.0, 1.0f, 3); @@ -744,16 +821,18 @@ static void rna_def_modifier_gpencilsimplify(BlenderRNA *brna) RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); /* Sample */ - prop = RNA_def_property(srna, "length", PROP_FLOAT, PROP_NONE); + prop = RNA_def_property(srna, "length", PROP_FLOAT, PROP_DISTANCE); RNA_def_property_float_sdna(prop, NULL, "length"); - RNA_def_property_range(prop, 0, 10.0f); + RNA_def_property_range(prop, 0, FLT_MAX); + RNA_def_property_ui_range(prop, 0, 1.0, 0.01, 3); RNA_def_property_ui_text(prop, "Length", "Length of each segment"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); - /* Distance */ - prop = RNA_def_property(srna, "distance", PROP_FLOAT, PROP_NONE); + /* Merge */ + prop = RNA_def_property(srna, "distance", PROP_FLOAT, PROP_DISTANCE); RNA_def_property_float_sdna(prop, NULL, "distance"); - RNA_def_property_range(prop, 0, 100.0f); + RNA_def_property_range(prop, 0, FLT_MAX); + RNA_def_property_ui_range(prop, 0, 1.0, 0.01, 3); RNA_def_property_ui_text(prop, "Distance", "Distance between points"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); } @@ -787,7 +866,15 @@ static void rna_def_modifier_gpencilthick(BlenderRNA *brna) prop = RNA_def_property(srna, "thickness", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "thickness"); RNA_def_property_range(prop, -100, 500); - RNA_def_property_ui_text(prop, "Thickness", "Factor of thickness change"); + RNA_def_property_ui_text(prop, "Thickness", "Absolute thickness to apply everywhere"); + RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); + + prop = RNA_def_property(srna, "thickness_factor", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "thickness_fac"); + RNA_def_property_range(prop, 0.0, FLT_MAX); + RNA_def_property_ui_range(prop, 0.0, 10.0, 0.1, 3); + RNA_def_property_float_default(prop, 1.0f); + RNA_def_property_ui_text(prop, "Thickness Factor", "Factor to multiply the thickness with"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_NONE); @@ -829,17 +916,18 @@ static void rna_def_modifier_gpencilthick(BlenderRNA *brna) prop = RNA_def_property(srna, "use_custom_curve", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_THICK_CUSTOM_CURVE); - RNA_def_property_ui_text(prop, "Custom Curve", "Use a custom curve to define thickness changes"); + RNA_def_property_ui_text( + prop, "Custom Curve", "Use a custom curve to define thickness change along the strokes"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); prop = RNA_def_property(srna, "normalize_thickness", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_THICK_NORMALIZE); - RNA_def_property_ui_text(prop, "Normalize", "Normalize the full stroke to modifier thickness"); + RNA_def_property_ui_text(prop, "Uniform Thickness", "Replace the stroke thickness"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); prop = RNA_def_property(srna, "curve", PROP_POINTER, PROP_NONE); RNA_def_property_pointer_sdna(prop, NULL, "curve_thickness"); - RNA_def_property_ui_text(prop, "Curve", "Custom Thickness Curve"); + RNA_def_property_ui_text(prop, "Curve", "Custom curve to apply effect"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); } @@ -950,7 +1038,7 @@ static void rna_def_modifier_gpenciltint(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Material", "Material name"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); - prop = RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR_GAMMA); + prop = RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR); RNA_def_property_range(prop, 0.0, 1.0); RNA_def_property_float_sdna(prop, NULL, "rgb"); RNA_def_property_array(prop, 3); @@ -959,15 +1047,10 @@ static void rna_def_modifier_gpenciltint(BlenderRNA *brna) prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "factor"); - RNA_def_property_ui_range(prop, 0, 2.0, 0.1, 3); + RNA_def_property_ui_range(prop, 0, 2.0, 0.1, 2); RNA_def_property_ui_text(prop, "Factor", "Factor for mixing color"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); - prop = RNA_def_property(srna, "create_materials", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_TINT_CREATE_COLORS); - RNA_def_property_ui_text(prop, "Create Materials", "When apply modifier, create new material"); - RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); - prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "pass_index"); RNA_def_property_range(prop, 0, 100); @@ -999,6 +1082,17 @@ static void rna_def_modifier_gpenciltint(BlenderRNA *brna) RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_TINT_INVERT_LAYERPASS); RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); + + prop = RNA_def_property(srna, "use_custom_curve", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_TINT_CUSTOM_CURVE); + RNA_def_property_ui_text( + prop, "Custom Curve", "Use a custom curve to define tint effect along the strokes"); + RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); + + prop = RNA_def_property(srna, "curve", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "curve_intensity"); + RNA_def_property_ui_text(prop, "Curve", "Custom curve to apply effect"); + RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); } static void rna_def_modifier_gpenciltime(BlenderRNA *brna) @@ -1110,29 +1204,27 @@ static void rna_def_modifier_gpencilcolor(BlenderRNA *brna) prop = RNA_def_property(srna, "hue", PROP_FLOAT, PROP_NONE); RNA_def_property_range(prop, 0.0, 1.0); RNA_def_property_ui_range(prop, 0.0, 1.0, 0.1, 3); + RNA_def_property_float_default(prop, 0.5); RNA_def_property_float_sdna(prop, NULL, "hsv[0]"); RNA_def_property_ui_text(prop, "Hue", "Color Hue"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); prop = RNA_def_property(srna, "saturation", PROP_FLOAT, PROP_NONE); - RNA_def_property_range(prop, 0.0, 2.0); + RNA_def_property_range(prop, 0.0, FLT_MAX); RNA_def_property_ui_range(prop, 0.0, 2.0, 0.1, 3); + RNA_def_property_float_default(prop, 1.0); RNA_def_property_float_sdna(prop, NULL, "hsv[1]"); RNA_def_property_ui_text(prop, "Saturation", "Color Saturation"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); prop = RNA_def_property(srna, "value", PROP_FLOAT, PROP_NONE); - RNA_def_property_range(prop, 0.0, 2.0); + RNA_def_property_range(prop, 0.0, FLT_MAX); RNA_def_property_ui_range(prop, 0.0, 2.0, 0.1, 3); + RNA_def_property_float_default(prop, 1.0); RNA_def_property_float_sdna(prop, NULL, "hsv[2]"); RNA_def_property_ui_text(prop, "Value", "Color Value"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); - prop = RNA_def_property(srna, "create_materials", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_COLOR_CREATE_COLORS); - RNA_def_property_ui_text(prop, "Create Materials", "When apply modifier, create new material"); - RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); - prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "pass_index"); RNA_def_property_range(prop, 0, 100); @@ -1164,6 +1256,17 @@ static void rna_def_modifier_gpencilcolor(BlenderRNA *brna) RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_COLOR_INVERT_LAYERPASS); RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); + + prop = RNA_def_property(srna, "use_custom_curve", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_COLOR_CUSTOM_CURVE); + RNA_def_property_ui_text( + prop, "Custom Curve", "Use a custom curve to define color effect along the strokes"); + RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); + + prop = RNA_def_property(srna, "curve", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "curve_intensity"); + RNA_def_property_ui_text(prop, "Curve", "Custom curve to apply effect"); + RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); } static void rna_def_modifier_gpencilopacity(BlenderRNA *brna) @@ -1181,11 +1284,6 @@ static void rna_def_modifier_gpencilopacity(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Mode", "Set what colors of the stroke are affected"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); - prop = RNA_def_property(srna, "opacity_mode", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_items(prop, modifier_opacity_mode_items); - RNA_def_property_ui_text(prop, "Opacity Mode", "Set what mode used to define opacity"); - RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); - prop = RNA_def_property(srna, "layer", PROP_STRING, PROP_NONE); RNA_def_property_string_sdna(prop, NULL, "layername"); RNA_def_property_ui_text(prop, "Layer", "Layer name"); @@ -1204,13 +1302,10 @@ static void rna_def_modifier_gpencilopacity(BlenderRNA *brna) prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "factor"); - RNA_def_property_ui_range(prop, 0, 2.0, 0.1, 3); - RNA_def_property_ui_text(prop, "Factor", "Factor of Opacity"); - RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); - - prop = RNA_def_property(srna, "create_materials", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_OPACITY_CREATE_COLORS); - RNA_def_property_ui_text(prop, "Create Materials", "When apply modifier, create new material"); + RNA_def_property_ui_range(prop, 0, 2.0, 0.1, 2); + RNA_def_property_float_funcs( + prop, NULL, "rna_GpencilOpacity_max_set", "rna_GpencilOpacity_range"); + RNA_def_property_ui_text(prop, "Opacity Factor", "Factor of Opacity"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_NONE); @@ -1249,9 +1344,25 @@ static void rna_def_modifier_gpencilopacity(BlenderRNA *brna) RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_OPACITY_INVERT_LAYERPASS); RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); + + prop = RNA_def_property(srna, "normalize_opacity", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_OPACITY_NORMALIZE); + RNA_def_property_ui_text(prop, "Uniform Opacity", "Replace the stroke opacity"); + RNA_def_property_update(prop, 0, "rna_GpencilModifier_opacity_update"); + + prop = RNA_def_property(srna, "use_custom_curve", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_OPACITY_CUSTOM_CURVE); + RNA_def_property_ui_text( + prop, "Custom Curve", "Use a custom curve to define opacity effect along the strokes"); + RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); + + prop = RNA_def_property(srna, "curve", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "curve_intensity"); + RNA_def_property_ui_text(prop, "Curve", "Custom curve to apply effect"); + RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); } -static void rna_def_modifier_gpencilinstance(BlenderRNA *brna) +static void rna_def_modifier_gpencilarray(BlenderRNA *brna) { StructRNA *srna; PropertyRNA *prop; @@ -1295,50 +1406,41 @@ static void rna_def_modifier_gpencilinstance(BlenderRNA *brna) RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY); RNA_def_property_update(prop, 0, "rna_GpencilModifier_dependency_update"); - prop = RNA_def_property(srna, "offset", PROP_FLOAT, PROP_TRANSLATION); + prop = RNA_def_property(srna, "constant_offset", PROP_FLOAT, PROP_TRANSLATION); RNA_def_property_float_sdna(prop, NULL, "offset"); - RNA_def_property_ui_text(prop, "Offset", "Value for the distance between items"); + RNA_def_property_ui_text(prop, "Constant Offset", "Value for the distance between items"); RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); - prop = RNA_def_property(srna, "shift", PROP_FLOAT, PROP_TRANSLATION); + prop = RNA_def_property(srna, "relative_offset", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "shift"); - RNA_def_property_ui_text(prop, "Shift", "Shiftiness value"); - RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT); - RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); - - prop = RNA_def_property(srna, "rotation", PROP_FLOAT, PROP_EULER); - RNA_def_property_float_sdna(prop, NULL, "rot"); - RNA_def_property_ui_text(prop, "Rotation", "Value for changes in rotation"); + RNA_def_property_ui_text( + prop, + "Relative Offset", + "The size of the geometry will determine the distance between arrayed items"); RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); - prop = RNA_def_property(srna, "scale", PROP_FLOAT, PROP_XYZ); - RNA_def_property_float_sdna(prop, NULL, "scale"); - RNA_def_property_ui_text(prop, "Scale", "Value for changes in scale"); + prop = RNA_def_property(srna, "random_offset", PROP_FLOAT, PROP_XYZ); + RNA_def_property_float_sdna(prop, NULL, "rnd_offset"); + RNA_def_property_ui_text(prop, "Random Offset", "Value for changes in location"); RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); - prop = RNA_def_property(srna, "random_rot", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_ARRAY_RANDOM_ROT); - RNA_def_property_ui_text(prop, "Random Rotation", "Use random factors for rotation"); - RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); - - prop = RNA_def_property(srna, "rot_factor", PROP_FLOAT, PROP_NONE); + prop = RNA_def_property(srna, "random_rotation", PROP_FLOAT, PROP_EULER); RNA_def_property_float_sdna(prop, NULL, "rnd_rot"); - RNA_def_property_ui_text(prop, "Rotation Factor", "Random factor for rotation"); - RNA_def_property_range(prop, -10.0, 10.0); + RNA_def_property_ui_text(prop, "Random Rotation", "Value for changes in rotation"); + RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); - prop = RNA_def_property(srna, "random_scale", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_ARRAY_RANDOM_SIZE); - RNA_def_property_ui_text(prop, "Random Scale", "Use random factors for scale"); + prop = RNA_def_property(srna, "random_scale", PROP_FLOAT, PROP_XYZ); + RNA_def_property_float_sdna(prop, NULL, "rnd_scale"); + RNA_def_property_ui_text(prop, "Scale", "Value for changes in scale"); + RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); - prop = RNA_def_property(srna, "scale_factor", PROP_FLOAT, PROP_NONE); - RNA_def_property_float_sdna(prop, NULL, "rnd_size"); - RNA_def_property_ui_text(prop, "Scale Factor", "Random factor for scale"); - RNA_def_property_range(prop, -10.0, 10.0); + prop = RNA_def_property(srna, "seed", PROP_INT, PROP_UNSIGNED); + RNA_def_property_ui_text(prop, "Seed", "Random seed"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); prop = RNA_def_property(srna, "replace_material", PROP_INT, PROP_NONE); @@ -1376,12 +1478,19 @@ static void rna_def_modifier_gpencilinstance(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); - prop = RNA_def_property(srna, "keep_on_top", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_ARRAY_KEEP_ONTOP); - RNA_def_property_ui_text( - prop, - "Keep on Top", - "Keep the original stroke in front of new instances (only affect by layer)"); + prop = RNA_def_property(srna, "use_constant_offset", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_ARRAY_USE_OFFSET); + RNA_def_property_ui_text(prop, "Offset", "Enable offset"); + RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); + + prop = RNA_def_property(srna, "use_object_offset", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_ARRAY_USE_OB_OFFSET); + RNA_def_property_ui_text(prop, "Object Offset", "Enable obejct offset"); + RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); + + prop = RNA_def_property(srna, "use_relative_offset", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_ARRAY_USE_RELATIVE); + RNA_def_property_ui_text(prop, "Shift", "Enable shift"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); } @@ -1848,16 +1957,6 @@ static void rna_def_modifier_gpencilarmature(BlenderRNA *brna) prop, "Preserve Volume", "Deform rotation interpolation with quaternions"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_dependency_update"); -# if 0 /* GPXX keep disabled now */ - prop = RNA_def_property(srna, "use_multi_modifier", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "multi", 0); - RNA_def_property_ui_text( - prop, - "Multi Modifier", - "Use same input as previous modifier, and mix results using overall vgroup"); - RNA_def_property_update(prop, 0, "rna_GpencilModifier_dependency_update"); -# endif - prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE); RNA_def_property_string_sdna(prop, NULL, "vgname"); RNA_def_property_ui_text( @@ -1930,28 +2029,33 @@ static void rna_def_modifier_gpencilmultiply(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Angle Splitting", "Enable angle splitting"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); - prop = RNA_def_property(srna, "enable_fading", PROP_BOOLEAN, PROP_NONE); + prop = RNA_def_property(srna, "use_fade", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flags", GP_MULTIPLY_ENABLE_FADING); - RNA_def_property_ui_text(prop, "Enable Fading", "Enable fading"); + RNA_def_property_ui_text( + prop, "Enable Fade", "Fade the stroke thickness for each generated stroke"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); - prop = RNA_def_property(srna, "split_angle", PROP_FLOAT, PROP_NONE); + prop = RNA_def_property(srna, "split_angle", PROP_FLOAT, PROP_ANGLE); RNA_def_property_range(prop, 0, M_PI); + RNA_def_property_ui_range(prop, 0, M_PI, 10, 2); RNA_def_property_ui_text(prop, "Angle", "Split angle for segments"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); - prop = RNA_def_property(srna, "duplications", PROP_INT, PROP_NONE); - RNA_def_property_range(prop, 0, 10); - RNA_def_property_ui_text(prop, "Duplications", "How many copies of strokes be displayed"); + prop = RNA_def_property(srna, "duplicates", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "duplications"); + RNA_def_property_range(prop, 0, 999); + RNA_def_property_ui_range(prop, 1, 10, 1, 1); + RNA_def_property_ui_text(prop, "Duplicates", "How many copies of strokes be displayed"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); - prop = RNA_def_property(srna, "distance", PROP_FLOAT, PROP_NONE); - RNA_def_property_range(prop, 0, M_PI); + prop = RNA_def_property(srna, "distance", PROP_FLOAT, PROP_DISTANCE); + RNA_def_property_range(prop, -FLT_MAX, FLT_MAX); + RNA_def_property_ui_range(prop, 0.0, 1.0, 0.01, 3); RNA_def_property_ui_text(prop, "Distance", "Distance of duplications"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); prop = RNA_def_property(srna, "offset", PROP_FLOAT, PROP_NONE); - RNA_def_property_ui_range(prop, -1, 1, 0.1, 3); + RNA_def_property_ui_range(prop, -1, 1, 0.01, 3); RNA_def_property_ui_text(prop, "Offset", "Offset of duplicates. -1 to 1: inner to outer"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); @@ -1967,12 +2071,132 @@ static void rna_def_modifier_gpencilmultiply(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Opacity", "Fade influence of stroke's opacity"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); - prop = RNA_def_property(srna, "fading_center", PROP_FLOAT, PROP_NONE); + prop = RNA_def_property(srna, "fading_center", PROP_FLOAT, PROP_FACTOR); RNA_def_property_range(prop, 0, 1); + RNA_def_property_float_default(prop, 0.5); RNA_def_property_ui_text(prop, "Center", "Fade center"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); } +static void rna_def_modifier_gpencilvertexcolor(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + /* modes */ + static EnumPropertyItem vertexcol_mode_types_items[] = { + {GPPAINT_MODE_STROKE, "STROKE", 0, "Stroke", "Vertex Color affects to Stroke only"}, + {GPPAINT_MODE_FILL, "FILL", 0, "Fill", "Vertex Color affects to Fill only"}, + {GPPAINT_MODE_BOTH, "BOTH", 0, "Both", "Vertex Color affects to Stroke and Fill"}, + {0, NULL, 0, NULL, NULL}, + }; + + srna = RNA_def_struct(brna, "VertexcolorGpencilModifier", "GpencilModifier"); + RNA_def_struct_ui_text(srna, "Vertexcolor Modifier", "Vertex color modifier"); + RNA_def_struct_sdna(srna, "VertexcolorGpencilModifierData"); + RNA_def_struct_ui_icon(srna, ICON_MOD_NORMALEDIT); + + prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE); + RNA_def_property_ui_text(prop, "Object", "Parent object to define the center of the effect"); + RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK); + RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY); + RNA_def_property_pointer_funcs( + prop, NULL, "rna_VertexcolorGpencilModifier_object_set", NULL, NULL); + RNA_def_property_update(prop, 0, "rna_GpencilModifier_dependency_update"); + + prop = RNA_def_property(srna, "layer", PROP_STRING, PROP_NONE); + RNA_def_property_string_sdna(prop, NULL, "layername"); + RNA_def_property_ui_text(prop, "Layer", "Layer name"); + RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); + + prop = RNA_def_property(srna, "material", PROP_STRING, PROP_NONE); + RNA_def_property_string_sdna(prop, NULL, "materialname"); + RNA_def_property_ui_text(prop, "Material", "Material name"); + RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); + + prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE); + RNA_def_property_string_sdna(prop, NULL, "vgname"); + RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name for modulating the deform"); + RNA_def_property_string_funcs(prop, NULL, NULL, "rna_HookGpencilModifier_vgname_set"); + RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); + + prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "pass_index"); + RNA_def_property_range(prop, 0, 100); + RNA_def_property_ui_text(prop, "Pass", "Pass index"); + RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); + + prop = RNA_def_property(srna, "invert_layers", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_VERTEXCOL_INVERT_LAYER); + RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter"); + RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); + + prop = RNA_def_property(srna, "invert_materials", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_VERTEXCOL_INVERT_MATERIAL); + RNA_def_property_ui_text(prop, "Inverse Materials", "Inverse filter"); + RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); + + prop = RNA_def_property(srna, "invert_material_pass", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_VERTEXCOL_INVERT_PASS); + RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter"); + RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); + + prop = RNA_def_property(srna, "invert_vertex", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_VERTEXCOL_INVERT_VGROUP); + RNA_def_property_ui_text(prop, "Inverse Vertex Group", "Inverse filter"); + RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); + + prop = RNA_def_property(srna, "layer_pass", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "layer_pass"); + RNA_def_property_range(prop, 0, 100); + RNA_def_property_ui_text(prop, "Pass", "Layer pass index"); + RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); + + prop = RNA_def_property(srna, "invert_layer_pass", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_VERTEXCOL_INVERT_LAYERPASS); + RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter"); + RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); + + prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_FACTOR); + RNA_def_property_float_sdna(prop, NULL, "factor"); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_ui_text(prop, "Factor", "Factor of tinting"); + RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); + + prop = RNA_def_property(srna, "radius", PROP_FLOAT, PROP_DISTANCE); + RNA_def_property_float_sdna(prop, NULL, "radius"); + RNA_def_property_range(prop, 1e-6f, FLT_MAX); + RNA_def_property_ui_range(prop, 0.001f, FLT_MAX, 1, 3); + RNA_def_property_ui_text(prop, "Radius", "Defines the maximum distance of the effect"); + RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); + + /* Mode type. */ + prop = RNA_def_property(srna, "vertex_mode", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_bitflag_sdna(prop, NULL, "mode"); + RNA_def_property_enum_items(prop, vertexcol_mode_types_items); + RNA_def_property_ui_text(prop, "Mode", "Defines how vertex color affect to the strokes"); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); + + /* Color band */ + prop = RNA_def_property(srna, "colors", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "colorband"); + RNA_def_property_struct_type(prop, "ColorRamp"); + RNA_def_property_ui_text(prop, "Colors", "Color ramp used to define tinting colors"); + RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); + + prop = RNA_def_property(srna, "use_custom_curve", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_VERTEXCOL_CUSTOM_CURVE); + RNA_def_property_ui_text( + prop, "Custom Curve", "Use a custom curve to define vertex color effect along the strokes"); + RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); + + prop = RNA_def_property(srna, "curve", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "curve_intensity"); + RNA_def_property_ui_text(prop, "Curve", "Custom curve to apply effect"); + RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); +} + void RNA_def_greasepencil_modifier(BlenderRNA *brna) { StructRNA *srna; @@ -2038,7 +2262,7 @@ void RNA_def_greasepencil_modifier(BlenderRNA *brna) rna_def_modifier_gpenciltint(brna); rna_def_modifier_gpenciltime(brna); rna_def_modifier_gpencilcolor(brna); - rna_def_modifier_gpencilinstance(brna); + rna_def_modifier_gpencilarray(brna); rna_def_modifier_gpencilbuild(brna); rna_def_modifier_gpencilopacity(brna); rna_def_modifier_gpencillattice(brna); @@ -2046,6 +2270,7 @@ void RNA_def_greasepencil_modifier(BlenderRNA *brna) rna_def_modifier_gpencilhook(brna); rna_def_modifier_gpencilarmature(brna); rna_def_modifier_gpencilmultiply(brna); + rna_def_modifier_gpencilvertexcolor(brna); } #endif diff --git a/source/blender/makesrna/intern/rna_material.c b/source/blender/makesrna/intern/rna_material.c index a29031900ac..f206e0061fc 100644 --- a/source/blender/makesrna/intern/rna_material.c +++ b/source/blender/makesrna/intern/rna_material.c @@ -63,6 +63,7 @@ const EnumPropertyItem rna_enum_ramp_blend_items[] = { # include "MEM_guardedalloc.h" +# include "DNA_gpencil_types.h" # include "DNA_node_types.h" # include "DNA_object_types.h" # include "DNA_screen_types.h" @@ -111,16 +112,16 @@ static void rna_Material_update_previews(Main *UNUSED(bmain), static void rna_MaterialGpencil_update(Main *bmain, Scene *scene, PointerRNA *ptr) { Material *ma = (Material *)ptr->owner_id; - rna_Material_update(bmain, scene, ptr); - WM_main_add_notifier(NC_GPENCIL | ND_DATA, ma); -} -static void rna_MaterialGpencil_nopreview_update(Main *bmain, Scene *scene, PointerRNA *ptr) -{ - Material *ma = (Material *)ptr->owner_id; + /* Need set all caches as dirty. */ + for (Object *ob = bmain->objects.first; ob; ob = ob->id.next) { + if (ob->type == OB_GPENCIL) { + bGPdata *gpd = (bGPdata *)ob->data; + DEG_id_tag_update(&gpd->id, ID_RECALC_GEOMETRY); + } + } - rna_Material_update(bmain, scene, ptr); WM_main_add_notifier(NC_GPENCIL | ND_DATA, ma); } @@ -411,42 +412,45 @@ static void rna_def_material_greasepencil(BlenderRNA *brna) /* mode type styles */ static EnumPropertyItem gpcolordata_mode_types_items[] = { - {GP_STYLE_MODE_LINE, "LINE", 0, "Line", "Draw strokes using a continuous line"}, - {GP_STYLE_MODE_DOTS, "DOTS", 0, "Dots", "Draw strokes using separated dots"}, - {GP_STYLE_MODE_BOX, "BOX", 0, "Boxes", "Draw strokes using separated rectangle boxes"}, + {GP_MATERIAL_MODE_LINE, "LINE", 0, "Line", "Draw strokes using a continuous line"}, + {GP_MATERIAL_MODE_DOT, "DOTS", 0, "Dots", "Draw strokes using separated dots"}, + {GP_MATERIAL_MODE_SQUARE, "BOX", 0, "Squares", "Draw strokes using separated squares"}, {0, NULL, 0, NULL, NULL}, }; /* stroke styles */ static EnumPropertyItem stroke_style_items[] = { - {GP_STYLE_STROKE_STYLE_SOLID, "SOLID", 0, "Solid", "Draw strokes with solid color"}, - {GP_STYLE_STROKE_STYLE_TEXTURE, "TEXTURE", 0, "Texture", "Draw strokes using texture"}, + {GP_MATERIAL_STROKE_STYLE_SOLID, "SOLID", 0, "Solid", "Draw strokes with solid color"}, + {GP_MATERIAL_STROKE_STYLE_TEXTURE, "TEXTURE", 0, "Texture", "Draw strokes using texture"}, {0, NULL, 0, NULL, NULL}, }; /* fill styles */ static EnumPropertyItem fill_style_items[] = { - {GP_STYLE_FILL_STYLE_SOLID, "SOLID", 0, "Solid", "Fill area with solid color"}, - {GP_STYLE_FILL_STYLE_GRADIENT, "GRADIENT", 0, "Gradient", "Fill area with gradient color"}, - {GP_STYLE_FILL_STYLE_CHECKER, - "CHECKER", + {GP_MATERIAL_FILL_STYLE_SOLID, "SOLID", 0, "Solid", "Fill area with solid color"}, + {GP_MATERIAL_FILL_STYLE_GRADIENT, + "GRADIENT", 0, - "Checker Board", - "Fill area with checkerboard pattern"}, - {GP_STYLE_FILL_STYLE_TEXTURE, "TEXTURE", 0, "Texture", "Fill area with image texture"}, + "Gradient", + "Fill area with gradient color"}, + {GP_MATERIAL_FILL_STYLE_TEXTURE, "TEXTURE", 0, "Texture", "Fill area with image texture"}, {0, NULL, 0, NULL, NULL}, }; static EnumPropertyItem fill_gradient_items[] = { - {GP_STYLE_GRADIENT_LINEAR, "LINEAR", 0, "Linear", "Fill area with gradient color"}, - {GP_STYLE_GRADIENT_RADIAL, "RADIAL", 0, "Radial", "Fill area with radial gradient"}, + {GP_MATERIAL_GRADIENT_LINEAR, "LINEAR", 0, "Linear", "Fill area with gradient color"}, + {GP_MATERIAL_GRADIENT_RADIAL, "RADIAL", 0, "Radial", "Fill area with radial gradient"}, {0, NULL, 0, NULL, NULL}, }; static EnumPropertyItem alignment_draw_items[] = { - {GP_STYLE_FOLLOW_PATH, "PATH", 0, "Path", "Follow stroke drawing path and object rotation"}, - {GP_STYLE_FOLLOW_OBJ, "OBJECT", 0, "Object", "Follow object rotation only"}, - {GP_STYLE_FOLLOW_FIXED, + {GP_MATERIAL_FOLLOW_PATH, + "PATH", + 0, + "Path", + "Follow stroke drawing path and object rotation"}, + {GP_MATERIAL_FOLLOW_OBJ, "OBJECT", 0, "Object", "Follow object rotation only"}, + {GP_MATERIAL_FOLLOW_FIXED, "FIXED", 0, "Fixed", @@ -459,7 +463,7 @@ static void rna_def_material_greasepencil(BlenderRNA *brna) RNA_def_struct_ui_text(srna, "Grease Pencil Color", ""); RNA_def_struct_path_func(srna, "rna_GpencilColorData_path"); - prop = RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR_GAMMA); + prop = RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR); RNA_def_property_range(prop, 0.0, 1.0); RNA_def_property_float_sdna(prop, NULL, "stroke_rgba"); RNA_def_property_array(prop, 4); @@ -467,7 +471,7 @@ static void rna_def_material_greasepencil(BlenderRNA *brna) RNA_def_property_update(prop, NC_GPENCIL | ND_SHADING, "rna_MaterialGpencil_update"); /* Fill Drawing Color */ - prop = RNA_def_property(srna, "fill_color", PROP_FLOAT, PROP_COLOR_GAMMA); + prop = RNA_def_property(srna, "fill_color", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "fill_rgba"); RNA_def_property_array(prop, 4); RNA_def_property_range(prop, 0.0f, 1.0f); @@ -475,7 +479,7 @@ static void rna_def_material_greasepencil(BlenderRNA *brna) RNA_def_property_update(prop, NC_GPENCIL | ND_SHADING, "rna_MaterialGpencil_update"); /* Secondary Drawing Color */ - prop = RNA_def_property(srna, "mix_color", PROP_FLOAT, PROP_COLOR_GAMMA); + prop = RNA_def_property(srna, "mix_color", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "mix_rgba"); RNA_def_property_array(prop, 4); RNA_def_property_range(prop, 0.0f, 1.0f); @@ -483,51 +487,17 @@ static void rna_def_material_greasepencil(BlenderRNA *brna) RNA_def_property_update(prop, NC_GPENCIL | ND_SHADING, "rna_MaterialGpencil_update"); /* Mix factor */ - prop = RNA_def_property(srna, "mix_factor", PROP_FLOAT, PROP_NONE); + prop = RNA_def_property(srna, "mix_factor", PROP_FLOAT, PROP_FACTOR); RNA_def_property_float_sdna(prop, NULL, "mix_factor"); RNA_def_property_range(prop, 0.0f, 1.0f); - RNA_def_property_ui_text(prop, "Mix", "Mix Adjustment Factor"); + RNA_def_property_ui_text(prop, "Mix", "Mix Factor"); RNA_def_property_update(prop, NC_GPENCIL | ND_SHADING, "rna_MaterialGpencil_update"); /* Stroke Mix factor */ - prop = RNA_def_property(srna, "mix_stroke_factor", PROP_FLOAT, PROP_NONE); + prop = RNA_def_property(srna, "mix_stroke_factor", PROP_FLOAT, PROP_FACTOR); RNA_def_property_float_sdna(prop, NULL, "mix_stroke_factor"); RNA_def_property_range(prop, 0.0f, 1.0f); - RNA_def_property_ui_text(prop, "Mix", "Mix Stroke Color"); - RNA_def_property_update(prop, NC_GPENCIL | ND_SHADING, "rna_MaterialGpencil_update"); - - /* Scale factor for uv coordinates */ - prop = RNA_def_property(srna, "pattern_scale", PROP_FLOAT, PROP_COORDS); - RNA_def_property_float_sdna(prop, NULL, "gradient_scale"); - RNA_def_property_array(prop, 2); - RNA_def_property_ui_text(prop, "Scale", "Scale Factor for UV coordinates"); - RNA_def_property_update(prop, NC_GPENCIL | ND_SHADING, "rna_MaterialGpencil_update"); - - /* Shift factor to move pattern filling in 2d space */ - prop = RNA_def_property(srna, "pattern_shift", PROP_FLOAT, PROP_COORDS); - RNA_def_property_float_sdna(prop, NULL, "gradient_shift"); - RNA_def_property_array(prop, 2); - RNA_def_property_ui_text(prop, "Shift", "Shift filling pattern in 2d space"); - RNA_def_property_update(prop, NC_GPENCIL | ND_SHADING, "rna_MaterialGpencil_update"); - - /* Gradient angle */ - prop = RNA_def_property(srna, "pattern_angle", PROP_FLOAT, PROP_ANGLE); - RNA_def_property_float_sdna(prop, NULL, "gradient_angle"); - RNA_def_property_ui_text(prop, "Angle", "Pattern Orientation Angle"); - RNA_def_property_update(prop, NC_GPENCIL | ND_SHADING, "rna_MaterialGpencil_update"); - - /* Gradient radius */ - prop = RNA_def_property(srna, "pattern_radius", PROP_FLOAT, PROP_NONE); - RNA_def_property_float_sdna(prop, NULL, "gradient_radius"); - RNA_def_property_range(prop, 0.0001f, 10.0f); - RNA_def_property_ui_text(prop, "Radius", "Pattern Radius"); - RNA_def_property_update(prop, NC_GPENCIL | ND_SHADING, "rna_MaterialGpencil_update"); - - /* Box size */ - prop = RNA_def_property(srna, "pattern_gridsize", PROP_FLOAT, PROP_NONE); - RNA_def_property_float_sdna(prop, NULL, "pattern_gridsize"); - RNA_def_property_range(prop, 0.0001f, 10.0f); - RNA_def_property_ui_text(prop, "Size", "Box Size"); + RNA_def_property_ui_text(prop, "Mix", "Mix Stroke Factor"); RNA_def_property_update(prop, NC_GPENCIL | ND_SHADING, "rna_MaterialGpencil_update"); /* Texture angle */ @@ -566,68 +536,48 @@ static void rna_def_material_greasepencil(BlenderRNA *brna) /* Flags */ prop = RNA_def_property(srna, "hide", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_STYLE_COLOR_HIDE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_MATERIAL_HIDE); RNA_def_property_ui_icon(prop, ICON_HIDE_OFF, -1); RNA_def_property_ui_text(prop, "Hide", "Set color Visibility"); - RNA_def_property_update(prop, NC_GPENCIL | ND_SHADING, "rna_MaterialGpencil_nopreview_update"); + RNA_def_property_update(prop, NC_GPENCIL | ND_SHADING, "rna_MaterialGpencil_update"); prop = RNA_def_property(srna, "lock", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_STYLE_COLOR_LOCKED); + RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_MATERIAL_LOCKED); RNA_def_property_ui_icon(prop, ICON_UNLOCKED, 1); RNA_def_property_ui_text( prop, "Locked", "Protect color from further editing and/or frame changes"); - RNA_def_property_update(prop, NC_GPENCIL | ND_SHADING, "rna_MaterialGpencil_nopreview_update"); + RNA_def_property_update(prop, NC_GPENCIL | ND_SHADING, "rna_MaterialGpencil_update"); prop = RNA_def_property(srna, "ghost", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_STYLE_COLOR_ONIONSKIN); + RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_MATERIAL_ONIONSKIN); RNA_def_property_ui_icon(prop, ICON_GHOST_ENABLED, 0); RNA_def_property_ui_text( prop, "Show in Ghosts", "Display strokes using this color when showing onion skins"); - RNA_def_property_update(prop, NC_GPENCIL | ND_SHADING, "rna_MaterialGpencil_nopreview_update"); + RNA_def_property_update(prop, NC_GPENCIL | ND_SHADING, "rna_MaterialGpencil_update"); prop = RNA_def_property(srna, "texture_clamp", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_STYLE_COLOR_TEX_CLAMP); + RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_MATERIAL_TEX_CLAMP); RNA_def_property_ui_text(prop, "Clamp", "Do not repeat texture and clamp to one instance only"); RNA_def_property_update(prop, NC_GPENCIL | ND_SHADING, "rna_MaterialGpencil_update"); - prop = RNA_def_property(srna, "use_fill_texture_mix", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_STYLE_FILL_TEX_MIX); - RNA_def_property_ui_text(prop, "Mix Texture", "Mix texture image with filling color"); - RNA_def_property_update(prop, NC_GPENCIL | ND_SHADING, "rna_MaterialGpencil_update"); - - prop = RNA_def_property(srna, "use_stroke_texture_mix", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_STYLE_STROKE_TEX_MIX); - RNA_def_property_ui_text(prop, "Mix Texture", "Mix texture image with stroke color"); - RNA_def_property_update(prop, NC_GPENCIL | ND_SHADING, "rna_MaterialGpencil_update"); - prop = RNA_def_property(srna, "flip", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_STYLE_COLOR_FLIP_FILL); + RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_MATERIAL_FLIP_FILL); RNA_def_property_ui_text(prop, "Flip", "Flip filling colors"); RNA_def_property_update(prop, NC_GPENCIL | ND_SHADING, "rna_MaterialGpencil_update"); - prop = RNA_def_property(srna, "use_stroke_pattern", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_STYLE_STROKE_PATTERN); - RNA_def_property_ui_text(prop, "Pattern", "Use Stroke Texture as a pattern to apply color"); - RNA_def_property_update(prop, NC_GPENCIL | ND_SHADING, "rna_MaterialGpencil_update"); - - prop = RNA_def_property(srna, "use_fill_pattern", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_STYLE_FILL_PATTERN); - RNA_def_property_ui_text(prop, "Pattern", "Use Fill Texture as a pattern to apply color"); - RNA_def_property_update(prop, NC_GPENCIL | ND_SHADING, "rna_MaterialGpencil_update"); - prop = RNA_def_property(srna, "use_overlap_strokes", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_STYLE_DISABLE_STENCIL); + RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_MATERIAL_DISABLE_STENCIL); RNA_def_property_ui_text( prop, "Self Overlap", "Disable stencil and overlap self intersections with alpha materials"); RNA_def_property_update(prop, NC_GPENCIL | ND_SHADING, "rna_MaterialGpencil_update"); prop = RNA_def_property(srna, "show_stroke", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_STYLE_STROKE_SHOW); + RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_MATERIAL_STROKE_SHOW); RNA_def_property_ui_text(prop, "Show Stroke", "Show stroke lines of this material"); RNA_def_property_update(prop, NC_GPENCIL | ND_SHADING, "rna_MaterialGpencil_update"); prop = RNA_def_property(srna, "show_fill", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_STYLE_FILL_SHOW); + RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_MATERIAL_FILL_SHOW); RNA_def_property_ui_text(prop, "Show Fill", "Show stroke fills of this material"); RNA_def_property_update(prop, NC_GPENCIL | ND_SHADING, "rna_MaterialGpencil_update"); @@ -637,13 +587,13 @@ static void rna_def_material_greasepencil(BlenderRNA *brna) RNA_def_property_enum_items(prop, alignment_draw_items); RNA_def_property_ui_text( prop, "Alignment", "Defines how align Dots and Boxes with drawing path and object rotation"); - RNA_def_property_update(prop, NC_GPENCIL | ND_SHADING, "rna_MaterialGpencil_nopreview_update"); + RNA_def_property_update(prop, NC_GPENCIL | ND_SHADING, "rna_MaterialGpencil_update"); /* pass index for future compositing and editing tools */ prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_UNSIGNED); RNA_def_property_int_sdna(prop, NULL, "index"); RNA_def_property_ui_text(prop, "Pass Index", "Index number for the \"Color Index\" pass"); - RNA_def_property_update(prop, NC_GPENCIL | ND_SHADING, "rna_MaterialGpencil_nopreview_update"); + RNA_def_property_update(prop, NC_GPENCIL | ND_SHADING, "rna_MaterialGpencil_update"); /* mode type */ prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE); diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c index 9980051c112..78f5cfb60b2 100644 --- a/source/blender/makesrna/intern/rna_object.c +++ b/source/blender/makesrna/intern/rna_object.c @@ -85,6 +85,11 @@ const EnumPropertyItem rna_enum_object_mode_items[] = { ICON_GREASEPENCIL, "Draw", "Paint Grease Pencil Strokes"}, + {OB_MODE_VERTEX_GPENCIL, + "VERTEX_GPENCIL", + ICON_VPAINT_HLT, + "Vertex Paint", + "Grease Pencil Vertex Paint Strokes"}, {OB_MODE_WEIGHT_GPENCIL, "WEIGHT_GPENCIL", ICON_WPAINT_HLT, @@ -118,6 +123,11 @@ const EnumPropertyItem rna_enum_workspace_object_mode_items[] = { ICON_GREASEPENCIL, "Grease Pencil Draw", "Paint Grease Pencil Strokes"}, + {OB_MODE_VERTEX_GPENCIL, + "VERTEX_GPENCIL", + ICON_VPAINT_HLT, + "Grease Pencil Vertex Paint", + "Grease Pencil Vertex Paint Strokes"}, {OB_MODE_WEIGHT_GPENCIL, "WEIGHT_GPENCIL", ICON_WPAINT_HLT, @@ -343,6 +353,16 @@ static void rna_MaterialIndex_update(Main *UNUSED(bmain), Scene *UNUSED(scene), } } +static void rna_GPencil_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr) +{ + Object *ob = (Object *)ptr->owner_id; + if (ob && ob->type == OB_GPENCIL) { + bGPdata *gpd = (bGPdata *)ob->data; + DEG_id_tag_update(&gpd->id, ID_RECALC_GEOMETRY); + WM_main_add_notifier(NC_GPENCIL | NA_EDITED, NULL); + } +} + static void rna_Object_matrix_local_get(PointerRNA *ptr, float values[16]) { Object *ob = (Object *)ptr->owner_id; @@ -3067,6 +3087,13 @@ static void rna_def_object(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Display All Edges", "Display all edges for mesh objects"); RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL); + prop = RNA_def_property(srna, "use_grease_pencil_lights", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "dtx", OB_USE_GPENCIL_LIGHTS); + RNA_def_property_boolean_default(prop, true); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_ui_text(prop, "Use Lights", "Lights affect to grease pencil object"); + RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_GPencil_update"); + prop = RNA_def_property(srna, "show_transparent", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "dtx", OB_DRAWTRANSP); RNA_def_property_ui_text( @@ -3076,7 +3103,7 @@ static void rna_def_object(BlenderRNA *brna) prop = RNA_def_property(srna, "show_in_front", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "dtx", OB_DRAWXRAY); RNA_def_property_ui_text(prop, "In Front", "Make the object draw in front of others"); - RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL); + RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_GPencil_update"); /* pose */ prop = RNA_def_property(srna, "pose_library", PROP_POINTER, PROP_NONE); diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c index a427267926d..0ead133b3a8 100644 --- a/source/blender/makesrna/intern/rna_scene.c +++ b/source/blender/makesrna/intern/rna_scene.c @@ -733,14 +733,8 @@ static void rna_GPencilInterpolateSettings_type_set(PointerRNA *ptr, int value) } } -static void rna_Gpencil_selectmode_update(bContext *C, PointerRNA *ptr) +static void rna_Gpencil_extend_selection(bContext *C, PointerRNA *UNUSED(ptr)) { - ToolSettings *ts = (ToolSettings *)ptr->data; - /* If the mode is not Stroke, don't extend selection. */ - if ((ts->gpencil_selectmode_edit & GP_SELECTMODE_STROKE) == 0) { - return; - } - /* Extend selection to all points in all selected strokes. */ ViewLayer *view_layer = CTX_data_view_layer(C); Object *ob = OBACT(view_layer); @@ -762,9 +756,18 @@ static void rna_Gpencil_selectmode_update(bContext *C, PointerRNA *ptr) } } -static void rna_Gpencil_mask_point_update(Main *UNUSED(bmain), - Scene *UNUSED(scene), - PointerRNA *ptr) +static void rna_Gpencil_selectmode_update(bContext *C, PointerRNA *ptr) +{ + ToolSettings *ts = (ToolSettings *)ptr->data; + /* If the mode is not Stroke, don't extend selection. */ + if ((ts->gpencil_selectmode_edit & GP_SELECTMODE_STROKE) == 0) { + return; + } + + rna_Gpencil_extend_selection(C, ptr); +} + +static void rna_Gpencil_mask_point_update(bContext *UNUSED(C), PointerRNA *ptr) { ToolSettings *ts = (ToolSettings *)ptr->data; @@ -772,19 +775,17 @@ static void rna_Gpencil_mask_point_update(Main *UNUSED(bmain), ts->gpencil_selectmode_sculpt &= ~GP_SCULPT_MASK_SELECTMODE_SEGMENT; } -static void rna_Gpencil_mask_stroke_update(Main *UNUSED(bmain), - Scene *UNUSED(scene), - PointerRNA *ptr) +static void rna_Gpencil_mask_stroke_update(bContext *C, PointerRNA *ptr) { ToolSettings *ts = (ToolSettings *)ptr->data; ts->gpencil_selectmode_sculpt &= ~GP_SCULPT_MASK_SELECTMODE_POINT; ts->gpencil_selectmode_sculpt &= ~GP_SCULPT_MASK_SELECTMODE_SEGMENT; + + rna_Gpencil_extend_selection(C, ptr); } -static void rna_Gpencil_mask_segment_update(Main *UNUSED(bmain), - Scene *UNUSED(scene), - PointerRNA *ptr) +static void rna_Gpencil_mask_segment_update(bContext *UNUSED(C), PointerRNA *ptr) { ToolSettings *ts = (ToolSettings *)ptr->data; @@ -792,6 +793,38 @@ static void rna_Gpencil_mask_segment_update(Main *UNUSED(bmain), ts->gpencil_selectmode_sculpt &= ~GP_SCULPT_MASK_SELECTMODE_STROKE; } +static void rna_Gpencil_vertex_mask_point_update(bContext *C, PointerRNA *ptr) +{ + ToolSettings *ts = (ToolSettings *)ptr->data; + + ts->gpencil_selectmode_vertex &= ~GP_VERTEX_MASK_SELECTMODE_STROKE; + ts->gpencil_selectmode_vertex &= ~GP_VERTEX_MASK_SELECTMODE_SEGMENT; + + ED_gpencil_tag_scene_gpencil(CTX_data_scene(C)); +} + +static void rna_Gpencil_vertex_mask_stroke_update(bContext *C, PointerRNA *ptr) +{ + ToolSettings *ts = (ToolSettings *)ptr->data; + + ts->gpencil_selectmode_vertex &= ~GP_VERTEX_MASK_SELECTMODE_POINT; + ts->gpencil_selectmode_vertex &= ~GP_VERTEX_MASK_SELECTMODE_SEGMENT; + + rna_Gpencil_extend_selection(C, ptr); + + ED_gpencil_tag_scene_gpencil(CTX_data_scene(C)); +} + +static void rna_Gpencil_vertex_mask_segment_update(bContext *C, PointerRNA *ptr) +{ + ToolSettings *ts = (ToolSettings *)ptr->data; + + ts->gpencil_selectmode_vertex &= ~GP_VERTEX_MASK_SELECTMODE_POINT; + ts->gpencil_selectmode_vertex &= ~GP_VERTEX_MASK_SELECTMODE_STROKE; + + ED_gpencil_tag_scene_gpencil(CTX_data_scene(C)); +} + /* Read-only Iterator of all the scene objects. */ static void rna_Scene_objects_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) @@ -2873,6 +2906,18 @@ static void rna_def_tool_settings(BlenderRNA *brna) RNA_def_property_pointer_sdna(prop, NULL, "gp_paint"); RNA_def_property_ui_text(prop, "Grease Pencil Paint", ""); + prop = RNA_def_property(srna, "gpencil_vertex_paint", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "gp_vertexpaint"); + RNA_def_property_ui_text(prop, "Grease Pencil Vertex Paint", ""); + + prop = RNA_def_property(srna, "gpencil_sculpt_paint", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "gp_sculptpaint"); + RNA_def_property_ui_text(prop, "Grease Pencil Sculpt Paint", ""); + + prop = RNA_def_property(srna, "gpencil_weight_paint", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "gp_weightpaint"); + RNA_def_property_ui_text(prop, "Grease Pencil Weight Paint", ""); + prop = RNA_def_property(srna, "particle_edit", PROP_POINTER, PROP_NONE); RNA_def_property_pointer_sdna(prop, NULL, "particle"); RNA_def_property_ui_text(prop, "Particle Edit", ""); @@ -3190,6 +3235,7 @@ static void rna_def_tool_settings(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Selection Mask", "Only sculpt selected stroke points"); RNA_def_property_ui_icon(prop, ICON_GP_SELECT_POINTS, 0); RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE); RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_Gpencil_mask_point_update"); prop = RNA_def_property(srna, "use_gpencil_select_mask_stroke", PROP_BOOLEAN, PROP_NONE); @@ -3198,6 +3244,7 @@ static void rna_def_tool_settings(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Selection Mask", "Only sculpt selected stroke"); RNA_def_property_ui_icon(prop, ICON_GP_SELECT_STROKES, 0); RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE); RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_Gpencil_mask_stroke_update"); prop = RNA_def_property(srna, "use_gpencil_select_mask_segment", PROP_BOOLEAN, PROP_NONE); @@ -3207,8 +3254,41 @@ static void rna_def_tool_settings(BlenderRNA *brna) prop, "Selection Mask", "Only sculpt selected stroke points between other strokes"); RNA_def_property_ui_icon(prop, ICON_GP_SELECT_BETWEEN_STROKES, 0); RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE); RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_Gpencil_mask_segment_update"); + /* Grease Pencil - Select mode Vertex Paint */ + prop = RNA_def_property(srna, "use_gpencil_vertex_select_mask_point", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna( + prop, NULL, "gpencil_selectmode_vertex", GP_VERTEX_MASK_SELECTMODE_POINT); + RNA_def_property_ui_text(prop, "Selection Mask", "Only paint selected stroke points"); + RNA_def_property_ui_icon(prop, ICON_GP_SELECT_POINTS, 0); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE); + RNA_def_property_update( + prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_Gpencil_vertex_mask_point_update"); + + prop = RNA_def_property(srna, "use_gpencil_vertex_select_mask_stroke", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna( + prop, NULL, "gpencil_selectmode_vertex", GP_VERTEX_MASK_SELECTMODE_STROKE); + RNA_def_property_ui_text(prop, "Selection Mask", "Only paint selected stroke"); + RNA_def_property_ui_icon(prop, ICON_GP_SELECT_STROKES, 0); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE); + RNA_def_property_update( + prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_Gpencil_vertex_mask_stroke_update"); + + prop = RNA_def_property(srna, "use_gpencil_vertex_select_mask_segment", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna( + prop, NULL, "gpencil_selectmode_vertex", GP_VERTEX_MASK_SELECTMODE_SEGMENT); + RNA_def_property_ui_text( + prop, "Selection Mask", "Only paint selected stroke points between other strokes"); + RNA_def_property_ui_icon(prop, ICON_GP_SELECT_BETWEEN_STROKES, 0); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE); + RNA_def_property_update( + prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_Gpencil_vertex_mask_segment_update"); + /* Annotations - 2D Views Stroke Placement */ prop = RNA_def_property(srna, "annotation_stroke_placement_view2d", PROP_ENUM, PROP_NONE); RNA_def_property_enum_bitflag_sdna(prop, NULL, "gpencil_v2d_align"); @@ -6288,7 +6368,12 @@ static void rna_def_scene_render_data(BlenderRNA *brna) prop = RNA_def_property(srna, "simplify_gpencil_onplay", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "simplify_gpencil", SIMPLIFY_GPENCIL_ON_PLAY); RNA_def_property_ui_text( - prop, "Simplify Playback", "Simplify Grease Pencil only during animation playback"); + prop, "Playback Only", "Simplify Grease Pencil only during animation playback"); + RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_update"); + + prop = RNA_def_property(srna, "simplify_gpencil_antialiasing", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_negative_sdna(prop, NULL, "simplify_gpencil", SIMPLIFY_GPENCIL_AA); + RNA_def_property_ui_text(prop, "Antialiasing", "Use Antialiasing to smooth stroke edges"); RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_update"); prop = RNA_def_property(srna, "simplify_gpencil_view_fill", PROP_BOOLEAN, PROP_NONE); @@ -6296,26 +6381,15 @@ static void rna_def_scene_render_data(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Fill", "Display fill strokes in the viewport"); RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_update"); - prop = RNA_def_property(srna, "simplify_gpencil_remove_lines", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_negative_sdna( - prop, NULL, "simplify_gpencil", SIMPLIFY_GPENCIL_REMOVE_FILL_LINE); - RNA_def_property_ui_text(prop, "Disable Lines", "Display external lines of fill strokes"); - RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_update"); - - prop = RNA_def_property(srna, "simplify_gpencil_view_modifier", PROP_BOOLEAN, PROP_NONE); + prop = RNA_def_property(srna, "simplify_gpencil_modifier", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_negative_sdna( prop, NULL, "simplify_gpencil", SIMPLIFY_GPENCIL_MODIFIER); - RNA_def_property_ui_text(prop, "Disable Modifiers", "Display modifiers in the viewport"); + RNA_def_property_ui_text(prop, "Modifiers", "Display modifiers"); RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_update"); prop = RNA_def_property(srna, "simplify_gpencil_shader_fx", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_negative_sdna(prop, NULL, "simplify_gpencil", SIMPLIFY_GPENCIL_FX); - RNA_def_property_ui_text(prop, "Simplify Shaders", "Display Shader FX"); - RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_update"); - - prop = RNA_def_property(srna, "simplify_gpencil_blend", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_negative_sdna(prop, NULL, "simplify_gpencil", SIMPLIFY_GPENCIL_BLEND); - RNA_def_property_ui_text(prop, "Layers Blending", "Display blend layers"); + RNA_def_property_ui_text(prop, "ShadersFX", "Display Shader FX"); RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_update"); prop = RNA_def_property(srna, "simplify_gpencil_tint", PROP_BOOLEAN, PROP_NONE); diff --git a/source/blender/makesrna/intern/rna_sculpt_paint.c b/source/blender/makesrna/intern/rna_sculpt_paint.c index 14cfe9d29ab..743c47f4f48 100644 --- a/source/blender/makesrna/intern/rna_sculpt_paint.c +++ b/source/blender/makesrna/intern/rna_sculpt_paint.c @@ -57,59 +57,6 @@ const EnumPropertyItem rna_enum_particle_edit_hair_brush_items[] = { {0, NULL, 0, NULL, NULL}, }; -const EnumPropertyItem rna_enum_gpencil_sculpt_brush_items[] = { - {GP_SCULPT_TYPE_SMOOTH, "SMOOTH", ICON_GPBRUSH_SMOOTH, "Smooth", "Smooth stroke points"}, - {GP_SCULPT_TYPE_THICKNESS, - "THICKNESS", - ICON_GPBRUSH_THICKNESS, - "Thickness", - "Adjust thickness of strokes"}, - {GP_SCULPT_TYPE_STRENGTH, - "STRENGTH", - ICON_GPBRUSH_STRENGTH, - "Strength", - "Adjust color strength of strokes"}, - {GP_SCULPT_TYPE_RANDOMIZE, - "RANDOMIZE", - ICON_GPBRUSH_RANDOMIZE, - "Randomize", - "Introduce jitter/randomness into strokes"}, - {GP_SCULPT_TYPE_GRAB, - "GRAB", - ICON_GPBRUSH_GRAB, - "Grab", - "Translate the set of points initially within the brush circle"}, - {GP_SCULPT_TYPE_PUSH, - "PUSH", - ICON_GPBRUSH_PUSH, - "Push", - "Move points out of the way, as if combing them"}, - {GP_SCULPT_TYPE_TWIST, - "TWIST", - ICON_GPBRUSH_TWIST, - "Twist", - "Rotate points around the midpoint of the brush"}, - {GP_SCULPT_TYPE_PINCH, - "PINCH", - ICON_GPBRUSH_PINCH, - "Pinch", - "Pull points towards the midpoint of the brush"}, - {GP_SCULPT_TYPE_CLONE, - "CLONE", - ICON_GPBRUSH_CLONE, - "Clone", - "Paste copies of the strokes stored on the clipboard"}, - {0, NULL, 0, NULL, NULL}}; - -const EnumPropertyItem rna_enum_gpencil_weight_brush_items[] = { - {GP_SCULPT_TYPE_WEIGHT, - "WEIGHT", - ICON_GPBRUSH_WEIGHT, - "Weight", - "Weight Paint for Vertex Groups"}, - {0, NULL, 0, NULL, NULL}, -}; - #ifndef RNA_RUNTIME static const EnumPropertyItem rna_enum_gpencil_lock_axis_items[] = { {GP_LOCKAXIS_VIEW, @@ -135,6 +82,20 @@ static const EnumPropertyItem rna_enum_gpencil_lock_axis_items[] = { "Align strokes to current 3D cursor orientation"}, {0, NULL, 0, NULL, NULL}, }; + +static const EnumPropertyItem rna_enum_gpencil_paint_mode[] = { + {GPPAINT_FLAG_USE_MATERIAL, + "MATERIAL", + 0, + "Material", + "Paint using the active material base color"}, + {GPPAINT_FLAG_USE_VERTEXCOLOR, + "VERTEXCOLOR", + 0, + "Vertex Color", + "Paint the material with custom vertex color"}, + {0, NULL, 0, NULL, NULL}, +}; #endif const EnumPropertyItem rna_enum_symmetrize_direction_items[] = { @@ -384,6 +345,24 @@ static bool rna_Brush_mode_with_tool_poll(PointerRNA *ptr, PointerRNA value) } mode = OB_MODE_PAINT_GPENCIL; } + else if (paint_contains_brush_slot(&ts->gp_vertexpaint->paint, tslot, &slot_index)) { + if (slot_index != brush->gpencil_vertex_tool) { + return false; + } + mode = OB_MODE_VERTEX_GPENCIL; + } + else if (paint_contains_brush_slot(&ts->gp_sculptpaint->paint, tslot, &slot_index)) { + if (slot_index != brush->gpencil_sculpt_tool) { + return false; + } + mode = OB_MODE_SCULPT_GPENCIL; + } + else if (paint_contains_brush_slot(&ts->gp_weightpaint->paint, tslot, &slot_index)) { + if (slot_index != brush->gpencil_weight_tool) { + return false; + } + mode = OB_MODE_WEIGHT_GPENCIL; + } return brush->ob_mode & mode; } @@ -454,6 +433,21 @@ static char *rna_GpPaint_path(PointerRNA *UNUSED(ptr)) return BLI_strdup("tool_settings.gpencil_paint"); } +static char *rna_GpVertexPaint_path(PointerRNA *UNUSED(ptr)) +{ + return BLI_strdup("tool_settings.gpencil_vertex_paint"); +} + +static char *rna_GpSculptPaint_path(PointerRNA *UNUSED(ptr)) +{ + return BLI_strdup("tool_settings.gpencil_sculpt_paint"); +} + +static char *rna_GpWeightPaint_path(PointerRNA *UNUSED(ptr)) +{ + return BLI_strdup("tool_settings.gpencil_weight_paint"); +} + static char *rna_ParticleBrush_path(PointerRNA *UNUSED(ptr)) { return BLI_strdup("tool_settings.particle_edit.brush"); @@ -543,34 +537,11 @@ static bool rna_ImaPaint_detect_data(ImagePaintSettings *imapaint) return imapaint->missing_data == 0; } -static PointerRNA rna_GPencilSculptSettings_brush_get(PointerRNA *ptr) -{ - GP_Sculpt_Settings *gset = (GP_Sculpt_Settings *)ptr->data; - GP_Sculpt_Data *brush = NULL; - - if ((gset) && (gset->flag & GP_SCULPT_SETT_FLAG_WEIGHT_MODE)) { - if ((gset->weighttype >= GP_SCULPT_TYPE_WEIGHT) && (gset->weighttype < GP_SCULPT_TYPE_MAX)) { - brush = &gset->brush[gset->weighttype]; - } - } - else { - if ((gset->brushtype >= 0) && (gset->brushtype < GP_SCULPT_TYPE_WEIGHT)) { - brush = &gset->brush[gset->brushtype]; - } - } - return rna_pointer_inherit_refine(ptr, &RNA_GPencilSculptBrush, brush); -} - static char *rna_GPencilSculptSettings_path(PointerRNA *UNUSED(ptr)) { return BLI_strdup("tool_settings.gpencil_sculpt"); } -static char *rna_GPencilSculptBrush_path(PointerRNA *UNUSED(ptr)) -{ - return BLI_strdup("tool_settings.gpencil_sculpt.brush"); -} - static char *rna_GPencilSculptGuide_path(PointerRNA *UNUSED(ptr)) { return BLI_strdup("tool_settings.gpencil_sculpt.guide"); @@ -888,10 +859,46 @@ static void rna_def_uv_sculpt(BlenderRNA *brna) static void rna_def_gp_paint(BlenderRNA *brna) { StructRNA *srna; + PropertyRNA *prop; srna = RNA_def_struct(brna, "GpPaint", "Paint"); RNA_def_struct_path_func(srna, "rna_GpPaint_path"); RNA_def_struct_ui_text(srna, "Grease Pencil Paint", ""); + + /* Use vertex color (main swith). */ + prop = RNA_def_property(srna, "color_mode", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "mode"); + RNA_def_property_enum_items(prop, rna_enum_gpencil_paint_mode); + RNA_def_property_ui_text(prop, "Mode", "Paint Mode"); + RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); +} + +static void rna_def_gp_vertexpaint(BlenderRNA *brna) +{ + StructRNA *srna; + + srna = RNA_def_struct(brna, "GpVertexPaint", "Paint"); + RNA_def_struct_path_func(srna, "rna_GpVertexPaint_path"); + RNA_def_struct_ui_text(srna, "Grease Pencil Vertex Paint", ""); +} + +static void rna_def_gp_sculptpaint(BlenderRNA *brna) +{ + StructRNA *srna; + + srna = RNA_def_struct(brna, "GpSculptPaint", "Paint"); + RNA_def_struct_path_func(srna, "rna_GpSculptPaint_path"); + RNA_def_struct_ui_text(srna, "Grease Pencil Sculpt Paint", ""); +} + +static void rna_def_gp_weightpaint(BlenderRNA *brna) +{ + StructRNA *srna; + + srna = RNA_def_struct(brna, "GpWeightPaint", "Paint"); + RNA_def_struct_path_func(srna, "rna_GpWeightPaint_path"); + RNA_def_struct_ui_text(srna, "Grease Pencil Weight Paint", ""); } /* use for weight paint too */ @@ -1383,6 +1390,8 @@ static void rna_def_gpencil_sculpt(BlenderRNA *brna) {0, NULL, 0, NULL, NULL}, }; + UNUSED_VARS(prop_direction_items); + StructRNA *srna; PropertyRNA *prop; @@ -1390,60 +1399,15 @@ static void rna_def_gpencil_sculpt(BlenderRNA *brna) srna = RNA_def_struct(brna, "GPencilSculptSettings", NULL); RNA_def_struct_sdna(srna, "GP_Sculpt_Settings"); RNA_def_struct_path_func(srna, "rna_GPencilSculptSettings_path"); - RNA_def_struct_ui_text( - srna, "GPencil Sculpt Settings", "Properties for Grease Pencil stroke sculpting tool"); - - prop = RNA_def_property(srna, "sculpt_tool", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_sdna(prop, NULL, "brushtype"); - RNA_def_property_enum_items(prop, rna_enum_gpencil_sculpt_brush_items); - RNA_def_property_ui_text(prop, "Tool", ""); - RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); - RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, "rna_GPencil_update"); - - prop = RNA_def_property(srna, "weight_tool", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_sdna(prop, NULL, "weighttype"); - RNA_def_property_enum_items(prop, rna_enum_gpencil_weight_brush_items); - RNA_def_property_ui_text(prop, "Tool", "Tool for weight painting"); - RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); - RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, "rna_GPencil_update"); - - prop = RNA_def_property(srna, "brush", PROP_POINTER, PROP_NONE); - RNA_def_property_struct_type(prop, "GPencilSculptBrush"); - RNA_def_property_pointer_funcs(prop, "rna_GPencilSculptSettings_brush_get", NULL, NULL, NULL); - RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); - RNA_def_property_ui_text(prop, "Brush", ""); + RNA_def_struct_ui_text(srna, + "GPencil Sculpt Settings", + "General properties for Grease Pencil stroke sculpting tools"); prop = RNA_def_property(srna, "guide", PROP_POINTER, PROP_NONE); RNA_def_property_struct_type(prop, "GPencilSculptGuide"); RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); RNA_def_property_ui_text(prop, "Guide", ""); - prop = RNA_def_property(srna, "use_edit_position", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SCULPT_SETT_FLAG_APPLY_POSITION); - RNA_def_property_ui_text(prop, "Affect Position", "The brush affects the position of the point"); - RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); - RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); - - prop = RNA_def_property(srna, "use_edit_strength", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SCULPT_SETT_FLAG_APPLY_STRENGTH); - RNA_def_property_ui_text( - prop, "Affect Strength", "The brush affects the color strength of the point"); - RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); - RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); - - prop = RNA_def_property(srna, "use_edit_thickness", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SCULPT_SETT_FLAG_APPLY_THICKNESS); - RNA_def_property_ui_text( - prop, "Affect Thickness", "The brush affects the thickness of the point"); - RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); - RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); - - prop = RNA_def_property(srna, "use_edit_uv", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SCULPT_SETT_FLAG_APPLY_UV); - RNA_def_property_ui_text(prop, "Affect UV", "The brush affects the UV rotation of the point"); - RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); - RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); - prop = RNA_def_property(srna, "use_multiframe_falloff", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SCULPT_SETT_FLAG_FRAME_FALLOFF); RNA_def_property_ui_text( @@ -1459,6 +1423,13 @@ static void rna_def_gpencil_sculpt(BlenderRNA *brna) RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); + prop = RNA_def_property(srna, "use_scale_thickness", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SCULPT_SETT_FLAG_SCALE_THICKNESS); + RNA_def_property_ui_text( + prop, "Scale Stroke Thickness", "Scale the stroke thickness when transforming strokes"); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); + /* custom falloff curve */ prop = RNA_def_property(srna, "multiframe_falloff_curve", PROP_POINTER, PROP_NONE); RNA_def_property_pointer_sdna(prop, NULL, "cur_falloff"); @@ -1491,97 +1462,6 @@ static void rna_def_gpencil_sculpt(BlenderRNA *brna) RNA_def_property_float_default(prop, 0.1f); RNA_def_property_ui_text(prop, "Threshold", "Threshold for stroke intersections"); RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); - - /* brush */ - srna = RNA_def_struct(brna, "GPencilSculptBrush", NULL); - RNA_def_struct_sdna(srna, "GP_Sculpt_Data"); - RNA_def_struct_path_func(srna, "rna_GPencilSculptBrush_path"); - RNA_def_struct_ui_text(srna, "GPencil Sculpt Brush", "Stroke editing brush"); - - prop = RNA_def_property(srna, "size", PROP_INT, PROP_PIXEL); - RNA_def_property_range(prop, 1, GP_MAX_BRUSH_PIXEL_RADIUS); - RNA_def_property_ui_range(prop, 1, 500, 10, 3); - RNA_def_property_ui_text(prop, "Radius", "Radius of the brush in pixels"); - RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); - RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); - - prop = RNA_def_property(srna, "strength", PROP_FLOAT, PROP_FACTOR); - RNA_def_property_range(prop, 0.001, 1.0); - RNA_def_property_ui_text(prop, "Strength", "Brush strength"); - RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); - RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); - - prop = RNA_def_property(srna, "weight", PROP_FLOAT, PROP_FACTOR); - RNA_def_property_range(prop, 0.0, 1.0); - RNA_def_property_ui_text(prop, - "Weight", - "Target weight (define a maximum range limit for the weight. Any value " - "above will be clamped)"); - RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); - RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); - - prop = RNA_def_property(srna, "use_pressure_strength", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SCULPT_FLAG_USE_PRESSURE); - RNA_def_property_ui_icon(prop, ICON_STYLUS_PRESSURE, 0); - RNA_def_property_ui_text( - prop, "Strength Pressure", "Enable tablet pressure sensitivity for strength"); - RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); - RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); - - prop = RNA_def_property(srna, "use_pressure_radius", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SCULPT_FLAG_PRESSURE_RADIUS); - RNA_def_property_ui_icon(prop, ICON_STYLUS_PRESSURE, 0); - RNA_def_property_ui_text( - prop, "Radius Pressure", "Enable tablet pressure sensitivity for radius"); - RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); - RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); - - prop = RNA_def_property(srna, "use_falloff", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SCULPT_FLAG_USE_FALLOFF); - RNA_def_property_ui_text( - prop, "Use Falloff", "Strength of brush decays with distance from cursor"); - RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); - RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); - - prop = RNA_def_property(srna, "use_edit_pressure", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SCULPT_FLAG_SMOOTH_PRESSURE); - RNA_def_property_ui_text( - prop, "Affect Pressure", "Affect pressure values as well when smoothing strokes"); - RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); - RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); - - prop = RNA_def_property(srna, "direction", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag"); - RNA_def_property_enum_items(prop, prop_direction_items); - RNA_def_property_ui_text(prop, "Direction", ""); - RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); - RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); - - /* Cursor Color */ - static float default_1[3] = {1.0f, 0.6f, 0.6f}; - static float default_2[3] = {0.6f, 0.6f, 1.0f}; - - prop = RNA_def_property(srna, "cursor_color_add", PROP_FLOAT, PROP_COLOR_GAMMA); - RNA_def_property_float_sdna(prop, NULL, "curcolor_add"); - RNA_def_property_array(prop, 3); - RNA_def_property_range(prop, 0.0f, 1.0f); - RNA_def_property_float_array_default(prop, default_1); - RNA_def_property_ui_text(prop, "Cursor Add", "Color for the cursor for addition"); - RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); - - prop = RNA_def_property(srna, "cursor_color_sub", PROP_FLOAT, PROP_COLOR_GAMMA); - RNA_def_property_float_sdna(prop, NULL, "curcolor_sub"); - RNA_def_property_array(prop, 3); - RNA_def_property_range(prop, 0.0f, 1.0f); - RNA_def_property_float_array_default(prop, default_2); - RNA_def_property_ui_text(prop, "Cursor Sub", "Color for the cursor for subtraction"); - RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); - - prop = RNA_def_property(srna, "use_cursor", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SCULPT_FLAG_ENABLE_CURSOR); - RNA_def_property_boolean_default(prop, true); - RNA_def_property_ui_text(prop, "Enable Cursor", "Enable cursor on screen"); - RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); } void RNA_def_sculpt_paint(BlenderRNA *brna) @@ -1594,6 +1474,9 @@ void RNA_def_sculpt_paint(BlenderRNA *brna) rna_def_sculpt(brna); rna_def_uv_sculpt(brna); rna_def_gp_paint(brna); + rna_def_gp_vertexpaint(brna); + rna_def_gp_sculptpaint(brna); + rna_def_gp_weightpaint(brna); rna_def_vertex_paint(brna); rna_def_image_paint(brna); rna_def_particle_edit(brna); diff --git a/source/blender/makesrna/intern/rna_shader_fx.c b/source/blender/makesrna/intern/rna_shader_fx.c index cd4e027ce7c..f7f68d535ec 100644 --- a/source/blender/makesrna/intern/rna_shader_fx.c +++ b/source/blender/makesrna/intern/rna_shader_fx.c @@ -22,9 +22,10 @@ #include #include -#include "DNA_shader_fx_types.h" +#include "DNA_gpencil_types.h" #include "DNA_object_types.h" #include "DNA_scene_types.h" +#include "DNA_shader_fx_types.h" #include "MEM_guardedalloc.h" @@ -52,7 +53,6 @@ const EnumPropertyItem rna_enum_object_shaderfx_type_items[] = { "Apply different tint effects"}, {eShaderFxType_Flip, "FX_FLIP", ICON_SHADERFX, "Flip", "Flip image"}, {eShaderFxType_Glow, "FX_GLOW", ICON_SHADERFX, "Glow", "Create a glow effect"}, - {eShaderFxType_Light, "FX_LIGHT", ICON_SHADERFX, "Light", "Simulate illumination"}, {eShaderFxType_Pixel, "FX_PIXEL", ICON_SHADERFX, "Pixelate", "Pixelate image"}, {eShaderFxType_Rim, "FX_RIM", ICON_SHADERFX, "Rim", "Add a rim to the image"}, {eShaderFxType_Shadow, "FX_SHADOW", ICON_SHADERFX, "Shadow", "Create a shadow effect"}, @@ -87,6 +87,14 @@ static const EnumPropertyItem rna_enum_shaderfx_colorize_modes_items[] = { {eShaderFxColorizeMode_Custom, "CUSTOM", 0, "Custom", ""}, {0, NULL, 0, NULL, NULL}}; +static const EnumPropertyItem rna_enum_glow_blend_modes_items[] = { + {eGplBlendMode_Regular, "REGULAR", 0, "Regular", ""}, + {eGplBlendMode_Add, "ADD", 0, "Add", ""}, + {eGplBlendMode_Subtract, "SUBTRACT", 0, "Subtract", ""}, + {eGplBlendMode_Multiply, "MULTIPLY", 0, "Multiply", ""}, + {eGplBlendMode_Divide, "DIVIDE", 0, "Divide", ""}, + {0, NULL, 0, NULL, NULL}}; + #ifdef RNA_RUNTIME # include "BKE_shader_fx.h" @@ -117,11 +125,10 @@ static StructRNA *rna_ShaderFx_refine(struct PointerRNA *ptr) return &RNA_ShaderFxFlip; case eShaderFxType_Glow: return &RNA_ShaderFxGlow; - case eShaderFxType_Light: - return &RNA_ShaderFxLight; /* Default */ case eShaderFxType_None: case NUM_SHADER_FX_TYPES: + default: return &RNA_ShaderFx; } @@ -192,7 +199,6 @@ static void shaderfx_object_set(Object *self, Object **ob_p, int type, PointerRN shaderfx_object_set((Object *)ptr->owner_id, &tmd->_prop, _obtype, value); \ } -RNA_FX_OBJECT_SET(Light, object, OB_EMPTY); RNA_FX_OBJECT_SET(Shadow, object, OB_EMPTY); RNA_FX_OBJECT_SET(Swirl, object, OB_EMPTY); @@ -210,10 +216,10 @@ static void rna_def_shader_fx_blur(BlenderRNA *brna) RNA_def_struct_sdna(srna, "BlurShaderFxData"); RNA_def_struct_ui_icon(srna, ICON_SHADERFX); - prop = RNA_def_property(srna, "factor", PROP_INT, PROP_PIXEL); - RNA_def_property_int_sdna(prop, NULL, "radius"); - RNA_def_property_range(prop, 0, SHRT_MAX); - RNA_def_property_ui_text(prop, "Factor", "Factor of Blur"); + prop = RNA_def_property(srna, "size", PROP_FLOAT, PROP_XYZ); + RNA_def_property_float_sdna(prop, NULL, "radius"); + RNA_def_property_range(prop, 0.0f, FLT_MAX); + RNA_def_property_ui_text(prop, "Size", "Factor of Blur"); RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_ShaderFx_update"); prop = RNA_def_property(srna, "samples", PROP_INT, PROP_NONE); @@ -224,19 +230,15 @@ static void rna_def_shader_fx_blur(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Samples", "Number of Blur Samples (zero, disable blur)"); RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_ShaderFx_update"); - prop = RNA_def_property(srna, "coc", PROP_FLOAT, PROP_NONE); - RNA_def_property_float_sdna(prop, NULL, "coc"); - RNA_def_property_range(prop, 0.001f, 1.0f); - RNA_def_property_float_default(prop, 0.025f); - RNA_def_property_ui_text(prop, "Precision", "Define circle of confusion for depth of field"); + prop = RNA_def_property(srna, "rotation", PROP_FLOAT, PROP_ANGLE); + RNA_def_property_float_sdna(prop, NULL, "rotation"); + RNA_def_property_range(prop, -FLT_MAX, FLT_MAX); + RNA_def_property_ui_text(prop, "Rotation", "Rotation of the effect"); RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_ShaderFx_update"); prop = RNA_def_property(srna, "use_dof_mode", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", FX_BLUR_DOF_MODE); - RNA_def_property_ui_text(prop, - "Lock Focal Plane", - "Blur using focal plane distance as factor to simulate depth of field " - "effect (only in camera view)"); + RNA_def_property_ui_text(prop, "Use as Depth Of Field", "Blur using camera depth of field"); RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_ShaderFx_update"); } @@ -256,14 +258,14 @@ static void rna_def_shader_fx_colorize(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Factor", "Mix factor"); RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_ShaderFx_update"); - prop = RNA_def_property(srna, "low_color", PROP_FLOAT, PROP_COLOR_GAMMA); + prop = RNA_def_property(srna, "low_color", PROP_FLOAT, PROP_COLOR); RNA_def_property_range(prop, 0.0, 1.0); RNA_def_property_float_sdna(prop, NULL, "low_color"); RNA_def_property_array(prop, 4); RNA_def_property_ui_text(prop, "Low Color", "First color used for effect"); RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_ShaderFx_update"); - prop = RNA_def_property(srna, "high_color", PROP_FLOAT, PROP_COLOR_GAMMA); + prop = RNA_def_property(srna, "high_color", PROP_FLOAT, PROP_COLOR); RNA_def_property_range(prop, 0.0, 1.0); RNA_def_property_float_sdna(prop, NULL, "high_color"); RNA_def_property_array(prop, 4); @@ -334,17 +336,12 @@ static void rna_def_shader_fx_pixel(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Size", "Pixel size"); RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_ShaderFx_update"); - prop = RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR_GAMMA); + prop = RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR); RNA_def_property_range(prop, 0.0, 1.0); RNA_def_property_float_sdna(prop, NULL, "rgba"); RNA_def_property_array(prop, 4); RNA_def_property_ui_text(prop, "Color", "Color used for lines"); RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_ShaderFx_update"); - - prop = RNA_def_property(srna, "use_lines", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", FX_PIXEL_USE_LINES); - RNA_def_property_ui_text(prop, "Lines", "Display lines between pixels"); - RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_ShaderFx_update"); } static void rna_def_shader_fx_rim(BlenderRNA *brna) @@ -363,14 +360,14 @@ static void rna_def_shader_fx_rim(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Offset", "Offset of the rim"); RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_ShaderFx_update"); - prop = RNA_def_property(srna, "rim_color", PROP_FLOAT, PROP_COLOR_GAMMA); + prop = RNA_def_property(srna, "rim_color", PROP_FLOAT, PROP_COLOR); RNA_def_property_range(prop, 0.0, 1.0); RNA_def_property_float_sdna(prop, NULL, "rim_rgb"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Rim Color", "Color used for Rim"); RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_ShaderFx_update"); - prop = RNA_def_property(srna, "mask_color", PROP_FLOAT, PROP_COLOR_GAMMA); + prop = RNA_def_property(srna, "mask_color", PROP_FLOAT, PROP_COLOR); RNA_def_property_range(prop, 0.0, 1.0); RNA_def_property_float_sdna(prop, NULL, "mask_rgb"); RNA_def_property_array(prop, 3); @@ -433,7 +430,7 @@ static void rna_def_shader_fx_shadow(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Scale", "Offset of the shadow"); RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_ShaderFx_update"); - prop = RNA_def_property(srna, "shadow_color", PROP_FLOAT, PROP_COLOR_GAMMA); + prop = RNA_def_property(srna, "shadow_color", PROP_FLOAT, PROP_COLOR); RNA_def_property_range(prop, 0.0, 1.0); RNA_def_property_float_sdna(prop, NULL, "shadow_rgba"); RNA_def_property_array(prop, 4); @@ -507,14 +504,21 @@ static void rna_def_shader_fx_glow(BlenderRNA *brna) RNA_def_struct_sdna(srna, "GlowShaderFxData"); RNA_def_struct_ui_icon(srna, ICON_SHADERFX); - prop = RNA_def_property(srna, "glow_color", PROP_FLOAT, PROP_COLOR_GAMMA); + prop = RNA_def_property(srna, "glow_color", PROP_FLOAT, PROP_COLOR); RNA_def_property_range(prop, 0.0, 1.0); RNA_def_property_float_sdna(prop, NULL, "glow_color"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Glow Color", "Color used for generated glow"); RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_ShaderFx_update"); - prop = RNA_def_property(srna, "select_color", PROP_FLOAT, PROP_COLOR_GAMMA); + prop = RNA_def_property(srna, "opacity", PROP_FLOAT, PROP_FACTOR); + RNA_def_property_float_sdna(prop, NULL, "glow_color[3]"); + RNA_def_property_range(prop, 0.0, 1.0f); + RNA_def_property_ui_text(prop, "Opacity", "Effect Opacity"); + RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_update"); + RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_ShaderFx_update"); + + prop = RNA_def_property(srna, "select_color", PROP_FLOAT, PROP_COLOR); RNA_def_property_range(prop, 0.0, 1.0); RNA_def_property_float_sdna(prop, NULL, "select_color"); RNA_def_property_array(prop, 3); @@ -534,13 +538,11 @@ static void rna_def_shader_fx_glow(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Threshold", "Limit to select color for glow effect"); RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_ShaderFx_update"); - /* Use blur fields to make compatible with blur filter, - * but only makes public first array element. */ - prop = RNA_def_property(srna, "radius", PROP_INT, PROP_PIXEL); - RNA_def_property_int_sdna(prop, NULL, "blur[0]"); - RNA_def_property_range(prop, 0, SHRT_MAX); - RNA_def_property_ui_text( - prop, "Radius", "Number of pixels for blurring glow (set to 0 to disable)"); + /* Use blur fields to make compatible with blur filter */ + prop = RNA_def_property(srna, "size", PROP_FLOAT, PROP_XYZ); + RNA_def_property_float_sdna(prop, NULL, "blur"); + RNA_def_property_range(prop, 0.0f, FLT_MAX); + RNA_def_property_ui_text(prop, "Size", "Size of th effect"); RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_ShaderFx_update"); prop = RNA_def_property(srna, "samples", PROP_INT, PROP_NONE); @@ -551,9 +553,23 @@ static void rna_def_shader_fx_glow(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Samples", "Number of Blur Samples"); RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_ShaderFx_update"); - prop = RNA_def_property(srna, "use_alpha_mode", PROP_BOOLEAN, PROP_NONE); + prop = RNA_def_property(srna, "use_glow_under", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", FX_GLOW_USE_ALPHA); - RNA_def_property_ui_text(prop, "Use Alpha", "Glow only areas with alpha"); + RNA_def_property_ui_text( + prop, "Glow Under", "Glow only areas with alpha (not supported with Regular blend mode)"); + RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_ShaderFx_update"); + + prop = RNA_def_property(srna, "rotation", PROP_FLOAT, PROP_ANGLE); + RNA_def_property_float_sdna(prop, NULL, "rotation"); + RNA_def_property_range(prop, -FLT_MAX, FLT_MAX); + RNA_def_property_ui_text(prop, "Rotation", "Rotation of the effect"); + RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_ShaderFx_update"); + + /* blend mode */ + prop = RNA_def_property(srna, "blend_mode", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "blend_mode"); + RNA_def_property_enum_items(prop, rna_enum_glow_blend_modes_items); + RNA_def_property_ui_text(prop, "Blend Mode", "Blend mode"); RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_ShaderFx_update"); } @@ -614,38 +630,6 @@ static void rna_def_shader_fx_flip(BlenderRNA *brna) RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_ShaderFx_update"); } -static void rna_def_shader_fx_light(BlenderRNA *brna) -{ - StructRNA *srna; - PropertyRNA *prop; - - srna = RNA_def_struct(brna, "ShaderFxLight", "ShaderFx"); - RNA_def_struct_ui_text(srna, "Light Effect", "Light effect"); - RNA_def_struct_sdna(srna, "LightShaderFxData"); - RNA_def_struct_ui_icon(srna, ICON_SHADERFX); - - prop = RNA_def_property(srna, "energy", PROP_FLOAT, PROP_NONE); - RNA_def_property_float_sdna(prop, NULL, "energy"); - RNA_def_property_range(prop, 0, FLT_MAX); - RNA_def_property_ui_range(prop, 1, FLT_MAX, 1, 2); - RNA_def_property_ui_text(prop, "Energy", "Strength of light source"); - RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_ShaderFx_update"); - - prop = RNA_def_property(srna, "ambient", PROP_FLOAT, PROP_NONE); - RNA_def_property_float_sdna(prop, NULL, "ambient"); - RNA_def_property_range(prop, 0, FLT_MAX); - RNA_def_property_ui_range(prop, 0, FLT_MAX, 1, 2); - RNA_def_property_ui_text(prop, "Ambient", "Strength of ambient light source"); - RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_ShaderFx_update"); - - prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE); - RNA_def_property_ui_text(prop, "Object", "Object to determine light source location"); - RNA_def_property_pointer_funcs(prop, NULL, "rna_LightShaderFx_object_set", NULL, NULL); - RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK); - RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY); - RNA_def_property_update(prop, 0, "rna_ShaderFx_dependency_update"); -} - void RNA_def_shader_fx(BlenderRNA *brna) { StructRNA *srna; @@ -712,7 +696,6 @@ void RNA_def_shader_fx(BlenderRNA *brna) rna_def_shader_fx_glow(brna); rna_def_shader_fx_swirl(brna); rna_def_shader_fx_flip(brna); - rna_def_shader_fx_light(brna); } #endif diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index 8123d02714a..02dd625c7e3 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -1013,6 +1013,9 @@ static void rna_3DViewShading_type_update(Main *bmain, Scene *scene, PointerRNA } } + /* Update Gpencil. */ + rna_GPencil_update(bmain, scene, ptr); + bScreen *screen = (bScreen *)ptr->owner_id; for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) { for (SpaceLink *sl = sa->spacedata.first; sl; sl = sl->next) { @@ -3289,7 +3292,7 @@ static void rna_def_space_view3d_shading(BlenderRNA *brna) RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_View3DShading_color_type_itemf"); RNA_def_property_ui_text(prop, "Color", "Color Type"); RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); - RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL); + RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_GPencil_update"); prop = RNA_def_property(srna, "wireframe_color_type", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "wire_color_type"); @@ -3782,8 +3785,8 @@ static void rna_def_space_view3d_overlay(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Show Annotation", "Show annotations for this view"); RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL); - prop = RNA_def_property(srna, "use_gpencil_paper", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "gp_flag", V3D_GP_SHOW_PAPER); + prop = RNA_def_property(srna, "use_gpencil_fade_objects", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "gp_flag", V3D_GP_FADE_OBJECTS); RNA_def_property_ui_text( prop, "Fade Objects", @@ -3801,12 +3804,26 @@ static void rna_def_space_view3d_overlay(BlenderRNA *brna) prop, "Fade Layers", "Toggle fading of Grease Pencil layers except the active one"); RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_GPencil_update"); - prop = RNA_def_property(srna, "use_gpencil_fade_objects", PROP_BOOLEAN, PROP_NONE); + prop = RNA_def_property(srna, "use_gpencil_fade_gp_objects", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "gp_flag", V3D_GP_FADE_NOACTIVE_GPENCIL); RNA_def_property_ui_text( prop, "Fade Grease Pencil Objects", "Fade Grease Pencil Objects, except the active one"); RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_GPencil_update"); + prop = RNA_def_property(srna, "use_gpencil_show_directions", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "gp_flag", V3D_GP_SHOW_STROKE_DIRECTION); + RNA_def_property_ui_text(prop, + "Stroke Direction", + "Show stroke drawing direction with a bigger green dot (start) " + "and smaller red dot (end) points"); + RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_GPencil_update"); + + prop = RNA_def_property(srna, "use_gpencil_show_material_name", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "gp_flag", V3D_GP_SHOW_MATERIAL_NAME); + RNA_def_property_ui_text( + prop, "Stroke Material Name", "Show material name assigned to each stroke"); + RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_GPencil_update"); + prop = RNA_def_property(srna, "gpencil_grid_opacity", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "overlay.gpencil_grid_opacity"); RNA_def_property_range(prop, 0.1f, 1.0f); @@ -3814,7 +3831,7 @@ static void rna_def_space_view3d_overlay(BlenderRNA *brna) RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL); /* Paper opacity factor */ - prop = RNA_def_property(srna, "gpencil_paper_opacity", PROP_FLOAT, PROP_NONE); + prop = RNA_def_property(srna, "gpencil_fade_objects", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "overlay.gpencil_paper_opacity"); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Opacity", "Fade factor"); @@ -3832,12 +3849,12 @@ static void rna_def_space_view3d_overlay(BlenderRNA *brna) /* show edit lines */ prop = RNA_def_property(srna, "use_gpencil_edit_lines", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "gp_flag", V3D_GP_SHOW_EDIT_LINES); - RNA_def_property_ui_text(prop, "Show Edit Lines", "Show edit lines when editing strokes"); + RNA_def_property_ui_text(prop, "Show Edit Lines", "Show Edit Lines when editing strokes"); RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_GPencil_update"); prop = RNA_def_property(srna, "use_gpencil_multiedit_line_only", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "gp_flag", V3D_GP_SHOW_MULTIEDIT_LINES); - RNA_def_property_ui_text(prop, "Lines Only", "Only show edit lines for additional frames"); + RNA_def_property_ui_text(prop, "Lines Only", "Show Edit Lines only in multiframe"); RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_GPencil_update"); /* main grease pencil onion switch */ @@ -3848,12 +3865,20 @@ static void rna_def_space_view3d_overlay(BlenderRNA *brna) RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_GPencil_update"); /* vertex opacity */ - prop = RNA_def_property(srna, "vertex_opacity", PROP_FLOAT, PROP_NONE); + prop = RNA_def_property(srna, "vertex_opacity", PROP_FLOAT, PROP_FACTOR); RNA_def_property_float_sdna(prop, NULL, "vertex_opacity"); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Vertex Opacity", "Opacity for edit vertices"); RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0); RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, "rna_GPencil_update"); + + /* Vertex Paint opacity factor */ + prop = RNA_def_property(srna, "gpencil_vertex_paint_opacity", PROP_FLOAT, PROP_FACTOR); + RNA_def_property_float_sdna(prop, NULL, "overlay.gpencil_vertex_paint_opacity"); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_float_default(prop, 1.0f); + RNA_def_property_ui_text(prop, "Opacity", "Vertex Paint mix factor"); + RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_GPencil_update"); } static void rna_def_space_view3d(BlenderRNA *brna) diff --git a/source/blender/makesrna/intern/rna_ui_api.c b/source/blender/makesrna/intern/rna_ui_api.c index 527df695f5b..8b112031ada 100644 --- a/source/blender/makesrna/intern/rna_ui_api.c +++ b/source/blender/makesrna/intern/rna_ui_api.c @@ -152,8 +152,10 @@ static void rna_uiItemR_with_popover(uiLayout *layout, RNA_warning("property not found: %s.%s", RNA_struct_identifier(ptr->type), propname); return; } - if (RNA_property_type(prop) != PROP_ENUM) { - RNA_warning("property is not an enum: %s.%s", RNA_struct_identifier(ptr->type), propname); + if ((RNA_property_type(prop) != PROP_ENUM) && + !ELEM(RNA_property_subtype(prop), PROP_COLOR, PROP_COLOR_GAMMA)) { + RNA_warning( + "property is not an enum or color: %s.%s", RNA_struct_identifier(ptr->type), propname); return; } int flag = 0; diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c index 566305ad1c7..7250f8a2d59 100644 --- a/source/blender/makesrna/intern/rna_userdef.c +++ b/source/blender/makesrna/intern/rna_userdef.c @@ -5082,15 +5082,6 @@ static void rna_def_userdef_system(BlenderRNA *brna) {0, NULL, 0, NULL, NULL}, }; - static const EnumPropertyItem multi_sample_levels[] = { - {USER_MULTISAMPLE_NONE, "NONE", 0, "No MultiSample", "Do not use OpenGL MultiSample"}, - {USER_MULTISAMPLE_2, "2", 0, "MultiSample: 2", "Use 2x OpenGL MultiSample"}, - {USER_MULTISAMPLE_4, "4", 0, "MultiSample: 4", "Use 4x OpenGL MultiSample"}, - {USER_MULTISAMPLE_8, "8", 0, "MultiSample: 8", "Use 8x OpenGL MultiSample"}, - {USER_MULTISAMPLE_16, "16", 0, "MultiSample: 16", "Use 16x OpenGL MultiSample"}, - {0, NULL, 0, NULL, NULL}, - }; - static const EnumPropertyItem image_draw_methods[] = { {IMAGE_DRAW_METHOD_AUTO, "AUTO", @@ -5175,16 +5166,6 @@ static void rna_def_userdef_system(BlenderRNA *brna) "Enable Edit-Mode edge smoothing, reducing aliasing, requires restart"); RNA_def_property_update(prop, 0, "rna_userdef_dpi_update"); - /* grease pencil anti-aliasing */ - prop = RNA_def_property(srna, "gpencil_multi_sample", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_bitflag_sdna(prop, NULL, "gpencil_multisamples"); - RNA_def_property_enum_items(prop, multi_sample_levels); - RNA_def_property_ui_text( - prop, - "Gpencil MultiSample", - "Enable Grease Pencil OpenGL multi-sampling, only for systems that support it"); - RNA_def_property_update(prop, 0, "rna_userdef_dpi_update"); - prop = RNA_def_property(srna, "use_region_overlap", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "uiflag2", USER_REGION_OVERLAP); RNA_def_property_ui_text( -- cgit v1.2.3