Changeset View
Changeset View
Standalone View
Standalone View
source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c
| Show First 20 Lines • Show All 216 Lines • ▼ Show 20 Lines | wmGizmo *wm_gizmogroup_find_intersected_gizmo(wmWindowManager *wm, | ||||
| const wmGizmoGroup *gzgroup, | const wmGizmoGroup *gzgroup, | ||||
| bContext *C, | bContext *C, | ||||
| const int event_modifier, | const int event_modifier, | ||||
| const int mval[2], | const int mval[2], | ||||
| int *r_part) | int *r_part) | ||||
| { | { | ||||
| int gzgroup_keymap_uses_modifier = -1; | int gzgroup_keymap_uses_modifier = -1; | ||||
| for (wmGizmo *gz = gzgroup->gizmos.first; gz; gz = gz->next) { | LISTBASE_FOREACH (wmGizmo *, gz, &gzgroup->gizmos) { | ||||
| if (gz->type->test_select && (gz->flag & (WM_GIZMO_HIDDEN | WM_GIZMO_HIDDEN_SELECT)) == 0) { | if (gz->type->test_select && (gz->flag & (WM_GIZMO_HIDDEN | WM_GIZMO_HIDDEN_SELECT)) == 0) { | ||||
| if (!wm_gizmo_keymap_uses_event_modifier( | if (!wm_gizmo_keymap_uses_event_modifier( | ||||
| wm, gzgroup, gz, event_modifier, &gzgroup_keymap_uses_modifier)) { | wm, gzgroup, gz, event_modifier, &gzgroup_keymap_uses_modifier)) { | ||||
| continue; | continue; | ||||
| } | } | ||||
| if ((*r_part = gz->type->test_select(C, gz, mval)) != -1) { | if ((*r_part = gz->type->test_select(C, gz, mval)) != -1) { | ||||
| ▲ Show 20 Lines • Show All 60 Lines • ▼ Show 20 Lines | |||||
| void WM_gizmo_group_remove_by_tool(bContext *C, | void WM_gizmo_group_remove_by_tool(bContext *C, | ||||
| Main *bmain, | Main *bmain, | ||||
| const wmGizmoGroupType *gzgt, | const wmGizmoGroupType *gzgt, | ||||
| const bToolRef *tref) | const bToolRef *tref) | ||||
| { | { | ||||
| wmGizmoMapType *gzmap_type = WM_gizmomaptype_find(&gzgt->gzmap_params); | wmGizmoMapType *gzmap_type = WM_gizmomaptype_find(&gzgt->gzmap_params); | ||||
| for (bScreen *sc = bmain->screens.first; sc; sc = sc->id.next) { | for (bScreen *sc = bmain->screens.first; sc; sc = sc->id.next) { | ||||
| for (ScrArea *area = sc->areabase.first; area; area = area->next) { | LISTBASE_FOREACH (ScrArea *, area, &sc->areabase) { | ||||
| if (area->runtime.tool == tref) { | if (area->runtime.tool == tref) { | ||||
| for (ARegion *region = area->regionbase.first; region; region = region->next) { | LISTBASE_FOREACH (ARegion *, region, &area->regionbase) { | ||||
| wmGizmoMap *gzmap = region->gizmo_map; | wmGizmoMap *gzmap = region->gizmo_map; | ||||
| if (gzmap && gzmap->type == gzmap_type) { | if (gzmap && gzmap->type == gzmap_type) { | ||||
| wmGizmoGroup *gzgroup, *gzgroup_next; | wmGizmoGroup *gzgroup, *gzgroup_next; | ||||
| for (gzgroup = gzmap->groups.first; gzgroup; gzgroup = gzgroup_next) { | for (gzgroup = gzmap->groups.first; gzgroup; gzgroup = gzgroup_next) { | ||||
| gzgroup_next = gzgroup->next; | gzgroup_next = gzgroup->next; | ||||
| if (gzgroup->type == gzgt) { | if (gzgroup->type == gzgt) { | ||||
| BLI_assert(gzgroup->parent_gzmap == gzmap); | BLI_assert(gzgroup->parent_gzmap == gzmap); | ||||
| wm_gizmogroup_free(C, gzgroup); | wm_gizmogroup_free(C, gzgroup); | ||||
| Show All 19 Lines | default: | ||||
| BLI_assert(0); | BLI_assert(0); | ||||
| return false; | return false; | ||||
| } | } | ||||
| } | } | ||||
| bool wm_gizmogroup_is_any_selected(const wmGizmoGroup *gzgroup) | bool wm_gizmogroup_is_any_selected(const wmGizmoGroup *gzgroup) | ||||
| { | { | ||||
| if (gzgroup->type->flag & WM_GIZMOGROUPTYPE_SELECT) { | if (gzgroup->type->flag & WM_GIZMOGROUPTYPE_SELECT) { | ||||
| for (const wmGizmo *gz = gzgroup->gizmos.first; gz; gz = gz->next) { | LISTBASE_FOREACH (const wmGizmo *, gz, &gzgroup->gizmos) { | ||||
| if (gz->state & WM_GIZMO_STATE_SELECT) { | if (gz->state & WM_GIZMO_STATE_SELECT) { | ||||
| return true; | return true; | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| return false; | return false; | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 496 Lines • ▼ Show 20 Lines | |||||
| /** \name wmGizmoGroupType | /** \name wmGizmoGroupType | ||||
| * | * | ||||
| * \{ */ | * \{ */ | ||||
| struct wmGizmoGroupTypeRef *WM_gizmomaptype_group_find_ptr(struct wmGizmoMapType *gzmap_type, | struct wmGizmoGroupTypeRef *WM_gizmomaptype_group_find_ptr(struct wmGizmoMapType *gzmap_type, | ||||
| const wmGizmoGroupType *gzgt) | const wmGizmoGroupType *gzgt) | ||||
| { | { | ||||
| /* could use hash lookups as operator types do, for now simple search. */ | /* could use hash lookups as operator types do, for now simple search. */ | ||||
| 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 == gzgt) { | if (gzgt_ref->type == gzgt) { | ||||
| return gzgt_ref; | return gzgt_ref; | ||||
| } | } | ||||
| } | } | ||||
| return NULL; | return NULL; | ||||
| } | } | ||||
| struct wmGizmoGroupTypeRef *WM_gizmomaptype_group_find(struct wmGizmoMapType *gzmap_type, | struct wmGizmoGroupTypeRef *WM_gizmomaptype_group_find(struct wmGizmoMapType *gzmap_type, | ||||
| const char *idname) | const char *idname) | ||||
| { | { | ||||
| /* could use hash lookups as operator types do, for now simple search. */ | /* could use hash lookups as operator types do, for now simple search. */ | ||||
| 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 (STREQ(idname, gzgt_ref->type->idname)) { | if (STREQ(idname, gzgt_ref->type->idname)) { | ||||
| return gzgt_ref; | return gzgt_ref; | ||||
| } | } | ||||
| } | } | ||||
| return NULL; | return NULL; | ||||
| } | } | ||||
| /** | /** | ||||
| Show All 28 Lines | |||||
| { | { | ||||
| /* Tools add themselves. */ | /* Tools add themselves. */ | ||||
| if (gzgt->flag & WM_GIZMOGROUPTYPE_TOOL_INIT) { | if (gzgt->flag & WM_GIZMOGROUPTYPE_TOOL_INIT) { | ||||
| return; | return; | ||||
| } | } | ||||
| /* now create a gizmo for all existing areas */ | /* now create a gizmo for all existing areas */ | ||||
| for (bScreen *sc = bmain->screens.first; sc; sc = sc->id.next) { | for (bScreen *sc = bmain->screens.first; sc; sc = sc->id.next) { | ||||
| for (ScrArea *area = sc->areabase.first; area; area = area->next) { | LISTBASE_FOREACH (ScrArea *, area, &sc->areabase) { | ||||
| for (SpaceLink *sl = area->spacedata.first; sl; sl = sl->next) { | LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) { | ||||
| ListBase *lb = (sl == area->spacedata.first) ? &area->regionbase : &sl->regionbase; | ListBase *lb = (sl == area->spacedata.first) ? &area->regionbase : &sl->regionbase; | ||||
| for (ARegion *region = lb->first; region; region = region->next) { | LISTBASE_FOREACH (ARegion *, region, lb) { | ||||
| wmGizmoMap *gzmap = region->gizmo_map; | wmGizmoMap *gzmap = region->gizmo_map; | ||||
| if (gzmap && gzmap->type == gzmap_type) { | if (gzmap && gzmap->type == gzmap_type) { | ||||
| WM_gizmomaptype_group_init_runtime_with_region(gzmap_type, gzgt, region); | WM_gizmomaptype_group_init_runtime_with_region(gzmap_type, gzgt, region); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| Show All 35 Lines | |||||
| void WM_gizmomaptype_group_unlink(bContext *C, | void WM_gizmomaptype_group_unlink(bContext *C, | ||||
| Main *bmain, | Main *bmain, | ||||
| wmGizmoMapType *gzmap_type, | wmGizmoMapType *gzmap_type, | ||||
| const wmGizmoGroupType *gzgt) | const wmGizmoGroupType *gzgt) | ||||
| { | { | ||||
| /* Free instances. */ | /* Free instances. */ | ||||
| for (bScreen *sc = bmain->screens.first; sc; sc = sc->id.next) { | for (bScreen *sc = bmain->screens.first; sc; sc = sc->id.next) { | ||||
| for (ScrArea *area = sc->areabase.first; area; area = area->next) { | LISTBASE_FOREACH (ScrArea *, area, &sc->areabase) { | ||||
| for (SpaceLink *sl = area->spacedata.first; sl; sl = sl->next) { | LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) { | ||||
| ListBase *lb = (sl == area->spacedata.first) ? &area->regionbase : &sl->regionbase; | ListBase *lb = (sl == area->spacedata.first) ? &area->regionbase : &sl->regionbase; | ||||
| for (ARegion *region = lb->first; region; region = region->next) { | LISTBASE_FOREACH (ARegion *, region, lb) { | ||||
| wmGizmoMap *gzmap = region->gizmo_map; | wmGizmoMap *gzmap = region->gizmo_map; | ||||
| if (gzmap && gzmap->type == gzmap_type) { | if (gzmap && gzmap->type == gzmap_type) { | ||||
| wmGizmoGroup *gzgroup, *gzgroup_next; | wmGizmoGroup *gzgroup, *gzgroup_next; | ||||
| for (gzgroup = gzmap->groups.first; gzgroup; gzgroup = gzgroup_next) { | for (gzgroup = gzmap->groups.first; gzgroup; gzgroup = gzgroup_next) { | ||||
| gzgroup_next = gzgroup->next; | gzgroup_next = gzgroup->next; | ||||
| if (gzgroup->type == gzgt) { | if (gzgroup->type == gzgt) { | ||||
| BLI_assert(gzgroup->parent_gzmap == gzmap); | BLI_assert(gzgroup->parent_gzmap == gzmap); | ||||
| wm_gizmogroup_free(C, gzgroup); | wm_gizmogroup_free(C, gzgroup); | ||||
| ▲ Show 20 Lines • Show All 150 Lines • ▼ Show 20 Lines | void WM_gizmo_group_type_unlink_delayed(const char *idname) | ||||
| BLI_assert(gzgt != NULL); | BLI_assert(gzgt != NULL); | ||||
| WM_gizmo_group_type_unlink_delayed_ptr(gzgt); | WM_gizmo_group_type_unlink_delayed_ptr(gzgt); | ||||
| } | } | ||||
| void WM_gizmo_group_unlink_delayed_ptr_from_space(wmGizmoGroupType *gzgt, | void WM_gizmo_group_unlink_delayed_ptr_from_space(wmGizmoGroupType *gzgt, | ||||
| wmGizmoMapType *gzmap_type, | wmGizmoMapType *gzmap_type, | ||||
| ScrArea *area) | ScrArea *area) | ||||
| { | { | ||||
| for (ARegion *region = area->regionbase.first; region; region = region->next) { | LISTBASE_FOREACH (ARegion *, region, &area->regionbase) { | ||||
| wmGizmoMap *gzmap = region->gizmo_map; | wmGizmoMap *gzmap = region->gizmo_map; | ||||
| if (gzmap && gzmap->type == gzmap_type) { | if (gzmap && gzmap->type == gzmap_type) { | ||||
| for (wmGizmoGroup *gzgroup = gzmap->groups.first; gzgroup; gzgroup = gzgroup->next) { | LISTBASE_FOREACH (wmGizmoGroup *, gzgroup, &gzmap->groups) { | ||||
| if (gzgroup->type == gzgt) { | if (gzgroup->type == gzgt) { | ||||
| WM_gizmo_group_tag_remove(gzgroup); | WM_gizmo_group_tag_remove(gzgroup); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 53 Lines • Show Last 20 Lines | |||||