diff options
-rw-r--r-- | source/blender/editors/gpencil/annotate_paint.c | 1 | ||||
-rw-r--r-- | source/blender/editors/gpencil/gpencil_paint.c | 7 | ||||
-rw-r--r-- | source/blender/editors/gpencil/gpencil_utils.c | 1 | ||||
-rw-r--r-- | source/blender/editors/physics/particle_edit.c | 7 | ||||
-rw-r--r-- | source/blender/editors/sculpt_paint/paint_cursor.c | 21 | ||||
-rw-r--r-- | source/blender/editors/sculpt_paint/paint_image.c | 6 | ||||
-rw-r--r-- | source/blender/editors/sculpt_paint/paint_stroke.c | 12 | ||||
-rw-r--r-- | source/blender/editors/sculpt_paint/sculpt_uv.c | 4 | ||||
-rw-r--r-- | source/blender/editors/transform/transform.c | 30 | ||||
-rw-r--r-- | source/blender/python/intern/bpy_rna_callback.c | 5 | ||||
-rw-r--r-- | source/blender/windowmanager/WM_api.h | 1 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_draw.c | 13 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_operators.c | 14 | ||||
-rw-r--r-- | source/blender/windowmanager/wm.h | 3 |
14 files changed, 99 insertions, 26 deletions
diff --git a/source/blender/editors/gpencil/annotate_paint.c b/source/blender/editors/gpencil/annotate_paint.c index 31c66ac8d55..57be09d807c 100644 --- a/source/blender/editors/gpencil/annotate_paint.c +++ b/source/blender/editors/gpencil/annotate_paint.c @@ -1458,6 +1458,7 @@ static void gpencil_draw_toggle_eraser_cursor(bContext *C, tGPsdata *p, short en /* enable cursor */ p->erasercursor = WM_paint_cursor_activate( CTX_wm_manager(C), + SPACE_TYPE_ANY, RGN_TYPE_ANY, NULL, /* XXX */ gpencil_draw_eraser, p); } diff --git a/source/blender/editors/gpencil/gpencil_paint.c b/source/blender/editors/gpencil/gpencil_paint.c index 711f77c5890..4e45db6aa76 100644 --- a/source/blender/editors/gpencil/gpencil_paint.c +++ b/source/blender/editors/gpencil/gpencil_paint.c @@ -2209,9 +2209,10 @@ static void gpencil_draw_toggle_eraser_cursor(bContext *C, tGPsdata *p, short en ED_gpencil_toggle_brush_cursor(p->C, false, NULL); /* enable cursor */ p->erasercursor = WM_paint_cursor_activate( - CTX_wm_manager(C), - NULL, /* XXX */ - gpencil_draw_eraser, p); + CTX_wm_manager(C), + SPACE_TYPE_ANY, RGN_TYPE_ANY, + NULL, /* XXX */ + gpencil_draw_eraser, p); } } diff --git a/source/blender/editors/gpencil/gpencil_utils.c b/source/blender/editors/gpencil/gpencil_utils.c index 77a838d2f22..fd7ce2d4139 100644 --- a/source/blender/editors/gpencil/gpencil_utils.c +++ b/source/blender/editors/gpencil/gpencil_utils.c @@ -1684,6 +1684,7 @@ void ED_gpencil_toggle_brush_cursor(bContext *C, bool enable, void *customdata) /* enable cursor */ gset->paintcursor = WM_paint_cursor_activate( CTX_wm_manager(C), + SPACE_TYPE_ANY, RGN_TYPE_ANY, NULL, gp_brush_drawcursor, (lastpost) ? customdata : NULL); diff --git a/source/blender/editors/physics/particle_edit.c b/source/blender/editors/physics/particle_edit.c index 8009148480e..72ece2c8bd5 100644 --- a/source/blender/editors/physics/particle_edit.c +++ b/source/blender/editors/physics/particle_edit.c @@ -2945,7 +2945,12 @@ static void toggle_particle_cursor(bContext *C, int enable) pset->paintcursor = NULL; } else if (enable) - pset->paintcursor = WM_paint_cursor_activate(CTX_wm_manager(C), PE_poll_view3d, brush_drawcursor, NULL); + pset->paintcursor = WM_paint_cursor_activate( + CTX_wm_manager(C), + SPACE_VIEW3D, RGN_TYPE_WINDOW, + PE_poll_view3d, + brush_drawcursor, + NULL); } /*************************** delete operator **************************/ diff --git a/source/blender/editors/sculpt_paint/paint_cursor.c b/source/blender/editors/sculpt_paint/paint_cursor.c index 7d94e63e2bc..294981e7303 100644 --- a/source/blender/editors/sculpt_paint/paint_cursor.c +++ b/source/blender/editors/sculpt_paint/paint_cursor.c @@ -41,6 +41,7 @@ #include "DNA_object_types.h" #include "DNA_scene_types.h" #include "DNA_screen_types.h" +#include "DNA_space_types.h" #include "DNA_userdef_types.h" #include "DNA_view3d_types.h" @@ -1153,8 +1154,14 @@ void paint_cursor_start(bContext *C, bool (*poll)(bContext *C)) { Paint *p = BKE_paint_get_active_from_context(C); - if (p && !p->paint_cursor) - p->paint_cursor = WM_paint_cursor_activate(CTX_wm_manager(C), poll, paint_draw_cursor, NULL); + if (p && !p->paint_cursor) { + p->paint_cursor = WM_paint_cursor_activate( + CTX_wm_manager(C), + SPACE_TYPE_ANY, RGN_TYPE_ANY, + poll, + paint_draw_cursor, + NULL); + } /* invalidate the paint cursors */ BKE_paint_invalidate_overlay_all(); @@ -1162,6 +1169,12 @@ void paint_cursor_start(bContext *C, bool (*poll)(bContext *C)) void paint_cursor_start_explicit(Paint *p, wmWindowManager *wm, bool (*poll)(bContext *C)) { - if (p && !p->paint_cursor) - p->paint_cursor = WM_paint_cursor_activate(wm, poll, paint_draw_cursor, NULL); + if (p && !p->paint_cursor) { + p->paint_cursor = WM_paint_cursor_activate( + wm, + SPACE_TYPE_ANY, RGN_TYPE_ANY, + poll, + paint_draw_cursor, + NULL); + } } diff --git a/source/blender/editors/sculpt_paint/paint_image.c b/source/blender/editors/sculpt_paint/paint_image.c index 897a74eb497..aaf82d8ef2b 100644 --- a/source/blender/editors/sculpt_paint/paint_image.c +++ b/source/blender/editors/sculpt_paint/paint_image.c @@ -485,7 +485,11 @@ static PaintOperation *texture_paint_init(bContext *C, wmOperator *op, const flo } if ((brush->imagepaint_tool == PAINT_TOOL_FILL) && (brush->flag & BRUSH_USE_GRADIENT)) { - pop->cursor = WM_paint_cursor_activate(CTX_wm_manager(C), image_paint_poll, gradient_draw_line, pop); + pop->cursor = WM_paint_cursor_activate( + CTX_wm_manager(C), + SPACE_TYPE_ANY, RGN_TYPE_ANY, + image_paint_poll, gradient_draw_line, + pop); } settings->imapaint.flag |= IMAGEPAINT_DRAWING; diff --git a/source/blender/editors/sculpt_paint/paint_stroke.c b/source/blender/editors/sculpt_paint/paint_stroke.c index af27ad5d307..a1ae32f2e9a 100644 --- a/source/blender/editors/sculpt_paint/paint_stroke.c +++ b/source/blender/editors/sculpt_paint/paint_stroke.c @@ -1201,8 +1201,10 @@ int paint_stroke_modal(bContext *C, wmOperator *op, const wmEvent *event) return OPERATOR_FINISHED; if (paint_supports_smooth_stroke(br, mode)) - stroke->stroke_cursor = - WM_paint_cursor_activate(CTX_wm_manager(C), paint_poll, paint_draw_smooth_cursor, stroke); + stroke->stroke_cursor = WM_paint_cursor_activate( + CTX_wm_manager(C), + SPACE_TYPE_ANY, RGN_TYPE_ANY, + paint_poll, paint_draw_smooth_cursor, stroke); stroke->stroke_init = true; first_modal = true; @@ -1220,8 +1222,10 @@ int paint_stroke_modal(bContext *C, wmOperator *op, const wmEvent *event) stroke->timer = WM_event_add_timer(CTX_wm_manager(C), CTX_wm_window(C), TIMER, stroke->brush->rate); if (br->flag & BRUSH_LINE) { - stroke->stroke_cursor = - WM_paint_cursor_activate(CTX_wm_manager(C), paint_poll, paint_draw_line_cursor, stroke); + stroke->stroke_cursor = WM_paint_cursor_activate( + CTX_wm_manager(C), + SPACE_TYPE_ANY, RGN_TYPE_ANY, + paint_poll, paint_draw_line_cursor, stroke); } first_dab = true; diff --git a/source/blender/editors/sculpt_paint/sculpt_uv.c b/source/blender/editors/sculpt_paint/sculpt_uv.c index 8fafc545fa9..897539bddd7 100644 --- a/source/blender/editors/sculpt_paint/sculpt_uv.c +++ b/source/blender/editors/sculpt_paint/sculpt_uv.c @@ -248,7 +248,9 @@ void ED_space_image_uv_sculpt_update(Main *bmain, wmWindowManager *wm, Scene *sc BKE_paint_init(bmain, scene, ePaintSculptUV, PAINT_CURSOR_SCULPT); settings->uvsculpt->paint.paint_cursor = WM_paint_cursor_activate( - wm, uv_sculpt_brush_poll, + wm, + SPACE_IMAGE, RGN_TYPE_WINDOW, + uv_sculpt_brush_poll, brush_drawcursor_uvsculpt, NULL); } else { diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index 6dad6e96819..de41e6d3906 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -2319,31 +2319,49 @@ bool initTransform(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *eve t->draw_handle_apply = ED_region_draw_cb_activate(t->ar->type, drawTransformApply, t, REGION_DRAW_PRE_VIEW); t->draw_handle_view = ED_region_draw_cb_activate(t->ar->type, drawTransformView, t, REGION_DRAW_POST_VIEW); t->draw_handle_pixel = ED_region_draw_cb_activate(t->ar->type, drawTransformPixel, t, REGION_DRAW_POST_PIXEL); - t->draw_handle_cursor = WM_paint_cursor_activate(CTX_wm_manager(C), helpline_poll, drawHelpline, t); + t->draw_handle_cursor = WM_paint_cursor_activate( + CTX_wm_manager(C), + SPACE_TYPE_ANY, RGN_TYPE_ANY, + helpline_poll, drawHelpline, t); } else if (t->spacetype == SPACE_IMAGE) { t->draw_handle_view = ED_region_draw_cb_activate(t->ar->type, drawTransformView, t, REGION_DRAW_POST_VIEW); //t->draw_handle_pixel = ED_region_draw_cb_activate(t->ar->type, drawTransformPixel, t, REGION_DRAW_POST_PIXEL); - t->draw_handle_cursor = WM_paint_cursor_activate(CTX_wm_manager(C), helpline_poll, drawHelpline, t); + t->draw_handle_cursor = WM_paint_cursor_activate( + CTX_wm_manager(C), + SPACE_TYPE_ANY, RGN_TYPE_ANY, + helpline_poll, drawHelpline, t); } else if (t->spacetype == SPACE_CLIP) { t->draw_handle_view = ED_region_draw_cb_activate(t->ar->type, drawTransformView, t, REGION_DRAW_POST_VIEW); - t->draw_handle_cursor = WM_paint_cursor_activate(CTX_wm_manager(C), helpline_poll, drawHelpline, t); + t->draw_handle_cursor = WM_paint_cursor_activate( + CTX_wm_manager(C), + SPACE_TYPE_ANY, RGN_TYPE_ANY, + helpline_poll, drawHelpline, t); } else if (t->spacetype == SPACE_NODE) { /*t->draw_handle_apply = ED_region_draw_cb_activate(t->ar->type, drawTransformApply, t, REGION_DRAW_PRE_VIEW);*/ t->draw_handle_view = ED_region_draw_cb_activate(t->ar->type, drawTransformView, t, REGION_DRAW_POST_VIEW); - t->draw_handle_cursor = WM_paint_cursor_activate(CTX_wm_manager(C), helpline_poll, drawHelpline, t); + t->draw_handle_cursor = WM_paint_cursor_activate( + CTX_wm_manager(C), + SPACE_TYPE_ANY, RGN_TYPE_ANY, + helpline_poll, drawHelpline, t); } else if (t->spacetype == SPACE_IPO) { t->draw_handle_view = ED_region_draw_cb_activate(t->ar->type, drawTransformView, t, REGION_DRAW_POST_VIEW); //t->draw_handle_pixel = ED_region_draw_cb_activate(t->ar->type, drawTransformPixel, t, REGION_DRAW_POST_PIXEL); - t->draw_handle_cursor = WM_paint_cursor_activate(CTX_wm_manager(C), helpline_poll, drawHelpline, t); + t->draw_handle_cursor = WM_paint_cursor_activate( + CTX_wm_manager(C), + SPACE_TYPE_ANY, RGN_TYPE_ANY, + helpline_poll, drawHelpline, t); } else if (t->spacetype == SPACE_ACTION) { t->draw_handle_view = ED_region_draw_cb_activate(t->ar->type, drawTransformView, t, REGION_DRAW_POST_VIEW); //t->draw_handle_pixel = ED_region_draw_cb_activate(t->ar->type, drawTransformPixel, t, REGION_DRAW_POST_PIXEL); - t->draw_handle_cursor = WM_paint_cursor_activate(CTX_wm_manager(C), helpline_poll, drawHelpline, t); + t->draw_handle_cursor = WM_paint_cursor_activate( + CTX_wm_manager(C), + SPACE_TYPE_ANY, RGN_TYPE_ANY, + helpline_poll, drawHelpline, t); } createTransData(C, t); // make TransData structs from selection diff --git a/source/blender/python/intern/bpy_rna_callback.c b/source/blender/python/intern/bpy_rna_callback.c index 7c1eebb9b1a..102677c23b8 100644 --- a/source/blender/python/intern/bpy_rna_callback.c +++ b/source/blender/python/intern/bpy_rna_callback.c @@ -266,7 +266,10 @@ PyObject *pyrna_callback_classmethod_add(PyObject *UNUSED(self), PyObject *args) } bContext *C = BPy_GetContext(); struct wmWindowManager *wm = CTX_wm_manager(C); - handle = WM_paint_cursor_activate(wm, NULL, cb_wm_cursor_draw, (void *)args); + handle = WM_paint_cursor_activate( + wm, + SPACE_TYPE_ANY, RGN_TYPE_ANY, + NULL, cb_wm_cursor_draw, (void *)args); Py_INCREF(args); } else if (RNA_struct_is_a(srna, &RNA_Space)) { diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index 98df18169cd..4d3be1e3f3b 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -173,6 +173,7 @@ void WM_cursor_time (struct wmWindow *win, int nr); struct wmPaintCursor *WM_paint_cursor_activate( struct wmWindowManager *wm, + short space_type, short region_type, bool (*poll)(struct bContext *C), void (*draw)(struct bContext *C, int, int, void *customdata), void *customdata); diff --git a/source/blender/windowmanager/intern/wm_draw.c b/source/blender/windowmanager/intern/wm_draw.c index b76fc0abfa7..c8e0360ed88 100644 --- a/source/blender/windowmanager/intern/wm_draw.c +++ b/source/blender/windowmanager/intern/wm_draw.c @@ -85,7 +85,7 @@ /* ******************* paint cursor *************** */ -static void wm_paintcursor_draw(bContext *C, ARegion *ar) +static void wm_paintcursor_draw(bContext *C, ScrArea *sa, ARegion *ar) { wmWindowManager *wm = CTX_wm_manager(C); wmWindow *win = CTX_wm_window(C); @@ -94,6 +94,15 @@ static void wm_paintcursor_draw(bContext *C, ARegion *ar) if (ar->visible && ar == screen->active_region) { for (pc = wm->paintcursors.first; pc; pc = pc->next) { + + if ((pc->space_type != SPACE_TYPE_ANY) && (sa->spacetype != pc->space_type)) { + continue; + } + + if ((pc->region_type != RGN_TYPE_ANY) && (ar->regiontype != pc->region_type)) { + continue; + } + if (pc->poll == NULL || pc->poll(C)) { /* Prevent drawing outside region. */ glEnable(GL_SCISSOR_TEST); @@ -612,7 +621,7 @@ static void wm_draw_window_onscreen(bContext *C, wmWindow *win, int view) CTX_wm_region_set(C, ar); /* make region ready for draw, scissor, pixelspace */ - wm_paintcursor_draw(C, ar); + wm_paintcursor_draw(C, sa, ar); CTX_wm_region_set(C, NULL); CTX_wm_area_set(C, NULL); diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index fa654e46cf1..e12107283a5 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -1845,7 +1845,9 @@ static void WM_OT_console_toggle(wmOperatorType *ot) */ wmPaintCursor *WM_paint_cursor_activate( - wmWindowManager *wm, bool (*poll)(bContext *C), + wmWindowManager *wm, + short space_type, short region_type, + bool (*poll)(bContext *C), wmPaintCursorDraw draw, void *customdata) { wmPaintCursor *pc = MEM_callocN(sizeof(wmPaintCursor), "paint cursor"); @@ -1856,6 +1858,9 @@ wmPaintCursor *WM_paint_cursor_activate( pc->poll = poll; pc->draw = draw; + pc->space_type = space_type; + pc->region_type = region_type; + return pc; } @@ -2443,8 +2448,11 @@ static int radial_control_invoke(bContext *C, wmOperator *op, const wmEvent *eve BLI_listbase_clear(&wm->paintcursors); /* add radial control paint cursor */ - rc->cursor = WM_paint_cursor_activate(wm, op->type->poll, - radial_control_paint_cursor, rc); + rc->cursor = WM_paint_cursor_activate( + wm, + SPACE_TYPE_ANY, RGN_TYPE_ANY, + op->type->poll, + radial_control_paint_cursor, rc); WM_event_add_modal_handler(C, op); diff --git a/source/blender/windowmanager/wm.h b/source/blender/windowmanager/wm.h index 04353b55334..89fd2fdf557 100644 --- a/source/blender/windowmanager/wm.h +++ b/source/blender/windowmanager/wm.h @@ -44,6 +44,9 @@ typedef struct wmPaintCursor { bool (*poll)(struct bContext *C); void (*draw)(bContext *C, int, int, void *customdata); + + short space_type; + short region_type; } wmPaintCursor; |