diff options
Diffstat (limited to 'source/blender/blenloader/intern/versioning_defaults.c')
-rw-r--r-- | source/blender/blenloader/intern/versioning_defaults.c | 544 |
1 files changed, 270 insertions, 274 deletions
diff --git a/source/blender/blenloader/intern/versioning_defaults.c b/source/blender/blenloader/intern/versioning_defaults.c index 973057fa362..25bd738ce45 100644 --- a/source/blender/blenloader/intern/versioning_defaults.c +++ b/source/blender/blenloader/intern/versioning_defaults.c @@ -56,87 +56,86 @@ */ void BLO_update_defaults_userpref_blend(void) { - /* default so DPI is detected automatically */ - U.dpi = 0; - U.ui_scale = 1.0f; + /* default so DPI is detected automatically */ + U.dpi = 0; + U.ui_scale = 1.0f; #ifdef WITH_PYTHON_SECURITY - /* use alternative setting for security nuts - * otherwise we'd need to patch the binary blob - startup.blend.c */ - U.flag |= USER_SCRIPT_AUTOEXEC_DISABLE; + /* use alternative setting for security nuts + * otherwise we'd need to patch the binary blob - startup.blend.c */ + U.flag |= USER_SCRIPT_AUTOEXEC_DISABLE; #else - U.flag &= ~USER_SCRIPT_AUTOEXEC_DISABLE; + U.flag &= ~USER_SCRIPT_AUTOEXEC_DISABLE; #endif - /* Clear addon preferences. */ - for (bAddon *addon = U.addons.first, *addon_next; - addon != NULL; - addon = addon_next) - { - addon_next = addon->next; + /* Clear addon preferences. */ + for (bAddon *addon = U.addons.first, *addon_next; addon != NULL; addon = addon_next) { + addon_next = addon->next; - if (addon->prop) { - IDP_FreeProperty(addon->prop); - MEM_freeN(addon->prop); - addon->prop = NULL; - } - } + if (addon->prop) { + IDP_FreeProperty(addon->prop); + MEM_freeN(addon->prop); + addon->prop = NULL; + } + } - /* Transform tweak with single click and drag. */ - U.flag |= USER_RELEASECONFIRM; + /* Transform tweak with single click and drag. */ + U.flag |= USER_RELEASECONFIRM; - /* Ignore the theme saved in the blend file, - * instead use the theme from 'userdef_default_theme.c' */ - { - bTheme *theme = U.themes.first; - memcpy(theme, &U_theme_default, sizeof(bTheme)); - } + /* Ignore the theme saved in the blend file, + * instead use the theme from 'userdef_default_theme.c' */ + { + bTheme *theme = U.themes.first; + memcpy(theme, &U_theme_default, sizeof(bTheme)); + } - /* Leave temp directory empty, will then get appropriate value per OS. */ - U.tempdir[0] = '\0'; + /* Leave temp directory empty, will then get appropriate value per OS. */ + U.tempdir[0] = '\0'; - /* Only enable tooltips translation by default, without actually enabling translation itself, for now. */ - U.transopts = USER_TR_TOOLTIPS; - U.memcachelimit = 4096; + /* Only enable tooltips translation by default, without actually enabling translation itself, for now. */ + U.transopts = USER_TR_TOOLTIPS; + U.memcachelimit = 4096; - /* Auto perspective. */ - U.uiflag |= USER_AUTOPERSP; + /* Auto perspective. */ + U.uiflag |= USER_AUTOPERSP; - /* Init weight paint range. */ - BKE_colorband_init(&U.coba_weight, true); + /* Init weight paint range. */ + BKE_colorband_init(&U.coba_weight, true); - /* Default visible section. */ - U.userpref = USER_SECTION_INTERFACE; + /* Default visible section. */ + U.userpref = USER_SECTION_INTERFACE; - /* Default to left click select. */ - BKE_keyconfig_pref_set_select_mouse(&U, 0, true); + /* Default to left click select. */ + BKE_keyconfig_pref_set_select_mouse(&U, 0, true); } - /** * Rename if the ID doesn't exist. */ -static ID *rename_id_for_versioning(Main *bmain, const short id_type, const char *name_src, const char *name_dst) +static ID *rename_id_for_versioning(Main *bmain, + const short id_type, + const char *name_src, + const char *name_dst) { - /* We can ignore libraries */ - ListBase *lb = which_libbase(bmain, id_type); - ID *id = NULL; - for (ID *idtest = lb->first; idtest; idtest = idtest->next) { - if (idtest->lib == NULL) { - if (STREQ(idtest->name + 2, name_src)) { - id = idtest; - } - if (STREQ(idtest->name + 2, name_dst)) { - return NULL; - } - } - } - if (id != NULL) { - BLI_strncpy(id->name + 2, name_dst, sizeof(id->name) - 2); - /* We know it's unique, this just sorts. */ - BLI_libblock_ensure_unique_name(bmain, id->name); - } - return id; + /* We can ignore libraries */ + ListBase *lb = which_libbase(bmain, id_type); + ID *id = NULL; + for (ID *idtest = lb->first; idtest; idtest = idtest->next) { + if (idtest->lib == NULL) { + if (STREQ(idtest->name + 2, name_src)) { + id = idtest; + } + if (STREQ(idtest->name + 2, name_dst)) { + return NULL; + } + } + } + if (id != NULL) { + BLI_strncpy(id->name + 2, name_dst, sizeof(id->name) - 2); + /* We know it's unique, this just sorts. */ + BLI_libblock_ensure_unique_name(bmain, id->name); + } + return id; } /** @@ -144,217 +143,214 @@ static ID *rename_id_for_versioning(Main *bmain, const short id_type, const char * This function can be emptied each time the startup.blend is updated. */ void BLO_update_defaults_startup_blend(Main *bmain, const char *app_template) { - /* For all startup.blend files. */ - for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) { - for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) { - for (ARegion *ar = sa->regionbase.first; ar; ar = ar->next) { - /* Remove all stored panels, we want to use defaults (order, open/closed) as defined by UI code here! */ - BKE_area_region_panels_free(&ar->panels); - - /* some toolbars have been saved as initialized, - * we don't want them to have odd zoom-level or scrolling set, see: T47047 */ - if (ELEM(ar->regiontype, RGN_TYPE_UI, RGN_TYPE_TOOLS, RGN_TYPE_TOOL_PROPS)) { - ar->v2d.flag &= ~V2D_IS_INITIALISED; - } - } - - for (SpaceLink *sl = sa->spacedata.first; sl; sl = sl->next) { - switch (sl->spacetype) { - case SPACE_VIEW3D: - { - View3D *v3d = (View3D *)sl; - v3d->overlay.texture_paint_mode_opacity = 1.0f; - v3d->overlay.weight_paint_mode_opacity = 1.0f; - v3d->overlay.vertex_paint_mode_opacity = 1.0f; - /* grease pencil settings */ - v3d->vertex_opacity = 1.0f; - v3d->gp_flag |= V3D_GP_SHOW_EDIT_LINES; - /* Skip startups that use the viewport color by default. */ - if (v3d->shading.background_type != V3D_SHADING_BACKGROUND_VIEWPORT) { - copy_v3_fl(v3d->shading.background_color, 0.05f); - } - break; - } - case SPACE_FILE: - { - SpaceFile *sfile = (SpaceFile *)sl; - if (sfile->params) { - const char *dir_default = BKE_appdir_folder_default(); - if (dir_default) { - STRNCPY(sfile->params->dir, dir_default); - sfile->params->file[0] = '\0'; - } - } - break; - } - } - } - } - } - - if (app_template == NULL) { - /* Name all screens by their workspaces (avoids 'Default.###' names). */ - { - /* Default only has one window. */ - wmWindow *win = ((wmWindowManager *)bmain->wm.first)->windows.first; - for (WorkSpace *workspace = bmain->workspaces.first; workspace; workspace = workspace->id.next) { - WorkSpaceLayout *layout = BKE_workspace_hook_layout_for_workspace_get(win->workspace_hook, workspace); - bScreen *screen = layout->screen; - BLI_strncpy(screen->id.name + 2, workspace->id.name + 2, sizeof(screen->id.name) - 2); - BLI_libblock_ensure_unique_name(bmain, screen->id.name); - } - } - - { - /* 'UV Editing' should use UV mode. */ - bScreen *screen = BLI_findstring(&bmain->screens, "UV Editing", offsetof(ID, name) + 2); - for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) { - for (SpaceLink *sl = sa->spacedata.first; sl; sl = sl->next) { - if (sl->spacetype == SPACE_IMAGE) { - SpaceImage *sima = (SpaceImage *)sl; - if (sima->mode == SI_MODE_VIEW) { - sima->mode = SI_MODE_UV; - } - } - } - } - } - } - - /* For 2D animation template. */ - if (app_template && STREQ(app_template, "2D_Animation")) { - for (WorkSpace *workspace = bmain->workspaces.first; workspace; workspace = workspace->id.next) { - const char *name = workspace->id.name + 2; - - if (STREQ(name, "Drawing")) { - workspace->object_mode = OB_MODE_PAINT_GPENCIL; - } - } - /* set object in drawing mode */ - for (Object *object = bmain->objects.first; object; object = object->id.next) { - if (object->type == OB_GPENCIL) { - bGPdata *gpd = (bGPdata *)object->data; - object->mode = OB_MODE_PAINT_GPENCIL; - gpd->flag |= GP_DATA_STROKE_PAINTMODE; - break; - } - } - - /* Be sure curfalloff and primitive are initializated */ - for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) { - ToolSettings *ts = scene->toolsettings; - if (ts->gp_sculpt.cur_falloff == NULL) { - ts->gp_sculpt.cur_falloff = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f); - CurveMapping *gp_falloff_curve = ts->gp_sculpt.cur_falloff; - curvemapping_initialize(gp_falloff_curve); - curvemap_reset( - gp_falloff_curve->cm, - &gp_falloff_curve->clipr, - CURVE_PRESET_GAUSS, - CURVEMAP_SLOPE_POSITIVE); - } - if (ts->gp_sculpt.cur_primitive == NULL) { - ts->gp_sculpt.cur_primitive = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f); - CurveMapping *gp_primitive_curve = ts->gp_sculpt.cur_primitive; - curvemapping_initialize(gp_primitive_curve); - curvemap_reset( - gp_primitive_curve->cm, - &gp_primitive_curve->clipr, - CURVE_PRESET_BELL, - CURVEMAP_SLOPE_POSITIVE); - } - } - } - - /* For all builtin templates shipped with Blender. */ - bool builtin_template = ( - !app_template || - STREQ(app_template, "2D_Animation") || - STREQ(app_template, "Sculpting") || - STREQ(app_template, "VFX") || - STREQ(app_template, "Video_Editing")); - - if (builtin_template) { - /* Clear all tools to use default options instead, ignore the tool saved in the file. */ - for (WorkSpace *workspace = bmain->workspaces.first; workspace; workspace = workspace->id.next) { - while (!BLI_listbase_is_empty(&workspace->tools)) { - BKE_workspace_tool_remove(workspace, workspace->tools.first); - } - } - - for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) { - /* Hide channels in timelines. */ - for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) { - SpaceAction *saction = (sa->spacetype == SPACE_ACTION) ? sa->spacedata.first : NULL; - - if (saction && saction->mode == SACTCONT_TIMELINE) { - for (ARegion *ar = sa->regionbase.first; ar; ar = ar->next) { - if (ar->regiontype == RGN_TYPE_CHANNELS) { - ar->flag |= RGN_FLAG_HIDDEN; - } - } - } - } - } - - for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) { - BLI_strncpy(scene->r.engine, RE_engine_id_BLENDER_EEVEE, sizeof(scene->r.engine)); - - scene->r.cfra = 1.0f; - scene->r.displaymode = R_OUTPUT_WINDOW; - - if (app_template && STREQ(app_template, "Video_Editing")) { - /* Filmic is too slow, use default until it is optimized. */ - STRNCPY(scene->view_settings.view_transform, "Default"); - STRNCPY(scene->view_settings.look, "None"); - } - else { - /* AV Sync break physics sim caching, disable until that is fixed. */ - scene->audio.flag &= ~AUDIO_SYNC; - scene->flag &= ~SCE_FRAME_DROP; - } - - /* Don't enable compositing nodes. */ - if (scene->nodetree) { - ntreeFreeNestedTree(scene->nodetree); - MEM_freeN(scene->nodetree); - scene->nodetree = NULL; - scene->use_nodes = false; - } - - /* Rename render layers. */ - BKE_view_layer_rename(bmain, scene, scene->view_layers.first, "View Layer"); - - /* New EEVEE defaults. */ - scene->eevee.bloom_intensity = 0.05f; - scene->eevee.bloom_clamp = 0.0f; - scene->eevee.motion_blur_shutter = 0.5f; - } - - /* Rename light objects. */ - rename_id_for_versioning(bmain, ID_OB, "Light", "Light"); - rename_id_for_versioning(bmain, ID_LA, "Light", "Light"); - - for (Mesh *mesh = bmain->meshes.first; mesh; mesh = mesh->id.next) { - /* Match default for new meshes. */ - mesh->smoothresh = DEG2RADF(30); - } - } - - for (bScreen *sc = bmain->screens.first; sc; sc = sc->id.next) { - for (ScrArea *sa = sc->areabase.first; sa; sa = sa->next) { - for (SpaceLink *sl = sa->spacedata.first; sl; sl = sl->next) { - if (sl->spacetype == SPACE_VIEW3D) { - View3D *v3d = (View3D *)sl; - v3d->shading.flag |= V3D_SHADING_SPECULAR_HIGHLIGHT; - } - } - } - } - - for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) { - copy_v3_v3(scene->display.light_direction, (float[3]){M_SQRT1_3, M_SQRT1_3, M_SQRT1_3}); - copy_v2_fl2(scene->safe_areas.title, 0.1f, 0.05f); - copy_v2_fl2(scene->safe_areas.action, 0.035f, 0.035f); - } + /* For all startup.blend files. */ + for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) { + for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) { + for (ARegion *ar = sa->regionbase.first; ar; ar = ar->next) { + /* Remove all stored panels, we want to use defaults (order, open/closed) as defined by UI code here! */ + BKE_area_region_panels_free(&ar->panels); + + /* some toolbars have been saved as initialized, + * we don't want them to have odd zoom-level or scrolling set, see: T47047 */ + if (ELEM(ar->regiontype, RGN_TYPE_UI, RGN_TYPE_TOOLS, RGN_TYPE_TOOL_PROPS)) { + ar->v2d.flag &= ~V2D_IS_INITIALISED; + } + } + + for (SpaceLink *sl = sa->spacedata.first; sl; sl = sl->next) { + switch (sl->spacetype) { + case SPACE_VIEW3D: { + View3D *v3d = (View3D *)sl; + v3d->overlay.texture_paint_mode_opacity = 1.0f; + v3d->overlay.weight_paint_mode_opacity = 1.0f; + v3d->overlay.vertex_paint_mode_opacity = 1.0f; + /* grease pencil settings */ + v3d->vertex_opacity = 1.0f; + v3d->gp_flag |= V3D_GP_SHOW_EDIT_LINES; + /* Skip startups that use the viewport color by default. */ + if (v3d->shading.background_type != V3D_SHADING_BACKGROUND_VIEWPORT) { + copy_v3_fl(v3d->shading.background_color, 0.05f); + } + break; + } + case SPACE_FILE: { + SpaceFile *sfile = (SpaceFile *)sl; + if (sfile->params) { + const char *dir_default = BKE_appdir_folder_default(); + if (dir_default) { + STRNCPY(sfile->params->dir, dir_default); + sfile->params->file[0] = '\0'; + } + } + break; + } + } + } + } + } + + if (app_template == NULL) { + /* Name all screens by their workspaces (avoids 'Default.###' names). */ + { + /* Default only has one window. */ + wmWindow *win = ((wmWindowManager *)bmain->wm.first)->windows.first; + for (WorkSpace *workspace = bmain->workspaces.first; workspace; + workspace = workspace->id.next) { + WorkSpaceLayout *layout = BKE_workspace_hook_layout_for_workspace_get(win->workspace_hook, + workspace); + bScreen *screen = layout->screen; + BLI_strncpy(screen->id.name + 2, workspace->id.name + 2, sizeof(screen->id.name) - 2); + BLI_libblock_ensure_unique_name(bmain, screen->id.name); + } + } + + { + /* 'UV Editing' should use UV mode. */ + bScreen *screen = BLI_findstring(&bmain->screens, "UV Editing", offsetof(ID, name) + 2); + for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) { + for (SpaceLink *sl = sa->spacedata.first; sl; sl = sl->next) { + if (sl->spacetype == SPACE_IMAGE) { + SpaceImage *sima = (SpaceImage *)sl; + if (sima->mode == SI_MODE_VIEW) { + sima->mode = SI_MODE_UV; + } + } + } + } + } + } + + /* For 2D animation template. */ + if (app_template && STREQ(app_template, "2D_Animation")) { + for (WorkSpace *workspace = bmain->workspaces.first; workspace; + workspace = workspace->id.next) { + const char *name = workspace->id.name + 2; + + if (STREQ(name, "Drawing")) { + workspace->object_mode = OB_MODE_PAINT_GPENCIL; + } + } + /* set object in drawing mode */ + for (Object *object = bmain->objects.first; object; object = object->id.next) { + if (object->type == OB_GPENCIL) { + bGPdata *gpd = (bGPdata *)object->data; + object->mode = OB_MODE_PAINT_GPENCIL; + gpd->flag |= GP_DATA_STROKE_PAINTMODE; + break; + } + } + + /* Be sure curfalloff and primitive are initializated */ + for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) { + ToolSettings *ts = scene->toolsettings; + if (ts->gp_sculpt.cur_falloff == NULL) { + ts->gp_sculpt.cur_falloff = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f); + CurveMapping *gp_falloff_curve = ts->gp_sculpt.cur_falloff; + curvemapping_initialize(gp_falloff_curve); + curvemap_reset(gp_falloff_curve->cm, + &gp_falloff_curve->clipr, + CURVE_PRESET_GAUSS, + CURVEMAP_SLOPE_POSITIVE); + } + if (ts->gp_sculpt.cur_primitive == NULL) { + ts->gp_sculpt.cur_primitive = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f); + CurveMapping *gp_primitive_curve = ts->gp_sculpt.cur_primitive; + curvemapping_initialize(gp_primitive_curve); + curvemap_reset(gp_primitive_curve->cm, + &gp_primitive_curve->clipr, + CURVE_PRESET_BELL, + CURVEMAP_SLOPE_POSITIVE); + } + } + } + + /* For all builtin templates shipped with Blender. */ + bool builtin_template = (!app_template || STREQ(app_template, "2D_Animation") || + STREQ(app_template, "Sculpting") || STREQ(app_template, "VFX") || + STREQ(app_template, "Video_Editing")); + + if (builtin_template) { + /* Clear all tools to use default options instead, ignore the tool saved in the file. */ + for (WorkSpace *workspace = bmain->workspaces.first; workspace; + workspace = workspace->id.next) { + while (!BLI_listbase_is_empty(&workspace->tools)) { + BKE_workspace_tool_remove(workspace, workspace->tools.first); + } + } + + for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) { + /* Hide channels in timelines. */ + for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) { + SpaceAction *saction = (sa->spacetype == SPACE_ACTION) ? sa->spacedata.first : NULL; + + if (saction && saction->mode == SACTCONT_TIMELINE) { + for (ARegion *ar = sa->regionbase.first; ar; ar = ar->next) { + if (ar->regiontype == RGN_TYPE_CHANNELS) { + ar->flag |= RGN_FLAG_HIDDEN; + } + } + } + } + } + + for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) { + BLI_strncpy(scene->r.engine, RE_engine_id_BLENDER_EEVEE, sizeof(scene->r.engine)); + + scene->r.cfra = 1.0f; + scene->r.displaymode = R_OUTPUT_WINDOW; + + if (app_template && STREQ(app_template, "Video_Editing")) { + /* Filmic is too slow, use default until it is optimized. */ + STRNCPY(scene->view_settings.view_transform, "Default"); + STRNCPY(scene->view_settings.look, "None"); + } + else { + /* AV Sync break physics sim caching, disable until that is fixed. */ + scene->audio.flag &= ~AUDIO_SYNC; + scene->flag &= ~SCE_FRAME_DROP; + } + + /* Don't enable compositing nodes. */ + if (scene->nodetree) { + ntreeFreeNestedTree(scene->nodetree); + MEM_freeN(scene->nodetree); + scene->nodetree = NULL; + scene->use_nodes = false; + } + + /* Rename render layers. */ + BKE_view_layer_rename(bmain, scene, scene->view_layers.first, "View Layer"); + + /* New EEVEE defaults. */ + scene->eevee.bloom_intensity = 0.05f; + scene->eevee.bloom_clamp = 0.0f; + scene->eevee.motion_blur_shutter = 0.5f; + } + + /* Rename light objects. */ + rename_id_for_versioning(bmain, ID_OB, "Light", "Light"); + rename_id_for_versioning(bmain, ID_LA, "Light", "Light"); + + for (Mesh *mesh = bmain->meshes.first; mesh; mesh = mesh->id.next) { + /* Match default for new meshes. */ + mesh->smoothresh = DEG2RADF(30); + } + } + + for (bScreen *sc = bmain->screens.first; sc; sc = sc->id.next) { + for (ScrArea *sa = sc->areabase.first; sa; sa = sa->next) { + for (SpaceLink *sl = sa->spacedata.first; sl; sl = sl->next) { + if (sl->spacetype == SPACE_VIEW3D) { + View3D *v3d = (View3D *)sl; + v3d->shading.flag |= V3D_SHADING_SPECULAR_HIGHLIGHT; + } + } + } + } + + for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) { + copy_v3_v3(scene->display.light_direction, (float[3]){M_SQRT1_3, M_SQRT1_3, M_SQRT1_3}); + copy_v2_fl2(scene->safe_areas.title, 0.1f, 0.05f); + copy_v2_fl2(scene->safe_areas.action, 0.035f, 0.035f); + } } |