diff options
author | Bastien Montagne <montagne29@wanadoo.fr> | 2014-03-11 18:07:53 +0400 |
---|---|---|
committer | Bastien Montagne <montagne29@wanadoo.fr> | 2014-03-11 18:22:09 +0400 |
commit | a2ffd8e4234e7113466b236fa6cb4ab20c9f048e (patch) | |
tree | c8477da0c459bc24b0f256ffd4ba616cc68af18e /source/blender/makesrna | |
parent | a6bdad699c77209a6ff84a2ec80693feaf9012d0 (diff) |
Fix T39028: Quadview views inaccessible with python except bottom right view.
Expose all four quadviews in a collection in RNA API.
Note the region returned by old region_quadview property is now region_quadviews[2].
Diffstat (limited to 'source/blender/makesrna')
-rw-r--r-- | source/blender/makesrna/intern/rna_space.c | 38 |
1 files changed, 26 insertions, 12 deletions
diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index 0cc37a6c8c6..9bfb9f79305 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_3d')"); prop = RNA_def_property(srna, "show_reconstruction", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag2", V3D_SHOW_RECONSTRUCTION); |