diff options
author | Germano Cavalcante <germano.costa@ig.com.br> | 2021-02-03 20:57:06 +0300 |
---|---|---|
committer | Germano Cavalcante <germano.costa@ig.com.br> | 2021-02-03 20:57:06 +0300 |
commit | 9d902d1b30f828d6861e38a3afd068ec5dcecd21 (patch) | |
tree | ff2a7ff90ad59b18f54d82d7d1bc2c80f33c40cd | |
parent | dcb2821292f962951e88f146cb304160f21f73da (diff) | |
parent | 5eb5a7f4b7d7c5228ec9596b35e7f2e317aad97d (diff) |
Merge branch 'blender-v2.92-release'
# Conflicts:
# source/blender/editors/transform/transform_constraints.c
5 files changed, 30 insertions, 22 deletions
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index d246dfadefa..9ee625fc02e 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -9014,6 +9014,7 @@ static int ui_handle_list_event(bContext *C, const wmEvent *event, ARegion *regi { int retval = WM_UI_HANDLER_CONTINUE; int type = event->type, val = event->val; + int scroll_dir = 1; bool redraw = false; uiList *ui_list = listbox->custom_data; @@ -9030,6 +9031,11 @@ static int ui_handle_list_event(bContext *C, const wmEvent *event, ARegion *regi if (type == MOUSEPAN) { ui_pan_to_scroll(event, &type, &val); + /* 'ui_pan_to_scroll' gives the absolute direction. */ + if (event->is_direction_inverted) { + scroll_dir = -1; + } + /* If type still is mouse-pan, we call it handled, since delta-y accumulate. */ /* also see wm_event_system.c do_wheel_ui hack */ if (type == MOUSEPAN) { @@ -9124,7 +9130,7 @@ static int ui_handle_list_event(bContext *C, const wmEvent *event, ARegion *regi else if (ELEM(type, WHEELUPMOUSE, WHEELDOWNMOUSE)) { if (dyn_data->height > dyn_data->visual_height) { /* list template will clamp */ - ui_list->list_scroll += (type == WHEELUPMOUSE) ? -1 : 1; + ui_list->list_scroll += scroll_dir * ((type == WHEELUPMOUSE) ? -1 : 1); redraw = true; retval = WM_UI_HANDLER_BREAK; diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h index 91bf2bf8aac..fff7d47cc5b 100644 --- a/source/blender/editors/transform/transform.h +++ b/source/blender/editors/transform/transform.h @@ -722,8 +722,6 @@ bool calculateCenterActive(TransInfo *t, bool select_only, float r_center[3]); void calculatePropRatio(TransInfo *t); -void getViewVector(const TransInfo *t, const float coord[3], float vec[3]); - void transform_data_ext_rotate(TransData *td, float mat[3][3], bool use_drot); void freeCustomNormalArray(TransInfo *t, TransDataContainer *tc, TransCustomData *custom_data); diff --git a/source/blender/editors/transform/transform_constraints.c b/source/blender/editors/transform/transform_constraints.c index 09d3a991cc1..fc8e823f050 100644 --- a/source/blender/editors/transform/transform_constraints.c +++ b/source/blender/editors/transform/transform_constraints.c @@ -83,6 +83,18 @@ static void projection_matrix_calc(const TransInfo *t, float r_pmtx[3][3]) mul_m3_m3m3(r_pmtx, t->spacemtx, mat); } +static void view_vector_calc(const TransInfo *t, const float focus[3], float r_vec[3]) +{ + if (t->persp != RV3D_ORTHO) { + sub_v3_v3v3(r_vec, t->viewinv[3], focus); + } + else { + copy_v3_v3(r_vec, t->viewinv[2]); + } + normalize_v3(r_vec); +} + +/* ************************** CONSTRAINTS ************************* */ #define CONSTRAIN_EPSILON 0.0001f static void constraint_plane_calc(TransInfo *t, float r_plane[4]) @@ -221,14 +233,14 @@ static void axisProjection(const TransInfo *t, float norm_center[3]; float plane[3]; - getViewVector(t, t_con_center, norm_center); + view_vector_calc(t, t_con_center, norm_center); cross_v3_v3v3(plane, norm_center, axis); project_v3_v3v3(vec, in, plane); sub_v3_v3v3(vec, in, vec); add_v3_v3v3(v, vec, t_con_center); - getViewVector(t, v, norm); + view_vector_calc(t, v, norm); /* give arbitrary large value if projection is impossible */ factor = dot_v3v3(axis, norm); @@ -345,7 +357,7 @@ static bool isPlaneProjectionViewAligned(const TransInfo *t, const float plane[4 { const float eps = 0.001f; float view_to_plane[3]; - getViewVector(t, t->center_global, view_to_plane); + view_vector_calc(t, t->center_global, view_to_plane); float factor = dot_v3v3(plane, view_to_plane); return fabsf(factor) < eps; @@ -356,7 +368,7 @@ static void planeProjection(const TransInfo *t, const float in[3], float out[3]) float vec[3], factor, norm[3]; add_v3_v3v3(vec, in, t->center_global); - getViewVector(t, vec, norm); + view_vector_calc(t, vec, norm); sub_v3_v3v3(vec, out, in); @@ -561,7 +573,9 @@ static void constraints_rotation_imp(TransInfo *t, } /* don't flip axis if asked to or if num input */ if (r_angle && (mode & CON_NOFLIP) == 0 && hasNumInput(&t->num) == 0) { - if (dot_v3v3(r_vec, t->viewinv[2]) > 0.0f) { + float view_vector[3]; + view_vector_calc(t, t->center_global, view_vector); + if (dot_v3v3(r_vec, view_vector) > 0.0f) { *r_angle = -(*r_angle); } } diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index 5b41f6b51bf..f648369bc31 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -64,19 +64,6 @@ #include "transform_orientations.h" #include "transform_snap.h" -/* ************************** Functions *************************** */ - -void getViewVector(const TransInfo *t, const float coord[3], float vec[3]) -{ - if (t->persp != RV3D_ORTHO) { - sub_v3_v3v3(vec, coord, t->viewinv[3]); - } - else { - copy_v3_v3(vec, t->viewinv[2]); - } - normalize_v3(vec); -} - /* ************************** GENERICS **************************** */ void drawLine(TransInfo *t, const float center[3], const float dir[3], char axis, short options) diff --git a/source/blender/editors/transform/transform_gizmo_3d.c b/source/blender/editors/transform/transform_gizmo_3d.c index 5b9d73a10fe..0a4448f82f9 100644 --- a/source/blender/editors/transform/transform_gizmo_3d.c +++ b/source/blender/editors/transform/transform_gizmo_3d.c @@ -1865,7 +1865,10 @@ static void WIDGETGROUP_gizmo_invoke_prepare(const bContext *C, PropertyRNA *prop_orient_type = RNA_struct_find_property(ptr, "orient_type"); const TransformOrientationSlot *orient_slot = BKE_scene_orientation_slot_get_from_flag( scene, ggd->twtype_init); - if (orient_slot == &scene->orientation_slots[SCE_ORIENT_DEFAULT]) { + if ((gz == ggd->gizmos[MAN_AXIS_ROT_C]) || + (orient_slot == &scene->orientation_slots[SCE_ORIENT_DEFAULT])) { + /* #MAN_AXIS_ROT_C always uses the #V3D_ORIENT_VIEW orientation, + * optionally we could set this orientation instead of unset the property. */ RNA_property_unset(ptr, prop_orient_type); } else { |