[Bf-blender-cvs] [4fa0bbb5ac3] master: UI: Automatic Blend Thumbnail Selection

Harley Acheson noreply at git.blender.org
Fri Sep 17 02:41:14 CEST 2021


Commit: 4fa0bbb5ac3db31cd0ce6f765ee9eb93566f1e53
Author: Harley Acheson
Date:   Thu Sep 16 17:39:19 2021 -0700
Branches: master
https://developer.blender.org/rB4fa0bbb5ac3db31cd0ce6f765ee9eb93566f1e53

UI: Automatic Blend Thumbnail Selection

Adds an "Auto" option to blend thumbnail types that will automatically
use Screenshot if there is no camera and 3dview, or workbench render
with shading settings from the largest 3dview.

See D12407 for more details.

Differential Revision: https://developer.blender.org/D12407

Reviewed by Campbell Barton

===================================================================

M	release/datafiles/userdef/userdef_default.c
M	source/blender/blenloader/intern/versioning_userdef.c
M	source/blender/makesdna/DNA_userdef_types.h
M	source/blender/makesrna/intern/rna_userdef.c
M	source/blender/windowmanager/intern/wm_files.c

===================================================================

diff --git a/release/datafiles/userdef/userdef_default.c b/release/datafiles/userdef/userdef_default.c
index 29288dcd8fd..b82d78b927e 100644
--- a/release/datafiles/userdef/userdef_default.c
+++ b/release/datafiles/userdef/userdef_default.c
@@ -231,7 +231,7 @@ const UserDef U_default = {
     .collection_instance_empty_size = 1.0f,
 
     .statusbar_flag = STATUSBAR_SHOW_VERSION,
-    .file_preview_type = USER_FILE_PREVIEW_CAMERA,
+    .file_preview_type = USER_FILE_PREVIEW_AUTO,
 
     .runtime =
         {
diff --git a/source/blender/blenloader/intern/versioning_userdef.c b/source/blender/blenloader/intern/versioning_userdef.c
index 19f6c1cbbf6..f4853ff803f 100644
--- a/source/blender/blenloader/intern/versioning_userdef.c
+++ b/source/blender/blenloader/intern/versioning_userdef.c
@@ -887,7 +887,7 @@ void blo_do_versions_userdef(UserDef *userdef)
 
   if (!USER_VERSION_ATLEAST(300, 21)) {
     /* Deprecated userdef->flag USER_SAVE_PREVIEWS */
-    userdef->file_preview_type = (userdef->flag & USER_FLAG_UNUSED_5) ? USER_FILE_PREVIEW_CAMERA :
+    userdef->file_preview_type = (userdef->flag & USER_FLAG_UNUSED_5) ? USER_FILE_PREVIEW_AUTO :
                                                                         USER_FILE_PREVIEW_NONE;
     /* Clear for reuse. */
     userdef->flag &= ~USER_FLAG_UNUSED_5;
diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h
index 5137fc30f95..4f86201ced2 100644
--- a/source/blender/makesdna/DNA_userdef_types.h
+++ b/source/blender/makesdna/DNA_userdef_types.h
@@ -1015,6 +1015,7 @@ typedef enum eUserPref_Flag {
 /** #UserDef.file_preview_type */
 typedef enum eUserpref_File_Preview_Type {
   USER_FILE_PREVIEW_NONE = 0,
+  USER_FILE_PREVIEW_AUTO,
   USER_FILE_PREVIEW_SCREENSHOT,
   USER_FILE_PREVIEW_CAMERA,
 } eUserpref_File_Preview_Type;
diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c
index ff33dc8a2ee..563c6ea35e0 100644
--- a/source/blender/makesrna/intern/rna_userdef.c
+++ b/source/blender/makesrna/intern/rna_userdef.c
@@ -6060,6 +6060,7 @@ static void rna_def_userdef_filepaths(BlenderRNA *brna)
 
   static const EnumPropertyItem preview_type_items[] = {
       {USER_FILE_PREVIEW_NONE, "NONE", 0, "None", "Do not create blend previews"},
+      {USER_FILE_PREVIEW_AUTO, "AUTO", 0, "Auto", "Automatically select best preview type"},
       {USER_FILE_PREVIEW_SCREENSHOT, "SCREENSHOT", 0, "Screenshot", "Capture the entire window"},
       {USER_FILE_PREVIEW_CAMERA, "CAMERA", 0, "Camera View", "Workbench render of scene"},
       {0, NULL, 0, NULL, NULL},
diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c
index 6dde7a427bc..2ce2bcc2f3c 100644
--- a/source/blender/windowmanager/intern/wm_files.c
+++ b/source/blender/windowmanager/intern/wm_files.c
@@ -1602,10 +1602,9 @@ static ImBuf *blend_file_thumb_from_camera(const bContext *C,
     return NULL;
   }
 
-  if ((scene->camera == NULL) && (screen != NULL)) {
+  if (screen != NULL) {
     area = BKE_screen_find_big_area(screen, SPACE_VIEW3D, 0);
-    region = BKE_area_find_region_type(area, RGN_TYPE_WINDOW);
-    if (region) {
+    if (area) {
       v3d = area->spacedata.first;
     }
   }
@@ -1624,13 +1623,14 @@ static ImBuf *blend_file_thumb_from_camera(const bContext *C,
   if (scene->camera) {
     ibuf = ED_view3d_draw_offscreen_imbuf_simple(depsgraph,
                                                  scene,
-                                                 NULL,
-                                                 OB_SOLID,
+                                                 (v3d) ? &v3d->shading : NULL,
+                                                 (v3d) ? v3d->shading.type : OB_SOLID,
                                                  scene->camera,
                                                  PREVIEW_RENDER_LARGE_HEIGHT * 2,
                                                  PREVIEW_RENDER_LARGE_HEIGHT * 2,
                                                  IB_rect,
-                                                 V3D_OFSDRAW_NONE,
+                                                 (v3d) ? V3D_OFSDRAW_OVERRIDE_SCENE_SETTINGS :
+                                                         V3D_OFSDRAW_NONE,
                                                  R_ALPHAPREMUL,
                                                  NULL,
                                                  NULL,
@@ -1766,12 +1766,28 @@ static bool wm_file_write(bContext *C,
   /* Main now can store a '.blend' thumbnail, useful for background mode
    * or thumbnail customization. */
   main_thumb = thumb = bmain->blen_thumb;
-  if (BLI_thread_is_main()) {
-    if (U.file_preview_type == USER_FILE_PREVIEW_SCREENSHOT) {
-      ibuf_thumb = blend_file_thumb_from_screenshot(C, &thumb);
+  if (BLI_thread_is_main() && U.file_preview_type != USER_FILE_PREVIEW_NONE) {
+
+    int file_preview_type = U.file_preview_type;
+
+    if (file_preview_type == USER_FILE_PREVIEW_AUTO) {
+      Scene *scene = CTX_data_scene(C);
+      bool do_render = (scene != NULL && scene->camera != NULL &&
+                        (BKE_screen_find_big_area(CTX_wm_screen(C), SPACE_VIEW3D, 0) != NULL));
+      file_preview_type = do_render ? USER_FILE_PREVIEW_CAMERA : USER_FILE_PREVIEW_SCREENSHOT;
     }
-    else if (U.file_preview_type == USER_FILE_PREVIEW_CAMERA) {
-      ibuf_thumb = blend_file_thumb_from_camera(C, CTX_data_scene(C), CTX_wm_screen(C), &thumb);
+
+    switch (file_preview_type) {
+      case USER_FILE_PREVIEW_SCREENSHOT: {
+        ibuf_thumb = blend_file_thumb_from_screenshot(C, &thumb);
+        break;
+      }
+      case USER_FILE_PREVIEW_CAMERA: {
+        ibuf_thumb = blend_file_thumb_from_camera(C, CTX_data_scene(C), CTX_wm_screen(C), &thumb);
+        break;
+      }
+      default:
+        BLI_assert_unreachable();
     }
   }



More information about the Bf-blender-cvs mailing list