Workbench: Read studiolights from USER + SYSTEM datafiles

This commit is contained in:
Jeroen Bakker 2018-05-16 09:13:48 +02:00
parent d0b62ce041
commit ca8e9c881f
Notes: blender-bot 2023-02-14 05:52:31 +01:00
Referenced by issue #55092, Extrude "adjustment" widget not re-setting when selecting a new face
Referenced by issue #55072, Crash: Top bar disappears when loading factory settings, lead to crashes, and re-appears on resize
1 changed files with 28 additions and 21 deletions

View File

@ -158,6 +158,32 @@ static void studiolight_calculate_diffuse_light(StudioLight *sl)
sl->flag |= STUDIOLIGHT_DIFFUSE_LIGHT_CALCULATED;
}
static void studiolight_add_files_from_datafolder(const int folder_id, const char* subfolder, int flag)
{
StudioLight *sl;
struct direntry *dir;
const char *folder = BKE_appdir_folder_id(folder_id, subfolder);
if (folder) {
unsigned int totfile = BLI_filelist_dir_contents(folder, &dir);
int i;
for (i = 0; i < totfile; i++) {
if ((dir[i].type & S_IFREG)) {
const char *filename = dir[i].relname;
const char *path = dir[i].path;
if (BLI_testextensie_n(filename, STUDIO_LIGHT_EXTENSIONS, NULL)) {
sl = studiolight_create();
sl->flag = STUDIOLIGHT_EXTERNAL_FILE | flag;
BLI_strncpy(sl->name, filename, FILE_MAXFILE);
BLI_strncpy(sl->path, path, FILE_MAXFILE);
BLI_addtail(&studiolights, sl);
}
}
}
BLI_filelist_free(dir, totfile);
dir = NULL;
}
}
/* API */
void BKE_studiolight_init(void)
@ -178,27 +204,8 @@ void BKE_studiolight_init(void)
copy_v3_fl(sl->diffuse_light[STUDIOLIGHT_Z_NEG], 0.0f);
BLI_addtail(&studiolights, sl);
struct direntry *dir;
const char *folder = BKE_appdir_folder_id(BLENDER_DATAFILES, STUDIO_LIGHT_FOLDER);
if (folder) {
unsigned int totfile = BLI_filelist_dir_contents(folder, &dir);
int i;
for (i = 0; i < totfile; i++) {
if ((dir[i].type & S_IFREG)) {
const char *filename = dir[i].relname;
const char *path = dir[i].path;
if (BLI_testextensie_n(filename, STUDIO_LIGHT_EXTENSIONS, NULL)) {
sl = studiolight_create();
sl->flag = STUDIOLIGHT_EXTERNAL_FILE;
BLI_strncpy(sl->name, filename, FILE_MAXFILE);
BLI_strncpy(sl->path, path, FILE_MAXFILE);
BLI_addtail(&studiolights, sl);
}
}
}
BLI_filelist_free(dir, totfile);
dir = NULL;
}
studiolight_add_files_from_datafolder(BLENDER_SYSTEM_DATAFILES, STUDIO_LIGHT_FOLDER, 0);
studiolight_add_files_from_datafolder(BLENDER_USER_DATAFILES, STUDIO_LIGHT_FOLDER, 0);
}
void BKE_studiolight_free(void)