diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py index 98c855d..a4f1820 100644 --- a/release/scripts/startup/bl_ui/space_view3d.py +++ b/release/scripts/startup/bl_ui/space_view3d.py @@ -2694,7 +2694,7 @@ class VIEW3D_PT_view3d_properties(Panel): col = layout.column() col.active = bool(view.region_3d.view_perspective != 'CAMERA' or - view.region_quadview) + view.region_quadviews) col.prop(view, "lens") col.label(text="Lock to Object:") col.prop(view, "lock_object", text="") @@ -2817,7 +2817,7 @@ class VIEW3D_PT_view3d_display(Panel): layout.separator() - region = view.region_quadview + region = view.region_quadviews[2] if view.region_quadviews else None layout.operator("screen.region_quadview", text="Toggle Quad View") diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index 0cc37a6..e6db586 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -472,22 +472,33 @@ static PointerRNA rna_SpaceView3D_region_3d_get(PointerRNA *ptr) return rna_pointer_inherit_refine(ptr, &RNA_RegionView3D, regiondata); } -static PointerRNA rna_SpaceView3D_region_quadview_get(PointerRNA *ptr) +static void rna_SpaceView3D_region_quadviews_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) { View3D *v3d = (View3D *)(ptr->data); ScrArea *sa = rna_area_from_space(ptr); - void *regiondata = NULL; - if (sa) { - ListBase *regionbase = (sa->spacedata.first == v3d) ? &sa->regionbase : &v3d->regionbase; - ARegion *ar = regionbase->last; /* always before last in list, weak .. */ + int i = 3; + + ARegion *ar = ((sa && sa->spacedata.first == v3d) ? &sa->regionbase : &v3d->regionbase)->last; + ListBase lb = {NULL, NULL}; + + if (ar && ar->alignment == RGN_ALIGN_QSPLIT) { + while (i-- && ar) { + ar = ar->prev; + } - ar = (ar->alignment == RGN_ALIGN_QSPLIT) ? ar->prev : NULL; - if (ar) { - regiondata = ar->regiondata; + if (i < 0) { + lb.first = ar; } } - return rna_pointer_inherit_refine(ptr, &RNA_RegionView3D, regiondata); + rna_iterator_listbase_begin(iter, &lb, NULL); +} + +static PointerRNA rna_SpaceView3D_region_quadviews_get(CollectionPropertyIterator *iter) +{ + void *regiondata = ((ARegion *)rna_iterator_listbase_get(iter))->regiondata; + + return rna_pointer_inherit_refine(&iter->parent, &RNA_RegionView3D, regiondata); } static void rna_RegionView3D_quadview_update(Main *UNUSED(main), Scene *UNUSED(scene), PointerRNA *ptr) @@ -2033,10 +2044,13 @@ static void rna_def_space_view3d(BlenderRNA *brna) RNA_def_property_pointer_funcs(prop, "rna_SpaceView3D_region_3d_get", NULL, NULL, NULL); RNA_def_property_ui_text(prop, "3D Region", "3D region in this space, in case of quad view the camera region"); - prop = RNA_def_property(srna, "region_quadview", PROP_POINTER, PROP_NONE); + prop = RNA_def_property(srna, "region_quadviews", PROP_COLLECTION, PROP_NONE); RNA_def_property_struct_type(prop, "RegionView3D"); - RNA_def_property_pointer_funcs(prop, "rna_SpaceView3D_region_quadview_get", NULL, NULL, NULL); - RNA_def_property_ui_text(prop, "Quad View Region", "3D region that defines the quad view settings"); + RNA_def_property_collection_funcs(prop, "rna_SpaceView3D_region_quadviews_begin", "rna_iterator_listbase_next", + "rna_iterator_listbase_end", "rna_SpaceView3D_region_quadviews_get", + NULL, NULL, NULL, NULL); + RNA_def_property_ui_text(prop, "Quad View Regions", "3D regions (the third one defines quad view settings, " + "the forth one is same as 'region_quadviews')"); prop = RNA_def_property(srna, "show_reconstruction", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag2", V3D_SHOW_RECONSTRUCTION);