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:
parent
bab5fbb66c
commit
e490dc4346
Notes:
blender-bot
2023-02-14 02:13:08 +01:00
Referenced by commit 2b36e6bee6
, Fix T80333: cursor disappears after using navigation gizmo in editmode
Referenced by issue #80363, When importing an obj the cursor icon gets stuck in progress mode
Referenced by issue #80333, Cursor not reset properly (disappears after rotating navigation gizmo, stuck after importing)
Referenced by issue #80333, Cursor not reset properly (disappears after rotating navigation gizmo, stuck after importing)
|
@ -145,6 +145,16 @@ void WM_cursor_set(wmWindow *win, int curs)
|
|||
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) {
|
||||
GHOST_SetCursorVisibility(win->ghostwin, 0);
|
||||
return;
|
||||
|
@ -152,12 +162,6 @@ void WM_cursor_set(wmWindow *win, int curs)
|
|||
|
||||
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) {
|
||||
BLI_assert(!"Invalid cursor number");
|
||||
return;
|
||||
|
|
Loading…
Reference in New Issue