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:
Diffstat (limited to 'source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c')
-rw-r--r--source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c647
1 files changed, 336 insertions, 311 deletions
diff --git a/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c b/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c
index 9da1591d535..0b54f0cbec1 100644
--- a/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c
+++ b/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c
@@ -75,7 +75,7 @@ typedef enum eWM_GizmoFlagGroupTypeGlobalFlag {
WM_GIZMOMAPTYPE_GLOBAL_UPDATE_REMOVE = (1 << 1),
} eWM_GizmoFlagGroupTypeGlobalFlag;
-static eWM_GizmoFlagGroupTypeGlobalFlag wm_mmap_type_update_flag = 0;
+static eWM_GizmoFlagGroupTypeGlobalFlag wm_gzmap_type_update_flag = 0;
/**
* Gizmo-map update tagging.
@@ -94,9 +94,9 @@ enum {
*
* \{ */
-static void wm_gizmomap_select_array_ensure_len_alloc(wmGizmoMap *mmap, int len)
+static void wm_gizmomap_select_array_ensure_len_alloc(wmGizmoMap *gzmap, int len)
{
- wmGizmoMapSelectState *msel = &mmap->mmap_context.select;
+ wmGizmoMapSelectState *msel = &gzmap->gzmap_context.select;
if (len <= msel->len_alloc) {
return;
}
@@ -104,20 +104,20 @@ static void wm_gizmomap_select_array_ensure_len_alloc(wmGizmoMap *mmap, int len)
msel->len_alloc = len;
}
-void wm_gizmomap_select_array_clear(wmGizmoMap *mmap)
+void wm_gizmomap_select_array_clear(wmGizmoMap *gzmap)
{
- wmGizmoMapSelectState *msel = &mmap->mmap_context.select;
+ wmGizmoMapSelectState *msel = &gzmap->gzmap_context.select;
MEM_SAFE_FREE(msel->items);
msel->len = 0;
msel->len_alloc = 0;
}
-void wm_gizmomap_select_array_shrink(wmGizmoMap *mmap, int len_subtract)
+void wm_gizmomap_select_array_shrink(wmGizmoMap *gzmap, int len_subtract)
{
- wmGizmoMapSelectState *msel = &mmap->mmap_context.select;
+ wmGizmoMapSelectState *msel = &gzmap->gzmap_context.select;
msel->len -= len_subtract;
if (msel->len <= 0) {
- wm_gizmomap_select_array_clear(mmap);
+ wm_gizmomap_select_array_clear(gzmap);
}
else {
if (msel->len < msel->len_alloc / 2) {
@@ -127,27 +127,27 @@ void wm_gizmomap_select_array_shrink(wmGizmoMap *mmap, int len_subtract)
}
}
-void wm_gizmomap_select_array_push_back(wmGizmoMap *mmap, wmGizmo *mpr)
+void wm_gizmomap_select_array_push_back(wmGizmoMap *gzmap, wmGizmo *gz)
{
- wmGizmoMapSelectState *msel = &mmap->mmap_context.select;
+ wmGizmoMapSelectState *msel = &gzmap->gzmap_context.select;
BLI_assert(msel->len <= msel->len_alloc);
if (msel->len == msel->len_alloc) {
msel->len_alloc = (msel->len + 1) * 2;
msel->items = MEM_reallocN(msel->items, sizeof(*msel->items) * msel->len_alloc);
}
- msel->items[msel->len++] = mpr;
+ msel->items[msel->len++] = gz;
}
-void wm_gizmomap_select_array_remove(wmGizmoMap *mmap, wmGizmo *mpr)
+void wm_gizmomap_select_array_remove(wmGizmoMap *gzmap, wmGizmo *gz)
{
- wmGizmoMapSelectState *msel = &mmap->mmap_context.select;
+ wmGizmoMapSelectState *msel = &gzmap->gzmap_context.select;
/* remove gizmo from selected_gizmos array */
for (int i = 0; i < msel->len; i++) {
- if (msel->items[i] == mpr) {
+ if (msel->items[i] == gz) {
for (int j = i; j < (msel->len - 1); j++) {
msel->items[j] = msel->items[j + 1];
}
- wm_gizmomap_select_array_shrink(mmap, 1);
+ wm_gizmomap_select_array_shrink(gzmap, 1);
break;
}
}
@@ -166,84 +166,84 @@ void wm_gizmomap_select_array_remove(wmGizmoMap *mmap, wmGizmo *mpr)
* Creates a gizmo-map with all registered gizmos for that type
*/
wmGizmoMap *WM_gizmomap_new_from_type(
- const struct wmGizmoMapType_Params *mmap_params)
+ const struct wmGizmoMapType_Params *gzmap_params)
{
- wmGizmoMapType *mmap_type = WM_gizmomaptype_ensure(mmap_params);
- wmGizmoMap *mmap;
+ wmGizmoMapType *gzmap_type = WM_gizmomaptype_ensure(gzmap_params);
+ wmGizmoMap *gzmap;
- mmap = MEM_callocN(sizeof(wmGizmoMap), "GizmoMap");
- mmap->type = mmap_type;
- WM_gizmomap_tag_refresh(mmap);
+ gzmap = MEM_callocN(sizeof(wmGizmoMap), "GizmoMap");
+ gzmap->type = gzmap_type;
+ WM_gizmomap_tag_refresh(gzmap);
/* create all gizmo-groups for this gizmo-map. We may create an empty one
* too in anticipation of gizmos from operators etc */
- for (wmGizmoGroupTypeRef *wgt_ref = mmap_type->grouptype_refs.first; wgt_ref; wgt_ref = wgt_ref->next) {
- wm_gizmogroup_new_from_type(mmap, wgt_ref->type);
+ for (wmGizmoGroupTypeRef *gzgt_ref = gzmap_type->grouptype_refs.first; gzgt_ref; gzgt_ref = gzgt_ref->next) {
+ wm_gizmogroup_new_from_type(gzmap, gzgt_ref->type);
}
- return mmap;
+ return gzmap;
}
-void wm_gizmomap_remove(wmGizmoMap *mmap)
+void wm_gizmomap_remove(wmGizmoMap *gzmap)
{
/* Clear first so further calls don't waste time trying to maintain correct array state. */
- wm_gizmomap_select_array_clear(mmap);
+ wm_gizmomap_select_array_clear(gzmap);
- for (wmGizmoGroup *mgroup = mmap->groups.first, *mgroup_next; mgroup; mgroup = mgroup_next) {
- mgroup_next = mgroup->next;
- BLI_assert(mgroup->parent_mmap == mmap);
- wm_gizmogroup_free(NULL, mgroup);
+ for (wmGizmoGroup *gzgroup = gzmap->groups.first, *gzgroup_next; gzgroup; gzgroup = gzgroup_next) {
+ gzgroup_next = gzgroup->next;
+ BLI_assert(gzgroup->parent_gzmap == gzmap);
+ wm_gizmogroup_free(NULL, gzgroup);
}
- BLI_assert(BLI_listbase_is_empty(&mmap->groups));
+ BLI_assert(BLI_listbase_is_empty(&gzmap->groups));
- MEM_freeN(mmap);
+ MEM_freeN(gzmap);
}
wmGizmoGroup *WM_gizmomap_group_find(
- struct wmGizmoMap *mmap,
+ struct wmGizmoMap *gzmap,
const char *idname)
{
- wmGizmoGroupType *wgt = WM_gizmogrouptype_find(idname, false);
- if (wgt) {
- return WM_gizmomap_group_find_ptr(mmap, wgt);
+ wmGizmoGroupType *gzgt = WM_gizmogrouptype_find(idname, false);
+ if (gzgt) {
+ return WM_gizmomap_group_find_ptr(gzmap, gzgt);
}
return NULL;
}
wmGizmoGroup *WM_gizmomap_group_find_ptr(
- struct wmGizmoMap *mmap,
- const struct wmGizmoGroupType *wgt)
+ struct wmGizmoMap *gzmap,
+ const struct wmGizmoGroupType *gzgt)
{
- for (wmGizmoGroup *mgroup = mmap->groups.first; mgroup; mgroup = mgroup->next) {
- if (mgroup->type == wgt) {
- return mgroup;
+ for (wmGizmoGroup *gzgroup = gzmap->groups.first; gzgroup; gzgroup = gzgroup->next) {
+ if (gzgroup->type == gzgt) {
+ return gzgroup;
}
}
return NULL;
}
-const ListBase *WM_gizmomap_group_list(wmGizmoMap *mmap)
+const ListBase *WM_gizmomap_group_list(wmGizmoMap *gzmap)
{
- return &mmap->groups;
+ return &gzmap->groups;
}
-bool WM_gizmomap_is_any_selected(const wmGizmoMap *mmap)
+bool WM_gizmomap_is_any_selected(const wmGizmoMap *gzmap)
{
- return mmap->mmap_context.select.len != 0;
+ return gzmap->gzmap_context.select.len != 0;
}
/**
* \note We could use a callback to define bounds, for now just use matrix location.
*/
bool WM_gizmomap_minmax(
- const wmGizmoMap *mmap, bool UNUSED(use_hidden), bool use_select,
+ const wmGizmoMap *gzmap, bool UNUSED(use_hidden), bool use_select,
float r_min[3], float r_max[3])
{
if (use_select) {
int i;
- for (i = 0; i < mmap->mmap_context.select.len; i++) {
- minmax_v3v3_v3(r_min, r_max, mmap->mmap_context.select.items[i]->matrix_basis[3]);
+ for (i = 0; i < gzmap->gzmap_context.select.len; i++) {
+ minmax_v3v3_v3(r_min, r_max, gzmap->gzmap_context.select.items[i]->matrix_basis[3]);
}
return i != 0;
}
@@ -255,7 +255,7 @@ bool WM_gizmomap_minmax(
}
/**
- * Creates and returns idname hash table for (visible) gizmos in \a mmap
+ * Creates and returns idname hash table for (visible) gizmos in \a gzmap
*
* \param poll Polling function for excluding gizmos.
* \param data Custom data passed to \a poll
@@ -264,20 +264,20 @@ bool WM_gizmomap_minmax(
* best we use an iterator function instead of a hash.
*/
static GHash *WM_gizmomap_gizmo_hash_new(
- const bContext *C, wmGizmoMap *mmap,
+ const bContext *C, wmGizmoMap *gzmap,
bool (*poll)(const wmGizmo *, void *),
void *data, const bool include_hidden)
{
GHash *hash = BLI_ghash_ptr_new(__func__);
/* collect gizmos */
- for (wmGizmoGroup *mgroup = mmap->groups.first; mgroup; mgroup = mgroup->next) {
- if (WM_gizmo_group_type_poll(C, mgroup->type)) {
- for (wmGizmo *mpr = mgroup->gizmos.first; mpr; mpr = mpr->next) {
- if ((include_hidden || (mpr->flag & WM_GIZMO_HIDDEN) == 0) &&
- (!poll || poll(mpr, data)))
+ for (wmGizmoGroup *gzgroup = gzmap->groups.first; gzgroup; gzgroup = gzgroup->next) {
+ if (WM_gizmo_group_type_poll(C, gzgroup->type)) {
+ for (wmGizmo *gz = gzgroup->gizmos.first; gz; gz = gz->next) {
+ if ((include_hidden || (gz->flag & WM_GIZMO_HIDDEN) == 0) &&
+ (!poll || poll(gz, data)))
{
- BLI_ghash_insert(hash, mpr, mpr);
+ BLI_ghash_insert(hash, gz, gz);
}
}
}
@@ -286,12 +286,12 @@ static GHash *WM_gizmomap_gizmo_hash_new(
return hash;
}
-void WM_gizmomap_tag_refresh(wmGizmoMap *mmap)
+void WM_gizmomap_tag_refresh(wmGizmoMap *gzmap)
{
- if (mmap) {
+ if (gzmap) {
/* We might want only to refresh some, for tag all steps. */
for (int i = 0; i < WM_GIZMOMAP_DRAWSTEP_MAX; i++) {
- mmap->update_flag[i] |= (
+ gzmap->update_flag[i] |= (
GIZMOMAP_IS_PREPARE_DRAW |
GIZMOMAP_IS_REFRESH_CALLBACK);
}
@@ -299,11 +299,11 @@ void WM_gizmomap_tag_refresh(wmGizmoMap *mmap)
}
static bool gizmo_prepare_drawing(
- wmGizmoMap *mmap, wmGizmo *mpr,
+ wmGizmoMap *gzmap, wmGizmo *gz,
const bContext *C, ListBase *draw_gizmos,
const eWM_GizmoFlagMapDrawStep drawstep)
{
- int do_draw = wm_gizmo_is_visible(mpr);
+ int do_draw = wm_gizmo_is_visible(gz);
if (do_draw == 0) {
/* skip */
}
@@ -311,10 +311,10 @@ static bool gizmo_prepare_drawing(
/* Ensure we get RNA updates */
if (do_draw & WM_GIZMO_IS_VISIBLE_UPDATE) {
/* hover gizmos need updating, even if we don't draw them */
- wm_gizmo_update(mpr, C, (mmap->update_flag[drawstep] & GIZMOMAP_IS_PREPARE_DRAW) != 0);
+ wm_gizmo_update(gz, C, (gzmap->update_flag[drawstep] & GIZMOMAP_IS_PREPARE_DRAW) != 0);
}
if (do_draw & WM_GIZMO_IS_VISIBLE_DRAW) {
- BLI_addhead(draw_gizmos, BLI_genericNodeN(mpr));
+ BLI_addhead(draw_gizmos, BLI_genericNodeN(gz));
}
return true;
}
@@ -323,23 +323,23 @@ static bool gizmo_prepare_drawing(
}
/**
- * Update gizmos of \a mmap to prepare for drawing. Adds all gizmos that
+ * Update gizmos of \a gzmap to prepare for drawing. Adds all gizmos that
* should be drawn to list \a draw_gizmos, note that added items need freeing.
*/
static void gizmomap_prepare_drawing(
- wmGizmoMap *mmap, const bContext *C, ListBase *draw_gizmos,
+ wmGizmoMap *gzmap, const bContext *C, ListBase *draw_gizmos,
const eWM_GizmoFlagMapDrawStep drawstep)
{
- if (!mmap || BLI_listbase_is_empty(&mmap->groups))
+ if (!gzmap || BLI_listbase_is_empty(&gzmap->groups))
return;
- wmGizmo *mpr_modal = mmap->mmap_context.modal;
+ wmGizmo *gz_modal = gzmap->gzmap_context.modal;
/* only active gizmo needs updating */
- if (mpr_modal) {
- if ((mpr_modal->parent_mgroup->type->flag & WM_GIZMOGROUPTYPE_DRAW_MODAL_ALL) == 0) {
- if (wm_gizmogroup_is_visible_in_drawstep(mpr_modal->parent_mgroup, drawstep)) {
- if (gizmo_prepare_drawing(mmap, mpr_modal, C, draw_gizmos, drawstep)) {
- mmap->update_flag[drawstep] &= ~GIZMOMAP_IS_PREPARE_DRAW;
+ if (gz_modal) {
+ if ((gz_modal->parent_gzgroup->type->flag & WM_GIZMOGROUPTYPE_DRAW_MODAL_ALL) == 0) {
+ if (wm_gizmogroup_is_visible_in_drawstep(gz_modal->parent_gzgroup, drawstep)) {
+ if (gizmo_prepare_drawing(gzmap, gz_modal, C, draw_gizmos, drawstep)) {
+ gzmap->update_flag[drawstep] &= ~GIZMOMAP_IS_PREPARE_DRAW;
}
}
/* don't draw any other gizmos */
@@ -347,46 +347,46 @@ static void gizmomap_prepare_drawing(
}
}
- for (wmGizmoGroup *mgroup = mmap->groups.first; mgroup; mgroup = mgroup->next) {
+ for (wmGizmoGroup *gzgroup = gzmap->groups.first; gzgroup; gzgroup = gzgroup->next) {
/* check group visibility - drawstep first to avoid unnecessary call of group poll callback */
- if (!wm_gizmogroup_is_visible_in_drawstep(mgroup, drawstep) ||
- !WM_gizmo_group_type_poll(C, mgroup->type))
+ if (!wm_gizmogroup_is_visible_in_drawstep(gzgroup, drawstep) ||
+ !WM_gizmo_group_type_poll(C, gzgroup->type))
{
continue;
}
/* needs to be initialized on first draw */
/* XXX weak: Gizmo-group may skip refreshing if it's invisible (map gets untagged nevertheless) */
- if (mmap->update_flag[drawstep] & GIZMOMAP_IS_REFRESH_CALLBACK) {
+ if (gzmap->update_flag[drawstep] & GIZMOMAP_IS_REFRESH_CALLBACK) {
/* force refresh again. */
- mgroup->init_flag &= ~WM_GIZMOGROUP_INIT_REFRESH;
+ gzgroup->init_flag &= ~WM_GIZMOGROUP_INIT_REFRESH;
}
/* Calls `setup`, `setup_keymap` and `refresh` if they're defined. */
- wm_gizmogroup_ensure_initialized(mgroup, C);
+ wm_gizmogroup_ensure_initialized(gzgroup, C);
/* prepare drawing */
- if (mgroup->type->draw_prepare) {
- mgroup->type->draw_prepare(C, mgroup);
+ if (gzgroup->type->draw_prepare) {
+ gzgroup->type->draw_prepare(C, gzgroup);
}
- for (wmGizmo *mpr = mgroup->gizmos.first; mpr; mpr = mpr->next) {
- gizmo_prepare_drawing(mmap, mpr, C, draw_gizmos, drawstep);
+ for (wmGizmo *gz = gzgroup->gizmos.first; gz; gz = gz->next) {
+ gizmo_prepare_drawing(gzmap, gz, C, draw_gizmos, drawstep);
}
}
- mmap->update_flag[drawstep] &=
+ gzmap->update_flag[drawstep] &=
~(GIZMOMAP_IS_REFRESH_CALLBACK |
GIZMOMAP_IS_PREPARE_DRAW);
}
/**
- * Draw all visible gizmos in \a mmap.
+ * Draw all visible gizmos in \a gzmap.
* Uses global draw_gizmos listbase.
*/
-static void gizmos_draw_list(const wmGizmoMap *mmap, const bContext *C, ListBase *draw_gizmos)
+static void gizmos_draw_list(const wmGizmoMap *gzmap, const bContext *C, ListBase *draw_gizmos)
{
/* Can be empty if we're dynamically added and removed. */
- if ((mmap == NULL) || BLI_listbase_is_empty(&mmap->groups)) {
+ if ((gzmap == NULL) || BLI_listbase_is_empty(&gzmap->groups)) {
return;
}
@@ -397,13 +397,13 @@ static void gizmos_draw_list(const wmGizmoMap *mmap, const bContext *C, ListBase
/* draw_gizmos contains all visible gizmos - draw them */
for (LinkData *link = draw_gizmos->first, *link_next; link; link = link_next) {
- wmGizmo *mpr = link->data;
+ wmGizmo *gz = link->data;
link_next = link->next;
- bool is_depth = (mpr->parent_mgroup->type->flag & WM_GIZMOGROUPTYPE_DEPTH_3D) != 0;
+ bool is_depth = (gz->parent_gzgroup->type->flag & WM_GIZMOGROUPTYPE_DEPTH_3D) != 0;
/* Weak! since we don't 100% support depth yet (select ignores depth) always show highlighted */
- if (is_depth && (mpr->state & WM_GIZMO_STATE_HIGHLIGHT)) {
+ if (is_depth && (gz->state & WM_GIZMO_STATE_HIGHLIGHT)) {
is_depth = false;
}
@@ -424,7 +424,7 @@ static void gizmos_draw_list(const wmGizmoMap *mmap, const bContext *C, ListBase
glEnable(GL_LINE_SMOOTH);
glEnable(GL_POLYGON_SMOOTH);
- mpr->type->draw(C, mpr);
+ gz->type->draw(C, gz);
glDisable(GL_LINE_SMOOTH);
glDisable(GL_POLYGON_SMOOTH);
@@ -439,7 +439,7 @@ static void gizmos_draw_list(const wmGizmoMap *mmap, const bContext *C, ListBase
}
void WM_gizmomap_draw(
- wmGizmoMap *mmap, const bContext *C,
+ wmGizmoMap *gzmap, const bContext *C,
const eWM_GizmoFlagMapDrawStep drawstep)
{
if (!WM_gizmo_context_check_drawstep(C, drawstep)) {
@@ -448,24 +448,32 @@ void WM_gizmomap_draw(
ListBase draw_gizmos = {NULL};
- gizmomap_prepare_drawing(mmap, C, &draw_gizmos, drawstep);
- gizmos_draw_list(mmap, C, &draw_gizmos);
+ gizmomap_prepare_drawing(gzmap, C, &draw_gizmos, drawstep);
+ gizmos_draw_list(gzmap, C, &draw_gizmos);
BLI_assert(BLI_listbase_is_empty(&draw_gizmos));
}
-static void gizmo_draw_select_3D_loop(const bContext *C, ListBase *visible_gizmos)
+static void gizmo_draw_select_3D_loop(
+ const bContext *C, ListBase *visible_gizmos,
+ const wmGizmo *gz_stop)
{
int select_id = 0;
- wmGizmo *mpr;
+ wmGizmo *gz;
/* TODO(campbell): this depends on depth buffer being written to, currently broken for the 3D view. */
bool is_depth_prev = false;
bool is_depth_skip_prev = false;
- for (LinkData *link = visible_gizmos->first; link; link = link->next) {
- mpr = link->data;
+ for (LinkData *link = visible_gizmos->first; link; link = link->next, select_id++) {
+ gz = link->data;
+ if (gz == gz_stop) {
+ break;
+ }
+ if (gz->type->draw_select == NULL) {
+ continue;
+ }
- bool is_depth = (mpr->parent_mgroup->type->flag & WM_GIZMOGROUPTYPE_DEPTH_3D) != 0;
+ bool is_depth = (gz->parent_gzgroup->type->flag & WM_GIZMOGROUPTYPE_DEPTH_3D) != 0;
if (is_depth == is_depth_prev) {
/* pass */
}
@@ -478,7 +486,7 @@ static void gizmo_draw_select_3D_loop(const bContext *C, ListBase *visible_gizmo
}
is_depth_prev = is_depth;
}
- bool is_depth_skip = (mpr->flag & WM_GIZMO_SELECT_BACKGROUND) != 0;
+ bool is_depth_skip = (gz->flag & WM_GIZMO_SELECT_BACKGROUND) != 0;
if (is_depth_skip == is_depth_skip_prev) {
/* pass */
}
@@ -489,10 +497,7 @@ static void gizmo_draw_select_3D_loop(const bContext *C, ListBase *visible_gizmo
/* pass the selection id shifted by 8 bits. Last 8 bits are used for selected gizmo part id */
- mpr->type->draw_select(C, mpr, select_id << 8);
-
-
- select_id++;
+ gz->type->draw_select(C, gz, select_id << 8);
}
if (is_depth_prev) {
@@ -505,7 +510,7 @@ static void gizmo_draw_select_3D_loop(const bContext *C, ListBase *visible_gizmo
static int gizmo_find_intersected_3d_intern(
ListBase *visible_gizmos, const bContext *C, const int co[2],
- const int hotspot)
+ const int hotspot, const wmGizmo *gz_stop)
{
ScrArea *sa = CTX_wm_area(C);
ARegion *ar = CTX_wm_region(C);
@@ -525,13 +530,13 @@ static int gizmo_find_intersected_3d_intern(
else
GPU_select_begin(buffer, ARRAY_SIZE(buffer), &rect, GPU_SELECT_ALL, 0);
/* do the drawing */
- gizmo_draw_select_3D_loop(C, visible_gizmos);
+ gizmo_draw_select_3D_loop(C, visible_gizmos, gz_stop);
hits = GPU_select_end();
if (do_passes && (hits > 0)) {
GPU_select_begin(buffer, ARRAY_SIZE(buffer), &rect, GPU_SELECT_NEAREST_SECOND_PASS, hits);
- gizmo_draw_select_3D_loop(C, visible_gizmos);
+ gizmo_draw_select_3D_loop(C, visible_gizmos, gz_stop);
GPU_select_end();
}
@@ -552,36 +557,56 @@ static wmGizmo *gizmo_find_intersected_3d(
wmGizmo *result = NULL;
int hit = -1;
- int hotspot_radii[] = {
- 3 * U.pixelsize,
- /* This runs on mouse move, careful doing too many tests! */
- 10 * U.pixelsize,
- };
-
*r_part = 0;
/* set up view matrices */
view3d_operator_needs_opengl(C);
- hit = -1;
-
- for (int i = 0; i < ARRAY_SIZE(hotspot_radii); i++) {
- hit = gizmo_find_intersected_3d_intern(visible_gizmos, C, co, hotspot_radii[i]);
- if (hit != -1) {
- break;
+ /* Search for 3D gizmo's that use the 2D callback for checking intersections. */
+ bool has_3d = false;
+ {
+ int select_id = 0;
+ for (LinkData *link = visible_gizmos->first; link; link = link->next, select_id++) {
+ wmGizmo *gz = link->data;
+ if (gz->type->test_select) {
+ if ((*r_part = gz->type->test_select(C, gz, co)) != -1) {
+ hit = select_id;
+ result = gz;
+ break;
+ }
+ }
+ else {
+ has_3d = true;
+ }
}
}
- if (hit != -1) {
- LinkData *link = BLI_findlink(visible_gizmos, hit >> 8);
- if (link != NULL) {
- *r_part = hit & 255;
- result = link->data;
+ /* Search for 3D intersections if they're before 2D that have been found (if any).
+ * This way we always use the first hit. */
+ if (has_3d) {
+ const int hotspot_radii[] = {
+ 3 * U.pixelsize,
+ /* This runs on mouse move, careful doing too many tests! */
+ 10 * U.pixelsize,
+ };
+ for (int i = 0; i < ARRAY_SIZE(hotspot_radii); i++) {
+ hit = gizmo_find_intersected_3d_intern(visible_gizmos, C, co, hotspot_radii[i], result);
+ if (hit != -1) {
+ break;
+ }
}
- else {
- /* All gizmos should use selection ID they're given as part of the callback,
- * if they don't it will attempt tp lookup non-existing index. */
- BLI_assert(0);
+
+ if (hit != -1) {
+ LinkData *link = BLI_findlink(visible_gizmos, hit >> 8);
+ if (link != NULL) {
+ *r_part = hit & 255;
+ result = link->data;
+ }
+ else {
+ /* All gizmos should use selection ID they're given as part of the callback,
+ * if they don't it will attempt tp lookup non-existing index. */
+ BLI_assert(0);
+ }
}
}
@@ -593,10 +618,10 @@ static wmGizmo *gizmo_find_intersected_3d(
* 3D ones (could check for smallest screen-space distance but not needed right now).
*/
wmGizmo *wm_gizmomap_highlight_find(
- wmGizmoMap *mmap, bContext *C, const wmEvent *event,
+ wmGizmoMap *gzmap, bContext *C, const wmEvent *event,
int *r_part)
{
- wmGizmo *mpr = NULL;
+ wmGizmo *gz = NULL;
ListBase visible_3d_gizmos = {NULL};
bool do_step[WM_GIZMOMAP_DRAWSTEP_MAX];
@@ -604,18 +629,18 @@ wmGizmo *wm_gizmomap_highlight_find(
do_step[i] = WM_gizmo_context_check_drawstep(C, i);
}
- for (wmGizmoGroup *mgroup = mmap->groups.first; mgroup; mgroup = mgroup->next) {
+ for (wmGizmoGroup *gzgroup = gzmap->groups.first; gzgroup; gzgroup = gzgroup->next) {
/* If it were important we could initialize here,
* but this only happens when events are handled before drawing,
* just skip to keep code-path for initializing gizmos simple. */
- if ((mgroup->init_flag & WM_GIZMOGROUP_INIT_SETUP) == 0) {
+ if ((gzgroup->init_flag & WM_GIZMOGROUP_INIT_SETUP) == 0) {
continue;
}
- if (WM_gizmo_group_type_poll(C, mgroup->type)) {
+ if (WM_gizmo_group_type_poll(C, gzgroup->type)) {
eWM_GizmoFlagMapDrawStep step;
- if (mgroup->type->flag & WM_GIZMOGROUPTYPE_3D) {
+ if (gzgroup->type->flag & WM_GIZMOGROUPTYPE_3D) {
step = WM_GIZMOMAP_DRAWSTEP_3D;
}
else {
@@ -623,17 +648,17 @@ wmGizmo *wm_gizmomap_highlight_find(
}
if (do_step[step]) {
- if ((mmap->update_flag[step] & GIZMOMAP_IS_REFRESH_CALLBACK) &&
- (mgroup->type->refresh != NULL))
+ if ((gzmap->update_flag[step] & GIZMOMAP_IS_REFRESH_CALLBACK) &&
+ (gzgroup->type->refresh != NULL))
{
- mgroup->type->refresh(C, mgroup);
+ gzgroup->type->refresh(C, gzgroup);
/* cleared below */
}
if (step == WM_GIZMOMAP_DRAWSTEP_3D) {
- wm_gizmogroup_intersectable_gizmos_to_list(mgroup, &visible_3d_gizmos);
+ wm_gizmogroup_intersectable_gizmos_to_list(gzgroup, &visible_3d_gizmos);
}
else if (step == WM_GIZMOMAP_DRAWSTEP_2D) {
- if ((mpr = wm_gizmogroup_find_intersected_gizmo(mgroup, C, event, r_part))) {
+ if ((gz = wm_gizmogroup_find_intersected_gizmo(gzgroup, C, event, r_part))) {
break;
}
}
@@ -643,32 +668,32 @@ wmGizmo *wm_gizmomap_highlight_find(
if (!BLI_listbase_is_empty(&visible_3d_gizmos)) {
/* 2D gizmos get priority. */
- if (mpr == NULL) {
- mpr = gizmo_find_intersected_3d(C, event->mval, &visible_3d_gizmos, r_part);
+ if (gz == NULL) {
+ gz = gizmo_find_intersected_3d(C, event->mval, &visible_3d_gizmos, r_part);
}
BLI_freelistN(&visible_3d_gizmos);
}
- mmap->update_flag[WM_GIZMOMAP_DRAWSTEP_3D] &= ~GIZMOMAP_IS_REFRESH_CALLBACK;
- mmap->update_flag[WM_GIZMOMAP_DRAWSTEP_2D] &= ~GIZMOMAP_IS_REFRESH_CALLBACK;
+ gzmap->update_flag[WM_GIZMOMAP_DRAWSTEP_3D] &= ~GIZMOMAP_IS_REFRESH_CALLBACK;
+ gzmap->update_flag[WM_GIZMOMAP_DRAWSTEP_2D] &= ~GIZMOMAP_IS_REFRESH_CALLBACK;
- return mpr;
+ return gz;
}
-void WM_gizmomap_add_handlers(ARegion *ar, wmGizmoMap *mmap)
+void WM_gizmomap_add_handlers(ARegion *ar, wmGizmoMap *gzmap)
{
wmEventHandler *handler;
for (handler = ar->handlers.first; handler; handler = handler->next) {
- if (handler->gizmo_map == mmap) {
+ if (handler->gizmo_map == gzmap) {
return;
}
}
handler = MEM_callocN(sizeof(wmEventHandler), "gizmo handler");
- BLI_assert(mmap == ar->gizmo_map);
- handler->gizmo_map = mmap;
+ BLI_assert(gzmap == ar->gizmo_map);
+ handler->gizmo_map = gzmap;
BLI_addtail(&ar->handlers, handler);
}
@@ -682,8 +707,8 @@ void wm_gizmomaps_handled_modal_update(
return;
}
- wmGizmoMap *mmap = handler->op_region->gizmo_map;
- wmGizmo *mpr = wm_gizmomap_modal_get(mmap);
+ wmGizmoMap *gzmap = handler->op_region->gizmo_map;
+ wmGizmo *gz = wm_gizmomap_modal_get(gzmap);
ScrArea *area = CTX_wm_area(C);
ARegion *region = CTX_wm_region(C);
@@ -691,11 +716,11 @@ void wm_gizmomaps_handled_modal_update(
/* regular update for running operator */
if (modal_running) {
- wmGizmoOpElem *mpop = mpr ? WM_gizmo_operator_get(mpr, mpr->highlight_part) : NULL;
- if (mpr && mpop && (mpop->type != NULL) && (mpop->type == handler->op->type)) {
- wmGizmoFnModal modal_fn = mpr->custom_modal ? mpr->custom_modal : mpr->type->modal;
+ wmGizmoOpElem *mpop = gz ? WM_gizmo_operator_get(gz, gz->highlight_part) : NULL;
+ if (gz && mpop && (mpop->type != NULL) && (mpop->type == handler->op->type)) {
+ wmGizmoFnModal modal_fn = gz->custom_modal ? gz->custom_modal : gz->type->modal;
if (modal_fn != NULL) {
- int retval = modal_fn(C, mpr, event, 0);
+ int retval = modal_fn(C, gz, event, 0);
/* The gizmo is tried to the operator, we can't choose when to exit. */
BLI_assert(retval & OPERATOR_RUNNING_MODAL);
UNUSED_VARS_NDEBUG(retval);
@@ -704,14 +729,14 @@ void wm_gizmomaps_handled_modal_update(
}
/* operator not running anymore */
else {
- wm_gizmomap_highlight_set(mmap, C, NULL, 0);
- if (mpr) {
+ wm_gizmomap_highlight_set(gzmap, C, NULL, 0);
+ if (gz) {
/* This isn't defined if it ends because of success of cancel, we may want to change. */
bool cancel = true;
- if (mpr->type->exit) {
- mpr->type->exit(C, mpr, cancel);
+ if (gz->type->exit) {
+ gz->type->exit(C, gz, cancel);
}
- wm_gizmomap_modal_set(mmap, C, mpr, NULL, false);
+ wm_gizmomap_modal_set(gzmap, C, gz, NULL, false);
}
}
@@ -721,58 +746,58 @@ void wm_gizmomaps_handled_modal_update(
}
/**
- * Deselect all selected gizmos in \a mmap.
+ * Deselect all selected gizmos in \a gzmap.
* \return if selection has changed.
*/
-bool wm_gizmomap_deselect_all(wmGizmoMap *mmap)
+bool wm_gizmomap_deselect_all(wmGizmoMap *gzmap)
{
- wmGizmoMapSelectState *msel = &mmap->mmap_context.select;
+ wmGizmoMapSelectState *msel = &gzmap->gzmap_context.select;
if (msel->items == NULL || msel->len == 0) {
return false;
}
for (int i = 0; i < msel->len; i++) {
- wm_gizmo_select_set_ex(mmap, msel->items[i], false, false, true);
+ wm_gizmo_select_set_ex(gzmap, msel->items[i], false, false, true);
}
- wm_gizmomap_select_array_clear(mmap);
+ wm_gizmomap_select_array_clear(gzmap);
/* always return true, we already checked
* if there's anything to deselect */
return true;
}
-BLI_INLINE bool gizmo_selectable_poll(const wmGizmo *mpr, void *UNUSED(data))
+BLI_INLINE bool gizmo_selectable_poll(const wmGizmo *gz, void *UNUSED(data))
{
- return (mpr->parent_mgroup->type->flag & WM_GIZMOGROUPTYPE_SELECT);
+ return (gz->parent_gzgroup->type->flag & WM_GIZMOGROUPTYPE_SELECT);
}
/**
- * Select all selectable gizmos in \a mmap.
+ * Select all selectable gizmos in \a gzmap.
* \return if selection has changed.
*/
static bool wm_gizmomap_select_all_intern(
- bContext *C, wmGizmoMap *mmap)
+ bContext *C, wmGizmoMap *gzmap)
{
- wmGizmoMapSelectState *msel = &mmap->mmap_context.select;
+ wmGizmoMapSelectState *msel = &gzmap->gzmap_context.select;
/* GHash is used here to avoid having to loop over all gizmos twice (once to
* get tot_sel for allocating, once for actually selecting). Instead we collect
* selectable gizmos in hash table and use this to get tot_sel and do selection */
- GHash *hash = WM_gizmomap_gizmo_hash_new(C, mmap, gizmo_selectable_poll, NULL, true);
+ GHash *hash = WM_gizmomap_gizmo_hash_new(C, gzmap, gizmo_selectable_poll, NULL, true);
GHashIterator gh_iter;
int i;
bool changed = false;
- wm_gizmomap_select_array_ensure_len_alloc(mmap, BLI_ghash_len(hash));
+ wm_gizmomap_select_array_ensure_len_alloc(gzmap, BLI_ghash_len(hash));
GHASH_ITER_INDEX (gh_iter, hash, i) {
- wmGizmo *mpr_iter = BLI_ghashIterator_getValue(&gh_iter);
- WM_gizmo_select_set(mmap, mpr_iter, true);
+ wmGizmo *gz_iter = BLI_ghashIterator_getValue(&gh_iter);
+ WM_gizmo_select_set(gzmap, gz_iter, true);
}
/* highlight first gizmo */
- wm_gizmomap_highlight_set(mmap, C, msel->items[0], msel->items[0]->highlight_part);
+ wm_gizmomap_highlight_set(gzmap, C, msel->items[0], msel->items[0]->highlight_part);
BLI_assert(BLI_ghash_len(hash) == msel->len);
@@ -781,21 +806,21 @@ static bool wm_gizmomap_select_all_intern(
}
/**
- * Select/Deselect all selectable gizmos in \a mmap.
+ * Select/Deselect all selectable gizmos in \a gzmap.
* \return if selection has changed.
*
* TODO select all by type
*/
-bool WM_gizmomap_select_all(bContext *C, wmGizmoMap *mmap, const int action)
+bool WM_gizmomap_select_all(bContext *C, wmGizmoMap *gzmap, const int action)
{
bool changed = false;
switch (action) {
case SEL_SELECT:
- changed = wm_gizmomap_select_all_intern(C, mmap);
+ changed = wm_gizmomap_select_all_intern(C, gzmap);
break;
case SEL_DESELECT:
- changed = wm_gizmomap_deselect_all(mmap);
+ changed = wm_gizmomap_deselect_all(gzmap);
break;
default:
BLI_assert(0);
@@ -846,11 +871,11 @@ void wm_gizmomap_handler_context(bContext *C, wmEventHandler *handler)
}
}
-bool WM_gizmomap_cursor_set(const wmGizmoMap *mmap, wmWindow *win)
+bool WM_gizmomap_cursor_set(const wmGizmoMap *gzmap, wmWindow *win)
{
- wmGizmo *mpr = mmap->mmap_context.highlight;
- if (mpr && mpr->type->cursor_get) {
- WM_cursor_set(win, mpr->type->cursor_get(mpr));
+ wmGizmo *gz = gzmap->gzmap_context.highlight;
+ if (gz && gz->type->cursor_get) {
+ WM_cursor_set(win, gz->type->cursor_get(gz));
return true;
}
@@ -858,33 +883,33 @@ bool WM_gizmomap_cursor_set(const wmGizmoMap *mmap, wmWindow *win)
}
bool wm_gizmomap_highlight_set(
- wmGizmoMap *mmap, const bContext *C, wmGizmo *mpr, int part)
+ wmGizmoMap *gzmap, const bContext *C, wmGizmo *gz, int part)
{
- if ((mpr != mmap->mmap_context.highlight) ||
- (mpr && part != mpr->highlight_part))
+ if ((gz != gzmap->gzmap_context.highlight) ||
+ (gz && part != gz->highlight_part))
{
- if (mmap->mmap_context.highlight) {
- mmap->mmap_context.highlight->state &= ~WM_GIZMO_STATE_HIGHLIGHT;
- mmap->mmap_context.highlight->highlight_part = -1;
+ if (gzmap->gzmap_context.highlight) {
+ gzmap->gzmap_context.highlight->state &= ~WM_GIZMO_STATE_HIGHLIGHT;
+ gzmap->gzmap_context.highlight->highlight_part = -1;
}
- mmap->mmap_context.highlight = mpr;
+ gzmap->gzmap_context.highlight = gz;
- if (mpr) {
- mpr->state |= WM_GIZMO_STATE_HIGHLIGHT;
- mpr->highlight_part = part;
- mmap->mmap_context.last_cursor = -1;
+ if (gz) {
+ gz->state |= WM_GIZMO_STATE_HIGHLIGHT;
+ gz->highlight_part = part;
+ gzmap->gzmap_context.last_cursor = -1;
- if (C && mpr->type->cursor_get) {
+ if (C && gz->type->cursor_get) {
wmWindow *win = CTX_wm_window(C);
- mmap->mmap_context.last_cursor = win->cursor;
- WM_cursor_set(win, mpr->type->cursor_get(mpr));
+ gzmap->gzmap_context.last_cursor = win->cursor;
+ WM_cursor_set(win, gz->type->cursor_get(gz));
}
}
else {
- if (C && mmap->mmap_context.last_cursor != -1) {
+ if (C && gzmap->gzmap_context.last_cursor != -1) {
wmWindow *win = CTX_wm_window(C);
- WM_cursor_set(win, mmap->mmap_context.last_cursor);
+ WM_cursor_set(win, gzmap->gzmap_context.last_cursor);
}
}
@@ -900,123 +925,123 @@ bool wm_gizmomap_highlight_set(
return false;
}
-wmGizmo *wm_gizmomap_highlight_get(wmGizmoMap *mmap)
+wmGizmo *wm_gizmomap_highlight_get(wmGizmoMap *gzmap)
{
- return mmap->mmap_context.highlight;
+ return gzmap->gzmap_context.highlight;
}
/**
* Caller should call exit when (enable == False).
*/
void wm_gizmomap_modal_set(
- wmGizmoMap *mmap, bContext *C, wmGizmo *mpr, const wmEvent *event, bool enable)
+ wmGizmoMap *gzmap, bContext *C, wmGizmo *gz, const wmEvent *event, bool enable)
{
if (enable) {
- BLI_assert(mmap->mmap_context.modal == NULL);
+ BLI_assert(gzmap->gzmap_context.modal == NULL);
wmWindow *win = CTX_wm_window(C);
WM_tooltip_clear(C, win);
- if (mpr->type->invoke &&
- (mpr->type->modal || mpr->custom_modal))
+ if (gz->type->invoke &&
+ (gz->type->modal || gz->custom_modal))
{
- const int retval = mpr->type->invoke(C, mpr, event);
+ const int retval = gz->type->invoke(C, gz, event);
if ((retval & OPERATOR_RUNNING_MODAL) == 0) {
return;
}
}
- mpr->state |= WM_GIZMO_STATE_MODAL;
- mmap->mmap_context.modal = mpr;
+ gz->state |= WM_GIZMO_STATE_MODAL;
+ gzmap->gzmap_context.modal = gz;
- if ((mpr->flag & WM_GIZMO_GRAB_CURSOR) &&
+ if ((gz->flag & WM_GIZMO_GRAB_CURSOR) &&
(event->is_motion_absolute == false))
{
WM_cursor_grab_enable(win, true, true, NULL);
- copy_v2_v2_int(mmap->mmap_context.event_xy, &event->x);
- mmap->mmap_context.event_grabcursor = win->grabcursor;
+ copy_v2_v2_int(gzmap->gzmap_context.event_xy, &event->x);
+ gzmap->gzmap_context.event_grabcursor = win->grabcursor;
}
else {
- mmap->mmap_context.event_xy[0] = INT_MAX;
+ gzmap->gzmap_context.event_xy[0] = INT_MAX;
}
- struct wmGizmoOpElem *mpop = WM_gizmo_operator_get(mpr, mpr->highlight_part);
+ struct wmGizmoOpElem *mpop = WM_gizmo_operator_get(gz, gz->highlight_part);
if (mpop && mpop->type) {
const int retval = WM_operator_name_call_ptr(C, mpop->type, WM_OP_INVOKE_DEFAULT, &mpop->ptr);
if ((retval & OPERATOR_RUNNING_MODAL) == 0) {
- wm_gizmomap_modal_set(mmap, C, mpr, event, false);
+ wm_gizmomap_modal_set(gzmap, C, gz, event, false);
}
/* we failed to hook the gizmo to the operator handler or operator was cancelled, return */
- if (!mmap->mmap_context.modal) {
- mpr->state &= ~WM_GIZMO_STATE_MODAL;
- MEM_SAFE_FREE(mpr->interaction_data);
+ if (!gzmap->gzmap_context.modal) {
+ gz->state &= ~WM_GIZMO_STATE_MODAL;
+ MEM_SAFE_FREE(gz->interaction_data);
}
return;
}
}
else {
- BLI_assert(ELEM(mmap->mmap_context.modal, NULL, mpr));
+ BLI_assert(ELEM(gzmap->gzmap_context.modal, NULL, gz));
/* deactivate, gizmo but first take care of some stuff */
- if (mpr) {
- mpr->state &= ~WM_GIZMO_STATE_MODAL;
- MEM_SAFE_FREE(mpr->interaction_data);
+ if (gz) {
+ gz->state &= ~WM_GIZMO_STATE_MODAL;
+ MEM_SAFE_FREE(gz->interaction_data);
}
- mmap->mmap_context.modal = NULL;
+ gzmap->gzmap_context.modal = NULL;
if (C) {
wmWindow *win = CTX_wm_window(C);
- if (mmap->mmap_context.event_xy[0] != INT_MAX) {
+ if (gzmap->gzmap_context.event_xy[0] != INT_MAX) {
/* Check if some other part of Blender (typically operators)
* have adjusted the grab mode since it was set.
* If so: warp, so we have a predictable outcome. */
- if (mmap->mmap_context.event_grabcursor == win->grabcursor) {
- WM_cursor_grab_disable(win, mmap->mmap_context.event_xy);
+ if (gzmap->gzmap_context.event_grabcursor == win->grabcursor) {
+ WM_cursor_grab_disable(win, gzmap->gzmap_context.event_xy);
}
else {
- WM_cursor_warp(win, UNPACK2(mmap->mmap_context.event_xy));
+ WM_cursor_warp(win, UNPACK2(gzmap->gzmap_context.event_xy));
}
}
ED_region_tag_redraw(CTX_wm_region(C));
WM_event_add_mousemove(C);
}
- mmap->mmap_context.event_xy[0] = INT_MAX;
+ gzmap->gzmap_context.event_xy[0] = INT_MAX;
}
}
-wmGizmo *wm_gizmomap_modal_get(wmGizmoMap *mmap)
+wmGizmo *wm_gizmomap_modal_get(wmGizmoMap *gzmap)
{
- return mmap->mmap_context.modal;
+ return gzmap->gzmap_context.modal;
}
-wmGizmo **wm_gizmomap_selected_get(wmGizmoMap *mmap, int *r_selected_len)
+wmGizmo **wm_gizmomap_selected_get(wmGizmoMap *gzmap, int *r_selected_len)
{
- *r_selected_len = mmap->mmap_context.select.len;
- return mmap->mmap_context.select.items;
+ *r_selected_len = gzmap->gzmap_context.select.len;
+ return gzmap->gzmap_context.select.items;
}
-ListBase *wm_gizmomap_groups_get(wmGizmoMap *mmap)
+ListBase *wm_gizmomap_groups_get(wmGizmoMap *gzmap)
{
- return &mmap->groups;
+ return &gzmap->groups;
}
void WM_gizmomap_message_subscribe(
- bContext *C, wmGizmoMap *mmap, ARegion *ar, struct wmMsgBus *mbus)
+ bContext *C, wmGizmoMap *gzmap, ARegion *ar, struct wmMsgBus *mbus)
{
- for (wmGizmoGroup *mgroup = mmap->groups.first; mgroup; mgroup = mgroup->next) {
- if (!WM_gizmo_group_type_poll(C, mgroup->type)) {
+ for (wmGizmoGroup *gzgroup = gzmap->groups.first; gzgroup; gzgroup = gzgroup->next) {
+ if (!WM_gizmo_group_type_poll(C, gzgroup->type)) {
continue;
}
- for (wmGizmo *mpr = mgroup->gizmos.first; mpr; mpr = mpr->next) {
- if (mpr->flag & WM_GIZMO_HIDDEN) {
+ for (wmGizmo *gz = gzgroup->gizmos.first; gz; gz = gz->next) {
+ if (gz->flag & WM_GIZMO_HIDDEN) {
continue;
}
- WM_gizmo_target_property_subscribe_all(mpr, mbus, ar);
+ WM_gizmo_target_property_subscribe_all(gz, mbus, ar);
}
- if (mgroup->type->message_subscribe != NULL) {
- mgroup->type->message_subscribe(C, mgroup, mbus);
+ if (gzgroup->type->message_subscribe != NULL) {
+ gzgroup->type->message_subscribe(C, gzgroup, mbus);
}
}
}
@@ -1032,12 +1057,12 @@ void WM_gizmomap_message_subscribe(
struct ARegion *WM_gizmomap_tooltip_init(
struct bContext *C, struct ARegion *ar, bool *r_exit_on_event)
{
- wmGizmoMap *mmap = ar->gizmo_map;
+ wmGizmoMap *gzmap = ar->gizmo_map;
*r_exit_on_event = true;
- if (mmap) {
- wmGizmo *mpr = mmap->mmap_context.highlight;
- if (mpr) {
- return UI_tooltip_create_from_gizmo(C, mpr);
+ if (gzmap) {
+ wmGizmo *gz = gzmap->gzmap_context.highlight;
+ if (gz) {
+ return UI_tooltip_create_from_gizmo(C, gz);
}
}
return NULL;
@@ -1051,13 +1076,13 @@ struct ARegion *WM_gizmomap_tooltip_init(
* \{ */
wmGizmoMapType *WM_gizmomaptype_find(
- const struct wmGizmoMapType_Params *mmap_params)
+ const struct wmGizmoMapType_Params *gzmap_params)
{
- for (wmGizmoMapType *mmap_type = gizmomaptypes.first; mmap_type; mmap_type = mmap_type->next) {
- if (mmap_type->spaceid == mmap_params->spaceid &&
- mmap_type->regionid == mmap_params->regionid)
+ for (wmGizmoMapType *gzmap_type = gizmomaptypes.first; gzmap_type; gzmap_type = gzmap_type->next) {
+ if (gzmap_type->spaceid == gzmap_params->spaceid &&
+ gzmap_type->regionid == gzmap_params->regionid)
{
- return mmap_type;
+ return gzmap_type;
}
}
@@ -1065,37 +1090,37 @@ wmGizmoMapType *WM_gizmomaptype_find(
}
wmGizmoMapType *WM_gizmomaptype_ensure(
- const struct wmGizmoMapType_Params *mmap_params)
+ const struct wmGizmoMapType_Params *gzmap_params)
{
- wmGizmoMapType *mmap_type = WM_gizmomaptype_find(mmap_params);
+ wmGizmoMapType *gzmap_type = WM_gizmomaptype_find(gzmap_params);
- if (mmap_type) {
- return mmap_type;
+ if (gzmap_type) {
+ return gzmap_type;
}
- mmap_type = MEM_callocN(sizeof(wmGizmoMapType), "gizmotype list");
- mmap_type->spaceid = mmap_params->spaceid;
- mmap_type->regionid = mmap_params->regionid;
- BLI_addhead(&gizmomaptypes, mmap_type);
+ gzmap_type = MEM_callocN(sizeof(wmGizmoMapType), "gizmotype list");
+ gzmap_type->spaceid = gzmap_params->spaceid;
+ gzmap_type->regionid = gzmap_params->regionid;
+ BLI_addhead(&gizmomaptypes, gzmap_type);
- return mmap_type;
+ return gzmap_type;
}
void wm_gizmomaptypes_free(void)
{
- for (wmGizmoMapType *mmap_type = gizmomaptypes.first, *mmap_type_next;
- mmap_type;
- mmap_type = mmap_type_next)
+ for (wmGizmoMapType *gzmap_type = gizmomaptypes.first, *gzmap_type_next;
+ gzmap_type;
+ gzmap_type = gzmap_type_next)
{
- mmap_type_next = mmap_type->next;
- for (wmGizmoGroupTypeRef *wgt_ref = mmap_type->grouptype_refs.first, *wgt_next;
- wgt_ref;
- wgt_ref = wgt_next)
+ gzmap_type_next = gzmap_type->next;
+ for (wmGizmoGroupTypeRef *gzgt_ref = gzmap_type->grouptype_refs.first, *gzgt_next;
+ gzgt_ref;
+ gzgt_ref = gzgt_next)
{
- wgt_next = wgt_ref->next;
- WM_gizmomaptype_group_free(wgt_ref);
+ gzgt_next = gzgt_ref->next;
+ WM_gizmomaptype_group_free(gzgt_ref);
}
- MEM_freeN(mmap_type);
+ MEM_freeN(gzmap_type);
}
}
@@ -1107,9 +1132,9 @@ void wm_gizmos_keymap(wmKeyConfig *keyconf)
/* we add this item-less keymap once and use it to group gizmo-group keymaps into it */
WM_keymap_find(keyconf, "Gizmos", 0, 0);
- for (wmGizmoMapType *mmap_type = gizmomaptypes.first; mmap_type; mmap_type = mmap_type->next) {
- for (wmGizmoGroupTypeRef *wgt_ref = mmap_type->grouptype_refs.first; wgt_ref; wgt_ref = wgt_ref->next) {
- wm_gizmogrouptype_setup_keymap(wgt_ref->type, keyconf);
+ for (wmGizmoMapType *gzmap_type = gizmomaptypes.first; gzmap_type; gzmap_type = gzmap_type->next) {
+ for (wmGizmoGroupTypeRef *gzgt_ref = gzmap_type->grouptype_refs.first; gzgt_ref; gzgt_ref = gzgt_ref->next) {
+ wm_gizmogrouptype_setup_keymap(gzgt_ref->type, keyconf);
}
}
}
@@ -1123,23 +1148,23 @@ void wm_gizmos_keymap(wmKeyConfig *keyconf)
void WM_gizmoconfig_update_tag_init(
- wmGizmoMapType *mmap_type, wmGizmoGroupType *wgt)
+ wmGizmoMapType *gzmap_type, wmGizmoGroupType *gzgt)
{
/* tag for update on next use */
- mmap_type->type_update_flag |= (WM_GIZMOMAPTYPE_UPDATE_INIT | WM_GIZMOMAPTYPE_KEYMAP_INIT);
- wgt->type_update_flag |= (WM_GIZMOMAPTYPE_UPDATE_INIT | WM_GIZMOMAPTYPE_KEYMAP_INIT);
+ gzmap_type->type_update_flag |= (WM_GIZMOMAPTYPE_UPDATE_INIT | WM_GIZMOMAPTYPE_KEYMAP_INIT);
+ gzgt->type_update_flag |= (WM_GIZMOMAPTYPE_UPDATE_INIT | WM_GIZMOMAPTYPE_KEYMAP_INIT);
- wm_mmap_type_update_flag |= WM_GIZMOMAPTYPE_GLOBAL_UPDATE_INIT;
+ wm_gzmap_type_update_flag |= WM_GIZMOMAPTYPE_GLOBAL_UPDATE_INIT;
}
void WM_gizmoconfig_update_tag_remove(
- wmGizmoMapType *mmap_type, wmGizmoGroupType *wgt)
+ wmGizmoMapType *gzmap_type, wmGizmoGroupType *gzgt)
{
/* tag for update on next use */
- mmap_type->type_update_flag |= WM_GIZMOMAPTYPE_UPDATE_REMOVE;
- wgt->type_update_flag |= WM_GIZMOMAPTYPE_UPDATE_REMOVE;
+ gzmap_type->type_update_flag |= WM_GIZMOMAPTYPE_UPDATE_REMOVE;
+ gzgt->type_update_flag |= WM_GIZMOMAPTYPE_UPDATE_REMOVE;
- wm_mmap_type_update_flag |= WM_GIZMOMAPTYPE_GLOBAL_UPDATE_REMOVE;
+ wm_gzmap_type_update_flag |= WM_GIZMOMAPTYPE_GLOBAL_UPDATE_REMOVE;
}
/**
@@ -1151,58 +1176,58 @@ void WM_gizmoconfig_update(struct Main *bmain)
if (G.background)
return;
- if (wm_mmap_type_update_flag == 0)
+ if (wm_gzmap_type_update_flag == 0)
return;
- if (wm_mmap_type_update_flag & WM_GIZMOMAPTYPE_GLOBAL_UPDATE_REMOVE) {
- for (wmGizmoMapType *mmap_type = gizmomaptypes.first;
- mmap_type;
- mmap_type = mmap_type->next)
+ if (wm_gzmap_type_update_flag & WM_GIZMOMAPTYPE_GLOBAL_UPDATE_REMOVE) {
+ for (wmGizmoMapType *gzmap_type = gizmomaptypes.first;
+ gzmap_type;
+ gzmap_type = gzmap_type->next)
{
- if (mmap_type->type_update_flag & WM_GIZMOMAPTYPE_GLOBAL_UPDATE_REMOVE) {
- mmap_type->type_update_flag &= ~WM_GIZMOMAPTYPE_UPDATE_REMOVE;
- for (wmGizmoGroupTypeRef *wgt_ref = mmap_type->grouptype_refs.first, *wgt_ref_next;
- wgt_ref;
- wgt_ref = wgt_ref_next)
+ if (gzmap_type->type_update_flag & WM_GIZMOMAPTYPE_GLOBAL_UPDATE_REMOVE) {
+ gzmap_type->type_update_flag &= ~WM_GIZMOMAPTYPE_UPDATE_REMOVE;
+ for (wmGizmoGroupTypeRef *gzgt_ref = gzmap_type->grouptype_refs.first, *gzgt_ref_next;
+ gzgt_ref;
+ gzgt_ref = gzgt_ref_next)
{
- wgt_ref_next = wgt_ref->next;
- if (wgt_ref->type->type_update_flag & WM_GIZMOMAPTYPE_UPDATE_REMOVE) {
- wgt_ref->type->type_update_flag &= ~WM_GIZMOMAPTYPE_UPDATE_REMOVE;
- WM_gizmomaptype_group_unlink(NULL, bmain, mmap_type, wgt_ref->type);
+ gzgt_ref_next = gzgt_ref->next;
+ if (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_mmap_type_update_flag &= ~WM_GIZMOMAPTYPE_GLOBAL_UPDATE_REMOVE;
+ wm_gzmap_type_update_flag &= ~WM_GIZMOMAPTYPE_GLOBAL_UPDATE_REMOVE;
}
- if (wm_mmap_type_update_flag & WM_GIZMOMAPTYPE_GLOBAL_UPDATE_INIT) {
- for (wmGizmoMapType *mmap_type = gizmomaptypes.first;
- mmap_type;
- mmap_type = mmap_type->next)
+ if (wm_gzmap_type_update_flag & WM_GIZMOMAPTYPE_GLOBAL_UPDATE_INIT) {
+ for (wmGizmoMapType *gzmap_type = gizmomaptypes.first;
+ gzmap_type;
+ gzmap_type = gzmap_type->next)
{
const uchar type_update_all = WM_GIZMOMAPTYPE_UPDATE_INIT | WM_GIZMOMAPTYPE_KEYMAP_INIT;
- if (mmap_type->type_update_flag & type_update_all) {
- mmap_type->type_update_flag &= ~type_update_all;
- for (wmGizmoGroupTypeRef *wgt_ref = mmap_type->grouptype_refs.first;
- wgt_ref;
- wgt_ref = wgt_ref->next)
+ if (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;
+ gzgt_ref = gzgt_ref->next)
{
- if (wgt_ref->type->type_update_flag & WM_GIZMOMAPTYPE_KEYMAP_INIT) {
- WM_gizmomaptype_group_init_runtime_keymap(bmain, wgt_ref->type);
- wgt_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);
+ gzgt_ref->type->type_update_flag &= ~WM_GIZMOMAPTYPE_KEYMAP_INIT;
}
- if (wgt_ref->type->type_update_flag & WM_GIZMOMAPTYPE_UPDATE_INIT) {
- WM_gizmomaptype_group_init_runtime(bmain, mmap_type, wgt_ref->type);
- wgt_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);
+ gzgt_ref->type->type_update_flag &= ~WM_GIZMOMAPTYPE_UPDATE_INIT;
}
}
}
}
- wm_mmap_type_update_flag &= ~WM_GIZMOMAPTYPE_GLOBAL_UPDATE_INIT;
+ wm_gzmap_type_update_flag &= ~WM_GIZMOMAPTYPE_GLOBAL_UPDATE_INIT;
}
}