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>2020-02-21 18:13:10 +0300
committerCampbell Barton <ideasman42@gmail.com>2020-02-21 18:13:10 +0300
commit824b2c689e9c11ab110c81928f8eab21187811cb (patch)
tree99b84d146dc237f4e0b12d2bf5b7a0e200a5db07 /source/blender/editors/screen/screen_edit.c
parent4653d253b390fbb61163610d60ac4c0d21db23ae (diff)
Cleanup: avoid looping over areas when refreshing the cursor
These values are already known, pass in as arguments.
Diffstat (limited to 'source/blender/editors/screen/screen_edit.c')
-rw-r--r--source/blender/editors/screen/screen_edit.c33
1 files changed, 18 insertions, 15 deletions
diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c
index 216f36775b2..427f2f085c6 100644
--- a/source/blender/editors/screen/screen_edit.c
+++ b/source/blender/editors/screen/screen_edit.c
@@ -398,6 +398,20 @@ int screen_area_join(bContext *C, bScreen *scr, ScrArea *sa1, ScrArea *sa2)
/* ****************** EXPORTED API TO OTHER MODULES *************************** */
/* screen sets cursor based on active region */
+static void region_cursor_set_ex(wmWindow *win, ScrArea *sa, ARegion *ar, bool swin_changed)
+{
+ BLI_assert(WM_window_get_active_screen(win)->active_region == ar);
+ if (sa->flag & AREA_FLAG_CURSOR_UPDATE || swin_changed || (ar->type && ar->type->event_cursor)) {
+ sa->flag &= ~AREA_FLAG_CURSOR_UPDATE;
+ if (ar->gizmo_map != NULL) {
+ if (WM_gizmomap_cursor_set(ar->gizmo_map, win)) {
+ return;
+ }
+ }
+ ED_region_cursor_set(win, sa, ar);
+ }
+}
+
static void region_cursor_set(wmWindow *win, bool swin_changed)
{
bScreen *screen = WM_window_get_active_screen(win);
@@ -406,16 +420,7 @@ static void region_cursor_set(wmWindow *win, bool swin_changed)
{
for (ARegion *ar = sa->regionbase.first; ar; ar = ar->next) {
if (ar == screen->active_region) {
- if (swin_changed || (sa->flag & AREA_FLAG_CURSOR_UPDATE) ||
- (ar->type && ar->type->event_cursor)) {
- sa->flag &= ~AREA_FLAG_CURSOR_UPDATE;
- if (ar->gizmo_map != NULL) {
- if (WM_gizmomap_cursor_set(ar->gizmo_map, win)) {
- return;
- }
- }
- ED_region_cursor_set(win, sa, ar);
- }
+ region_cursor_set_ex(win, sa, ar, swin_changed);
return;
}
}
@@ -753,9 +758,10 @@ void ED_screen_set_active_region(bContext *C, wmWindow *win, const int xy[2])
}
else {
/* notifier invokes freeing the buttons... causing a bit too much redraws */
- if (old_ar != scr->active_region) {
- region_cursor_set(win, true);
+ const bool swin_changed = (old_ar != scr->active_region);
+ region_cursor_set_ex(win, sa, scr->active_region, swin_changed);
+ if (old_ar != scr->active_region) {
/* this used to be a notifier, but needs to be done immediate
* because it can undo setting the right button as active due
* to delayed notifier handling */
@@ -763,9 +769,6 @@ void ED_screen_set_active_region(bContext *C, wmWindow *win, const int xy[2])
UI_screen_free_active_but(C, scr);
}
}
- else {
- region_cursor_set(win, false);
- }
}
}
}