Changeset View
Changeset View
Standalone View
Standalone View
source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c
| Show First 20 Lines • Show All 165 Lines • ▼ Show 20 Lines | static wmGizmoMap *wm_gizmomap_new_from_type_ex(struct wmGizmoMapType *gzmap_type, | ||||
| wmGizmoMap *gzmap) | wmGizmoMap *gzmap) | ||||
| { | { | ||||
| gzmap->type = gzmap_type; | gzmap->type = gzmap_type; | ||||
| gzmap->is_init = true; | gzmap->is_init = true; | ||||
| WM_gizmomap_tag_refresh(gzmap); | WM_gizmomap_tag_refresh(gzmap); | ||||
| /* create all gizmo-groups for this gizmo-map. We may create an empty one | /* create all gizmo-groups for this gizmo-map. We may create an empty one | ||||
| * too in anticipation of gizmos from operators etc */ | * too in anticipation of gizmos from operators etc */ | ||||
| for (wmGizmoGroupTypeRef *gzgt_ref = gzmap_type->grouptype_refs.first; gzgt_ref; | LISTBASE_FOREACH (wmGizmoGroupTypeRef *, gzgt_ref, &gzmap_type->grouptype_refs) { | ||||
| gzgt_ref = gzgt_ref->next) { | |||||
| wm_gizmogroup_new_from_type(gzmap, gzgt_ref->type); | wm_gizmogroup_new_from_type(gzmap, gzgt_ref->type); | ||||
| } | } | ||||
| return gzmap; | return gzmap; | ||||
| } | } | ||||
| /** | /** | ||||
| * Creates a gizmo-map with all registered gizmos for that type | * Creates a gizmo-map with all registered gizmos for that type | ||||
| ▲ Show 20 Lines • Show All 42 Lines • ▼ Show 20 Lines | if (gzgt) { | ||||
| return WM_gizmomap_group_find_ptr(gzmap, gzgt); | return WM_gizmomap_group_find_ptr(gzmap, gzgt); | ||||
| } | } | ||||
| return NULL; | return NULL; | ||||
| } | } | ||||
| wmGizmoGroup *WM_gizmomap_group_find_ptr(struct wmGizmoMap *gzmap, | wmGizmoGroup *WM_gizmomap_group_find_ptr(struct wmGizmoMap *gzmap, | ||||
| const struct wmGizmoGroupType *gzgt) | const struct wmGizmoGroupType *gzgt) | ||||
| { | { | ||||
| for (wmGizmoGroup *gzgroup = gzmap->groups.first; gzgroup; gzgroup = gzgroup->next) { | LISTBASE_FOREACH (wmGizmoGroup *, gzgroup, &gzmap->groups) { | ||||
| if (gzgroup->type == gzgt) { | if (gzgroup->type == gzgt) { | ||||
| return gzgroup; | return gzgroup; | ||||
| } | } | ||||
| } | } | ||||
| return NULL; | return NULL; | ||||
| } | } | ||||
| const ListBase *WM_gizmomap_group_list(wmGizmoMap *gzmap) | const ListBase *WM_gizmomap_group_list(wmGizmoMap *gzmap) | ||||
| ▲ Show 20 Lines • Show All 42 Lines • ▼ Show 20 Lines | static GHash *WM_gizmomap_gizmo_hash_new(const bContext *C, | ||||
| wmGizmoMap *gzmap, | wmGizmoMap *gzmap, | ||||
| bool (*poll)(const wmGizmo *, void *), | bool (*poll)(const wmGizmo *, void *), | ||||
| void *data, | void *data, | ||||
| const eWM_GizmoFlag flag_exclude) | const eWM_GizmoFlag flag_exclude) | ||||
| { | { | ||||
| GHash *hash = BLI_ghash_ptr_new(__func__); | GHash *hash = BLI_ghash_ptr_new(__func__); | ||||
| /* collect gizmos */ | /* collect gizmos */ | ||||
| for (wmGizmoGroup *gzgroup = gzmap->groups.first; gzgroup; gzgroup = gzgroup->next) { | LISTBASE_FOREACH (wmGizmoGroup *, gzgroup, &gzmap->groups) { | ||||
| if (WM_gizmo_group_type_poll(C, gzgroup->type)) { | if (WM_gizmo_group_type_poll(C, gzgroup->type)) { | ||||
| for (wmGizmo *gz = gzgroup->gizmos.first; gz; gz = gz->next) { | LISTBASE_FOREACH (wmGizmo *, gz, &gzgroup->gizmos) { | ||||
| if (((flag_exclude == 0) || ((gz->flag & flag_exclude) == 0)) && | if (((flag_exclude == 0) || ((gz->flag & flag_exclude) == 0)) && | ||||
| (!poll || poll(gz, data))) { | (!poll || poll(gz, data))) { | ||||
| BLI_ghash_insert(hash, gz, gz); | BLI_ghash_insert(hash, gz, gz); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| Show All 26 Lines | if (gzmap) { | ||||
| for (int i = 0; i < WM_GIZMOMAP_DRAWSTEP_MAX; i++) { | for (int i = 0; i < WM_GIZMOMAP_DRAWSTEP_MAX; i++) { | ||||
| gzmap->update_flag[i] |= (GIZMOMAP_IS_PREPARE_DRAW | GIZMOMAP_IS_REFRESH_CALLBACK); | gzmap->update_flag[i] |= (GIZMOMAP_IS_PREPARE_DRAW | GIZMOMAP_IS_REFRESH_CALLBACK); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| bool WM_gizmomap_tag_delay_refresh_for_tweak_check(wmGizmoMap *gzmap) | bool WM_gizmomap_tag_delay_refresh_for_tweak_check(wmGizmoMap *gzmap) | ||||
| { | { | ||||
| for (wmGizmoGroup *gzgroup = gzmap->groups.first; gzgroup; gzgroup = gzgroup->next) { | LISTBASE_FOREACH (wmGizmoGroup *, gzgroup, &gzmap->groups) { | ||||
| if (gzgroup->hide.delay_refresh_for_tweak) { | if (gzgroup->hide.delay_refresh_for_tweak) { | ||||
| return true; | return true; | ||||
| } | } | ||||
| } | } | ||||
| return false; | return false; | ||||
| } | } | ||||
| static bool gizmo_prepare_drawing(wmGizmoMap *gzmap, | static bool gizmo_prepare_drawing(wmGizmoMap *gzmap, | ||||
| ▲ Show 20 Lines • Show All 51 Lines • ▼ Show 20 Lines | if ((gz_modal->parent_gzgroup->type->flag & WM_GIZMOGROUPTYPE_DRAW_MODAL_ALL) == 0) { | ||||
| return; | return; | ||||
| } | } | ||||
| } | } | ||||
| /* Allow refresh functions to ask to be refreshed again, clear before the loop below. */ | /* Allow refresh functions to ask to be refreshed again, clear before the loop below. */ | ||||
| const bool do_refresh = gzmap->update_flag[drawstep] & GIZMOMAP_IS_REFRESH_CALLBACK; | const bool do_refresh = gzmap->update_flag[drawstep] & GIZMOMAP_IS_REFRESH_CALLBACK; | ||||
| gzmap->update_flag[drawstep] &= ~GIZMOMAP_IS_REFRESH_CALLBACK; | gzmap->update_flag[drawstep] &= ~GIZMOMAP_IS_REFRESH_CALLBACK; | ||||
| for (wmGizmoGroup *gzgroup = gzmap->groups.first; gzgroup; gzgroup = gzgroup->next) { | LISTBASE_FOREACH (wmGizmoGroup *, gzgroup, &gzmap->groups) { | ||||
| /* check group visibility - drawstep first to avoid unnecessary call of group poll callback */ | /* check group visibility - drawstep first to avoid unnecessary call of group poll callback */ | ||||
| if (!wm_gizmogroup_is_visible_in_drawstep(gzgroup, drawstep) || | if (!wm_gizmogroup_is_visible_in_drawstep(gzgroup, drawstep) || | ||||
| !WM_gizmo_group_type_poll(C, gzgroup->type)) { | !WM_gizmo_group_type_poll(C, gzgroup->type)) { | ||||
| continue; | continue; | ||||
| } | } | ||||
| /* Needs to be initialized on first draw. */ | /* Needs to be initialized on first draw. */ | ||||
| /* XXX weak: Gizmo-group may skip refreshing if it's invisible | /* XXX weak: Gizmo-group may skip refreshing if it's invisible | ||||
| Show All 10 Lines | if (gzgroup->hide.any != 0) { | ||||
| continue; | continue; | ||||
| } | } | ||||
| /* prepare drawing */ | /* prepare drawing */ | ||||
| if (gzgroup->type->draw_prepare) { | if (gzgroup->type->draw_prepare) { | ||||
| gzgroup->type->draw_prepare(C, gzgroup); | gzgroup->type->draw_prepare(C, gzgroup); | ||||
| } | } | ||||
| for (wmGizmo *gz = gzgroup->gizmos.first; gz; gz = gz->next) { | LISTBASE_FOREACH (wmGizmo *, gz, &gzgroup->gizmos) { | ||||
| gizmo_prepare_drawing(gzmap, gz, C, draw_gizmos, drawstep); | gizmo_prepare_drawing(gzmap, gz, C, draw_gizmos, drawstep); | ||||
| } | } | ||||
| } | } | ||||
| gzmap->update_flag[drawstep] &= ~GIZMOMAP_IS_PREPARE_DRAW; | gzmap->update_flag[drawstep] &= ~GIZMOMAP_IS_PREPARE_DRAW; | ||||
| } | } | ||||
| /** | /** | ||||
| ▲ Show 20 Lines • Show All 304 Lines • ▼ Show 20 Lines | wmGizmo *wm_gizmomap_highlight_find(wmGizmoMap *gzmap, | ||||
| } | } | ||||
| for (int i = 0; i < ARRAY_SIZE(do_step); i++) { | for (int i = 0; i < ARRAY_SIZE(do_step); i++) { | ||||
| do_step[i] = WM_gizmo_context_check_drawstep(C, i); | do_step[i] = WM_gizmo_context_check_drawstep(C, i); | ||||
| } | } | ||||
| const int event_modifier = WM_event_modifier_flag(event); | const int event_modifier = WM_event_modifier_flag(event); | ||||
| for (wmGizmoGroup *gzgroup = gzmap->groups.first; gzgroup; gzgroup = gzgroup->next) { | LISTBASE_FOREACH (wmGizmoGroup *, gzgroup, &gzmap->groups) { | ||||
| /* If it were important we could initialize here, | /* If it were important we could initialize here, | ||||
| * but this only happens when events are handled before drawing, | * but this only happens when events are handled before drawing, | ||||
| * just skip to keep code-path for initializing gizmos simple. */ | * just skip to keep code-path for initializing gizmos simple. */ | ||||
| if ((gzgroup->hide.any != 0) || ((gzgroup->init_flag & WM_GIZMOGROUP_INIT_SETUP) == 0)) { | if ((gzgroup->hide.any != 0) || ((gzgroup->init_flag & WM_GIZMOGROUP_INIT_SETUP) == 0)) { | ||||
| continue; | continue; | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 397 Lines • ▼ Show 20 Lines | ListBase *wm_gizmomap_groups_get(wmGizmoMap *gzmap) | ||||
| return &gzmap->groups; | return &gzmap->groups; | ||||
| } | } | ||||
| void WM_gizmomap_message_subscribe(bContext *C, | void WM_gizmomap_message_subscribe(bContext *C, | ||||
| wmGizmoMap *gzmap, | wmGizmoMap *gzmap, | ||||
| ARegion *region, | ARegion *region, | ||||
| struct wmMsgBus *mbus) | struct wmMsgBus *mbus) | ||||
| { | { | ||||
| for (wmGizmoGroup *gzgroup = gzmap->groups.first; gzgroup; gzgroup = gzgroup->next) { | LISTBASE_FOREACH (wmGizmoGroup *, gzgroup, &gzmap->groups) { | ||||
| if ((gzgroup->hide.any != 0) || (gzgroup->init_flag & WM_GIZMOGROUP_INIT_SETUP) == 0 || | if ((gzgroup->hide.any != 0) || (gzgroup->init_flag & WM_GIZMOGROUP_INIT_SETUP) == 0 || | ||||
| !WM_gizmo_group_type_poll(C, gzgroup->type)) { | !WM_gizmo_group_type_poll(C, gzgroup->type)) { | ||||
| continue; | continue; | ||||
| } | } | ||||
| for (wmGizmo *gz = gzgroup->gizmos.first; gz; gz = gz->next) { | LISTBASE_FOREACH (wmGizmo *, gz, &gzgroup->gizmos) { | ||||
| if (gz->flag & WM_GIZMO_HIDDEN) { | if (gz->flag & WM_GIZMO_HIDDEN) { | ||||
| continue; | continue; | ||||
| } | } | ||||
| WM_gizmo_target_property_subscribe_all(gz, mbus, region); | WM_gizmo_target_property_subscribe_all(gz, mbus, region); | ||||
| } | } | ||||
| if (gzgroup->type->message_subscribe != NULL) { | if (gzgroup->type->message_subscribe != NULL) { | ||||
| gzgroup->type->message_subscribe(C, gzgroup, mbus); | gzgroup->type->message_subscribe(C, gzgroup, mbus); | ||||
| } | } | ||||
| Show All 33 Lines | |||||
| /* -------------------------------------------------------------------- */ | /* -------------------------------------------------------------------- */ | ||||
| /** \name wmGizmoMapType | /** \name wmGizmoMapType | ||||
| * | * | ||||
| * \{ */ | * \{ */ | ||||
| wmGizmoMapType *WM_gizmomaptype_find(const struct wmGizmoMapType_Params *gzmap_params) | wmGizmoMapType *WM_gizmomaptype_find(const struct wmGizmoMapType_Params *gzmap_params) | ||||
| { | { | ||||
| for (wmGizmoMapType *gzmap_type = gizmomaptypes.first; gzmap_type; | LISTBASE_FOREACH (wmGizmoMapType *, gzmap_type, &gizmomaptypes) { | ||||
| gzmap_type = gzmap_type->next) { | |||||
| if (gzmap_type->spaceid == gzmap_params->spaceid && | if (gzmap_type->spaceid == gzmap_params->spaceid && | ||||
| gzmap_type->regionid == gzmap_params->regionid) { | gzmap_type->regionid == gzmap_params->regionid) { | ||||
| return gzmap_type; | return gzmap_type; | ||||
| } | } | ||||
| } | } | ||||
| return NULL; | return NULL; | ||||
| } | } | ||||
| Show All 31 Lines | |||||
| /** | /** | ||||
| * Initialize keymaps for all existing gizmo-groups | * Initialize keymaps for all existing gizmo-groups | ||||
| */ | */ | ||||
| void wm_gizmos_keymap(wmKeyConfig *keyconf) | void wm_gizmos_keymap(wmKeyConfig *keyconf) | ||||
| { | { | ||||
| /* we add this item-less keymap once and use it to group gizmo-group keymaps into it */ | /* we add this item-less keymap once and use it to group gizmo-group keymaps into it */ | ||||
| WM_keymap_ensure(keyconf, "Gizmos", 0, 0); | WM_keymap_ensure(keyconf, "Gizmos", 0, 0); | ||||
| for (wmGizmoMapType *gzmap_type = gizmomaptypes.first; gzmap_type; | LISTBASE_FOREACH (wmGizmoMapType *, gzmap_type, &gizmomaptypes) { | ||||
| gzmap_type = gzmap_type->next) { | LISTBASE_FOREACH (wmGizmoGroupTypeRef *, gzgt_ref, &gzmap_type->grouptype_refs) { | ||||
| for (wmGizmoGroupTypeRef *gzgt_ref = gzmap_type->grouptype_refs.first; gzgt_ref; | |||||
| gzgt_ref = gzgt_ref->next) { | |||||
| wm_gizmogrouptype_setup_keymap(gzgt_ref->type, keyconf); | wm_gizmogrouptype_setup_keymap(gzgt_ref->type, keyconf); | ||||
| } | } | ||||
| } | } | ||||
| wm_gizmogroup_tweak_modal_keymap(keyconf); | wm_gizmogroup_tweak_modal_keymap(keyconf); | ||||
| } | } | ||||
| /** \} */ /* wmGizmoMapType */ | /** \} */ /* wmGizmoMapType */ | ||||
| Show All 39 Lines | if (G.background) { | ||||
| return; | return; | ||||
| } | } | ||||
| if (wm_gzmap_type_update_flag == 0) { | if (wm_gzmap_type_update_flag == 0) { | ||||
| return; | return; | ||||
| } | } | ||||
| if (wm_gzmap_type_update_flag & WM_GIZMOMAPTYPE_GLOBAL_UPDATE_REMOVE) { | if (wm_gzmap_type_update_flag & WM_GIZMOMAPTYPE_GLOBAL_UPDATE_REMOVE) { | ||||
| for (wmGizmoMapType *gzmap_type = gizmomaptypes.first; gzmap_type; | LISTBASE_FOREACH (wmGizmoMapType *, gzmap_type, &gizmomaptypes) { | ||||
| gzmap_type = gzmap_type->next) { | |||||
| if (gzmap_type->type_update_flag & WM_GIZMOMAPTYPE_GLOBAL_UPDATE_REMOVE) { | if (gzmap_type->type_update_flag & WM_GIZMOMAPTYPE_GLOBAL_UPDATE_REMOVE) { | ||||
| gzmap_type->type_update_flag &= ~WM_GIZMOMAPTYPE_UPDATE_REMOVE; | gzmap_type->type_update_flag &= ~WM_GIZMOMAPTYPE_UPDATE_REMOVE; | ||||
| for (wmGizmoGroupTypeRef *gzgt_ref = gzmap_type->grouptype_refs.first, *gzgt_ref_next; | for (wmGizmoGroupTypeRef *gzgt_ref = gzmap_type->grouptype_refs.first, *gzgt_ref_next; | ||||
| gzgt_ref; | gzgt_ref; | ||||
| gzgt_ref = gzgt_ref_next) { | gzgt_ref = gzgt_ref_next) { | ||||
| gzgt_ref_next = gzgt_ref->next; | gzgt_ref_next = gzgt_ref->next; | ||||
| if (gzgt_ref->type->type_update_flag & WM_GIZMOMAPTYPE_UPDATE_REMOVE) { | if (gzgt_ref->type->type_update_flag & WM_GIZMOMAPTYPE_UPDATE_REMOVE) { | ||||
| gzgt_ref->type->type_update_flag &= ~WM_GIZMOMAPTYPE_UPDATE_REMOVE; | gzgt_ref->type->type_update_flag &= ~WM_GIZMOMAPTYPE_UPDATE_REMOVE; | ||||
| WM_gizmomaptype_group_unlink(NULL, bmain, gzmap_type, gzgt_ref->type); | WM_gizmomaptype_group_unlink(NULL, bmain, gzmap_type, gzgt_ref->type); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| wm_gzmap_type_update_flag &= ~WM_GIZMOMAPTYPE_GLOBAL_UPDATE_REMOVE; | wm_gzmap_type_update_flag &= ~WM_GIZMOMAPTYPE_GLOBAL_UPDATE_REMOVE; | ||||
| } | } | ||||
| if (wm_gzmap_type_update_flag & WM_GIZMOMAPTYPE_GLOBAL_UPDATE_INIT) { | if (wm_gzmap_type_update_flag & WM_GIZMOMAPTYPE_GLOBAL_UPDATE_INIT) { | ||||
| for (wmGizmoMapType *gzmap_type = gizmomaptypes.first; gzmap_type; | LISTBASE_FOREACH (wmGizmoMapType *, gzmap_type, &gizmomaptypes) { | ||||
| gzmap_type = gzmap_type->next) { | |||||
| const uchar type_update_all = WM_GIZMOMAPTYPE_UPDATE_INIT | WM_GIZMOMAPTYPE_KEYMAP_INIT; | const uchar type_update_all = WM_GIZMOMAPTYPE_UPDATE_INIT | WM_GIZMOMAPTYPE_KEYMAP_INIT; | ||||
| if (gzmap_type->type_update_flag & type_update_all) { | if (gzmap_type->type_update_flag & type_update_all) { | ||||
| gzmap_type->type_update_flag &= ~type_update_all; | gzmap_type->type_update_flag &= ~type_update_all; | ||||
| for (wmGizmoGroupTypeRef *gzgt_ref = gzmap_type->grouptype_refs.first; gzgt_ref; | LISTBASE_FOREACH (wmGizmoGroupTypeRef *, gzgt_ref, &gzmap_type->grouptype_refs) { | ||||
| gzgt_ref = gzgt_ref->next) { | |||||
| if (gzgt_ref->type->type_update_flag & WM_GIZMOMAPTYPE_KEYMAP_INIT) { | if (gzgt_ref->type->type_update_flag & WM_GIZMOMAPTYPE_KEYMAP_INIT) { | ||||
| WM_gizmomaptype_group_init_runtime_keymap(bmain, gzgt_ref->type); | WM_gizmomaptype_group_init_runtime_keymap(bmain, gzgt_ref->type); | ||||
| gzgt_ref->type->type_update_flag &= ~WM_GIZMOMAPTYPE_KEYMAP_INIT; | gzgt_ref->type->type_update_flag &= ~WM_GIZMOMAPTYPE_KEYMAP_INIT; | ||||
| } | } | ||||
| if (gzgt_ref->type->type_update_flag & WM_GIZMOMAPTYPE_UPDATE_INIT) { | if (gzgt_ref->type->type_update_flag & WM_GIZMOMAPTYPE_UPDATE_INIT) { | ||||
| WM_gizmomaptype_group_init_runtime(bmain, gzmap_type, gzgt_ref->type); | WM_gizmomaptype_group_init_runtime(bmain, gzmap_type, gzgt_ref->type); | ||||
| gzgt_ref->type->type_update_flag &= ~WM_GIZMOMAPTYPE_UPDATE_INIT; | gzgt_ref->type->type_update_flag &= ~WM_GIZMOMAPTYPE_UPDATE_INIT; | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| wm_gzmap_type_update_flag &= ~WM_GIZMOMAPTYPE_GLOBAL_UPDATE_INIT; | wm_gzmap_type_update_flag &= ~WM_GIZMOMAPTYPE_GLOBAL_UPDATE_INIT; | ||||
| } | } | ||||
| if (wm_gzmap_type_update_flag & WM_GIZMOTYPE_GLOBAL_UPDATE_REMOVE) { | if (wm_gzmap_type_update_flag & WM_GIZMOTYPE_GLOBAL_UPDATE_REMOVE) { | ||||
| for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) { | for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) { | ||||
| for (ScrArea *area = screen->areabase.first; area; area = area->next) { | LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) { | ||||
| for (SpaceLink *sl = area->spacedata.first; sl; sl = sl->next) { | LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) { | ||||
| ListBase *regionbase = (sl == area->spacedata.first) ? &area->regionbase : | ListBase *regionbase = (sl == area->spacedata.first) ? &area->regionbase : | ||||
| &sl->regionbase; | &sl->regionbase; | ||||
| for (ARegion *region = regionbase->first; region; region = region->next) { | LISTBASE_FOREACH (ARegion *, region, regionbase) { | ||||
| wmGizmoMap *gzmap = region->gizmo_map; | wmGizmoMap *gzmap = region->gizmo_map; | ||||
| if (gzmap != NULL && gzmap->tag_remove_group) { | if (gzmap != NULL && gzmap->tag_remove_group) { | ||||
| gzmap->tag_remove_group = false; | gzmap->tag_remove_group = false; | ||||
| for (wmGizmoGroup *gzgroup = gzmap->groups.first, *gzgroup_next; gzgroup; | for (wmGizmoGroup *gzgroup = gzmap->groups.first, *gzgroup_next; gzgroup; | ||||
| gzgroup = gzgroup_next) { | gzgroup = gzgroup_next) { | ||||
| gzgroup_next = gzgroup->next; | gzgroup_next = gzgroup->next; | ||||
| if (gzgroup->tag_remove) { | if (gzgroup->tag_remove) { | ||||
| Show All 17 Lines | |||||
| * | * | ||||
| * Use when adjusting themes. | * Use when adjusting themes. | ||||
| * | * | ||||
| * \{ */ | * \{ */ | ||||
| void WM_reinit_gizmomap_all(Main *bmain) | void WM_reinit_gizmomap_all(Main *bmain) | ||||
| { | { | ||||
| for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) { | for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) { | ||||
| for (ScrArea *area = screen->areabase.first; area; area = area->next) { | LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) { | ||||
| for (SpaceLink *sl = area->spacedata.first; sl; sl = sl->next) { | LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) { | ||||
| ListBase *regionbase = (sl == area->spacedata.first) ? &area->regionbase : &sl->regionbase; | ListBase *regionbase = (sl == area->spacedata.first) ? &area->regionbase : &sl->regionbase; | ||||
| for (ARegion *region = regionbase->first; region; region = region->next) { | LISTBASE_FOREACH (ARegion *, region, regionbase) { | ||||
| wmGizmoMap *gzmap = region->gizmo_map; | wmGizmoMap *gzmap = region->gizmo_map; | ||||
| if ((gzmap != NULL) && (gzmap->is_init == false)) { | if ((gzmap != NULL) && (gzmap->is_init == false)) { | ||||
| WM_gizmomap_reinit(gzmap); | WM_gizmomap_reinit(gzmap); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| /** \} */ | /** \} */ | ||||