diff options
author | Campbell Barton <ideasman42@gmail.com> | 2014-04-11 11:16:51 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2014-04-11 11:18:19 +0400 |
commit | 52a5d58045ae2cc3eccbb936e87054eeb75967e2 (patch) | |
tree | 7d6e96b6cc5ced22643457887db1ad4eef2e0403 /source/blender/editors/screen/area.c | |
parent | 716803c0a0cc99cb30b4caee0364239889cf82e8 (diff) |
UI: split area_copy_data into ED_area_data_copy, ED_area_data_swap
Was confusing to have swap/copy in the one function.
Diffstat (limited to 'source/blender/editors/screen/area.c')
-rw-r--r-- | source/blender/editors/screen/area.c | 73 |
1 files changed, 34 insertions, 39 deletions
diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c index 32e4301d492..30f7c637868 100644 --- a/source/blender/editors/screen/area.c +++ b/source/blender/editors/screen/area.c @@ -1375,56 +1375,51 @@ void ED_region_toggle_hidden(bContext *C, ARegion *ar) } /** - * sa2 to sa1, * we swap spaces for fullscreen to keep all allocated data area vertices were set - * - * \param swap_space - * - 0: overwrite \a sa1 (freeing its data). - * - 1: simply swap. - * - 2: overwrite \a sa1 (when sa1 is calloc'd memory). */ -void area_copy_data(ScrArea *sa1, ScrArea *sa2, const char swap_space) +void ED_area_data_copy(ScrArea *sa_dst, ScrArea *sa_src, const bool do_free) { SpaceType *st; ARegion *ar; - int spacetype = sa1->spacetype; - - sa1->headertype = sa2->headertype; - sa1->spacetype = sa2->spacetype; - sa1->type = sa2->type; - sa1->butspacetype = sa2->butspacetype; + const char spacetype = sa_dst->spacetype; - if (swap_space == 0) { - BKE_spacedata_freelist(&sa1->spacedata); - BKE_spacedata_copylist(&sa1->spacedata, &sa2->spacedata); - } - else if (swap_space == 1) { - SWAP(ListBase, sa1->spacedata, sa2->spacedata); - } - else if (swap_space == 2) { - BKE_spacedata_copylist(&sa1->spacedata, &sa2->spacedata); + sa_dst->headertype = sa_src->headertype; + sa_dst->spacetype = sa_src->spacetype; + sa_dst->type = sa_src->type; + sa_dst->butspacetype = sa_src->butspacetype; + + /* area */ + if (do_free) { + BKE_spacedata_freelist(&sa_dst->spacedata); } - + BKE_spacedata_copylist(&sa_dst->spacedata, &sa_src->spacedata); + /* Note; SPACE_EMPTY is possible on new screens */ - + /* regions */ - if (swap_space == 0) { + if (do_free) { st = BKE_spacetype_from_id(spacetype); - for (ar = sa1->regionbase.first; ar; ar = ar->next) + for (ar = sa_dst->regionbase.first; ar; ar = ar->next) BKE_area_region_free(st, ar); - BLI_freelistN(&sa1->regionbase); + BLI_freelistN(&sa_dst->regionbase); } - else if (swap_space == 1) { - SWAP(ListBase, sa1->regionbase, sa2->regionbase); + st = BKE_spacetype_from_id(sa_src->spacetype); + for (ar = sa_src->regionbase.first; ar; ar = ar->next) { + ARegion *newar = BKE_area_region_copy(st, ar); + BLI_addtail(&sa_dst->regionbase, newar); } +} - if (swap_space != 1) { - st = BKE_spacetype_from_id(sa2->spacetype); - for (ar = sa2->regionbase.first; ar; ar = ar->next) { - ARegion *newar = BKE_area_region_copy(st, ar); - BLI_addtail(&sa1->regionbase, newar); - } - } +void ED_area_data_swap(ScrArea *sa_dst, ScrArea *sa_src) +{ + sa_dst->headertype = sa_src->headertype; + sa_dst->spacetype = sa_src->spacetype; + sa_dst->type = sa_src->type; + sa_dst->butspacetype = sa_src->butspacetype; + + + SWAP(ListBase, sa_dst->spacedata, sa_src->spacedata); + SWAP(ListBase, sa_dst->regionbase, sa_src->regionbase); } /* *********** Space switching code *********** */ @@ -1436,9 +1431,9 @@ void ED_area_swapspace(bContext *C, ScrArea *sa1, ScrArea *sa2) ED_area_exit(C, sa1); ED_area_exit(C, sa2); - area_copy_data(tmp, sa1, 2); - area_copy_data(sa1, sa2, 0); - area_copy_data(sa2, tmp, 0); + ED_area_data_copy(tmp, sa1, false); + ED_area_data_copy(sa1, sa2, true); + ED_area_data_copy(sa2, tmp, true); ED_area_initialize(CTX_wm_manager(C), CTX_wm_window(C), sa1); ED_area_initialize(CTX_wm_manager(C), CTX_wm_window(C), sa2); |