diff options
author | Antonioya <blendergit@gmail.com> | 2019-03-25 19:02:42 +0300 |
---|---|---|
committer | Antonioya <blendergit@gmail.com> | 2019-03-25 19:06:07 +0300 |
commit | 7021bd527380b4d87cf48057f0039509326b03dd (patch) | |
tree | 55126437da17d736a789d236c8a98d199a1e6260 /source/blender/editors/gpencil/gpencil_utils.c | |
parent | 84240ebb3ebde58f6bfba256e49d37697fb6bc9f (diff) |
GPencil: Only brushes with pinned materials have materials
Using GP_BRUSH_MATERIAL_PINNED to switch between active material and brush material, instead of updating all brushes on active material changes. This will allow brushes to have no material and therefore to not inflate the user count.
This fix T62465.
Patch contributed by @matc
Reviewers: @brecht @antoniov @billreynish @mendio
Diffstat (limited to 'source/blender/editors/gpencil/gpencil_utils.c')
-rw-r--r-- | source/blender/editors/gpencil/gpencil_utils.c | 59 |
1 files changed, 24 insertions, 35 deletions
diff --git a/source/blender/editors/gpencil/gpencil_utils.c b/source/blender/editors/gpencil/gpencil_utils.c index 79a92c5a8de..ab116f115cc 100644 --- a/source/blender/editors/gpencil/gpencil_utils.c +++ b/source/blender/editors/gpencil/gpencil_utils.c @@ -1341,17 +1341,6 @@ void ED_gpencil_add_defaults(bContext *C, Object *ob) Main *bmain = CTX_data_main(C); ToolSettings *ts = CTX_data_tool_settings(C); - /* first try to reuse default material */ - if (ob->actcol > 0) { - Material *ma = give_current_material(ob, ob->actcol); - if ((ma) && (ma->gp_style == NULL)) { - BKE_material_init_gpencil_settings(ma); - } - } - - /* ensure color exist */ - BKE_gpencil_material_ensure(bmain, ob); - BKE_paint_ensure(ts, (Paint **)&ts->gp_paint); Paint *paint = &ts->gp_paint->paint; /* if not exist, create a new one */ @@ -1360,6 +1349,9 @@ void ED_gpencil_add_defaults(bContext *C, Object *ob) BKE_brush_gpencil_presets(C); } + /* ensure a color exists and is assigned to object */ + BKE_gpencil_current_input_toolsettings_material(bmain, ob, ts); + /* ensure multiframe falloff curve */ if (ts->gp_sculpt.cur_falloff == NULL) { ts->gp_sculpt.cur_falloff = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f); @@ -1728,30 +1720,27 @@ static void gp_brush_cursor_draw(bContext *C, int x, int y, void *customdata) } /* get current drawing color */ - ma = BKE_gpencil_get_material_from_brush(brush); - if (ma == NULL) { - BKE_gpencil_material_ensure(bmain, ob); - /* assign the first material to the brush */ - ma = give_current_material(ob, 1); - brush->gpencil_settings->material = ma; - } - gp_style = ma->gp_style; - - /* after some testing, display the size of the brush is not practical because - * is too disruptive and the size of cursor does not change with zoom factor. - * The decision was to use a fix size, instead of brush->thickness value. - */ - if ((gp_style) && (GPENCIL_PAINT_MODE(gpd)) && - ((brush->gpencil_settings->flag & GP_BRUSH_STABILIZE_MOUSE) == 0) && - ((brush->gpencil_settings->flag & GP_BRUSH_STABILIZE_MOUSE_TEMP) == 0) && - (brush->gpencil_tool == GPAINT_TOOL_DRAW)) - { - radius = 2.0f; - copy_v3_v3(color, gp_style->stroke_rgba); - } - else { - radius = 5.0f; - copy_v3_v3(color, brush->add_col); + ma = BKE_gpencil_get_material_for_brush(ob, brush); + + if (ma) { + gp_style = ma->gp_style; + + /* after some testing, display the size of the brush is not practical because + * is too disruptive and the size of cursor does not change with zoom factor. + * The decision was to use a fix size, instead of brush->thickness value. + */ + if ((gp_style) && (GPENCIL_PAINT_MODE(gpd)) && + ((brush->gpencil_settings->flag & GP_BRUSH_STABILIZE_MOUSE) == 0) && + ((brush->gpencil_settings->flag & GP_BRUSH_STABILIZE_MOUSE_TEMP) == 0) && + (brush->gpencil_tool == GPAINT_TOOL_DRAW)) + { + radius = 2.0f; + copy_v3_v3(color, gp_style->stroke_rgba); + } + else { + radius = 5.0f; + copy_v3_v3(color, brush->add_col); + } } } |