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>2013-05-08 17:01:05 +0400
committerCampbell Barton <ideasman42@gmail.com>2013-05-08 17:01:05 +0400
commit13ddfa921e66440f2e2013de1a1f9cc06411bb87 (patch)
tree848e172d5c883dda21f411e6e41f6d4732569a28 /source/blender/editors/screen/screen_ops.c
parent562ed2b42e7ad8298bd5f041124ed2208c3a7a7c (diff)
fix [#30862] "Lock" and "Box" Quad View options won't stay put when toggling
Diffstat (limited to 'source/blender/editors/screen/screen_ops.c')
-rw-r--r--source/blender/editors/screen/screen_ops.c55
1 files changed, 25 insertions, 30 deletions
diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c
index 310783e5199..f4fbc620258 100644
--- a/source/blender/editors/screen/screen_ops.c
+++ b/source/blender/editors/screen/screen_ops.c
@@ -2707,6 +2707,22 @@ static void view3d_localview_update_rv3d(struct RegionView3D *rv3d)
}
}
+static void region_quadview_init_rv3d(ScrArea *sa, ARegion *ar,
+ const char viewlock, const char view, const char persp)
+{
+ RegionView3D *rv3d = ar->regiondata;
+
+ rv3d->viewlock = viewlock;
+ rv3d->view = view;
+ rv3d->persp = persp;
+
+ ED_view3d_lock(rv3d);
+ view3d_localview_update_rv3d(rv3d);
+ if ((viewlock & RV3D_BOXCLIP) && (persp == RV3D_ORTHO)) {
+ ED_view3d_quadview_update(sa, ar, true);
+ }
+}
+
/* insert a region in the area region list */
static int region_quadview_exec(bContext *C, wmOperator *op)
{
@@ -2724,6 +2740,7 @@ static int region_quadview_exec(bContext *C, wmOperator *op)
if (sa->spacetype == SPACE_VIEW3D) {
RegionView3D *rv3d = ar->regiondata;
+ rv3d->viewlock_quad = rv3d->viewlock | RV3D_VIEWLOCK_INIT;
rv3d->viewlock = 0;
rv3d->rflag &= ~RV3D_CLIPPING;
}
@@ -2764,38 +2781,16 @@ static int region_quadview_exec(bContext *C, wmOperator *op)
*
* We could avoid manipulating rv3d->localvd here if exiting
* localview with a 4-split would assign these view locks */
- RegionView3D *rv3d;
-
- rv3d = ar->regiondata;
- rv3d->viewlock = RV3D_LOCKED; rv3d->view = RV3D_VIEW_FRONT; rv3d->persp = RV3D_ORTHO;
- ED_view3d_lock(rv3d);
- view3d_localview_update_rv3d(rv3d);
-
- ar = ar->next;
- rv3d = ar->regiondata;
- rv3d->viewlock = RV3D_LOCKED; rv3d->view = RV3D_VIEW_TOP; rv3d->persp = RV3D_ORTHO;
- ED_view3d_lock(rv3d);
- view3d_localview_update_rv3d(rv3d);
-
- ar = ar->next;
- rv3d = ar->regiondata;
- rv3d->viewlock = RV3D_LOCKED; rv3d->view = RV3D_VIEW_RIGHT; rv3d->persp = RV3D_ORTHO;
- ED_view3d_lock(rv3d);
- view3d_localview_update_rv3d(rv3d);
-
- ar = ar->next;
- rv3d = ar->regiondata;
+ RegionView3D *rv3d = ar->regiondata;
+ const char viewlock = (rv3d->viewlock_quad & RV3D_VIEWLOCK_INIT) ?
+ (rv3d->viewlock_quad & ~RV3D_VIEWLOCK_INIT) : RV3D_LOCKED;
- /* check if we have a camera */
- if (v3d->camera) {
- rv3d->view = RV3D_VIEW_CAMERA; rv3d->persp = RV3D_CAMOB;
- }
- else {
- rv3d->view = RV3D_VIEW_PERSPORTHO; rv3d->persp = RV3D_PERSP;
- }
+ region_quadview_init_rv3d(sa, ar, viewlock, RV3D_VIEW_FRONT, RV3D_ORTHO);
+ region_quadview_init_rv3d(sa, (ar = ar->next), viewlock, RV3D_VIEW_TOP, RV3D_ORTHO);
+ region_quadview_init_rv3d(sa, (ar = ar->next), viewlock, RV3D_VIEW_RIGHT, RV3D_ORTHO);
+ if (v3d->camera) region_quadview_init_rv3d(sa, (ar = ar->next), 0, RV3D_VIEW_CAMERA, RV3D_CAMOB);
+ else region_quadview_init_rv3d(sa, (ar = ar->next), 0, RV3D_VIEW_PERSPORTHO, RV3D_PERSP);
- ED_view3d_lock(rv3d);
- view3d_localview_update_rv3d(rv3d);
}
ED_area_tag_redraw(sa);
WM_event_add_notifier(C, NC_SCREEN | NA_EDITED, NULL);