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:
authorCampbell Barton <ideasman42@gmail.com>2018-12-03 08:52:21 +0300
committerCampbell Barton <ideasman42@gmail.com>2018-12-03 08:52:21 +0300
commit2df86ca9672759c8a99fa72e5e6d3d3e0c2da5c7 (patch)
treed511b9e384d537c0d26fdea811be9e099b5bd9f0 /source/blender/editors
parentffdc1f892445aa7949917523d0f0f30fa73815fe (diff)
Fix T56642: 3D view gizmo orientation wont update
Diffstat (limited to 'source/blender/editors')
-rw-r--r--source/blender/editors/transform/transform_gizmo_3d.c28
1 files changed, 24 insertions, 4 deletions
diff --git a/source/blender/editors/transform/transform_gizmo_3d.c b/source/blender/editors/transform/transform_gizmo_3d.c
index 1f001243a7c..74ab3867c5c 100644
--- a/source/blender/editors/transform/transform_gizmo_3d.c
+++ b/source/blender/editors/transform/transform_gizmo_3d.c
@@ -175,6 +175,11 @@ typedef struct GizmoGroup {
int twtype_prev;
int use_twtype_refresh;
+ /* Only for view orientation. */
+ struct {
+ float viewinv_m3[3][3];
+ } prev;
+
struct wmGizmo *gizmos[MAN_AXIS_LAST];
} GizmoGroup;
@@ -1753,6 +1758,8 @@ static void WIDGETGROUP_gizmo_draw_prepare(const bContext *C, wmGizmoGroup *gzgr
ARegion *ar = CTX_wm_region(C);
// View3D *v3d = sa->spacedata.first;
RegionView3D *rv3d = ar->regiondata;
+ float viewinv_m3[3][3];
+ copy_m3_m4(viewinv_m3, rv3d->viewinv);
float idot[3];
/* when looking through a selected camera, the gizmo can be at the
@@ -1768,9 +1775,7 @@ static void WIDGETGROUP_gizmo_draw_prepare(const bContext *C, wmGizmoGroup *gzgr
gizmo_get_idot(rv3d, idot);
/* *** set properties for axes *** */
-
- MAN_ITER_AXES_BEGIN(axis, axis_idx)
- {
+ MAN_ITER_AXES_BEGIN(axis, axis_idx) {
const short axis_type = gizmo_get_axis_type(axis_idx);
/* XXX maybe unset _HIDDEN flag on redraw? */
@@ -1795,8 +1800,23 @@ static void WIDGETGROUP_gizmo_draw_prepare(const bContext *C, wmGizmoGroup *gzgr
WM_gizmo_set_matrix_rotation_from_z_axis(axis, rv3d->viewinv[2]);
break;
}
+ } MAN_ITER_AXES_END;
+
+ /* Refresh handled above when using view orientation. */
+ if (!equals_m3m3(viewinv_m3, ggd->prev.viewinv_m3)) {
+ {
+ Scene *scene = CTX_data_scene(C);
+ switch (scene->orientation_type) {
+ case V3D_MANIP_VIEW:
+ {
+ WIDGETGROUP_gizmo_refresh(C, gzgroup);
+ break;
+ }
+ }
+ }
+ copy_m3_m4(ggd->prev.viewinv_m3, rv3d->viewinv);
}
- MAN_ITER_AXES_END;
+
}
static bool WIDGETGROUP_gizmo_poll(const struct bContext *C, struct wmGizmoGroupType *gzgt)