UI: Skip unnecessary cursor setting
Currently, in sculpting, weight paint and vertex paint modes every cursor movement triggers redraw of a brush. During that redraw, native cursor is set. Under the hood, setting the cursor causes freeing of previous cursor and allocating a new one. In most cases, in previously mentioned modes, recreating cursor is unnecessary since cursor stays the same. This patch adds a check which skips cursor change if requested cursor is already set. The check could be added in pain_cursor.c, but I felt adding it inside WM_cursor_set function would hopefully skip more unnecessary cursor reallocations. Differential Revision: https://developer.blender.org/D7828 Reviewed by: Julian Eisel
This commit is contained in:
@@ -145,6 +145,16 @@ void WM_cursor_set(wmWindow *win, int curs)
|
|||||||
return; /* Can't set custom cursor before Window init */
|
return; /* Can't set custom cursor before Window init */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (curs == WM_CURSOR_DEFAULT && win->modalcursor) {
|
||||||
|
curs = win->modalcursor;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (win->cursor == curs) {
|
||||||
|
return; /* Cursor is already set */
|
||||||
|
}
|
||||||
|
|
||||||
|
win->cursor = curs;
|
||||||
|
|
||||||
if (curs == WM_CURSOR_NONE) {
|
if (curs == WM_CURSOR_NONE) {
|
||||||
GHOST_SetCursorVisibility(win->ghostwin, 0);
|
GHOST_SetCursorVisibility(win->ghostwin, 0);
|
||||||
return;
|
return;
|
||||||
@@ -152,12 +162,6 @@ void WM_cursor_set(wmWindow *win, int curs)
|
|||||||
|
|
||||||
GHOST_SetCursorVisibility(win->ghostwin, 1);
|
GHOST_SetCursorVisibility(win->ghostwin, 1);
|
||||||
|
|
||||||
if (curs == WM_CURSOR_DEFAULT && win->modalcursor) {
|
|
||||||
curs = win->modalcursor;
|
|
||||||
}
|
|
||||||
|
|
||||||
win->cursor = curs;
|
|
||||||
|
|
||||||
if (curs < 0 || curs >= WM_CURSOR_NUM) {
|
if (curs < 0 || curs >= WM_CURSOR_NUM) {
|
||||||
BLI_assert(!"Invalid cursor number");
|
BLI_assert(!"Invalid cursor number");
|
||||||
return;
|
return;
|
||||||
|
|||||||
Reference in New Issue
Block a user