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')
-rw-r--r--source/blender/windowmanager/gizmo/WM_gizmo_api.h5
-rw-r--r--source/blender/windowmanager/gizmo/intern/wm_gizmo.c6
-rw-r--r--source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c4
-rw-r--r--source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c14
4 files changed, 20 insertions, 9 deletions
diff --git a/source/blender/windowmanager/gizmo/WM_gizmo_api.h b/source/blender/windowmanager/gizmo/WM_gizmo_api.h
index 6b497c7462a..fe73daeed29 100644
--- a/source/blender/windowmanager/gizmo/WM_gizmo_api.h
+++ b/source/blender/windowmanager/gizmo/WM_gizmo_api.h
@@ -92,7 +92,10 @@ struct PointerRNA *WM_gizmo_operator_set(struct wmGizmo *gz,
int part_index,
struct wmOperatorType *ot,
struct IDProperty *properties);
-int WM_gizmo_operator_invoke(struct bContext *C, struct wmGizmo *gz, struct wmGizmoOpElem *gzop);
+int WM_gizmo_operator_invoke(struct bContext *C,
+ struct wmGizmo *gz,
+ struct wmGizmoOpElem *gzop,
+ const struct wmEvent *event);
/* Callbacks. */
diff --git a/source/blender/windowmanager/gizmo/intern/wm_gizmo.c b/source/blender/windowmanager/gizmo/intern/wm_gizmo.c
index 05564f3bd0a..db4926f3430 100644
--- a/source/blender/windowmanager/gizmo/intern/wm_gizmo.c
+++ b/source/blender/windowmanager/gizmo/intern/wm_gizmo.c
@@ -225,7 +225,7 @@ PointerRNA *WM_gizmo_operator_set(wmGizmo *gz,
return &gzop->ptr;
}
-int WM_gizmo_operator_invoke(bContext *C, wmGizmo *gz, wmGizmoOpElem *gzop)
+int WM_gizmo_operator_invoke(bContext *C, wmGizmo *gz, wmGizmoOpElem *gzop, const wmEvent *event)
{
if (gz->flag & WM_GIZMO_OPERATOR_TOOL_INIT) {
/* Merge toolsettings into the gizmo properties. */
@@ -239,7 +239,7 @@ int WM_gizmo_operator_invoke(bContext *C, wmGizmo *gz, wmGizmoOpElem *gzop)
IDP_MergeGroup(gzop->ptr.data, tref_ptr.data, false);
}
}
- return WM_operator_name_call_ptr(C, gzop->type, WM_OP_INVOKE_DEFAULT, &gzop->ptr);
+ return WM_operator_name_call_ptr(C, gzop->type, WM_OP_INVOKE_DEFAULT, &gzop->ptr, event);
}
static void wm_gizmo_set_matrix_rotation_from_z_axis__internal(float matrix[4][4],
@@ -425,7 +425,7 @@ void WM_gizmo_modal_set_from_setup(struct wmGizmoMap *gzmap,
}
else {
/* WEAK: but it works. */
- WM_operator_name_call(C, "GIZMOGROUP_OT_gizmo_tweak", WM_OP_INVOKE_DEFAULT, NULL);
+ WM_operator_name_call(C, "GIZMOGROUP_OT_gizmo_tweak", WM_OP_INVOKE_DEFAULT, NULL, event);
}
}
diff --git a/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c b/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c
index b3ef9b27667..00615d9d662 100644
--- a/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c
+++ b/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c
@@ -441,7 +441,7 @@ static bool gizmo_tweak_start_and_finish(
gz->parent_gzgroup->type->invoke_prepare(C, gz->parent_gzgroup, gz, event);
}
/* Allow for 'button' gizmos, single click to run an action. */
- WM_gizmo_operator_invoke(C, gz, gzop);
+ WM_gizmo_operator_invoke(C, gz, gzop, event);
}
return true;
}
@@ -1137,7 +1137,7 @@ void WM_gizmo_group_refresh(const bContext *C, wmGizmoGroup *gzgroup)
BLI_assert(region->gizmo_map == gzmap);
/* Check if the tweak event originated from this region. */
if ((win->eventstate != NULL) && (win->event_queue_check_drag) &&
- BLI_rcti_isect_pt_v(&region->winrct, win->eventstate->prev_click_xy)) {
+ BLI_rcti_isect_pt_v(&region->winrct, win->eventstate->prev_press_xy)) {
/* We need to run refresh again. */
gzgroup->init_flag &= ~WM_GIZMOGROUP_INIT_REFRESH;
WM_gizmomap_tag_refresh_drawstep(gzmap, WM_gizmomap_drawstep_from_gizmo_group(gzgroup));
diff --git a/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c b/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c
index f1ac19f4651..d9f4050c8f1 100644
--- a/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c
+++ b/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c
@@ -815,6 +815,14 @@ wmGizmo *wm_gizmomap_highlight_find(wmGizmoMap *gzmap,
BLI_buffer_declare_static(wmGizmo *, visible_3d_gizmos, BLI_BUFFER_NOP, 128);
bool do_step[WM_GIZMOMAP_DRAWSTEP_MAX];
+ int mval[2];
+ if (event->val == KM_CLICK_DRAG) {
+ WM_event_drag_start_mval(event, CTX_wm_region(C), mval);
+ }
+ else {
+ copy_v2_v2_int(mval, event->mval);
+ }
+
for (int i = 0; i < ARRAY_SIZE(do_step); i++) {
do_step[i] = WM_gizmo_context_check_drawstep(C, i);
}
@@ -841,7 +849,7 @@ wmGizmo *wm_gizmomap_highlight_find(wmGizmoMap *gzmap,
}
else if (step == WM_GIZMOMAP_DRAWSTEP_2D) {
if ((gz = wm_gizmogroup_find_intersected_gizmo(
- wm, gzgroup, C, event->modifier, event->mval, r_part))) {
+ wm, gzgroup, C, event->modifier, mval, r_part))) {
break;
}
}
@@ -853,7 +861,7 @@ wmGizmo *wm_gizmomap_highlight_find(wmGizmoMap *gzmap,
/* 2D gizmos get priority. */
if (gz == NULL) {
gz = gizmo_find_intersected_3d(
- C, event->mval, visible_3d_gizmos.data, visible_3d_gizmos.count, r_part);
+ C, mval, visible_3d_gizmos.data, visible_3d_gizmos.count, r_part);
}
}
BLI_buffer_free(&visible_3d_gizmos);
@@ -1149,7 +1157,7 @@ void wm_gizmomap_modal_set(
struct wmGizmoOpElem *gzop = WM_gizmo_operator_get(gz, gz->highlight_part);
if (gzop && gzop->type) {
- const int retval = WM_gizmo_operator_invoke(C, gz, gzop);
+ const int retval = WM_gizmo_operator_invoke(C, gz, gzop, event);
if ((retval & OPERATOR_RUNNING_MODAL) == 0) {
wm_gizmomap_modal_set(gzmap, C, gz, event, false);
}