diff options
Diffstat (limited to 'source/blender/blenloader/intern/writefile.c')
-rw-r--r-- | source/blender/blenloader/intern/writefile.c | 242 |
1 files changed, 2 insertions, 240 deletions
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c index 421566eb8c3..1a5310b82ad 100644 --- a/source/blender/blenloader/intern/writefile.c +++ b/source/blender/blenloader/intern/writefile.c @@ -1631,244 +1631,6 @@ static void write_wm_xr_data(BlendWriter *writer, wmXrData *xr_data) BKE_screen_view3d_shading_blend_write(writer, &xr_data->session_settings.shading); } -static void write_region(BlendWriter *writer, ARegion *region, int spacetype) -{ - BLO_write_struct(writer, ARegion, region); - - if (region->regiondata) { - if (region->flag & RGN_FLAG_TEMP_REGIONDATA) { - return; - } - - switch (spacetype) { - case SPACE_VIEW3D: - if (region->regiontype == RGN_TYPE_WINDOW) { - RegionView3D *rv3d = region->regiondata; - BLO_write_struct(writer, RegionView3D, rv3d); - - if (rv3d->localvd) { - BLO_write_struct(writer, RegionView3D, rv3d->localvd); - } - if (rv3d->clipbb) { - BLO_write_struct(writer, BoundBox, rv3d->clipbb); - } - } - else { - printf("regiondata write missing!\n"); - } - break; - default: - printf("regiondata write missing!\n"); - } - } -} - -static void write_uilist(BlendWriter *writer, uiList *ui_list) -{ - BLO_write_struct(writer, uiList, ui_list); - - if (ui_list->properties) { - IDP_BlendWrite(writer, ui_list->properties); - } -} - -static void write_space_outliner(BlendWriter *writer, SpaceOutliner *space_outliner) -{ - BLI_mempool *ts = space_outliner->treestore; - - if (ts) { - SpaceOutliner space_outliner_flat = *space_outliner; - - int elems = BLI_mempool_len(ts); - /* linearize mempool to array */ - TreeStoreElem *data = elems ? BLI_mempool_as_arrayN(ts, "TreeStoreElem") : NULL; - - if (data) { - /* In this block we use the memory location of the treestore - * but _not_ its data, the addresses in this case are UUID's, - * since we can't rely on malloc giving us different values each time. - */ - TreeStore ts_flat = {0}; - - /* we know the treestore is at least as big as a pointer, - * so offsetting works to give us a UUID. */ - void *data_addr = (void *)POINTER_OFFSET(ts, sizeof(void *)); - - ts_flat.usedelem = elems; - ts_flat.totelem = elems; - ts_flat.data = data_addr; - - BLO_write_struct(writer, SpaceOutliner, space_outliner); - - BLO_write_struct_at_address(writer, TreeStore, ts, &ts_flat); - BLO_write_struct_array_at_address(writer, TreeStoreElem, elems, data_addr, data); - - MEM_freeN(data); - } - else { - space_outliner_flat.treestore = NULL; - BLO_write_struct_at_address(writer, SpaceOutliner, space_outliner, &space_outliner_flat); - } - } - else { - BLO_write_struct(writer, SpaceOutliner, space_outliner); - } -} - -static void write_panel_list(BlendWriter *writer, ListBase *lb) -{ - LISTBASE_FOREACH (Panel *, panel, lb) { - BLO_write_struct(writer, Panel, panel); - write_panel_list(writer, &panel->children); - } -} - -static void write_area_regions(BlendWriter *writer, ScrArea *area) -{ - LISTBASE_FOREACH (ARegion *, region, &area->regionbase) { - write_region(writer, region, area->spacetype); - write_panel_list(writer, ®ion->panels); - - LISTBASE_FOREACH (PanelCategoryStack *, pc_act, ®ion->panels_category_active) { - BLO_write_struct(writer, PanelCategoryStack, pc_act); - } - - LISTBASE_FOREACH (uiList *, ui_list, ®ion->ui_lists) { - write_uilist(writer, ui_list); - } - - LISTBASE_FOREACH (uiPreview *, ui_preview, ®ion->ui_previews) { - BLO_write_struct(writer, uiPreview, ui_preview); - } - } - - LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) { - LISTBASE_FOREACH (ARegion *, region, &sl->regionbase) { - write_region(writer, region, sl->spacetype); - } - - if (sl->spacetype == SPACE_VIEW3D) { - View3D *v3d = (View3D *)sl; - BLO_write_struct(writer, View3D, v3d); - - if (v3d->localvd) { - BLO_write_struct(writer, View3D, v3d->localvd); - } - - BKE_screen_view3d_shading_blend_write(writer, &v3d->shading); - } - else if (sl->spacetype == SPACE_GRAPH) { - SpaceGraph *sipo = (SpaceGraph *)sl; - ListBase tmpGhosts = sipo->runtime.ghost_curves; - - /* temporarily disable ghost curves when saving */ - BLI_listbase_clear(&sipo->runtime.ghost_curves); - - BLO_write_struct(writer, SpaceGraph, sl); - if (sipo->ads) { - BLO_write_struct(writer, bDopeSheet, sipo->ads); - } - - /* reenable ghost curves */ - sipo->runtime.ghost_curves = tmpGhosts; - } - else if (sl->spacetype == SPACE_PROPERTIES) { - BLO_write_struct(writer, SpaceProperties, sl); - } - else if (sl->spacetype == SPACE_FILE) { - SpaceFile *sfile = (SpaceFile *)sl; - - BLO_write_struct(writer, SpaceFile, sl); - if (sfile->params) { - BLO_write_struct(writer, FileSelectParams, sfile->params); - } - } - else if (sl->spacetype == SPACE_SEQ) { - BLO_write_struct(writer, SpaceSeq, sl); - } - else if (sl->spacetype == SPACE_OUTLINER) { - SpaceOutliner *space_outliner = (SpaceOutliner *)sl; - write_space_outliner(writer, space_outliner); - } - else if (sl->spacetype == SPACE_IMAGE) { - BLO_write_struct(writer, SpaceImage, sl); - } - else if (sl->spacetype == SPACE_TEXT) { - BLO_write_struct(writer, SpaceText, sl); - } - else if (sl->spacetype == SPACE_SCRIPT) { - SpaceScript *scr = (SpaceScript *)sl; - scr->but_refs = NULL; - BLO_write_struct(writer, SpaceScript, sl); - } - else if (sl->spacetype == SPACE_ACTION) { - BLO_write_struct(writer, SpaceAction, sl); - } - else if (sl->spacetype == SPACE_NLA) { - SpaceNla *snla = (SpaceNla *)sl; - - BLO_write_struct(writer, SpaceNla, snla); - if (snla->ads) { - BLO_write_struct(writer, bDopeSheet, snla->ads); - } - } - else if (sl->spacetype == SPACE_NODE) { - SpaceNode *snode = (SpaceNode *)sl; - BLO_write_struct(writer, SpaceNode, snode); - - LISTBASE_FOREACH (bNodeTreePath *, path, &snode->treepath) { - BLO_write_struct(writer, bNodeTreePath, path); - } - } - else if (sl->spacetype == SPACE_CONSOLE) { - SpaceConsole *con = (SpaceConsole *)sl; - - LISTBASE_FOREACH (ConsoleLine *, cl, &con->history) { - /* 'len_alloc' is invalid on write, set from 'len' on read */ - BLO_write_struct(writer, ConsoleLine, cl); - BLO_write_raw(writer, (size_t)cl->len + 1, cl->line); - } - BLO_write_struct(writer, SpaceConsole, sl); - } -#ifdef WITH_GLOBAL_AREA_WRITING - else if (sl->spacetype == SPACE_TOPBAR) { - BLO_write_struct(writer, SpaceTopBar, sl); - } - else if (sl->spacetype == SPACE_STATUSBAR) { - BLO_write_struct(writer, SpaceStatusBar, sl); - } -#endif - else if (sl->spacetype == SPACE_USERPREF) { - BLO_write_struct(writer, SpaceUserPref, sl); - } - else if (sl->spacetype == SPACE_CLIP) { - BLO_write_struct(writer, SpaceClip, sl); - } - else if (sl->spacetype == SPACE_INFO) { - BLO_write_struct(writer, SpaceInfo, sl); - } - } -} - -static void write_area_map(BlendWriter *writer, ScrAreaMap *area_map) -{ - BLO_write_struct_list(writer, ScrVert, &area_map->vertbase); - BLO_write_struct_list(writer, ScrEdge, &area_map->edgebase); - LISTBASE_FOREACH (ScrArea *, area, &area_map->areabase) { - area->butspacetype = area->spacetype; /* Just for compatibility, will be reset below. */ - - BLO_write_struct(writer, ScrArea, area); - -#ifdef WITH_GLOBAL_AREA_WRITING - BLO_write_struct(writer, ScrGlobalAreaData, area->global); -#endif - - write_area_regions(writer, area); - - area->butspacetype = SPACE_EMPTY; /* Unset again, was changed above. */ - } -} - static void write_windowmanager(BlendWriter *writer, wmWindowManager *wm, const void *id_address) { BLO_write_id_struct(writer, wmWindowManager, id_address, &wm->id); @@ -1890,7 +1652,7 @@ static void write_windowmanager(BlendWriter *writer, wmWindowManager *wm, const BLO_write_struct(writer, Stereo3dFormat, win->stereo3d_format); #ifdef WITH_GLOBAL_AREA_WRITING - write_area_map(writer, &win->global_areas); + BKE_screen_area_map_blend_write(writer, &win->global_areas); #else win->global_areas = global_areas; #endif @@ -1912,7 +1674,7 @@ static void write_screen(BlendWriter *writer, bScreen *screen, const void *id_ad BKE_previewimg_blend_write(writer, screen->preview); /* direct data */ - write_area_map(writer, AREAMAP_FROM_SCREEN(screen)); + BKE_screen_area_map_blend_write(writer, AREAMAP_FROM_SCREEN(screen)); } } |