Merge branch 'blender-v3.3-release'
This commit is contained in:
commit
8f915f0efb
|
@ -1196,6 +1196,28 @@ bool ED_view3d_camera_lock_autokey(struct View3D *v3d,
|
|||
|
||||
void ED_view3d_lock_clear(struct View3D *v3d);
|
||||
|
||||
/**
|
||||
* Create an undo step when the camera is locked to the view.
|
||||
* \param str: The name of the undo step (typically #wmOperatorType.name should be used).
|
||||
*
|
||||
* \return true when the call to push an undo step was made.
|
||||
*/
|
||||
bool ED_view3d_camera_lock_undo_push(const char *str,
|
||||
View3D *v3d,
|
||||
struct RegionView3D *rv3d,
|
||||
struct bContext *C);
|
||||
|
||||
/**
|
||||
* A version of #ED_view3d_camera_lock_undo_push that performs a grouped undo push.
|
||||
*
|
||||
* \note use for actions that are likely to be repeated such as mouse wheel to zoom,
|
||||
* where adding a separate undo step each time isn't desirable.
|
||||
*/
|
||||
bool ED_view3d_camera_lock_undo_grouped_push(const char *str,
|
||||
View3D *v3d,
|
||||
struct RegionView3D *rv3d,
|
||||
struct bContext *C);
|
||||
|
||||
#define VIEW3D_MARGIN 1.4f
|
||||
#define VIEW3D_DIST_FALLBACK 1.0f
|
||||
|
||||
|
|
|
@ -1554,6 +1554,7 @@ static int viewpan_invoke(bContext *C, wmOperator *op, const wmEvent *event)
|
|||
|
||||
viewmove_apply(vod, vod->prev.event_xy[0] + x, vod->prev.event_xy[1] + y);
|
||||
|
||||
ED_view3d_camera_lock_undo_push(op->type->name, vod->v3d, vod->rv3d, C);
|
||||
viewops_data_free(C, vod);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
|
|
|
@ -181,6 +181,7 @@ static int viewdolly_modal(bContext *C, wmOperator *op, const wmEvent *event)
|
|||
}
|
||||
|
||||
if (ret & OPERATOR_FINISHED) {
|
||||
ED_view3d_camera_lock_undo_push(op->type->name, vod->v3d, vod->rv3d, C);
|
||||
viewops_data_free(C, vod);
|
||||
op->customdata = NULL;
|
||||
}
|
||||
|
|
|
@ -1079,6 +1079,7 @@ static int fly_modal(bContext *C, wmOperator *op, const wmEvent *event)
|
|||
int exit_code;
|
||||
bool do_draw = false;
|
||||
FlyInfo *fly = op->customdata;
|
||||
View3D *v3d = fly->v3d;
|
||||
RegionView3D *rv3d = fly->rv3d;
|
||||
Object *fly_object = ED_view3d_cameracontrol_object_get(fly->v3d_camera_control);
|
||||
|
||||
|
@ -1102,6 +1103,9 @@ static int fly_modal(bContext *C, wmOperator *op, const wmEvent *event)
|
|||
|
||||
exit_code = flyEnd(C, fly);
|
||||
|
||||
if (exit_code == OPERATOR_FINISHED) {
|
||||
ED_view3d_camera_lock_undo_push(op->type->name, v3d, rv3d, C);
|
||||
}
|
||||
if (exit_code != OPERATOR_RUNNING_MODAL) {
|
||||
do_draw = true;
|
||||
}
|
||||
|
|
|
@ -140,6 +140,7 @@ static int viewmove_modal(bContext *C, wmOperator *op, const wmEvent *event)
|
|||
}
|
||||
|
||||
if (ret & OPERATOR_FINISHED) {
|
||||
ED_view3d_camera_lock_undo_push(op->type->name, vod->v3d, vod->rv3d, C);
|
||||
viewops_data_free(C, op->customdata);
|
||||
op->customdata = NULL;
|
||||
}
|
||||
|
|
|
@ -375,6 +375,7 @@ static int viewrotate_modal(bContext *C, wmOperator *op, const wmEvent *event)
|
|||
}
|
||||
|
||||
if (ret & OPERATOR_FINISHED) {
|
||||
ED_view3d_camera_lock_undo_push(op->type->name, vod->v3d, vod->rv3d, C);
|
||||
viewops_data_free(C, op->customdata);
|
||||
op->customdata = NULL;
|
||||
}
|
||||
|
|
|
@ -1386,6 +1386,7 @@ static int walk_modal(bContext *C, wmOperator *op, const wmEvent *event)
|
|||
int exit_code;
|
||||
bool do_draw = false;
|
||||
WalkInfo *walk = op->customdata;
|
||||
View3D *v3d = walk->v3d;
|
||||
RegionView3D *rv3d = walk->rv3d;
|
||||
Object *walk_object = ED_view3d_cameracontrol_object_get(walk->v3d_camera_control);
|
||||
|
||||
|
@ -1412,6 +1413,9 @@ static int walk_modal(bContext *C, wmOperator *op, const wmEvent *event)
|
|||
if (exit_code != OPERATOR_RUNNING_MODAL) {
|
||||
do_draw = true;
|
||||
}
|
||||
if (exit_code == OPERATOR_FINISHED) {
|
||||
ED_view3d_camera_lock_undo_push(op->type->name, v3d, rv3d, C);
|
||||
}
|
||||
|
||||
if (do_draw) {
|
||||
if (rv3d->persp == RV3D_CAMOB) {
|
||||
|
|
|
@ -425,6 +425,7 @@ static int viewzoom_modal(bContext *C, wmOperator *op, const wmEvent *event)
|
|||
}
|
||||
|
||||
if (ret & OPERATOR_FINISHED) {
|
||||
ED_view3d_camera_lock_undo_push(op->type->name, vod->v3d, vod->rv3d, C);
|
||||
viewops_data_free(C, op->customdata);
|
||||
op->customdata = NULL;
|
||||
}
|
||||
|
@ -507,6 +508,7 @@ static int viewzoom_exec(bContext *C, wmOperator *op)
|
|||
|
||||
ED_region_tag_redraw(region);
|
||||
|
||||
ED_view3d_camera_lock_undo_grouped_push(op->type->name, v3d, rv3d, C);
|
||||
viewops_data_free(C, op->customdata);
|
||||
op->customdata = NULL;
|
||||
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
|
||||
#include "ED_keyframing.h"
|
||||
#include "ED_screen.h"
|
||||
#include "ED_undo.h"
|
||||
#include "ED_view3d.h"
|
||||
|
||||
#include "UI_resources.h"
|
||||
|
@ -688,6 +689,43 @@ bool ED_view3d_camera_lock_autokey(View3D *v3d,
|
|||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a MEMFILE undo-step for locked camera movement when transforming the view.
|
||||
* Edit and texture paint mode don't use MEMFILE undo so undo push is skipped for them.
|
||||
* NDOF and track-pad navigation would create an undo step on every gesture and we may end up with
|
||||
* unnecessary undo steps so undo push for them is not supported for now. Also operators that uses
|
||||
* smooth view for navigation are excluded too, but they can be supported, see: D15345.
|
||||
*/
|
||||
static bool view3d_camera_lock_undo_ex(
|
||||
const char *str, View3D *v3d, RegionView3D *rv3d, struct bContext *C, bool undo_group)
|
||||
{
|
||||
if (ED_view3d_camera_lock_check(v3d, rv3d)) {
|
||||
if (ED_undo_is_memfile_compatible(C)) {
|
||||
if (undo_group) {
|
||||
ED_undo_grouped_push(C, str);
|
||||
}
|
||||
else {
|
||||
ED_undo_push(C, str);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ED_view3d_camera_lock_undo_push(const char *str, View3D *v3d, RegionView3D *rv3d, bContext *C)
|
||||
{
|
||||
return view3d_camera_lock_undo_ex(str, v3d, rv3d, C, false);
|
||||
}
|
||||
|
||||
bool ED_view3d_camera_lock_undo_grouped_push(const char *str,
|
||||
View3D *v3d,
|
||||
RegionView3D *rv3d,
|
||||
bContext *C)
|
||||
{
|
||||
return view3d_camera_lock_undo_ex(str, v3d, rv3d, C, true);
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
|
|
Loading…
Reference in New Issue