[Bf-blender-cvs] [c3504240144] blender2.8: Fix scale-cage refresh w/ view orientation
Campbell Barton
noreply at git.blender.org
Tue Sep 11 23:17:18 CEST 2018
Commit: c35042401443842de8a81d23d397206150313ac4
Author: Campbell Barton
Date: Wed Sep 12 07:19:37 2018 +1000
Branches: blender2.8
https://developer.blender.org/rBc35042401443842de8a81d23d397206150313ac4
Fix scale-cage refresh w/ view orientation
===================================================================
M source/blender/editors/transform/transform_gizmo_3d.c
===================================================================
diff --git a/source/blender/editors/transform/transform_gizmo_3d.c b/source/blender/editors/transform/transform_gizmo_3d.c
index 0ccf5ed072c..f3509f62faa 100644
--- a/source/blender/editors/transform/transform_gizmo_3d.c
+++ b/source/blender/editors/transform/transform_gizmo_3d.c
@@ -1711,6 +1711,10 @@ void TRANSFORM_GGT_gizmo(wmGizmoGroupType *gzgt)
struct XFormCageWidgetGroup {
wmGizmo *gizmo;
+ /* Only for view orientation. */
+ struct {
+ float viewinv_m3[3][3];
+ } prev;
};
static bool WIDGETGROUP_xform_cage_poll(const bContext *C, wmGizmoGroupType *gzgt)
@@ -1822,6 +1826,9 @@ static void WIDGETGROUP_xform_cage_refresh(const bContext *C, wmGizmoGroup *gzgr
}
}
}
+
+ /* Needed to test view orientation changes. */
+ copy_m3_m4(xgzgroup->prev.viewinv_m3, rv3d->viewinv);
}
static void WIDGETGROUP_xform_cage_message_subscribe(
@@ -1838,7 +1845,6 @@ static void WIDGETGROUP_xform_cage_draw_prepare(const bContext *C, wmGizmoGroup
{
struct XFormCageWidgetGroup *xgzgroup = gzgroup->customdata;
wmGizmo *gz = xgzgroup->gizmo;
-
ViewLayer *view_layer = CTX_data_view_layer(C);
Object *ob = OBACT(view_layer);
if (ob && ob->mode & OB_MODE_EDIT) {
@@ -1847,6 +1853,25 @@ static void WIDGETGROUP_xform_cage_draw_prepare(const bContext *C, wmGizmoGroup
else {
unit_m4(gz->matrix_space);
}
+
+ RegionView3D *rv3d = CTX_wm_region_view3d(C);
+ /* Avoid slowdown on view adjustments. */
+ if ((rv3d->rflag & RV3D_NAVIGATING) == 0) {
+ Scene *scene = CTX_data_scene(C);
+ switch (scene->orientation_type) {
+ case V3D_MANIP_VIEW:
+ {
+ float viewinv_m3[3][3];
+ copy_m3_m4(viewinv_m3, rv3d->viewinv);
+ if (!equals_m3m3(viewinv_m3, xgzgroup->prev.viewinv_m3)) {
+ /* Take care calling refresh from draw_prepare,
+ * this should be OK because it's only adjusting the cage orientation. */
+ WIDGETGROUP_xform_cage_refresh(C, gzgroup);
+ }
+ break;
+ }
+ }
+ }
}
void VIEW3D_GGT_xform_cage(wmGizmoGroupType *gzgt)
More information about the Bf-blender-cvs
mailing list