Fix Sculpt tools showing the cursor of the previous active brush
When using a tool that is not a brush, the previously used brush preset will still be active in the tool settings, so the cursor will draw its custom reviews. This checks if the current active tool is a brush before drawing its previews. If it is not a brush tools, it draws a default white cursor. Reviewed By: sergey Differential Revision: https://developer.blender.org/D9418
This commit is contained in:
parent
01a614c699
commit
d70cfb90e0
|
@ -1324,6 +1324,13 @@ static bool paint_cursor_context_init(bContext *C,
|
|||
copy_v3_fl(pcontext->outline_col, 0.8f);
|
||||
}
|
||||
|
||||
const bool is_brush_tool = PAINT_brush_tool_poll(C);
|
||||
if (!is_brush_tool) {
|
||||
/* Use a default color for tools that are not brushes. */
|
||||
pcontext->outline_alpha = 0.8f;
|
||||
copy_v3_fl(pcontext->outline_col, 0.8f);
|
||||
}
|
||||
|
||||
pcontext->is_stroke_active = pcontext->ups->stroke_active;
|
||||
|
||||
return true;
|
||||
|
@ -1610,9 +1617,11 @@ static void paint_cursor_draw_3d_view_brush_cursor_inactive(PaintCursorContext *
|
|||
pcontext->radius);
|
||||
}
|
||||
|
||||
const bool is_brush_tool = PAINT_brush_tool_poll(pcontext->C);
|
||||
|
||||
/* Pose brush updates and rotation origins. */
|
||||
|
||||
if (brush->sculpt_tool == SCULPT_TOOL_POSE) {
|
||||
if (is_brush_tool && brush->sculpt_tool == SCULPT_TOOL_POSE) {
|
||||
/* Just after switching to the Pose Brush, the active vertex can be the same and the
|
||||
* cursor won't be tagged to update, so always initialize the preview chain if it is
|
||||
* null before drawing it. */
|
||||
|
@ -1645,7 +1654,7 @@ static void paint_cursor_draw_3d_view_brush_cursor_inactive(PaintCursorContext *
|
|||
2);
|
||||
}
|
||||
|
||||
if (brush->sculpt_tool == SCULPT_TOOL_BOUNDARY) {
|
||||
if (is_brush_tool && brush->sculpt_tool == SCULPT_TOOL_BOUNDARY) {
|
||||
paint_cursor_preview_boundary_data_update(pcontext, update_previews);
|
||||
paint_cursor_preview_boundary_data_pivot_draw(pcontext);
|
||||
}
|
||||
|
@ -1666,17 +1675,17 @@ static void paint_cursor_draw_3d_view_brush_cursor_inactive(PaintCursorContext *
|
|||
GPU_matrix_mul(pcontext->vc.obact->obmat);
|
||||
|
||||
/* Drawing Cursor overlays in 3D object space. */
|
||||
if (brush->sculpt_tool == SCULPT_TOOL_GRAB && (brush->flag & BRUSH_GRAB_ACTIVE_VERTEX)) {
|
||||
if (is_brush_tool && brush->sculpt_tool == SCULPT_TOOL_GRAB && (brush->flag & BRUSH_GRAB_ACTIVE_VERTEX)) {
|
||||
SCULPT_geometry_preview_lines_update(pcontext->C, pcontext->ss, pcontext->radius);
|
||||
sculpt_geometry_preview_lines_draw(
|
||||
pcontext->pos, pcontext->brush, pcontext->is_multires, pcontext->ss);
|
||||
}
|
||||
|
||||
if (brush->sculpt_tool == SCULPT_TOOL_POSE) {
|
||||
if (is_brush_tool && brush->sculpt_tool == SCULPT_TOOL_POSE) {
|
||||
paint_cursor_pose_brush_segments_draw(pcontext);
|
||||
}
|
||||
|
||||
if (brush->sculpt_tool == SCULPT_TOOL_BOUNDARY) {
|
||||
if (is_brush_tool && brush->sculpt_tool == SCULPT_TOOL_BOUNDARY) {
|
||||
SCULPT_boundary_edges_preview_draw(
|
||||
pcontext->pos, pcontext->ss, pcontext->outline_col, pcontext->outline_alpha);
|
||||
SCULPT_boundary_pivot_line_preview_draw(pcontext->pos, pcontext->ss);
|
||||
|
@ -1692,7 +1701,7 @@ static void paint_cursor_draw_3d_view_brush_cursor_inactive(PaintCursorContext *
|
|||
paint_cursor_draw_main_inactive_cursor(pcontext);
|
||||
|
||||
/* Cloth brush local simulation areas. */
|
||||
if (brush->sculpt_tool == SCULPT_TOOL_CLOTH &&
|
||||
if (is_brush_tool && brush->sculpt_tool == SCULPT_TOOL_CLOTH &&
|
||||
brush->cloth_simulation_area_type != BRUSH_CLOTH_SIMULATION_AREA_GLOBAL) {
|
||||
const float white[3] = {1.0f, 1.0f, 1.0f};
|
||||
const float zero_v[3] = {0.0f};
|
||||
|
@ -1704,7 +1713,7 @@ static void paint_cursor_draw_3d_view_brush_cursor_inactive(PaintCursorContext *
|
|||
}
|
||||
|
||||
/* Layer brush height. */
|
||||
if (brush->sculpt_tool == SCULPT_TOOL_LAYER) {
|
||||
if (is_brush_tool && brush->sculpt_tool == SCULPT_TOOL_LAYER) {
|
||||
SCULPT_layer_brush_height_preview_draw(pcontext->pos,
|
||||
brush,
|
||||
pcontext->radius,
|
||||
|
|
|
@ -87,7 +87,7 @@ struct ViewContext *paint_stroke_view_context(struct PaintStroke *stroke);
|
|||
void *paint_stroke_mode_data(struct PaintStroke *stroke);
|
||||
float paint_stroke_distance_get(struct PaintStroke *stroke);
|
||||
void paint_stroke_set_mode_data(struct PaintStroke *stroke, void *mode_data);
|
||||
bool paint_poll(struct bContext *C);
|
||||
bool PAINT_brush_tool_poll(struct bContext *C);
|
||||
void paint_cursor_start(struct Paint *p, bool (*poll)(struct bContext *C));
|
||||
void paint_cursor_delete_textures(void);
|
||||
|
||||
|
|
|
@ -1462,7 +1462,7 @@ int paint_stroke_modal(bContext *C, wmOperator *op, const wmEvent *event)
|
|||
|
||||
if (paint_supports_smooth_stroke(br, mode)) {
|
||||
stroke->stroke_cursor = WM_paint_cursor_activate(
|
||||
SPACE_TYPE_ANY, RGN_TYPE_ANY, paint_poll, paint_draw_smooth_cursor, stroke);
|
||||
SPACE_TYPE_ANY, RGN_TYPE_ANY, PAINT_brush_tool_poll, paint_draw_smooth_cursor, stroke);
|
||||
}
|
||||
|
||||
stroke->stroke_init = true;
|
||||
|
@ -1489,7 +1489,7 @@ int paint_stroke_modal(bContext *C, wmOperator *op, const wmEvent *event)
|
|||
|
||||
if (br->flag & BRUSH_LINE) {
|
||||
stroke->stroke_cursor = WM_paint_cursor_activate(
|
||||
SPACE_TYPE_ANY, RGN_TYPE_ANY, paint_poll, paint_draw_line_cursor, stroke);
|
||||
SPACE_TYPE_ANY, RGN_TYPE_ANY, PAINT_brush_tool_poll, paint_draw_line_cursor, stroke);
|
||||
}
|
||||
|
||||
first_dab = true;
|
||||
|
@ -1659,7 +1659,7 @@ void paint_stroke_set_mode_data(PaintStroke *stroke, void *mode_data)
|
|||
stroke->mode_data = mode_data;
|
||||
}
|
||||
|
||||
bool paint_poll(bContext *C)
|
||||
bool PAINT_brush_tool_poll(bContext *C)
|
||||
{
|
||||
Paint *p = BKE_paint_get_active_from_context(C);
|
||||
Object *ob = CTX_data_active_object(C);
|
||||
|
|
|
@ -6602,7 +6602,7 @@ bool SCULPT_poll_view3d(bContext *C)
|
|||
|
||||
bool SCULPT_poll(bContext *C)
|
||||
{
|
||||
return SCULPT_mode_poll(C) && paint_poll(C);
|
||||
return SCULPT_mode_poll(C) && PAINT_brush_tool_poll(C);
|
||||
}
|
||||
|
||||
static const char *sculpt_tool_name(Sculpt *sd)
|
||||
|
|
Loading…
Reference in New Issue