Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2018-10-25 08:06:47 +0300
committerCampbell Barton <ideasman42@gmail.com>2018-10-25 08:06:47 +0300
commit6d49b623e2efce59b58bb1295024ab8ac492370a (patch)
treeebe29d04b2e9730dfb4f7cd733e63e2676794dfc /source/blender/windowmanager
parent46587b3ccb0ec842500ce2c3f2359b78550aad0f (diff)
WM: space, region type filtering for paint cursor
Avoids calling poll on mouse-move for unrelated space/region types.
Diffstat (limited to 'source/blender/windowmanager')
-rw-r--r--source/blender/windowmanager/WM_api.h1
-rw-r--r--source/blender/windowmanager/intern/wm_draw.c13
-rw-r--r--source/blender/windowmanager/intern/wm_operators.c14
-rw-r--r--source/blender/windowmanager/wm.h3
4 files changed, 26 insertions, 5 deletions
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;