[Bf-blender-cvs] [ddf95cc343a] temp-workspace-changes: Workspace: "use_scene_settings" flag

Dalai Felinto noreply at git.blender.org
Fri Sep 8 23:54:59 CEST 2017


Commit: ddf95cc343a7868764a949c5376736ead6d2cce7
Author: Dalai Felinto
Date:   Fri Sep 8 11:37:46 2017 +0200
Branches: temp-workspace-changes
https://developer.blender.org/rBddf95cc343a7868764a949c5376736ead6d2cce7

Workspace: "use_scene_settings" flag

This option determine whether we get the engine, layer and render settings
from the workspace or from the scene.

It is useful to allow for quick preview of the final render (F12) while in
a workspace,

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

M	source/blender/blenkernel/BKE_layer.h
M	source/blender/blenkernel/BKE_workspace.h
M	source/blender/blenkernel/intern/context.c
M	source/blender/blenkernel/intern/layer.c
M	source/blender/blenkernel/intern/workspace.c
M	source/blender/editors/screen/screen_context.c
M	source/blender/makesdna/DNA_workspace_types.h
M	source/blender/makesrna/intern/rna_workspace.c

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

diff --git a/source/blender/blenkernel/BKE_layer.h b/source/blender/blenkernel/BKE_layer.h
index 5f95a69ed1e..276ec4c80f9 100644
--- a/source/blender/blenkernel/BKE_layer.h
+++ b/source/blender/blenkernel/BKE_layer.h
@@ -57,7 +57,7 @@ struct WorkSpace;
 void BKE_layer_exit(void);
 
 struct SceneLayer *BKE_scene_layer_from_scene_get(const struct Scene *scene);
-struct SceneLayer *BKE_scene_layer_from_workspace_get(const struct WorkSpace *workspace);
+struct SceneLayer *BKE_scene_layer_from_workspace_get(const struct Scene *scene, const struct WorkSpace *workspace);
 struct SceneLayer *BKE_scene_layer_add(struct Scene *scene, const char *name);
 
 /* DEPRECATED */
diff --git a/source/blender/blenkernel/BKE_workspace.h b/source/blender/blenkernel/BKE_workspace.h
index 43962c2eb35..18931c500fc 100644
--- a/source/blender/blenkernel/BKE_workspace.h
+++ b/source/blender/blenkernel/BKE_workspace.h
@@ -115,6 +115,10 @@ struct WorkSpaceLayout *BKE_workspace_hook_layout_for_workspace_get(
 void             BKE_workspace_hook_layout_for_workspace_set(
         struct WorkSpaceInstanceHook *hook, struct WorkSpace *workspace, struct WorkSpaceLayout *layout) ATTR_NONNULL();
 
+/* flags */
+bool BKE_workspace_use_scene_settings_get(const struct WorkSpace *workspace) GETTER_ATTRS;
+void BKE_workspace_use_scene_settings_set(struct WorkSpace *workspace, bool value) SETTER_ATTRS;
+
 #undef GETTER_ATTRS
 #undef SETTER_ATTRS
 
diff --git a/source/blender/blenkernel/intern/context.c b/source/blender/blenkernel/intern/context.c
index 4f1dd18b39c..e9b0b591bf2 100644
--- a/source/blender/blenkernel/intern/context.c
+++ b/source/blender/blenkernel/intern/context.c
@@ -927,7 +927,7 @@ SceneLayer *CTX_data_scene_layer(const bContext *C)
 		return sl;
 	}
 	else {
-		return BKE_scene_layer_from_workspace_get(CTX_wm_workspace(C));
+		return BKE_scene_layer_from_workspace_get(CTX_data_scene(C), CTX_wm_workspace(C));
 	}
 }
 
diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c
index 16a4477977f..42b9eece4ee 100644
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@ -81,9 +81,14 @@ SceneLayer *BKE_scene_layer_from_scene_get(const Scene *scene)
 /**
  * Returns the SceneLayer to be used for drawing, outliner, and other context related areas.
  */
-SceneLayer *BKE_scene_layer_from_workspace_get(const struct WorkSpace *workspace)
+SceneLayer *BKE_scene_layer_from_workspace_get(const struct Scene *scene, const struct WorkSpace *workspace)
 {
-	return BKE_workspace_render_layer_get(workspace);
+	if (BKE_workspace_use_scene_settings_get(workspace)) {
+		return BKE_scene_layer_from_scene_get(scene);
+	}
+	else {
+		return BKE_workspace_render_layer_get(workspace);
+	}
 }
 
 /**
diff --git a/source/blender/blenkernel/intern/workspace.c b/source/blender/blenkernel/intern/workspace.c
index 65eb08aba27..defaf15a751 100644
--- a/source/blender/blenkernel/intern/workspace.c
+++ b/source/blender/blenkernel/intern/workspace.c
@@ -430,3 +430,19 @@ void BKE_workspace_hook_layout_for_workspace_set(
 	hook->act_layout = layout;
 	workspace_relation_ensure_updated(&workspace->hook_layout_relations, hook, layout);
 }
+
+/* Flags */
+bool BKE_workspace_use_scene_settings_get(const WorkSpace *workspace)
+{
+	return (workspace->flags & WORKSPACE_USE_SCENE_SETTINGS) != 0;
+}
+
+void BKE_workspace_use_scene_settings_set(WorkSpace *workspace, bool value)
+{
+	if (value) {
+		workspace->flags |= WORKSPACE_USE_SCENE_SETTINGS;
+	}
+	else {
+		workspace->flags &= ~WORKSPACE_USE_SCENE_SETTINGS;
+	}
+}
diff --git a/source/blender/editors/screen/screen_context.c b/source/blender/editors/screen/screen_context.c
index 5f9a54a4654..5189238c0fa 100644
--- a/source/blender/editors/screen/screen_context.c
+++ b/source/blender/editors/screen/screen_context.c
@@ -89,7 +89,7 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult
 	ScrArea *sa = CTX_wm_area(C);
 	Scene *scene = WM_window_get_active_scene(win);
 	WorkSpace *workspace = BKE_workspace_active_get(win->workspace_hook);
-	SceneLayer *sl = BKE_scene_layer_from_workspace_get(workspace);
+	SceneLayer *sl = BKE_scene_layer_from_workspace_get(scene, workspace);
 	Object *obedit = scene->obedit;
 	Object *obact = sl->basact ? sl->basact->object : NULL;
 
diff --git a/source/blender/makesdna/DNA_workspace_types.h b/source/blender/makesdna/DNA_workspace_types.h
index 3805e1c0a8a..3cd2772550c 100644
--- a/source/blender/makesdna/DNA_workspace_types.h
+++ b/source/blender/makesdna/DNA_workspace_types.h
@@ -77,7 +77,7 @@ typedef struct WorkSpace {
 	ListBase transform_orientations DNA_PRIVATE_WORKSPACE;
 
 	int object_mode DNA_PRIVATE_WORKSPACE; /* enum ObjectMode */
-	int pad;
+	int flags DNA_PRIVATE_WORKSPACE; /* enum WorkSpaceFlags */
 
 	struct SceneLayer *render_layer DNA_PRIVATE_WORKSPACE;
 } WorkSpace;
@@ -132,4 +132,8 @@ typedef struct WorkSpaceInstanceHook {
 	struct WorkSpaceLayout *temp_layout_store;
 } WorkSpaceInstanceHook;
 
+typedef enum WorkSpaceFlags {
+	WORKSPACE_USE_SCENE_SETTINGS = (1 << 0),
+} WorkSpaceFlags;
+
 #endif /* __DNA_WORKSPACE_TYPES_H__ */
diff --git a/source/blender/makesrna/intern/rna_workspace.c b/source/blender/makesrna/intern/rna_workspace.c
index c09cc204bbc..ffb345ee205 100644
--- a/source/blender/makesrna/intern/rna_workspace.c
+++ b/source/blender/makesrna/intern/rna_workspace.c
@@ -33,6 +33,9 @@
 
 #include "rna_internal.h"
 
+/* Allow accessing private members of DNA_workspace_types.h */
+#define DNA_PRIVATE_WORKSPACE_ALLOW
+#include "DNA_workspace_types.h"
 
 #ifdef RNA_RUNTIME
 
@@ -42,7 +45,6 @@
 
 #include "DNA_object_types.h"
 #include "DNA_screen_types.h"
-#include "DNA_workspace_types.h"
 
 #include "RNA_access.h"
 
@@ -154,6 +156,14 @@ static void rna_def_workspace(BlenderRNA *brna)
 	RNA_def_property_ui_text(prop, "Active Render Layer", "The active render layer used in this workspace");
 	RNA_def_property_flag(prop, PROP_EDITABLE | PROP_NEVER_NULL);
 	RNA_def_property_update(prop, NC_SCREEN | ND_LAYER, NULL);
+
+	/* Flags */
+	prop = RNA_def_property(srna, "use_scene_settings", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
+	RNA_def_property_boolean_sdna(prop, NULL, "flags", WORKSPACE_USE_SCENE_SETTINGS);
+	RNA_def_property_ui_text(prop, "Scene Settings",
+	                         "Use scene settings instead of workspace settings");
+	RNA_def_property_update(prop, NC_SCREEN | ND_LAYER, NULL);
 }
 
 static void rna_def_transform_orientation(BlenderRNA *brna)



More information about the Bf-blender-cvs mailing list